Limesdr軟件無線電架構的理解

聲明,此文僅代表目前我自己的理解,可能有錯(機率還挺大)

 

1,SDR的基本架構,LMS7002M 射頻收發芯片,經過混頻後到達中頻IF,這是通過高速ADC採樣,這個就是採樣率但是這時數據量非常大,不適合進入PC運算,於是通過 FPGA 的 DDC 數字下變頻技術把ADC數據採樣率下降到基帶可以處理的範圍,例如幾兆並且,DDC模塊出來的數據是 IQ 信號流,所以在PC上面處理的數據就是比如GRC模塊的32k採樣率,其實應該是 32K IQ數據流通過USB送到SDR硬件的FPGA做DUC數字上變頻的。

 

2,LimeSuite https://github.com/myriadrf/LimeSuite

首先需要的是驅動,linux或者window平臺通過USB收發數據,命令是什麼,包格式是什麼等這些是官方自己定義並且做好的,這個就是 LimeSuite 了。編譯安裝之後提供了一個動態庫,可以用C++語言直接寫程序收發數據,可以直接設置頻率等模塊參數,也就是說,水平夠的話不需要 gnuradio,可以自己直接用c++寫數字信號處理軟件,因爲我們可以設置射頻參數,可以收發IQ數據流,這就完全足夠了,參考LimeSuite 的 example 下面有例子。

 

3,之前也說過了,limesdr是新的模塊,其他現有的SDR軟件目前還沒有(有的已經開始支持了),最簡單的辦法就是模擬一個現成的接口,limesdr選擇了 soapysdr 通用接口,這樣一來,其他SDR軟件看起來就是一個支持soapy接口的硬件而已,他不需要管你是什麼,這個接口的實現是在 LimeSuite裏面做了。

 

4,gunradio 是一個通用的數字信號處理軟件,運行在pc上,處理fft等算法,數字解碼算法。但是他是不涉及具體的硬件的。那麼怎麼把實際的sdr硬件的數據流導入到 gunradio 中,方法同樣很簡單,做一箇中間層轉換就可以了。在 gnuradio 中是通過模塊的形式出現,需要實現一個外部模塊,包含 sink 和 source,這樣 sdr硬件是數據流就可以通過這個轉換層模塊導入到 gnuradio了。所以各個廠商,其實都需要實現這麼一個模塊,從而實現和 gnuradio通訊。這個項目的地址在 https://github.com/myriadrf/gr-limesdr ,一般 gr- 開頭的就是這類模塊了,或者通過 gr-osmocom 訪問 soapy接口的形式在 gnuradio 上使用,其實原理都是一樣的。如何寫這個模塊,有一個簡單的教程,可以搜索 gr-howto-write-a-block ,有翻譯版,對應的軟件可以在 gnuradio下載源代碼的地方下載。C++編程,需要點功底。

 

就這樣,整個脈絡都清晰了。

 

如果對硬件感興趣,可以看原理圖

如果對FPGA處理數字信號感興趣,可以看FPGA的代碼

如果對USB和 LMS7002M 感興趣,可以看 LimeSuite 代碼

如果想自己學習處理數字信號,可以學習 LimeSuite 裏面直接調用接口來處理。

如果想自己學習處理數字信號,可以學習 gnuradio 源代碼,有些模塊代碼不多,但是背後的原理要學習好久。

 

如果你想自己設計一個SDR

1,射頻部分其實沒有要求,送到PC處理的是 IQ 數據流,只要能實現這個就行。

2,和PC的接口,可以是 USB,可以是其他接口。不過速度有點要求,1M採樣率就需要 4MB/S的數據速率。

3,自己實現操作射頻的函數接口,還有數據流的接口,通訊協議自己定,能用就行。

4,自己實現gnuraio模塊,或者實現 soapy接口,或者模擬其他接口。

全部做完之後,一塊 SDR 就完成了。不過難度之高可想而知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章