[srslte-users] Resampling on N210

Federico Quattrin fede.quattrin at gmail.com
Tue May 21 09:19:12 UTC 2019


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/20190521/cb30c886/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: foto.png
Type: image/png
Size: 45888 bytes
Desc: not available
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20190521/cb30c886/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: foto2.png
Type: image/png
Size: 47278 bytes
Desc: not available
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20190521/cb30c886/attachment-0001.png>


More information about the srsran-users mailing list