[srsran-users] 5g using zmq questions

Andre Puschmann andre.puschmann at srs.io
Wed Nov 2 09:56:31 UTC 2022


Hi Joe,

thanks for the post. See my responses below.

On 31/10/22 16:44, J Giovatto wrote:
> Hi Folks,
> 
> I have some questions about the zmq rf implementation and 5g frame 
> structure.
> 
> Some background, a while back I cooked up a shared memory rf 
> implementation.
> 
> The enb and ue's would each run independently reading and writing to 
> UL/DL shared memory segment that mapped to a frame based on common real 
> clock time.
> 
> So every millisecond there was and UL/DL exchange as required aligned 
> with the 4 TTI offset.
> 
> Shared memory was chosen since:
> 
> 1) its probably the fastest method of IPC for exchanging the large I/Q 
> data blocks while trying to keep up with the 1 msec deadline.
> 
> 2) allowed for mixing multiple UL I/Q samples, supporting multiple ue's
> 
> for(int i = 0; i < nsamples; ++i)
>   {
>     // combine the bin with i/q data
>     element->iqdata[i] += (q[i] * mult);
>    }
> 
> 3) allowed nodes to come and go since the is no "connection" required 
> other than to attach to the shared memory segments, startup order not 
> important.
> 
> With the obvious drawbacks that its only scalable to the performance of 
> a single machine and needs to run realtime.
> 
> 
> I have been trying to compare to the zmq rf which is very reliable 
> probably due to its connection orientated push/pull and timer agnostic 
> approach.
> 
> When running in 4G mode both shared memory and zmq work as expected but 
> in 5G mode I can only get zmq working, in shem rf I am not a able to 
> decode msgs any more.

I am assuming you mean srsENB in SA mode and srsUE trying to 
find/sync/attach to the NR cell?


> 
> The main reason I am looking into 5G running with shared memory now is 
> to see if our hardware can still keep up with the additional data/cpu 
> load that will be required with (can we still do what we need in 1 msec ?).
> 
> 
> One difference I see is the way decimation is done in zmq, see below,
> 
>   for (uint32_t i = 0, n = 0; i < nsamples; i++) {
>              // Averaging decimation
>              cf_t avg = 0.0f;
>              for (int j = 0; j < decim_factor; j++, n++) {
>                avg += ptr[n];
>              }
>              dst[i] = avg; // divide by decim_factor later via scale
>            }
> 
> vs the way I have been using srsran_resample_arb_compute method
> 
>   const double sratio = srate_out / srate_in;
> 
>       srsran_resample_arb_t r;
>       srsran_resample_arb_init(&r, sratio, 0);
> 
>       return RF_SHMEM_BYTES_X_SAMPLE(srsran_resample_arb_compute(&r,
> (cf_t*)data_in,
> (cf_t*)data_out,
> RF_SHMEM_SAMPLES_X_BYTE(nbytes)));
> 
> In theory Im thinking that the idea is still the same, move I/Q for 
> Enb/UE in a timely fashion, but I must be missing something.
> 
> 1) is srsran_resample_arb_compute the correct choice ?

I am not very familiar with the internals of srsran_resample_arb*() but 
have you tried to compare the difference between both numerically?

> 
> 2) were changes made to zmq rf to specifically support 5g mode ?

No. The 5G PHY changes are all transparent to the ZMQ RF.

> 
> 3) how does if at all the 5G "mu" factor play into the zmq 
> implementation see link below ?

It also doesn't play a role. For the bandwidths we support we use the 
exact same configs that we use for LTE.

Not much of a help I am afraid.

Thanks
Andre


More information about the srsran-users mailing list