由于上文介绍的软件包“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脚本方式的开发,请参考下文。