初级教程(4)DSP 模块3-改变采样率
3.改变采样率
本教程描述了如何在 GNU Radio 中实现采样率变动。
之前的教程“设计滤波器抽头”演示了如何设计滤波器抽头以及如何在信号处理模块中使用它们。请先完成设计滤波器抽头教程,然后再完成此教程。
插值
插值是增加采样率并因此增加可用带宽的过程。此示例演示如何使用插值 FIR 滤波器块增加采样率。
首先将以下块添加到流程图并连接它们:
- 两个变量块
- 低通滤波器抽头
- QT 图形用户界面范围
- 信号源
- 内插 FIR 滤波器
- Throttle
- QT GUI频率Sink

编辑两个新变量块中的第一个:
- Id: interpolation_rate
- Value: 4
编辑两个新变量块中的第二个:
- Id: samp_rate_interpolated
- Value: samp_rate*interpolation_rate
编辑Low-Pass Filter Taps块的属性:
- Id: lowPassTaps
- Sample Rate (Hz): samp_rate_interpolated
- Cutoff Freq (Hz): samp_rate_interpolated/(interpolation_rate*2)
- Transition Width (Hz): samp_rate_interpolated/(interpolation_rate*4)

编辑QT GUI Range块 的属性:
- Id: frequency
- Default Value: 0
- Start: -samp_rate/2
- Stop: samp_rate/2
编辑信号源的属性:
- Frequency: frequency
编辑Interpolating FIR Filter模块的属性:
- Interpolation: interpolation_rate
- Taps: lowPassTaps

插值 FIR 滤波器 将采样率从 32 kHz 增加到 128 kHz,由于interpolation_rate变量,增加了 4 倍。通过编辑Advanced选项卡下的Comment字段来记录这一点:

然后评论在 GRC 中显示为视觉提醒:

编辑Throttle属性:
- 采样率:samp_rate_interpolated
编辑QT GUI Frequency Sink属性:
- 带宽 (Hz):samp_rate_interpolated
流程图如下所示:

运行流程图显示以下QT GUI 频率接收器:

四个峰值来自插值操作。滚轮单击窗口并启用Max Hold:

拖动频率滑块以显示四个峰值的频率如何变化,从而创建插值 FIR 滤波器 块的频率响应轮廓。插值将采样率提高了 4 倍,低通滤波器抽头衰减光谱图像以最大限度地减少失真。

抽取
在插值增加采样率的情况下,抽取降低采样率和可用带宽。从之前的插值示例的流程图开始,将interpolation_rate变量重命名为decimation_rate。流程图有一些错误:

更改samp_rate_interpolated变量:
- ID:samp_rate_decimated
- 值:samp_rate*decimation_rate
更改Low-Pass Filter Taps模块属性:
- 采样率(Hz):samp_rate
- 截止频率 (Hz):samp_rate/(decimation_rate*2)
- 过渡宽度 (Hz):samp_rate/(decimation_rate*4)
用 Decimating FIR Filter 模块替换Interpolating FIR Filter模块。更新属性:
- 抽取:decimation_rate
- 水龙头:低通水龙头
更新Throttle块的属性:
- 采样率:samp_rate_decimated
更新QT GUI Frequency Sink块的属性:
- 带宽 (Hz):samp_rate_decimated
流程图如下所示:

运行流程图并启用Max Hold。将频率滑块扫过正频率显示Decimating FIR 滤波器的频谱形状:

请注意,由于抽取 FIR 滤波器块 ,带宽已减少 1/4 倍。
Rational Rate Resampling
插值FIR 滤波器和抽取 FIR 滤波器均按整数值更改采样率。可能会出现需要将采样率更改为小数(例如 2/3)的情况。执行分数重采样的一种方法是先应用 2 的插值,然后再应用 3 的抽取。更好的方法是使用Rational Resampler模块。
从Decimation示例的流程图开始,将Decimating FIR Filter替换为Rational Resampler。
为插值率 添加一个变量块:
- ID:插值率
- 值:2
更改decimation_rate变量的值:
- 值:3
更改samp_rate_decimated变量的属性:
- ID:samp_rate_resampled
- 值:samp_rate*interpolation_rate/decimation_rate
截止频率需要是samp_rate/(interpolation_rate*2)和samp_rate/(decimation_rate*2)之间的最小值。由于decimation_rate > interpolation_rate,Low-Pass Filter Taps模块已经具有正确的采样率、截止频率和转换带宽,因此不需要修改。
更改Throttle的采样率属性:
- 采样率:samp_rate_resampled
更改QT GUI Frequency Sink的带宽属性:
- 带宽 (Hz):samp_rate_resampled
更新Rational Resampler块的属性:
- 插值:interpolation_rate
- 抽取:decimation_rate
- Taps:低通Taps
流程图如下所示:

运行流程图并选择Max Hold选项。将频率滑块扫过正频率显示重新采样的频谱:

请注意,由于Rational Resampler模块 ,这种情况下的带宽减少了 2/3 倍。