From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW Communications System Design Suite

cancel
Showing results for 
Search instead for 
Did you mean: 

NI USRP-2944R (160 MHz BW) - RX and TX at 200 MS/s

Hello All,

 

My first post here and am new to Communications System Design Suite/NGX.  I've used LabVIEW extensively, but not that clear about this and FPGA programming.

 

I am unable to get the 200 MS/s to work that would enable me to use the full 160 MHz BW of this radio consistently.  I have tried the examples provided for LabVIEW and NXG and I constantly get under/over flows at high IQ rates even without any post processing of the data.

 

I am working on a project to implement an FMCW radar with the full 160 MHz bandwidth using this radio and I figured I would use NI USRP Rio APIs to get me started and then to switch to FPGA to and ultimately offload mixing of RX and TX to the FPGA and only get the beat frequency to the host instead. 

 

The goal would be to load the TX signal on the on-board memory once and constantly transmit it, while the RX signal is received and mixed with TX on the FPGA to produce the beat frequency to the host.

 

I would really appreciate your advice, help and support:

  1. Is there an example or a way for me to TX out of RF0 and RX from RF1 at 200 Ms/s? - What am I doing wrong?
  2. I've not worked with LabVIEW FPGA or FPGAs in general before and tried to look at and figure out the FPGA examples for this radio from LabVIEW and NXG to no avail! Is there an example/tutorial that is well documented for the FPGA side processing that enables me to do #1?
  3. Should I stick with NXG or use LabVIEW FPGA/USRP Rio API?

This is my hardware/software setup:

  • NI USRP-2944R (160 MHz BW)
  • NI PCIe-8371
  • 2 x Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz
  • 64Gig RAM
  • Windows 10 64bit
  • LabVIEW 18.0.1 - NGX 3.0.2 - NI USRP and USRP RIO 18.05

 

Thank you for your help in advanced...

HoSsEiN

0 Kudos
Message 1 of 8
(5,705 Views)

Any help is appreciated Smiley Wink

0 Kudos
Message 2 of 8
(5,680 Views)

HoSsEiN,

 

I don't have that particular hardware, so it would be hard for me to test 160MHz full bandwidth, but I do have a few questions:

 

  1. Can you post a screenshot of error you are running into? Also are you starting from a LabVIEW example?
  2. I found some videos that may help you get started. Also depending on what/if you have a service agreement with NI, you might have access to online content.
  3. Either is fine, it is up to you and your preference. LabVIEW Comms is like LabVIEW, but has some additional features.
0 Kudos
Message 3 of 8
(5,678 Views)

Thank you Sherlockholm!

 

  1. I've got some screenshots of the errors in different programs and configurations that I've used attached.
    1. You can see I've tried most of the examples that are provided and there are two types of errors: 1)under/over flow of the FIFOs: which leads me to increasing the number of samples that are being transferred or received and 2) transfer did not complete.
    2. As I increase the number of samples beyond some point then I get the error that the transfer did not complete.
  2. Thank you for the videos, I will definitely look through them - do these videos relate to NI USRPs as well or is it FPGA only?
  3. Noted, hopefully with your help and others here I can get a program going...

I hope the screenshots help you to help me!

Warmest Regards,

HoSsEiN

0 Kudos
Message 4 of 8
(5,676 Views)

 

I did work through the tutorials and many other references I could find and I think I now have a better understanding of how the FPGA programming and its communication to the host vi's work.  I was able to compile the "Streaming Xcvr (FPGA).vi" and get the bitfile and I know my "Tx and Rx Streaming (Host).vi" is using the correct bitfile "niUsrpRio200_XcvrTime.lvbitx" for "USRP 294xR; 295xR 200 MSps".

 

All that said, I am still not able to get RX/TX anywhere close to 200 MS/s!

 

I am using the Simple Streaming example project on LabVIEW... 

I only have RF0 enabled and transmit out of TX1 in "finite" mode with "immediate" start trigger and receive with only RF1 from RX2 with "finite" mode and "Tx Start Trigger".  I keep the "Sample Rate" and "Number of Samples" the same for RX and TX. 

 

At higher "Sample Rates" I always get FIFO under/over flows and with larger "Number of Samples" and higher sample rates I get this error:

 

Error -50400 occurred at Invoke Method: FIFO.Read in Fetch Rx Data (U32).vi:7490001->Fetch Rx Data (CDB).vi:2800001->Fetch Rx Data (CDB WDT).vi:3390001->Initiate and Fetch Time (Multi).vi:2060001->Initiate and Fetch (Multi).vi:2680001->Initiate and Fetch (Single).vi:2720001->Tx and Rx Streaming (Host).vi

 

Can anyone please help me understand what I am doing wrong and how can I get the 200 MS/s?

Any help is appreciated!

0 Kudos
Message 5 of 8
(5,662 Views)

HoSsEin,

 

Did some research and here's some information that I found. The error is likely occurring because one of the FPGA FIFO buffers is overflowing while the host application is transferring data from the other FPGA FIFO buffer.  This happens when you are acquiring at too high a sample rate and/or you are acquiring too many samples.

 

There are a few techniques to avoid buffer underflow: increase the Timeout of the FIFO Read method, reduce the rate at which the host reads data, or reduce the number of elements the VI reads from the buffer by reducing the value of the Number of Elements control you wire to the FIFO read function.

 

Hope this helps!

0 Kudos
Message 6 of 8
(5,643 Views)

Thank you Sherlock,

 

I see your point, but my goal is to use the full 160 MHz BW of this radio for the FMCW radar implementation and to get that I do need the 200 MS/s.  This is my understanding, correct me if I am wrong please...

 

From what I've gathered, I need to do mostly FPGA processing... I need to store the TX data on the FPGA memory as it is a fixed signal that will be transmitted periodically and effectively do cross correlation (I think) between TX and RX on the FPGA to get the beat frequency and not have to send a whole bunch of data back and forth to/from the host.

 

Unfortunately, I haven't found any good working examples to build on so far.

I appreciate any and all help I can get...

Warmest Regards,

HoSsEiN

0 Kudos
Message 7 of 8
(5,639 Views)

Hello Hossein can you please provide the vi for implementing the fmcw radar

0 Kudos
Message 8 of 8
(1,026 Views)