GNU Radio + PlutoSDR FM 入门教程

0 阅读3分钟

一、完整流程图如下: image.png 二、Options 模块(工程配置)

模块:

options

作用:

这是 整个 Flowgraph 的配置中心

关键参数:

参数作用
generate_options生成 Qt GUI 界面
output_language生成 Python 代码
run是否自动运行**

三、变量模块

1 samp_rate

模块:

variable

参数:

samp_rate = 2400000

作用:

定义 系统采样率

含义:

2.4 MHz

原因:

FM广播信号带宽约:

200 kHz

采样率必须大于信号带宽。


2 tune_freq

模块:

variable_qtgui_range

作用:

频率滑块

参数:

start = 87.5e6 (起点)
stop = 108e6   (终点)
step = 100e3   (间距)

这是:

FM广播频段

87.5 MHz — 108 MHz

运行时可以拖动滑块(slider)调台。


3 decimation

模块:

parameter

参数:

value = 1

作用:

定义 降采样系数变量

不过在你的工程中:

没有真正使用

可以删除。


4 uri

模块:

parameter

参数:

usb:2.9.5

作用:

指定 ADALM-Pluto SDR 设备地址

GNU Radio 通过它找到硬件。 点击win+r键输入cmd,再输入:

iio_info -s

可见:

image.png 其中usb:2.9.5即为URI 输入:

iio_attr -u usb:2.9.5 -c cf-ad9361-lpc voltage0 sampling_frequency_available

可见:

image.png 即为AD9361 射频芯片支持的采样率范围(最小到最大)。

四、Pluto SDR Source 模块

模块:

pluto   source

作用:

从 SDR 硬件接收无线电信号

信号来源:

天线 → PlutoSDR → GNU Radio

关键参数:

1 采样率

samplerate = samp_rate

= 2.4 MHz


2 接收频率

frequency = tune_freq

由滑块控制。


3 增益

manual_gain1 = 48

作用:

放大信号。

类似:

无线电音量

4 带宽

bandwidth = 2000000

= 2 MHz

用于接收FM信号。


输出数据类型

fc32

意思是:

complex float = 复数 + 浮点数表示

每个采样点是一个复数,并且用 float(浮点数)存储。

无线电信号必须用 IQ复数信号 表示:

I = 同相分量
Q = 正交分量
j = 虚数单位
一个信号样本:I + jQ
z = I + jQ

数学形式:

z = a + bi

float = 32位浮点数

一个 complex float 实际存储为:

I (float32)
Q (float32)

所以一个 sample:

32bit + 32bit = 64bit

也就是:

8 bytes

五、Freq Xlating FIR Filter

模块:

freq xlating  fir filter

这是 非常重要的 DSP 模块

它做三件事:

1 频率平移

把目标信号移动到:

基带 = 0Hz

2 FIR滤波

使用:

low_pass filter

保留 FM 信号。


3 降采样

你的参数:

decim = 10

采样率变化:

2.4 MHz / 10 = 240 kHz

滤波器参数:

firdes.low_pass(1, samp_rate, 100e3, 20e3)

含义:

参数作用
1增益
samp_rate输入采样率
100k截止频率
20k过渡带

六、FM 解调模块

模块:

analog_wfm_rcv

这是:

Wideband FM Receiver

用于解调 FM 信号。

FM 原理:

频率变化表示音频。

数学形式:

s(t) = A cos(2πf_c t + β sin(2πf_m t))

其中:

参数含义
fc载波
fm音频
β调制指数

关键参数:

quad_rate

240000

输入采样率:

240 kHz

audio_decimation

5

音频采样率:

240k / 5 = 48k

刚好是:

标准音频采样率

七、QT GUI Sink

模块:

qtgui_sink

作用:

可视化信号

可以显示:

作用
FFT频谱
Waterfall瀑布图
Time时域
Constellation星座图

关键参数:

fftsize = 4096

FFT越大:

频率分辨率越高

八、Rational Resampler

模块:

rational_resampler

作用:

改变采样率

公式:

输出采样率 = 输入 × interp / decim

数学表达:

f_out = f_in × interp / decim


九、Audio Sink

模块:

audio_sink

作用: 把信号输出到电脑声卡

参数:

samp_rate = 48000
device = default

于是:

FM广播 → 音频 → 扬声器

你就能听到电台。


十、数据流变化总结

整个系统采样率变化:

PlutoSDR
2.4 MHz
     │
     ▼
Filter (decim 10)
240 kHz
     │
     ▼
FM Receiver
48 kHz
     │
     ▼
Audio Sink
48 kHz