用GNURadio在Pluto上实现FM接收及发射
基于ADALM-PLUTO实现FM的相关功能 涉及GNURADIO,NBFM,WBFM
标签
嵌入式系统
gofflin
更新2021-02-22
4951

基于ADALM-PLUTO实现FM的相关功能
涉及GNURADIO,NBFM,WBFM

以下组件的解释为我自己的理解,因自己还是初学者,不到位之处还请谅解指出,权威参考请见GNU Radio 官方wiki

对于初学者来说,最容易报错的一个为数据类型匹配的问题,然后还一个就是采样率不匹配的问题。

0x00 FM的接收

FlrAEj_BFByV11y72eS4EQPw31lw

  1. Options组件:选择整个程序在什么GUI框架下运行,此处选择QT GUI,选择后,程序中涉及GUI界面显示的都只能选择QT的组件。
  2. PlutoSDR Source:Pluto的接收输出,使用Pluto官方的win安装包自带该组件,如果是公版GNU Radio,可能需要自行安装。主要控制参数为LO Frequency,Sample rate,RF bandwidth。
  3. QT GUI Chooser:QT GUI的选择组件,此处设置了两个选择,第一个为Frequency,提供默认频率选择。第二个为Stream,选择使用何种组件搭配来实现FM的接收。这两个组件还设置了GUI hint参数,可以对组件在界面上的显示位置进行控制,详细用法可以参照GNU Radio的官方wiki,或者科罗拉多大学的的这个通信教程 。
  4. QT GUI Range:QT GUI的变量范围组件,此处设置了两个可以调节的变量,第一个为volume 控制音量大小,第二个为频率选择范围(但是在本程序中,这个选择暂时不可用,因为会和之前的频率Chooser 组件冲突,暂时未找到解决办法,可能需要在生成的python代码中进行修改控制)。
  5. Variable:变量组件,改变该变量值可以同时设置各个组件含有该变量的值。
  6. Selector:选择组件,可以选择如何输入输出。
  7. WBFM Receive:FM解码的关键组件,Quadrature Rate 需要与上一级采样率相同,Adudio Decimation 为音频分频系数。官方WIKI
  8. Rational Resampler: 重采样组件,Interpolation 为插值系数,即输入采样率与插值系数相乘,Decimation 为抽取系数,即采样率与插值系数相乘后再除抽取系数。可以理解为采样率的 OUT = IN(Interpolation / Decimation)。官方WIKI.
  9. Low Pass Filter:低通滤波组件,Decimation 为抽取系数,Cutoff Freq在这设置的为100k,如果设置为300k,会有杂音。为何如此取值还没有研究明白。
  10. QT GUI Sink:QT的波形显示组件,可以显示频域,时域,瀑布图等。

0x01 FM接收流程图解释

首先 确定下Audio Sink的采样率,FM广播一般的采样率最高为24K,所以我们设置为24K。音频采样率

  1. 第一条:接收到的信号直接通过WBFM Receive 进行解码,再通过Rational Resampler进行采样率匹配给Aduio Sink。这一条流没有试验成功。但是这个博主是这样实现的hackrf FM 收音机。所以这条流还需要调试完善。
  2. 第二条:将接收到的信号通过Rational Resample组件,将2m采样率的输入数据,抽取为2m/8=250k采样率的数据,输入给WBFM Receiver模块,解码后,再通过Rational Resampler模块 输出250K × 24 /250 =24k 采样率的数据直接给Audio Sink。
  3. 第三条:将接收到的信号通过Low Pass Filter,输出250K采样率数据,再通过WBFM 及 Rational Resampler 模块进行输出。此处还旁路了一个NBFM Receive 模块,这个模块也是FM解码模块,只是为窄带FM,带宽为15K,常用于对讲机,WBFM的带宽为75K。注意NBFM模块的Audio Rate 和Quadrature Rate的取值,此处设置为相同。

除了使用现成WBFM模块解码,可以尝试使用更原始的解码方式进行功能实现。

同时,这只是单声道的解码,可以尝试立体声道,电视伴音的解码。

0x02 FM的发射

FmvnyCtyh0FkzqX86bXhbuNUd3z4

发射模块基本与接收模块组件一致。

0x03 FM的发射流程图解释

注意,在我们接收的FM波段发射为违法发射。此试验请在室内小功率短时间试验。

首先注释的音频采集模块,使用Audio Source 模块对音频进行采样,采样后,保存至电脑的WAV文件中。

使用Selector 对音频流进行选择,Audio Source即为直接发射实时音频,Wav File Source 即为发射Wav文件。

通过重采样模块和WBFM 模块生成需要发射的数据,通过Pluto发射。

0x04 频谱分析仪的设计思路

因时间能力有限,初略查看了频谱分析仪的要求,认为首先需要实现扫频输出(可能需要进行Python编程),然后再对输入进行处理。

0x05 建议

硬件建议:

   先行测试硬件的完整性,包括替换的天线是否能够正常使用。

软件建议:

  1.  注意GNURADIO的数据类型匹配,即输入输出组件的端口颜色需要匹配。
  2.  注意采样率的匹配。

对活动建议:

  1. 建议提供三道题目的解题思路。
  2. 建议区分题目难度,并根据难度和工作量还有文档质量进行分档活动返还。

0x06 心得

作为一个初学者,刚好有时间玩一玩SDR,接触SDR有一段时间,包括RTL-SDR,HackRF。但是还是通过此次活动,强迫自己学习了Gnu Radio的相关知识,收获很大。

附件下载
FM_Receiver.grc
transmit.grc
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号