[srslte-users] Resampling on N210

Rafael Diniz rafael at rhizomatica.org
Fri May 24 18:04:52 UTC 2019


Hi Justin and all,

Can we expect, with your development, support for USRP 2/N2xx in srseNB?

I have a USRP 2 with a GPSDO's 10MHz output connected to it in order to
carry some testing here. I'd prefer to use my USRP 2 than the LimeSDR
(with which I'm carrying some tests), as with WBX or RFX900
daughterboards I can get much more output power and have a better clock
source.

Thanks,
Rafael Diniz

On 5/24/19 12:27 PM, Justin Tallon wrote:
> 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 <http://www.softwareradiosystems.com/>
> 
> +353-86-067-0753 | justin.tallon at softwareradiosystems.com
> <mailto:justin.tallon at softwareradiosystems.com>
> 
> 
> On Fri, May 24, 2019 at 4:26 PM Federico Quattrin
> <fede.quattrin at gmail.com <mailto: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
>     <mailto: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
>         <mailto: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 <mailto: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
>                 <mailto: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
>                     <http://www.softwareradiosystems.com/>
> 
>                     +353-86-067-0753 |
>                     justin.tallon at softwareradiosystems.com
>                     <mailto:justin.tallon at softwareradiosystems.com>
> 
> 
>                     On Fri, May 17, 2019 at 11:13 AM Federico Quattrin
>                     <fede.quattrin at gmail.com
>                     <mailto: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
>                         <mailto: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
>                             <mailto: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
>                                 functionrf_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
>                                 <mailto:srslte-users at lists.softwareradiosystems.com>
>                                 http://www.softwareradiosystems.com/mailman/listinfo/srslte-users
> 
>     _______________________________________________
>     srslte-users mailing list
>     srslte-users at lists.softwareradiosystems.com
>     <mailto: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 --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20190524/5a81015a/attachment.sig>


More information about the srsran-users mailing list