當前位置: 華文世界 > 科技

SDR 執行緒流水線效能

2024-02-17科技

我設計了一個 SDR 執行緒流水線來提高我的軟體定義無線電計畫的效能。看一看。

最近,我一直在編寫 SDR 軟體來記錄來自無線電的雙鍊結 I/Q 數據。我對這個裝置的主要用例是允許在夜間無人值守地錄制 BCB,然後使用回放來復制我的環路陣列的不同方向。

我發現,雖然我的原型在工作,但它的效能很差。它工作正常,但消耗了我 80% 的 CPU 周期。不好。所以,我回到了原點,開發了一個新的架構。

現在,我有一個 SDR 執行緒流水線,它可以在背景執行,無需繁重的電腦負載即可執行 DSP。這是我的軟體執行演示視訊。

使用多核 CPU,您可以將部份 CPU 用於使用者介面,其余用於重型 DSP。我在 SDR 執行緒管道中使用了三個單獨的執行緒。第一個讀取數據並進行記錄。我的第二個執行緒按順序處理數位。最後階段生成音訊和數據以在螢幕上顯示。

總而言之,這種方法將 CPU 負載從 70-80% 降低到 2-3%。是的,你沒看錯。現在,我的普通 i3 PC 可以輕松執行軟體定義無線電。

SDR 螺紋流水線設計

我設計這個也是為了靈活性。每個管道階段都使用泛型。這意味著我可以輕松地使管道適應不同的輸入和輸出物件,如下所示。

每個執行緒采用一種數據格式 T1,並以格式 T2 發出結果。這些 <T> 泛型可以適應任何數據格式。此外,我將處理程式碼編寫為一個單獨的函式,我可以將其註入到執行緒中以執行處理。因此,例如,T1 可以是來自 Perseus 的 24 位單鍊結樣本,也可以是來自 SDRplay RSPduo 的 16 位雙鍊結樣本。

如視訊中所示,我目前的測試台每秒將 500,000 個來自英仙座的樣本處理成音訊,只需 2 毫秒,這大約是無線電數據塊到達之間可用時間的 5%。

SDR 程式碼 使用 Perseus Radio

本周,我在一個簡單的測試平台上編寫了我的自制 SDR 程式碼。沒什麽好看的,但我可以接收和解調訊號。

設計、編碼和執行以您想要的方式工作的軟體總是令人興奮。在上面,你可以看到一個簡單的測試平台,它將我的英仙座調整到 WWV,並將數據轉換為我可以聽的音訊。

正如你所看到的,我正在分幾個部份開發這個軟體。首先是連線到硬體並獲取我的數據的無線電驅動程式。在這種情況下,我正在駕駛英仙座,但很快我將添加我的雙鍊結接收器。第二,是將數據傳遞到第三級的輸入數據佇列或處理器,即完整的軟體定義接收器。

我的輸入數據處理器還將負責保存和讀取儲存的多個通道。我還將使用本節來組合現代多樣性接收的渠道。

真正的好訊息是,我讓SDR程式碼可以過濾、電平胡解調從任何接收器接收的訊號。所以,現在我只需要專註於前端驅動程式和數據操作。

使用 SDR 記錄無線電訊號

使用現代軟體定義無線電很容易記錄無線電訊號。

我正在對我的莫爾斯解碼器進行不同的增強。這些實驗應該有些科學。否則,我將如何衡量成功?

出現的第一個想法是錄制莫爾斯訊號的音訊。隨後,我可以嘗試以不同的方式解碼每個錄音,看看哪種效果最好。然後,我想起使用軟體定義收音機,我可以一次錄制數十個訊號。這張照片顯示了我的英仙座接收器記錄整個 20 米 CW 波段。透過此錄音,我可以隨時透過將 PC 音訊插入解碼器來對數十個訊號進行可重復測試。

記錄無線電訊號 – RF 而不是 AF

英仙座建立WAV檔。這是音訊數據錄制的標準格式。但是,它不是從音效卡中保存數位化音訊,而是從接收器中保存無線電訊號。SDR 數據的正常格式是正交采樣。SDR 提供的不是一對左右音訊數據,而是一對表示無線電頻寬的數據。

就我而言,我以每秒 125,000 個樣本對無線電頻譜進行采樣。這提供了 20 米火腿頻段的整個數位部份的記錄,從 14.0 到 14.1 MHz。 莫耳斯電碼訊號通常位於該頻寬的下半部份。接收器將隨時播放此錄音。「現場」和「錄制」之間沒有區別。現在,我可以像「即時」一樣調整錄音中的訊號。Perseus 在 WAV 檔中嵌入資訊以指示頻率和時間。

使用 SDR 記錄無線電訊號會建立巨大的數據檔。像這樣記錄半小時的莫爾斯訊號會產生千兆字節的數據。沒關系。儲存很便宜。

流水線 1