[srslte-users] Resampling on N210

Federico Quattrin fede.quattrin at gmail.com
Fri May 24 10:57:48 UTC 2019


Hi people,
In order to make N210 I need to make a resample of the sampling frequencies
and change the frequency of the master clock, don't I?
Should I change anything else? Am I missing something?
I add the device to the device list.
Thanks in advance
Greetings
Federico

Federico Quattrin <fede.quattrin at gmail.com> schrieb am Di., 21. Mai 2019,
11:19:

> Hi Justin,
> yes, sure! sorry for the delay I had a problem with a crash, already
> fixed. I send here two screenshots, one is the plot and the other one the
> console output.
> Thanks!
> Regards,
> Federico
>
> El vie., 17 may. 2019 a las 14:54, Justin Tallon (<
> justin.tallon at softwareradiosystems.com>) escribió:
>
>> Hey Frederico,
>>
>> Can you post a screenshot?
>>
>> Regards,
>>
>> Justin
>>
>> On Fri, 17 May 2019, 13:32 Federico Quattrin, <fede.quattrin at gmail.com>
>> wrote:
>>
>>> Hi Justin!
>>> Thanks for your answer! I'm running the pdsch_ue example right now, I
>>> have a graphic that's move, where should I exactly look to know if is
>>> properly working?
>>> Thanks!
>>> Greetings
>>> Federico
>>>
>>> Justin Tallon <justin.tallon at softwareradiosystems.com> schrieb am Fr.,
>>> 17. Mai 2019, 14:20:
>>>
>>>> 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/20190524/2a427c30/attachment.htm>


More information about the srsran-users mailing list