Funpack第五期, 使用ADI PlutoSDR 实战接收FM广播
本项目主要验证了ADALM-PlutoSDR 设备对于FM无线电接受的功能。同时测试了GNURadio 3.8 的使用。
标签
嵌入式系统
FPGA
网络与通信
tinySDR
更新2021-02-25
1362

Funpack第五期 ADI PLUTO 接收FM广播实例说明

 

本次参加Funpack活动也是机缘巧合,得到了BG3MDO的推荐。之前一直在玩单接受的SDR,包括RTLSDR和RSP1,选定ADALM-Pluto一个是看重它内部双核的特性,另一方面是它具备TX发射信道。于是参加了本次活动,本来也准备入手一台PlutoSDR,正好借此机会和各位高手一起玩。

那么来简单介绍一下本次项目的实现吧.本项目的目的是使用PlutoSDR实现一个FM广播接收机。硬件平台上使用了PlutoSDR,另外增加了车台外接天线,和端口转接头。软件方面,本次项目主要使用了开源的GNURadio环境。在GNURadio环境中对于输入的RF信号进行ADC;再在进行降采样;接收到的信号再输入进FMDemod模块进行解调;最后将音频信号输出至声卡即完成任务。

首先我们简单介绍一下PlutoSDR的硬件结构,硬件主要分为两大部分进行介绍。

Fq0MMFC47YjpPWLdwuGTh-n7vF-X

第一部分是模拟前端电路,首先我们可以看到左侧这两个接口 ,分别为信号的输入和输出通道。两个信号输入之后经过阻抗变换变压器变为差分信号,进入AD9363 芯片,以下是AD9363的结构框图。

FlEjuAfph2mgJsLb59HdyjwZmxtq

其中AD9363作为整个系统的射频前端,输入/输出差分通道在信号进入后通过可变增益放大器,然后与RX/TX LO本振信号进行混频,混频后经过低通滤波器;这即是完成下变频/上变频的工作。之后的信号送入ADC/DAC进行模拟-数字变换,然后通过数据接口送出至FPGA接口侧。此部分主要完成模拟信号至数字信号的接口工作。

FkOewNRD7_yN_RmmnKnS-teK0Cve

 第二部分硬件电路,主要是位于图片右侧部分的Zynq 7010芯片,F镁光内存芯片,和闪存芯片。他们三者构成了一个最小化的嵌入式软件运行平台。

FjGYCW35oc63nMOMzisEGYDKVgui

Zynq7000 系列集成 ARM处理器的软件可编程性与 FPGA 的硬件可编程性,不仅可实现重要分析与硬件加速,同时还在单个器件上高度集成 CPU、DSP、ASSP 以及混合信号功能。Zynq7000 系列是单位功耗性价比较高的全面可扩展的 SoC 平台。

Pluto SDR 依托于Zynq7010处理器,完成了模拟前端信号与ARM处理器的信号通道。同时在USB OTG接口上虚拟出了虚拟网卡用来进行数据的传输。在安装IIO驱动之后可以很方便地由GNURadio进行数据的采集调用。

本文后半部分即阐述如何在Linux系统内建立一个GNURadio工程并完成FM广播信号的接收任务。

软件方面,本实验基于Ubuntu 20.04 操作系统,安装了GNU Radio 3.8,IIO驱动,来实现FM接收任务。其中Linux实体机虚拟机均可,虚拟机解码音频时候会有卡顿和爆音的情况,故建议使用实体机安装Linux。具体操作系统安装过程此处不再赘述,这里特殊说明一下安装GNURadio和iio驱动时遇到的问题和解决对策。

首先安装GNURadio,此处可按照

https://wiki.gnuradio.org/index.php/UbuntuInstall#Building_GNU_Radio_on_Ubuntu_Linux

FtW8cTNr4pgUqBQSka9gMwprP_iI

按照章节内针对Ubuntu20.04的安装过程使用apt安装各个软件包,即可。需注可以提前修改软件源,来提高安装速度。

GNURadio安装完毕后需要安装gr-iio驱动,以提供PlutoSDR的支持。具体安装流程可参考ADI的官方安装链接。

https://wiki.analog.com/resources/tools-software/linux-software/gnuradio

无特殊情况基本按照自己要求安装即可。需特别注意,如果使用了GNU radio3.8版本,此处需要安装gr-iio的3.8版本分支。链接如下

https://github.com/analogdevicesinc/gr-iio/tree/upgrade-3.8

 

FmZ1L4FGWK1oKjguLy3w2HldUgvQ

以上两项安装完毕,如无报错,可以在GNURadio界面内看到右侧多出了Industrial IO一项,在其下方可以找到Pluto SDR Sink 和 Source。本次我们只使用FM接收功能,故这里选择Pluto SDR Source。

至此,整个软件软件环境基本搭建完毕,可以进行FM接收解调流程的编制。 从数据通路和信号流程角度来说,射频信号从PlutoSDR source进入 GNURadio之后,需要进行数字降采样,然后送入FM Demod模块进行FM解调,即可输出基带信号。按照这个思路,可以搭建基本的解调路径后,先运行一下看各个部件是否执行正常。构建好之后的程序如下:

FunKwuZdpckthqw4e2Gh9U8C8yCg

其中Pluto SDR Source 按照下图进行设置

Frv307e5oYmAFHyDHlB-wu4dfVwu

 

此时,如果Pluto SDR硬件连接正常,且104.40MHz有正常的广播信号,应该可以收到正常的广播声音了。按照本次任务要求,还需要添加频率显示与控制界面。我们可以从GNURadio内添加一个QT GUI Range 控件,由他来生成一个可以滑动的的Bar条,对应一个87.5-108的浮点数RadioFreq,这个数值对应就是Bar条和后边的频率框的数值,调整这个数值就可以完成“选台”的任务了。另外,为了更好地查看信号的情况,我多加了一个频谱查看的QT GUI frequency sink的控件用来查看实时的频谱。增加了模块的GNURadio流程如图

Fv-vOCzcT5cVbG_OHtch8K_RV9RW

点击快捷菜单的黑色右箭头即可编译生成文件。同时GUI和频谱也就都可以看到了。

Fq7SJi4SFuNkV3WMeWsfQMvHk2aA

上图为接收97.0Mhz的频谱,其中左右两个突起的OFDM调制信号为CDR数字音频信号。

按照任务要求,基本上完成了FM接收以及选台的任务,相关代码已经上传于附件。供各位参考。

关于本活动,我觉得很大程度调动了技术宅们的积极性。建议以后从不同技术高度、技术领域多多组织各种板子的活动。

 

软硬件
电路图
附件下载
FMDemod.grc
GNURadio代码
FMdemod.py
GNURadio生成的Python代码
团队介绍
本项目实施者为本人。暂无团队成员。
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号