内容介绍
项目备注
内容介绍
基于ADALM-PLUTO实现FM的相关功能
涉及GNURADIO,NBFM,WBFM
以下组件的解释为我自己的理解,因自己还是初学者,不到位之处还请谅解指出,权威参考请见GNU Radio 官方wiki
对于初学者来说,最容易报错的一个为数据类型匹配的问题,然后还一个就是采样率不匹配的问题。
0x00 FM的接收
- Options组件:选择整个程序在什么GUI框架下运行,此处选择QT GUI,选择后,程序中涉及GUI界面显示的都只能选择QT的组件。
- PlutoSDR Source:Pluto的接收输出,使用Pluto官方的win安装包自带该组件,如果是公版GNU Radio,可能需要自行安装。主要控制参数为LO Frequency,Sample rate,RF bandwidth。
- QT GUI Chooser:QT GUI的选择组件,此处设置了两个选择,第一个为Frequency,提供默认频率选择。第二个为Stream,选择使用何种组件搭配来实现FM的接收。这两个组件还设置了GUI hint参数,可以对组件在界面上的显示位置进行控制,详细用法可以参照GNU Radio的官方wiki,或者科罗拉多大学的的这个通信教程 。
- QT GUI Range:QT GUI的变量范围组件,此处设置了两个可以调节的变量,第一个为volume 控制音量大小,第二个为频率选择范围(但是在本程序中,这个选择暂时不可用,因为会和之前的频率Chooser 组件冲突,暂时未找到解决办法,可能需要在生成的python代码中进行修改控制)。
- Variable:变量组件,改变该变量值可以同时设置各个组件含有该变量的值。
- Selector:选择组件,可以选择如何输入输出。
- WBFM Receive:FM解码的关键组件,Quadrature Rate 需要与上一级采样率相同,Adudio Decimation 为音频分频系数。官方WIKI。
- Rational Resampler: 重采样组件,Interpolation 为插值系数,即输入采样率与插值系数相乘,Decimation 为抽取系数,即采样率与插值系数相乘后再除抽取系数。可以理解为采样率的 OUT = IN(Interpolation / Decimation)。官方WIKI.
- Low Pass Filter:低通滤波组件,Decimation 为抽取系数,Cutoff Freq在这设置的为100k,如果设置为300k,会有杂音。为何如此取值还没有研究明白。
- QT GUI Sink:QT的波形显示组件,可以显示频域,时域,瀑布图等。
0x01 FM接收流程图解释
首先 确定下Audio Sink的采样率,FM广播一般的采样率最高为24K,所以我们设置为24K。音频采样率
- 第一条:接收到的信号直接通过WBFM Receive 进行解码,再通过Rational Resampler进行采样率匹配给Aduio Sink。这一条流没有试验成功。但是这个博主是这样实现的hackrf FM 收音机。所以这条流还需要调试完善。
- 第二条:将接收到的信号通过Rational Resample组件,将2m采样率的输入数据,抽取为2m/8=250k采样率的数据,输入给WBFM Receiver模块,解码后,再通过Rational Resampler模块 输出250K × 24 /250 =24k 采样率的数据直接给Audio Sink。
- 第三条:将接收到的信号通过Low Pass Filter,输出250K采样率数据,再通过WBFM 及 Rational Resampler 模块进行输出。此处还旁路了一个NBFM Receive 模块,这个模块也是FM解码模块,只是为窄带FM,带宽为15K,常用于对讲机,WBFM的带宽为75K。注意NBFM模块的Audio Rate 和Quadrature Rate的取值,此处设置为相同。
除了使用现成WBFM模块解码,可以尝试使用更原始的解码方式进行功能实现。
同时,这只是单声道的解码,可以尝试立体声道,电视伴音的解码。
0x02 FM的发射
发射模块基本与接收模块组件一致。
0x03 FM的发射流程图解释
注意,在我们接收的FM波段发射为违法发射。此试验请在室内小功率短时间试验。
首先注释的音频采集模块,使用Audio Source 模块对音频进行采样,采样后,保存至电脑的WAV文件中。
使用Selector 对音频流进行选择,Audio Source即为直接发射实时音频,Wav File Source 即为发射Wav文件。
通过重采样模块和WBFM 模块生成需要发射的数据,通过Pluto发射。
0x04 频谱分析仪的设计思路
因时间能力有限,初略查看了频谱分析仪的要求,认为首先需要实现扫频输出(可能需要进行Python编程),然后再对输入进行处理。
0x05 建议
硬件建议:
先行测试硬件的完整性,包括替换的天线是否能够正常使用。
软件建议:
- 注意GNURADIO的数据类型匹配,即输入输出组件的端口颜色需要匹配。
- 注意采样率的匹配。
对活动建议:
- 建议提供三道题目的解题思路。
- 建议区分题目难度,并根据难度和工作量还有文档质量进行分档活动返还。
0x06 心得
作为一个初学者,刚好有时间玩一玩SDR,接触SDR有一段时间,包括RTL-SDR,HackRF。但是还是通过此次活动,强迫自己学习了Gnu Radio的相关知识,收获很大。
附件下载
FM_Receiver.grc
transmit.grc
团队介绍
评论
0 / 100
查看更多
猜你喜欢
Funpack第五期-ADI PLUTO-FM播放器-用GNU Radio编写一个基于ADALM Pluto的SDR FM收音机拓展了ADALM-PLUTO的频段,达到70MHz到6GHz。通过GNURadio实现FM调频广播的解调以及上位机界面。增加了立体声调制功能,实现了音量调节、固定频点选择、频域上的频率瀑布图、时域上的幅度波形图上位机界面功能拓展等。
都市木头
1452
#Funpack第五期#ADI PLUTO SDR之FM接收机使用GNURadio Windows配合ADALM-PLUTO实现了一个调频收音机,并使用GNURadio的QT widget功能加入了动态调频的功能。
fpgamaster
1503
Funpack第五期, 使用ADI PlutoSDR 实战接收FM广播本项目主要验证了ADALM-PlutoSDR 设备对于FM无线电接受的功能。同时测试了GNURadio 3.8 的使用。
tinySDR
1994