Hello Jonathon Your suggestion have worked but what I see is after transmitting certain amount of IQ samples it again generates a timeout error. My flowgraph now looks like this:
Radio=>DDC=>fir filter=>fifo=host Regards Snehasish Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10 From: Snehasish Kar<mailto:snehasish....@live.com> Sent: 27 May 2021 00:14 To: Jonathon Pendlum<mailto:jonathon.pend...@ettus.com> Cc: Rob Kossler<mailto:rkoss...@nd.edu>; usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> Subject: [USRP-users] Re: Timeout while streaming IQ samples to host in RFNOC Thanks for the solution let me try it. I will give a response to you, tomorrow. Regards Snehasish Get Outlook for iOS<https://aka.ms/o0ukef> From: Jonathon Pendlum <jonathon.pend...@ettus.com> Sent: Thursday, May 27, 2021 12:02:04 AM To: Snehasish Kar <snehasish....@live.com> Cc: Rob Kossler <rkoss...@nd.edu>; usrp-users@lists.ettus.com <usrp-users@lists.ettus.com> Subject: Re: [USRP-users] Re: Timeout while streaming IQ samples to host in RFNOC Hi Snehasish, With a X310, calling set_rate() on the radio block controller doesn't set the sample rate. You need a DDC block instead, and you'll want to call set_output_rate() to set the desired sample rate. Try the flowgraph Radio RX->DDC->FIR filter->Host and see if that works. I would avoid the DMA FIFO unless you absolutely need it, as the block is somewhat finicky. Jonathon On Wed, May 26, 2021 at 2:16 PM Snehasish Kar <snehasish....@live.com<mailto:snehasish....@live.com>> wrote: No, I tried modifying it. I have attached the same for your reference. Regards Snehasish Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10 From: Jonathon Pendlum<mailto:jonathon.pend...@ettus.com> Sent: 26 May 2021 23:36 To: Snehasish Kar<mailto:snehasish....@live.com> Cc: Rob Kossler<mailto:rkoss...@nd.edu>; usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> Subject: Re: [USRP-users] Re: Timeout while streaming IQ samples to host in RFNOC Hi Snehasish, Do you get a timeout when connecting the FIR filter via rfnoc_rx_to_file's "--block-id" option? What about the FIFO block? Also, I would highly suggest updating to the UHD 3.15 LTS branch. Jonathon On Wed, May 26, 2021 at 1:20 PM Snehasish Kar <snehasish....@live.com<mailto:snehasish....@live.com>> wrote: Hello Jonathan Tried with the example as you said, but if only try to stream from rfnoc radio I am able get IQ samples in the host . But as soon as I connect a fir filter with cutoff frequency 20MHz and transition 5MHz, it gives a timeout error. My current flowgraph looks something like this: Radio=>fifo=>fir filter=>fifo=> host Regards Snehasish Get Outlook for iOS<https://aka.ms/o0ukef> From: Jonathon Pendlum <jonathon.pend...@ettus.com<mailto:jonathon.pend...@ettus.com>> Sent: Friday, May 21, 2021 12:13:48 AM To: Snehasish Kar <snehasish....@live.com<mailto:snehasish....@live.com>> Cc: Rob Kossler <rkoss...@nd.edu<mailto:rkoss...@nd.edu>>; usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> <usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>> Subject: Re: [USRP-users] Re: Timeout while streaming IQ samples to host in RFNOC Hello Snehasish, I would suggest starting with a known working in-tree example like rfnoc_rx_to_file.cpp. It has a section that connects a user defined RFNoC block, and you can easily modify that to instead connect the FIFOs and FIR filter. Jonathon On Thu, May 20, 2021 at 4:31 AM Snehasish Kar <snehasish....@live.com<mailto:snehasish....@live.com>> wrote: Hello Rob Tried that but it didn’t work. I am using the standard RFNOC fir filter and radio. Regards Snehasish Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10 From: Rob Kossler<mailto:rkoss...@nd.edu> Sent: 18 May 2021 21:39 To: Snehasish Kar<mailto:snehasish....@live.com> Cc: usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> Subject: Re: [USRP-users] Timeout while streaming IQ samples to host in RFNOC Perhaps try issue_stream_cmd on the radio ctrl rather than the rx_streamer. Rob On Mon, May 17, 2021 at 12:45 PM Snehasish Kar <snehasish....@live.com<mailto:snehasish....@live.com>> wrote: Hello I am using the below code to stream IQ samples to host using RFNOC, but while streaming I am getting timeout. My rfnoc graph looks something like this: Radio_0=>fifo=>fir_filter=>fifo=>host Radio_1=>fifo=>fir_filter=>fifo=>host With the above flowgraph we are able to stream samples in gnuradio. Sample rate used: 100msps Host PC configuration: intel i7 processor 9th gen RAM: 8GB Interface: PCIE express UHD version: UHD_3.14.1.0-0-unknown Below is the output of uhd_usrp_probe: :~/Desktop/uhd_rfnoc_file_writter/Debug$ uhd_usrp_probe [INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501; UHD_3.14.1.0-0-unknown [INFO] [X300] X300 initialization sequence... [INFO] [X300] Connecting to niusrpriorpc at localhost:5444... [INFO] [X300] Using LVBITX bitfile /usr/local/share/uhd/images/usrp_x310_fpga_XG.lvbitx... [INFO] [X300] Radio 1x clock: 200 MHz [INFO] [GPS] Found an internal GPSDO: LC_XO, Firmware Rev 0.929a [WARNING] [GPS] update_cache: Malformed GPSDO string: LC_XO, Firmware Rev 0.929a [INFO] [0/DmaFIFO_0] Initializing block control (NOC ID: 0xF1F0D00000000000) [INFO] [0/DmaFIFO_0] BIST passed (Throughput: 1311 MB/s) [INFO] [0/DmaFIFO_0] BIST passed (Throughput: 1315 MB/s) [INFO] [0/Radio_0] Initializing block control (NOC ID: 0x12AD100000000001) [INFO] [0/Radio_1] Initializing block control (NOC ID: 0x12AD100000000001) [INFO] [0/DDC_0] Initializing block control (NOC ID: 0xDDC0000000000000) [INFO] [0/DDC_1] Initializing block control (NOC ID: 0xDDC0000000000000) [INFO] [0/FIR_0] Initializing block control (NOC ID: 0xF112000000000000) [INFO] [0/FIR_1] Initializing block control (NOC ID: 0xF112000000000000) [INFO] [0/DUC_0] Initializing block control (NOC ID: 0xD0C0000000000000) [INFO] [0/DUC_1] Initializing block control (NOC ID: 0xD0C0000000000000) [INFO] [0/FIFO_0] Initializing block control (NOC ID: 0xF1F0000000000000) [INFO] [0/FIFO_1] Initializing block control (NOC ID: 0xF1F0000000000000) [INFO] [0/FIFO_2] Initializing block control (NOC ID: 0xF1F0000000000000) [INFO] [0/FIFO_3] Initializing block control (NOC ID: 0xF1F0000000000000) [WARNING] [X300] Cannot update master clock rate! X300 Series does not allow changing the clock rate during runtime. _____________________________________________________ / | Device: X-Series Device | _____________________________________________________ | / | | Mboard: X310 | | revision: 11 | | revision_compat: 7 | | product: 30960 | | mac-addr0: 00:80:2f:18:de:4d | | mac-addr1: 00:80:2f:18:de:4e | | gateway: 192.168.10.1 | | ip-addr0: 192.168.10.2 | | subnet0: 255.255.255.0 | | ip-addr1: 192.168.20.2 | | subnet1: 255.255.255.0 | | ip-addr2: 192.168.30.2 | | subnet2: 255.255.255.0 | | ip-addr3: 192.168.40.2 | | subnet3: 255.255.255.0 | | serial: 314B293 | | FW Version: 6.0 | | FPGA Version: 35.1 | | FPGA git hash: fffffff-dirty | | RFNoC capable: Yes | | | | Time sources: internal, external, gpsdo | | Clock sources: internal, external, gpsdo | | Sensors: gps_gpgga, gps_gprmc, gps_time, gps_locked, gps_servo, ref_locked | | _____________________________________________________ | | / | | | RX Dboard: A | | | ID: TwinRX Rev B (0x0093) | | | Serial: 3147FB8 | | | _____________________________________________________ | | | / | | | | RX Frontend: 0 | | | | Name: TwinRX RX0 | | | | Antennas: RX1, RX2 | | | | Sensors: lo_locked | | | | Freq range: 10.000 to 6000.000 MHz | | | | Gain range all: 0.0 to 93.0 step 1.0 dB | | | | Bandwidth range: 80000000.0 to 80000000.0 step 0.0 Hz | | | | Connection Type: II | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | RX Frontend: 1 | | | | Name: TwinRX RX1 | | | | Antennas: RX1, RX2 | | | | Sensors: lo_locked | | | | Freq range: 10.000 to 6000.000 MHz | | | | Gain range all: 0.0 to 93.0 step 1.0 dB | | | | Bandwidth range: 80000000.0 to 80000000.0 step 0.0 Hz | | | | Connection Type: QQ | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | RX Codec: A | | | | Name: ads62p48 | | | | Gain range digital: 0.0 to 6.0 step 0.5 dB | | _____________________________________________________ | | / | | | RX Dboard: B | | | ID: TwinRX Rev B (0x0093) | | | Serial: 3147FC1 | | | _____________________________________________________ | | | / | | | | RX Frontend: 0 | | | | Name: TwinRX RX0 | | | | Antennas: RX1, RX2 | | | | Sensors: lo_locked | | | | Freq range: 10.000 to 6000.000 MHz | | | | Gain range all: 0.0 to 93.0 step 1.0 dB | | | | Bandwidth range: 80000000.0 to 80000000.0 step 0.0 Hz | | | | Connection Type: II | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | RX Frontend: 1 | | | | Name: TwinRX RX1 | | | | Antennas: RX1, RX2 | | | | Sensors: lo_locked | | | | Freq range: 10.000 to 6000.000 MHz | | | | Gain range all: 0.0 to 93.0 step 1.0 dB | | | | Bandwidth range: 80000000.0 to 80000000.0 step 0.0 Hz | | | | Connection Type: QQ | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | RX Codec: B | | | | Name: ads62p48 | | | | Gain range digital: 0.0 to 6.0 step 0.5 dB | | _____________________________________________________ | | / | | | TX Dboard: A | | | ID: Unknown (0x0092) | | | Serial: 3147FB8 | | | _____________________________________________________ | | | / | | | | TX Frontend: 0 | | | | Name: Unknown (0x0092) - 0 | | | | Antennas: | | | | Sensors: | | | | Freq range: 0.000 to 0.000 MHz | | | | Gain Elements: None | | | | Bandwidth range: 0.0 to 0.0 step 0.0 Hz | | | | Connection Type: IQ | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | TX Codec: A | | | | Name: ad9146 | | | | Gain Elements: None | | _____________________________________________________ | | / | | | TX Dboard: B | | | ID: Unknown (0x0092) | | | Serial: 3147FC1 | | | _____________________________________________________ | | | / | | | | TX Frontend: 0 | | | | Name: Unknown (0x0092) - 0 | | | | Antennas: | | | | Sensors: | | | | Freq range: 0.000 to 0.000 MHz | | | | Gain Elements: None | | | | Bandwidth range: 0.0 to 0.0 step 0.0 Hz | | | | Connection Type: IQ | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | TX Codec: B | | | | Name: ad9146 | | | | Gain Elements: None | | _____________________________________________________ | | / | | | RFNoC blocks on this device: | | | | | | * DmaFIFO_0 | | | * Radio_0 | | | * Radio_1 | | | * DDC_0 | | | * DDC_1 | | | * FIR_0 | | | * FIR_1 | | | * DUC_0 | | | * DUC_1 | | | * FIFO_0 | | | * FIFO_1 | | | * FIFO_2 | | | * FIFO_3 Source code: void uhd_interface::start_streamming(int32_t num_samples_to_receive, int16_t max_channels, uint64_t samples_per_burst, int32_t total_no_of_samps) { uhd::rx_metadata_t md; bool overflow_message = true; try { uhd::rfnoc::graph::sptr rx_graph = usrp_rfnoc->create_graph("antidrone_rx_chain"); usrp_rfnoc->clear(); //rx_graph->connect(radio_ctrl[0]->get_block_id(), fifo_ctrl[0]->get_block_id()); //rx_graph->connect(fifo_ctrl[0]->get_block_id(), fir_ctrl[0]->get_block_id()); //rx_graph->connect(fir_ctrl[0]->get_block_id(), fifo_ctrl[1]->get_block_id()); //rx_graph->connect(radio_ctrl[1]->get_block_id(), fifo_ctrl[2]->get_block_id()); //rx_graph->connect(fifo_ctrl[2]->get_block_id(), fir_ctrl[1]->get_block_id()); //rx_graph->connect(fir_ctrl[1]->get_block_id(), fifo_ctrl[3]->get_block_id()); rx_graph->connect(radio_ctrl[0]->get_block_id(), 0, fifo_ctrl[1]->get_block_id(), 0); } catch (const std::exception& ex) { char msg[100]={0x00}; sprintf(msg,"error: unable to create/set a radio/parameter %s", ex.what()); log_printf(msg, error_lvl, __FILE__, __LINE__); } uhd::device_addr_t stream_args_rfnoc; std::vector<std::string> block_port{"0", "1"}; stream_args_rfnoc["block_id"] = fifo_ctrl[1]->get_block_id().to_string(); stream_args_rfnoc["block_port"] = block_port[0]; //stream_args_rfnoc["block_id"] = fifo_ctrl[3]->get_block_id().to_string(); //stream_args_rfnoc["block_port"] = block_port[1]; uhd::stream_args_t stream_args("sc16","sc16"); stream_args.args = stream_args_rfnoc; size_t spp = radio_ctrl[0]->get_args().cast<size_t>("spp", spp); stream_args.args["spp"] = boost::lexical_cast<std::string>(spp); //TODO: considering 1000 samples but check rx_stream = uhd_src->get_rx_stream(stream_args); { char msg[100]={0x00}; sprintf(msg, "info: Daemon launched with pid %d", getpid()); log_printf(msg, error_lvl, __FILE__, __LINE__); } //samples_per_burst = 1000; uhd::stream_cmd_t stream_cmd(/*uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS*/ uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE); stream_cmd.num_samps = total_no_of_samps; stream_cmd.stream_now = true; //stream_cmd.time_spec = uhd_src->get_time_now() + ::uhd::time_spec_t(0.1);//time_spec; rx_stream->issue_stream_cmd(stream_cmd); samples_per_burst = rx_stream->get_max_num_samps(); std::vector<std::vector<std::complex<float>>> buffer_data(max_channels, std::vector<std::complex<float> >(samples_per_burst)); std::vector<void *> buffs(max_channels); for(int8_t i = 0;i<max_channels;i++) { buffs[i] = &buffer_data[i].front(); } uint64_t total_samps_recvd =0x00; int32_t total_size_wrote_to_file =0x00; int32_t counter = 0x00; //std::complex<float> array1[100000][1000]{{0x00}}; //std::complex<float> array2[100000][1000]{{0x00}}; //fprintf(stderr,"total num of samps %d\n", total_no_of_samps); while(!stop_rx and ((total_samps_recvd!=total_no_of_samps) or (total_no_of_samps==0x00))) { buffs.clear(); size_t num_rx_samps = 0x00; try { num_rx_samps = rx_stream->recv(buffs, samples_per_burst, md, 1.0); if(error_lvl==3) { char msg[700]={0x00}; sprintf(msg,"\n========================================================\n Number of samples received %u\n========================================================", num_rx_samps); log_printf(msg, error_lvl, __FILE__, __LINE__); //std::cout << "total_samps_recvd : " << total_samps_recvd << " total_no_of_samps : " << total_no_of_samps << "\n"; } } catch (const std::exception& ex){ char msg[100]={0x00}; sprintf(msg,"error: error while streaming %s", ex.what()); log_printf(msg, error_lvl, __FILE__, __LINE__); } if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT) { log_printf("error: timeout while streaming", error_lvl, __FILE__, __LINE__); break; } if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_OVERFLOW) { if (overflow_message) { overflow_message = false; log_printf("error: overflow detected", error_lvl, __FILE__, __LINE__); } continue; } if (md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE){ char msg[100]={0x00}; sprintf(msg,"error: %s",md.strerror()); log_printf(msg , error_lvl, __FILE__, __LINE__); } total_samps_recvd+=num_rx_samps; #if 1 //Read IQ samples from usrp and store the in the FILE for(int32_t i=0;i<max_channels;i++) { FILE *fp = fopen(file_name[i],"a+"); size_t len = fwrite(&buffer_data[i].front(), sizeof(std::complex<float>), num_rx_samps, fp); fclose(fp); } #endif #if 0 //Read IQ samples from usrp and store the in the FILE for(int32_t i=0;i<max_channels;i++) { switch(i) { case 0: memcpy(array1[counter], &buffer_data[i].front(), sizeof(std::complex<float>)*num_rx_samps); break; case 1: memcpy(array2[counter], &buffer_data[i].front(), sizeof(std::complex<float>)*num_rx_samps); break; } } counter++; #endif } fprintf(stderr, "total samples received file: %d\n", total_samps_recvd); log_printf("warning: stopping streaming mode", error_lvl, __FILE__, __LINE__); log_printf("warning: buffer flush started!", error_lvl, __FILE__, __LINE__); uhd::stream_cmd_t stream_cmd_stop(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); rx_stream->issue_stream_cmd(stream_cmd_stop); //std::cout << "total_samps_recvd : " << total_samps_recvd << " total_no_of_samps : " << total_no_of_samps << "\n"; #if 0 constexpr double timeout { 0.010 }; //10ms static std::complex<short> dummy_buffer[50000000]; static uhd::rx_metadata_t dummy_meta { }; while (rx_stream->recv(dummy_buffer, 50000000, dummy_meta, timeout)) {} uhd_src->clear_command_time(); //Reset all time counters untill next tune!! log_printf("warning: buffer flush completed!", error_lvl, __FILE__, __LINE__); #endif } Hoping for an early reply. Regards Snehasish Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10 _______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe send an email to usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com> _______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe send an email to usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com