[srslte-users] Resampling on N210

Justin Tallon justin.tallon at softwareradiosystems.com
Fri May 17 12:20:04 UTC 2019


Hey Federico,

Good to you had some success.

You will not be able to attach to a commercial network without a valid SIM
card and accompanying reader.

My advice would be to try to use the pdsch_ue nad pdsch_enodeb examples in
the srsLTE/lib/examples folder and ensure you can get good behaviour from
these with the resampling before moving onto the full srsenb or srsue.

Regards,
Justin
____
Justin Tallon Ph.D.

Software Radio Systems (SRS)
http://www.softwareradiosystems.com

+353-86-067-0753 | justin.tallon at softwareradiosystems.com


On Fri, May 17, 2019 at 11:13 AM Federico Quattrin <fede.quattrin at gmail.com>
wrote:

> Hi Justin,
> I looked at your code and copy some things and changes some for adapting
> to the new version. First of all I want to say that you have done a real
> good job!
> Second thing, I managed to run the code and I receive no more L messages
> nor time out, when I'm using prb<=15 I receive U messages.
> I was able to create a eNodeB but I can't see mi network. I tried to to
> run srsUE in order to see commercial network but I can't. I wonder if maybe
> these error is due to the SIM card configured in UE. Do I need a commercial
> SIM card to see commercial network in cell search?
> Greetings!
> Federico
>
> Justin Tallon <justin.tallon at softwareradiosystems.com> schrieb am Do.,
> 16. Mai 2019, 11:47:
>
>> Hey Frederico,
>>
>> There has been some work done on integrating the fractional resampling
>> functions with the UHD code but it is with an older version of the code.
>>
>>
>>
>> It is available in a repo, can be found at this link.
>>
>>
>> https://github.com/yagoda/srsLTE_Wishful/blob/master/lib/src/phy/rf/rf_uhd_imp.c
>>
>> Hope this can provide some help.
>>
>>
>> Regards,
>> Justin
>>
>>
>>
>>
>> On Tue, 14 May 2019, 20:02 Federico Quattrin, <fede.quattrin at gmail.com>
>> wrote:
>>
>>> Hi srsLTE community,
>>>
>>> I'm trying to write a piece of code in order to make a resample for the
>>> N210. Until now I read the source code and found that this piece of code
>>> must be written in the file rf_uhd_impl.c so i did that, most specifically
>>> I wrote it in the function rf_uhd_recv_with_time_multi. What i thought
>>> was: The N210 has a resampling frequency of 100 Msps, but srsLTE works with
>>> different frequency, so i need to get all the samples from UHD, save them
>>> into a array or buffer, and then do a resample of these data with the
>>> srsLTE resampling functions and send these new array of data as the final
>>> array of data.
>>> To achieve this I modified the code of the function
>>> rf_uhd_recv_with_time_multi as it follow:
>>>
>>> int rf_uhd_recv_with_time_multi(void *h,
>>>                                 void *data[SRSLTE_MAX_PORTS],
>>>                                 uint32_t nsamples,
>>>                                 bool blocking,
>>>                                 time_t *secs,
>>>                                 double *frac_secs)
>>> {
>>>   rf_uhd_handler_t *handler = (rf_uhd_handler_t*) h;
>>>   uhd_rx_metadata_handle *md = &handler->rx_md_first;
>>>   size_t rxd_samples = 0;
>>>   size_t rxd_samples_total_new = 0;
>>>
>>>   float sratio = 192.0 * 3.0 / (625.0 * 4.0);  //added for resampling
>>> (1/sratio  = 4.340277778) The idea is to resample from 100 Msps to 23.04
>>> Msps.
>>>
>>>
>>>   // we need to convert all the vector to a new size in order to get all
>>> the samples.
>>>
>>>   nsamples = nsamples / sratio; //added for resampling. We should
>>> receive more sampling due to different sample rate and same time.
>>>
>>>   size_t rxd_samples_total = 0;
>>>   int trials = 0;
>>>
>>>   if (blocking) {
>>>     while (rxd_samples_total < nsamples && trials < 100) {
>>>       void *buffs_ptr[4];
>>>       void *buff_new[4] ;
>>>       cf_t * puntero;
>>>       puntero =  &data_c[rxd_samples_total]; // Here I try to imitate
>>> the behavior of buffs_ptr
>>>       for (int i=0;i<handler->nof_rx_channels;i++) {
>>>         cf_t *data_c = (cf_t*) data[i];
>>>         buffs_ptr[i] = &data_c[rxd_samples_total];
>>>         buff_new[i] = malloc(nsamples) ; //these is the pointer where i
>>> would keep all the samples coming from UHD.
>>>       }
>>>
>>>       size_t num_samps_left = nsamples - rxd_samples_total;
>>>       size_t num_rx_samples = (num_samps_left > (handler->rx_nof_samples
>>> / sratio)) ? (handler->rx_nof_samples / sratio) : num_samps_left;
>>>       // /sratio added for resampling.
>>>
>>>       rxd_samples = 0;
>>>
>>>       /*So these is the function that, as i understood, receive the
>>> samples from UHD. Originally said buffs_ptr instead of buff_new, but
>>> because I don't want to write the data with the samples that comes from UHD
>>> I give her buff_new.*/
>>>       uhd_error error = uhd_rx_streamer_recv(handler->rx_stream,
>>> /*buffs_ptr*/ buff_new,
>>>                                              num_rx_samples, md, 1.0,
>>> false, &rxd_samples);
>>>
>>>       //Implementation of the resampling
>>>       srslte_resample_arb_t r;
>>>       srslte_resample_arb_init(&r,sratio,0);
>>>       size_t new_rxd_sample[SRSLTE_MAX_PORTS];
>>>       for(int i = 0 ; i < handler->nof_rx_channels ; i++){
>>>         new_rxd_sample[i] = srslte_resample_arb_compute(&r,(cf_t*)
>>> buff_new[i], puntero, rxd_samples); //function returns new length.
>>>         }
>>>
>>>         for(int i = 0; i < handler->nof_rx_channels ; i++){
>>>         free(buff_new[i]); //we need to free the memory because we did a
>>> malloc.
>>>           }
>>>
>>>
>>>
>>>       if (error) {
>>>         fprintf(stderr, "Error receiving from UHD: %d\n", error);
>>>         log_rx_error(handler);
>>>         return -1;
>>>       }
>>>       uhd_rx_metadata_error_code_t error_code = 0;
>>>       uhd_rx_metadata_error_code(*md, &error_code);
>>>
>>>       md = &handler->rx_md;
>>>       rxd_samples_total_new += new_rxd_sample[0];
>>>       rxd_samples_total += rxd_samples;
>>>       printf("\n----------------------------------------\nrxd samples
>>> total new= %ld\nrxd samples total normal %ld\nrxd samples normal %ld\nrxd
>>> samples new
>>> %ld\n-----------------------------------------------\n",rxd_samples_total_new,rxd_samples_total,rxd_samples,new_rxd_sample[0]);
>>> // I add these printf because I wanted to see the values of these variables.
>>>       trials++;
>>>
>>>       if (error_code == UHD_RX_METADATA_ERROR_CODE_OVERFLOW) {
>>>         log_overflow(handler);
>>>       } else if (error_code == UHD_RX_METADATA_ERROR_CODE_LATE_COMMAND) {
>>>         log_late(handler, true);
>>>       } else if (error_code == UHD_RX_METADATA_ERROR_CODE_TIMEOUT) {
>>>         fprintf(stderr, "Error timed out while receiving samples from
>>> UHD.\n");
>>>         return -1;
>>>       } else if (error_code != UHD_RX_METADATA_ERROR_CODE_NONE ) {
>>>         fprintf(stderr, "Error code 0x%x was returned during streaming.
>>> Aborting.\n", error_code);
>>>       }
>>>     }
>>>   } else {
>>>     uhd_error error = uhd_rx_streamer_recv(handler->rx_stream, data,
>>> nsamples, md, 0.0, false, &rxd_samples);
>>>     rxd_samples_total = rxd_samples;
>>>     printf("NO entramos al IF\n");
>>>
>>>     if (error) {
>>>       fprintf(stderr, "Error receiving from UHD: %d\n", error);
>>>       log_rx_error(handler);
>>>       return -1;
>>>     }
>>>   }
>>>   if (secs && frac_secs) {
>>>
>>>     uhd_rx_metadata_time_spec(handler->rx_md_first, secs, frac_secs);
>>>   }
>>>     printf("\n\nOUT OF THE FUNCTION\n\n");
>>>   return rxd_samples_total_new; //I return the new length, I mean the
>>> length the the resampled data will have, not the length of the data I
>>> received from UHD.
>>> }
>>>
>>>
>>>
>>>
>>>
>>> So after I run the code, that is what I receive:
>>>
>>> # srsenb
>>>
>>> Built in Release mode using 18.12.0.
>>>
>>> ---  Software Radio Systems LTE eNodeB  ---
>>>
>>> Reading configuration file /root/.config/srslte/enb.conf...
>>> [INFO] [UHD] linux; GNU C++ version 8.3.0; Boost_106700;
>>> UHD_3.14.0.HEAD-0-g6875d061
>>> Opening USRP with args:
>>> [INFO] [USRP2] Opening a USRP2/N-Series device...
>>> [INFO] [USRP2] Current recv frame size: 1472 bytes
>>> [INFO] [USRP2] Current send frame size: 1472 bytes
>>> [WARNING] [MULTI_USRP] The hardware does not support the requested RX
>>> sample rate:
>>> Target sample rate: 1.920000 MSps
>>> Actual sample rate: 1.923077 MSps
>>>
>>> [WARNING] [MULTI_USRP] The hardware does not support the requested TX
>>> sample rate:
>>> Target sample rate: 1.920000 MSps
>>> Actual sample rate: 1.923077 MSps
>>>
>>> Setting frequency: DL=2685.0 Mhz, UL=2565.0 MHz
>>> Setting Sampling frequency 23.04 MHz
>>> Setting manual TX/RX offset to 100 samples
>>>
>>> ==== eNodeB started ===
>>> Type <t> to view trace
>>> S1 Setup Failure. Cause: misc - unknown-PLMN
>>>
>>> ----------------------------------------
>>> rxd samples total new= 84
>>> rxd samples total normal 363
>>> rxd samples normal 363
>>> rxd samples new 84
>>> -----------------------------------------------
>>>
>>> ----------------------------------------
>>> rxd samples total new= 168
>>> rxd samples total normal 726
>>> rxd samples normal 363
>>> rxd samples new 84
>>> -----------------------------------------------
>>>
>>> ----------------------------------------
>>> rxd samples total new= 172
>>> rxd samples total normal 742
>>> rxd samples normal 16
>>> rxd samples new 4
>>> -----------------------------------------------
>>>
>>> ----------------------------------------
>>> rxd samples total new= 172
>>> rxd samples total normal 742
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> O
>>> ----------------------------------------
>>> rxd samples total new= 172
>>> rxd samples total normal 742
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>>
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL^CStopping
>>> srsENB... Press Ctrl+C 9 more times to force stop
>>>
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>>> ----------------------------------------
>>> rxd samples total new= 0
>>> rxd samples total normal 0
>>> rxd samples normal 0
>>> rxd samples new 0
>>> -----------------------------------------------
>>> Error timed out while receiving samples from UHD.
>>> LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL---
>>> exiting  ---
>>>
>>>
>>> One thing that I noticed is that the UHD always receive 742 samples and
>>> then do not receive a simple sample more.
>>> I don't know if i need to edit somewhere else in the code, but these of
>>> the 742 samples looks like that doesn't belong to the resampling problem.
>>>
>>> I would be really grateful if any of you guys could give some help
>>>
>>> Thanks in advance
>>> Greeting!
>>> Federico
>>>
>>> _______________________________________________
>>> srslte-users mailing list
>>> srslte-users at lists.softwareradiosystems.com
>>> http://www.softwareradiosystems.com/mailman/listinfo/srslte-users
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20190517/2a30a39b/attachment.htm>


More information about the srsran-users mailing list