PLUTO SDR入门系列之九:强大的开源软件“gnu radio”
由于上文介紹的軟件包“PothosSDR”已經包含了這款軟件(需要python2.7支持),因此不建議單獨安裝。
該軟件包通過SoapySDR接口實現了對IIO接口的封裝,最新版已經內置了gnu radio 3.7。
GNU Radio是一個完全開源的軟件無線電結構平臺,它可以用來設計和仿真,也可以用來連接真實的無線電系統。GNU Radio是一個高度模塊化,采用流圖類形式的軟件架構平臺,它本身提供了許多模塊庫,使用者可以很快速的使用這些模塊來建立關于信號處理的流程。
????首先設備接收到的是模擬信號,電腦不能識別和處理,我們必須轉化成數字信號。經過ADC轉化成數字信號后,我們的電腦就能識別,可以對數據進行處理,比如數字濾波,調制解調,信號識別等。
模塊化流程化的數字信號處理
為了對數字信號進行處理,我們必須首先考慮信號處理的步驟(濾波、調制解調、分析、檢測),然后我們調用相關的模塊,用流程圖的方式連接起來就組成了一個無線通信系統。最簡單的一個實例如下:
?
當一個應用被創建時,一個完整的模塊化的流程圖就建立起來了。這個在GNU Radio就叫流程圖。下面是一個多個模塊組成的流程圖:
?
GNU Radio是一個利用這些信號處理模塊創建流程圖的軟件架構平臺,這些組成了GNU Radio各種應用。
作為一個GNU Radio的使用者,你可以使用這些GNU Radio提供的信號處理模塊,也可以把它們嵌入到你自己的更加復雜的信號處理流程圖中,而不用關心這些數據如何在這些模塊之間流動,一旦你的程序連接好,它們會自動進行。
GNU Radio包括了大量的常用模塊,這里列出了一些僅供參考:
信號產生模塊:
Constant Source
Noise Source
Signal Source
...
調制解調模塊:
AM Demod
Continuous Phase Modulation
PSK Mod / Demod
...
儀器模塊:
Constellation Sink
Frequency Sink
Time Sink
...
信道模塊:
Channel Model
Fading Model
Dynamic Channel Model
...
濾波器模塊:
Band Pass / Reject Filter
Low / High Pass Filter
IIR Filter
...
信號分析模塊
FFT
Log Power FFT
Goertzel {{collapse(Resamplers)
...
使用這些模塊,許多標準的任務,如同步,測量和可視化,可以通過只連接適當的模塊到您的信號處理流程圖就可以實現。此外,你可以自己寫信號處理模塊,把現有的塊與一些提供新的智能功能,連同一些邏輯實現。或您可以開發自己的模塊,對輸入數據和輸出數據進行控制。因此,GNU Radio是一個信號處理塊和開發者互動的發展框架。它有一個廣泛的標準庫的塊,并且有很多系統可供開發人員參考。
下文提供了一些基本的入門知識-GNU RADIO入門培訓.pdf。
https://download.csdn.net/download/zhangxq0521/12252860
下面以一個實例講解如何使用gnu-radio驅動PlutoSDR進行無線通信。需要注意的是,PlutoSDR支持的采樣率與其他設備不同,包括以下采樣率:
1, 2, 3, 4, 6, 7, 8, 9, 10 MSps
https://download.csdn.net/download/zhangxq0521/12252867
更多的實例,請打開下面的zip文件。
https://download.csdn.net/download/zhangxq0521/12252906
1. 安裝python2.7,并確認以下注冊表項已經建立。
2.打開PothosSDR附帶的“GNURadio Companion”。
?
3. 點擊該圖標后,會跳出一個提示窗口,請點擊“是(Y)”并耐心等待。在此期間,程序會安裝python2.7版本的本程序依賴的Python模塊,如GTK/QT/Wxwidget等。
?
4. 安裝完成后,進入主界面并導入實例文件“cyclic-sine_verified.grc”。然后“Generate->“Execute”,就會跳出PyQT繪制的窗口。
這個例子使用了兩個PlutoSDR的硬件模塊:”FMComms2/3/4 Source”和“FMComms2/3/4 Sink”。前者用于信號接收(從Rx端口或者內部的發射端直接耦合),而后者則用于信號發射(從Tx端口輸出或者直接被耦合到Rx端口)。顯然,本例中由于同時使用兩個模塊,實際上Tx端口和Rx端口在內部耦合在了一起。因此可以認為完整的信號鏈應該是:Signal_Source->FMComm_Sink->FMComm_Source->QT_GUI_Sink。
這個例子中大部分的參數都很好理解(具體含義請到這個網址瀏覽:
https://wiki.analog.com/resources/tools-software/linux-software/gnuradio),除了以下幾個:
1. 變量“uri”,也就是PlutoSDR的“Context URI”。按照官方介紹,可以填寫為”ip:192.168.2.1”或者”usb:XX:YY:ZZ”。其中USB方式的ID可以執行上文提到的”iio_info -s”命令獲得。
??需要注意的是,由于每次重新插拔后,USB設備標識會發生變化,必須手動在程序中更新。否則,就會出現如下所示的錯誤。
2.采樣率只支持以下幾個數值
1, 2, 3, 4, 6, 7, 8, 9, 10 MSps
3. 收發器模塊FMCOMM支持3個差分輸入(下圖中標記為”A/B/C balanced”)或者6個單端輸入(A/B/C_N/P)。
但是,由于PlutoSDR的物理層目前工作與”AD9364”模式,因此只能支持單發單收。對于差分接收機來說,就只有“A_BALANCED”;相對而言,差分發射機只有“A”一個端口。詳細信息請閱讀下面的命令行輸出。
?
D:\PothosSDR\bin>SoapySDRUtil --probe="driver=plutosdr,hostname=192.168.2.1"
######################################################
## ????Soapy SDR -- the SDR abstraction library ????##
######################################################
?
Probe device driver=plutosdr,hostname=192.168.2.1
?
----------------------------------------------------
-- Device identification
----------------------------------------------------
??driver=PlutoSDR
??hardware=ADALM-PLUTO
??ad9361-phy,model=ad9364
??ad9361-phy,xo_correction=40000000
??backend_version=0.18 (git tag: v0.18 ?)
??fw_version=v0.31
??hw_model=Analog Devices PlutoSDR Rev.B (Z7010-AD9364)
??hw_model_variant=0
??hw_serial=104473541196000dfbff03007c5d1faede
??library_version=0.18 (git tag: 4e22517)
??local,kernel=4.14.0-42540-g387d584
??usb,idProduct=b673
??usb,idVendor=0456
??usb,product=PlutoSDR (ADALM-PLUTO)
??usb,release=2.0
??usb,serial=104473541196000dfbff03007c5d1faede
??usb,vendor=Analog Devices Inc.
?
----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
??Channels: 1 Rx, 1 Tx
??Timestamps: NO
??Sensors: xadc_temp0, xadc_voltage0, xadc_voltage1, xadc_voltage2, xadc_voltage3, xadc_voltage4, xadc_voltage5, xadc_voltage6, xadc_voltage7, xadc_voltage8, adm1177_current0, adm1177_voltage0, ad9361-phy_temp0, ad9361-phy_voltage2
?????* xadc_temp0: 36.173987 C
?????* xadc_voltage0 (vccint): 1.014404 V
?????* xadc_voltage1 (vccaux): 1.807617 V
?????* xadc_voltage2 (vccbram): 1.012207 V
?????* xadc_voltage3 (vccpint): 1.009277 V
?????* xadc_voltage4 (vccpaux): 1.806885 V
?????* xadc_voltage5 (vccoddr): 1.351318 V
?????* xadc_voltage6 (vrefp): 1.246582 V
?????* xadc_voltage7 (vrefn): -0.002930 V
?????* xadc_voltage8: 0.907227 V
?????* adm1177_current0: 0.406565 A
?????* adm1177_voltage0: 4.998523 V
?????* ad9361-phy_temp0: 19.298000 C
?????* ad9361-phy_voltage2: 0.452686 V
?
----------------------------------------------------
-- RX Channel 0
----------------------------------------------------
??Full-duplex: YES
??Supports AGC: YES
??Stream formats: CS8, CS12, CS16, CF32
??Native format: CS16 [full-scale=2048]
??Antennas: A_BALANCED
??Corrections: DC removal
??Full gain range: [0, 73] dB
????PGA gain range: [0, 73] dB
??Full freq range: [70, 6000] MHz
????RF freq range: [70, 6000] MHz
??Sample rates: 0.065105, 1, 2, 3, 4, 6, 7, 8, 9, 10 MSps
??Filter bandwidths: 0.2, 1, 2, 3, 4, 6, 7, 8, 9, 10 MHz
?
----------------------------------------------------
-- TX Channel 0
----------------------------------------------------
??Full-duplex: YES
??Supports AGC: NO
??Stream formats: CS8, CS12, CS16, CF32
??Native format: CS16 [full-scale=32768]
??Antennas: A
??Corrections: DC removal
??Full gain range: [0, 89] dB
????PGA gain range: [0, 89] dB
??Full freq range: [70, 6000] MHz
????RF freq range: [70, 6000] MHz
??Sample rates: 0.065105, 1, 2, 3, 4, 6, 7, 8, 9, 10 MSps
??Filter bandwidths: 0.2, 1, 2, 3, 4, 6, 7, 8, 9, 10 MHz
除了這兩個控件之外,ADI還提供了其他兩個更加簡潔的模塊。
具體如何使用,本文不再贅述,請參考以下三個經過驗證的腳本(FM發送及接收)自行學習。
https://download.csdn.net/download/zhangxq0521/12252924
另外,如果想要進階學習Python腳本方式的開發,請參考下文。
https://download.csdn.net/download/pspice/9575587
總結
以上是生活随笔為你收集整理的PLUTO SDR入门系列之九:强大的开源软件“gnu radio”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机倒计时蜂鸣器c语言,基于51单
- 下一篇: 如何在win 8的64位下破解安装EPL