GNU Radio GRC HackRF实现FM接收



本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

实验环境:

硬件平台---HackRF One、天线(40-860MHz)
软件环境---Ubuntu运行HackRF环境
系统版本信息---Ubuntu-14.04 (64-bit),内核:3.13.0-32-generic


实验步骤:

按照下图所示搭建一个WBFM接收的GRC程序。

1. HackRF接收信号

HackRF用osmocom Source模块来接收FM信号,其中采样率设置为变量samp_rate,

Ch0:Frequency (Hz)设置为变量center_freq。
用一个Signal Source产生一个频率为center_freq-channel_freq的余弦波来与osmocom Source模块的输出相乘,进行频谱搬移。

2. 低通滤波
低通滤波器的截止频率设置为100kHz,过渡带宽为25kHz,Decimation抽取值为100,经过此模块后的采样率由20MHz变为了200kHz。

3. 重采样
使用Rational Resampler模块来继续调整采样率,以此来满足后续Audio Sink模块需要的48kHz做准备。
经过Rational Resampler模块作用,采样率变化过程为200kHz—>200k*12/5=480kHz。

4. WBFM接收
使用WBFM接收模块来进行WBFM解调,其中Audio Decimation为10,表示将采样率480kHz要变为480k/10=48kHz,以此来适应Audio Sink所要求的48kHz。
Quadrature Rate表示的是WBFM Receive模块所期望的输入采样率为480kHz。

5. 音量调节
使用一个Multiply Constant模块来调节声音音量大小。这个数值的取值设定为一个可调节的变量volume_gain(QT GUI Range)。
运行该GRC程序后,你会看到以下界面,并且你会听到北京的103.915MHz的北京交通广播电台。如果你在别的地方的话,你可以通过调节Channel Frequency的值来找到你所在位置的电台。(这里,在找FM电台的时候,有一个技巧,就是你先通过gqrx来找到你那里能听到的电台的频率值,然后再用这个程序来有针对性的调节Channel Frequency,等找到电台后,如果有杂音的话,可以再慢慢微调Center Frequency和Volume,此外,Volume并不是越大越好,比如我这里我用Volume是1是最清楚的,如果有杂音,可以带上耳机寻找FM电台会更好一些。)

### 使用GNU RadioHackRF实现FM解调 #### 安装必要的组件 为了使用GNU RadioHackRF进行FM解调,需先安装GNU Radio以及HackRF驱动程序。通常可以通过包管理器完成这些操作。 对于基于Debian的Linux发行版,可以运行如下命令来安装所需软件: ```bash sudo apt-get update && sudo apt-get install gnuradio hackrf ``` #### 创建GRC文件并配置流图 GNU Radio Companion (GRC) 是一个图形化界面工具,用于设计和测试GNU Radio信号处理流程。创建一个新的GRC项目,并按照以下说明设置各个模块参数以构建FM接收机。 ##### 输入源:HackRF Source - **ID**: `hackrf_source_0` - **Device Arguments**: 默认即可,除非有特殊需求。 - **Sample Rate**: 设置为2MSPS(即`2e6`),这足以覆盖广播频段内的大多数频道[^1]。 ##### 预滤波与重采样 由于接收到的数据可能含有不需要的信息,在进入主要处理之前应该对其进行低通滤波和平滑过渡带宽调整。这里推荐采用Rational Resampler Xlating Filter来进行频率转换及速率匹配工作。 - **Decimation Factor**: 设定合适的下变频因子使输出样本率适合后续音频播放设备的要求;比如设成8,则最终得到大约250kSPS的有效数据传输速度。 ##### FM Demodulation Block 接下来添加WBFM Receive Path block负责执行宽带调频解码任务。此元件内部已经包含了限幅放大、去加重网络等功能单元,因此只需简单指定几个必要选项就可正常运作了。 - **Quadrature Rate**: 应该等于前面提到过的经过降速后的实际输入速率(`sample_rate/decim`)。 - **Audio Decimation**: 如果希望获得接近CD质量的声音效果的话,那么此处建议填入整数10作为分母值之一,从而使得最后产生的PCM序列每秒仅有约48kHz左右。 ##### 输出端口:ALSA Audio Sink 或者 File Sink 如果打算实时监听收音状况,可以选择前者连接至声卡接口发声;反之则利用后者把结果保存到本地磁盘供以后分析研究之用。 ```xml <block> <key>audio_sink</key> <name>ALSA Audio Output</name> ... </block> <!-- OR --> <block> <key>wavfile_sink</key> <name>Waveform File Output (.wav)</name> ... </block> ``` #### 测试与调试 当上述所有步骤完成后就可以尝试启动整个链路看看能否成功捕捉目标电台节目啦!不过在此之前记得检查一遍天线连接情况还有确认当前地理位置附近确实存在可用信道哦~另外也可以适当调节增益旋钮直至达到最佳灵敏度为止。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值