流和向量(Streams and Vectors)

黄家康發表於2024-11-19

在GNU Radio的官方教程中,提到了兩個重要的塊連線方式:流和向量(Streams and Vectors)。具體的章節連結為:
🔗:流和向量 - GNU Radio
🔗:帶有向量的 Python 塊 - GNU Radio
官方文件對流和向量的概念和使用有著簡潔和直觀的講述,但對於兩者之間的轉化方法以及何時使用流或向量作為連線方式並沒有清晰的講述。

1. 流和向量之間的轉化方法

1.1 流和向量的定義

GNU Radio 中的塊可以使用向量進行連線。一個 stream 每個 time 例項攜帶 1 個 sample。流生成序列化資料。流必須具有資料型別,例如 Float 32Byte

向量的每個時間例項攜帶多個樣本。向量表示並行資料。流表示每個時間例項的標量。向量表示每個時間例項的陣列。

GRC 使用較淺的顏色表示流,使用較暗的顏色表示向量輸出:

1.2 流和向量的索引視覺化

流的索引視覺化:

向量的索引視覺化:

1.3 流和向量的轉化方法

官方文件裡沒有提供詳細的轉化過程解釋,瞭解方法可以透過訪問文件中的C語言程式碼,在work函式中查詢資料轉化的邏輯。不過這個方法考驗讀者程式碼能力,相關的模組連結如下:
🔗:Streams to Vector - GNU Radio
🔗:Vector to Stream - GNU Radio
🔗:Vector to Streams - GNU Radio
這裡放入圖解方便大家理解:

  1. 多個流輸入轉化為單個向量:

  2. 單個向量轉化為單個流:

  3. 單個向量轉化為多個流:過程和1相反。

三個過程中,單個向量轉為單個流的過程可能不易理解,這裡放入模擬:

不難發現signal為signal A和signal B的交叉出現,這樣的作用就是保證輸出的流能夠資料連續且取樣率不發生改變(相同的時間,獲得的資料量一定)

2. 使用流或向量作為連線方式的判斷方式

在GNU Radio中,選擇使用流連線還是向量連線主要取決於資料處理的需求和應用場景。以下是一些指導原則:

2.1 使用流連線的情況:

  1. 實時處理:當需要實時處理單個樣本資料時,流連線是更合適的選擇。流連線能夠以較低的延遲處理資料。
  2. 簡單資料流:如果資料處理邏輯相對簡單,且每個時間例項只需要處理一個樣本,使用流連線會更直接。
  3. 低記憶體佔用:流連線通常佔用更少的記憶體,因為它只處理單個樣本,而不是整個陣列。

2.2使用向量連線的情況:

  1. 批次處理:當需要同時處理多個樣本時,向量連線更為高效。它允許在一個時間例項中處理多個樣本,適合於需要並行處理的場景。
  2. 複雜資料處理:如果演算法需要對多個樣本進行復雜的計算(如FFT、濾波等),向量連線可以減少函式呼叫的開銷,提高效能。
  3. 資料聚合:在需要將多個流合併為一個資料集進行分析時,向量連線是理想的選擇。

2.3 總結

  • 流連線適合實時、簡單的單樣本處理。
  • 向量連線適合批次、複雜的多樣本處理。

本期主要提到了兩個重要的塊連線方式:流和向量(Streams and Vectors)。對於兩者之間的轉化方法以及何時使用流或向量作為連線方式進行了概述,作者能力有限,理解或者描述欠妥希望大家能在評論區中積極批評指正。

相關文章