Error -1074118647 or Warning 1 When Acquiring At High IQ Rates With USRP

Updated May 30, 2023

Reported In

Hardware

  • USRP Software Defined Radio Reconfigurable Device
  • USRP Software Defined Radio Device

Software

  • LabVIEW

Driver

  • NI-USRP

Issue Details

When acquiring continuously with my USRP, I see an overflow error -1074118647 when using high IQ rates:
 

 
I get this warning message Warning 1 occurred at Check Stream Status.vi: 290001. Possible reason(s): Rx FIFO Overflows (277090):
Warning.png
Why is this occurring and is there any way to get around this error without lowering the IQ rate?

Solution

After sampling the signal, the data is buffered on the host PC, waiting to be sent to the LabVIEW program. As we can see from the LabVIEW example niUSRP EX Rx Continuous Sync.vi, the data is fetched from the host PC buffer in a while loop: 

We can get higher throughput if we increase the execution speed of this loop.  In order to do this, remove as much processing as you can from this loop as well as any indicators or graphs.  You can do this by implementing Producer and Consumer architecture.  This will cause the data streaming and processing portions to happen in parallel and allow the loop to execute more quickly.

Another way to speed up loop execution is to find the lower level functions that take care of the acquisition itself  and bring them to the top level VI, that way you can avoid the overhead of going though all the "wrapping" VIs on every single loop iteration and only perform the needed operations. For example, on the Rx Streaming Time (Host).vi from the NI-USRP Simple Streaming With Time Sample Project, you can go down several levels of VIs and bring the host FIFO read method to the top level VI to speed up the loop.

Additional Information

In the USRP RIO devices, data is first buffered in the onboard BRAM in the Ethernet Transport block on the device capable of collecting at least a packet worth of data plus some buffering for 'hiccups' in the network or on the host PC, although this buffer is very limited in size. However, this is not where the fetch in LabVIEW occurs. The fetch operation that occurs in LabVIEW is it pulling the data from the host PC's buffer as it gets filled up from the USRP RIO. The size of the host PC's buffer and the rate at which it can stream data is dependent on the physical limitations of the PC. 

Ways to maximize the performance of the host PC when streaming data is listed in the Data Streaming Performance Tips article. This includes configuring the MTU size depending on the interface used (for Ethernet-based streaming), increase the number of samples requested for each fetch, use separate threads for streaming and setting the FastSendDatagramThreshold registry key. 

Selecting the I16 data type can also increase the speed at which data is streamed as the CDB data type adds additional overhead being that it takes up more memory and space. 

Changing the Host system for one with higher data streaming and processing capacity can also improve performance, whether if it's a PC or a PXI Chassis and PXI controller setup.