GNURadio 使用指南

Jan 25, 2026 · 1529 字

GNURadio 是一个开源的软件定义无线电(SDR)框架,允许用户通过软件来实现无线电通信系统。它提供了丰富的信号处理模块和工具,使得用户可以轻松地设计、模拟和部署各种无线电应用。本文使用 GNURadio 和 HackRF One 实现一个简单的广播接收器。

硬件配置

这里我给 HackRF One 增加了一个外置 TCXO(温度补偿晶体振荡器),以提高频率稳定性。TCXO 可以显著减少频率漂移,特别是在温度变化较大的环境中。TCXO 模块只需要安装到 P22 靠近 CLK 输入的一侧即可,如下图所示:

使用 USB 线缆将 HackRF One 连接到计算机。如果设备无法识别的话,需要先使用 zadig 安装相应的驱动程序。

安装 GNURadio

在 Linux 上安装 GNURadio 非常简单:

sudo apt-get update
sudo apt-get install gnuradio

而在 Windows 上安装 GNURadio 则稍微复杂一些。推荐使用 Radioconda,这是一个基于 Anaconda 的 GNURadio 发行版,包含了所有必要的依赖项和工具。可以通过以下命令使用 Windows 包管理器 winget 安装 Radioconda:

winget install radioconda

搭建接收流程图

如图所示,首先我们创建了一个 samp_rate 变量用于指定设备的采样率,对于接收广播任务只需要 2 MHz 即可。注意 GNURadio 输入的值是直接传给Python 代码的,所以对于 2M 这样的表达式需要写成 2e6。对于 HackRF One 来说,采样率最大只能设置为 20 MHz。

此外我们还创建了一个可以使用 QT GUI Range 控件来调节的 freq 变量,用于指定接收频率。

然后就是整体的接收部分。Soapy HackRF Source 模块用于从 HackRF One 设备接收信号,采样率设置为 samp_rate 变量,中心频率设置为 freq 变量。然后数据一方面输出到 QT GUI Frequency Sink 模块,用于显示频谱图,另一方面输出到 Rational Resampler 模块进行重采样,这一步是为了将采样率从 2 MHz 降低到 192 kHz,以便后续的音频解调处理。其中 Interpolation 为重采样后的采样率,Decimation 为重采样前的采样率,Decimation 的值需要和 samp_rate 变量保持一致。但是因为 samp_rate 是一个 float 类型的变量,而 Decimation 需要一个整数值,所以这里需要自己手动填入 2000000

重采样之后就可以进行音频解调了。WBFM Receive 模块用于从宽带调频信号中解调出音频信号,他的 Quadrature Rate 需要和重采样后的采样率保持一致。

之后还有一个可选的 Mutiply Const 模块,用于调节最终输出的音量大小,默认值为 1。最后将音频信号输出到 Audio Sink 模块进行播放,采样率一般设置为 48e3

粤ICP备2025414119号 粤公网安备44030002006951号

© 2026 Saurlax · Powered by Astro