[srslte-users] Resampling on N210
Justin Tallon
justin.tallon at softwareradiosystems.com
Fri May 24 15:27:34 UTC 2019
Hey Federico,
The code at https://github.com/yagoda/srsLTE_Wishful
should work out of the box at least for the phy examples. if you run those
unchanged and see if you can get success with that and from there adapt the
solution to your use case.
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 24, 2019 at 4:26 PM Federico Quattrin <fede.quattrin at gmail.com>
wrote:
> 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
>>>>>>>>
>>>>>>> _______________________________________________
> 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/06936c3f/attachment.htm>
More information about the srsran-users
mailing list