使用 USRP 以高 IQ 率獲取時出現錯誤 -1074118647 或警告 1

更新 Mar 14, 2024

產品資訊

硬件

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

軟體

  • LabVIEW

驅動程式

  • NI-USRP

問題敘述

當使用我的 USRP 連續獲取時,我在使用高 IQ 率時看到溢出錯誤 -1074118647:

我收到此警告消息Warning 1 occurred at Check Stream Status.vi: 290001。可能的原因: Rx FIFO 溢出 (277090):
警告.png
為什麼會發生這種情況,有沒有辦法在不降低智商率的情況下解決這個錯誤?

解決方案

對信號進行採樣後,數據在主機 PC 上進行緩衝,等待發送至 LabVIEW 程序。正如我們從 LabVIEW 示例niUSRP EX Rx Continuous Sync.vi中看到的那樣數據是在一個 while 循環中從主機 PC 緩衝區中獲取的:

如果我們提高這個循環的執行速度,我們可以獲得更高的吞吐量。為此,請從該循環以及任何指標或圖表中刪除盡可能多的處理。您可以通過實施生產者和消費者架構來做到這一點。這將導致數據流和處理部分並行發生,並允許循環執行得更快。

另一種加速循環執行的方法是找到負責採集本身的低層函數,並將它們帶到頂層 VI,這樣您就可以避免在每個循環中遍歷所有“包裝”VI 的開銷迭代並只執行需要的操作。例如,在NI-USRP Simple Streaming With Time Sample Project 的 Rx Streaming Time (Host).vi 上,您可以向下幾層 VI 並將主機 FIFO 讀取方法帶到頂層 VI 以加速循環.

相關資訊

在 USRP RIO 設備中,數據首先緩沖在設備上以太網傳輸塊中的板載 BRAM 中,該設備能夠收集至少一個數據包的數據加上網絡或主機 PC 上“打嗝”的一些緩衝,儘管這緩衝區的大小非常有限。然而,這不是 LabVIEW 中的提取發生的地方。 LabVIEW 中發生的獲取操作是從主機 PC 的緩衝區中提取數據,因為它已從 USRP RIO 中填滿。主機 PC 緩衝區的大小及其流式傳輸數據的速率取決於 PC 的物理限制。

數據流性能提示一文中列出了在流數據時最大化主機 PC 性能的方法。這包括根據使用的接口配置 MTU 大小(用於基於以太網的流式傳輸)、增加每次提取請求的樣本數量、使用單獨的線程進行流式傳輸和設置FastSendDatagramThreshold註冊表項。

選擇 I16 數據類型還可以提高數據流式傳輸的速度,因為 CDB 數據類型會增加額外的開銷,因為它會佔用更多的內存和空間。