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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值