6.2 GNU Radio 滤波与多速率实战


6.2 GNU Radio 滤波与多速率实战

本节摘要:GNU Radio 把滤波器设计封装成 firdes 函数族,流图里的 Low Pass Filter 块背后就是"窗函数法加参数框"。本节讲清 firdes 四参数(增益、截止、过渡带、窗)的含义与取值,演示多速率链的完整设计流程,并用频谱对比实验验证滤波效果。

firdes:设计函数族的参数化

在 GRC 里双击任意滤波块,截止频率之外还有三个参数,对应 firdes.low_pass 的完整签名:

  • 增益 gain:通常取 1,滤波器只选择性不放大。
  • 采样率 samp_rate:设计一切以它为归一化基准——注意必须填"该块输入端的实际速率",多级链里填错这一项是第一高频错误。
  • 截止频率 cutoff_freq:半功率点位置,对称复数滤波下保留正负两侧。
  • 过渡带 transition_width:通带到阻带之间的斜坡宽度。它与抽头数的倒数关系(第 6.1 节账本)直接决定计算量:过渡带越窄,抽头越多,块越吃 CPU。
  • 窗窗型:Hamming 是默认,Blackman-harris 换取更深阻带。

一个实用心法:过渡带别小于目标信号带宽的十分之一。比如处理 200 kHz 的 FM 信号,过渡带给 10 到 20 kHz 足够;把它压到 1 kHz,抽头数飙到数千,CPU 当场拉满而听感毫无差别——滤波器设计里最贵的错误就是"为用不到的指标付算力"。

实战流图:两信道同时接收

把滤波从"单链路组件"升级成"架构工具":RTL-SDR 的 2.048 MHz 视野里,往往同时存在两个想收的信号(比如相邻的两个对讲机信道)。方案是并联分支——源块之后分两路,各自用 Frequency Xlating FIR Filter 把目标信道搬到零频并限带,再各自解调:

分支 A:Frequency Xlating FIR(中心频率偏移 +100 kHz,低通抽头按 12.5 kHz 信道设计,抽取 32 倍到 64 kSPS)接 Narrowband FM Receive 接 Audio Sink。
分支 B:同结构,偏移 -100 kHz,收另一个信道。

Frequency Xlating FIR 是"变频与滤波合一"的复合块:内部先乘复指数做频谱搬移(第 3.2 节的原理),再用设计好的抽头卷积滤波,一步完成两件事且省一次中间缓存。它的第四个参数 taps 需要自己给——参数框里直接写表达式 firdes.low_pass(1, samp_rate, 6e3, 2e3),设计逻辑与 6.1 节的 scipy 实验完全同构。

图:双信道并联接收的多速率流图

图:双信道并联接收的多速率流图

验证实验:滤波前后的频谱对比

滤波效果不该靠耳朵,用频谱窗口量化验证。在 Xlating FIR 前后各挂一个 QT GUI Frequency Sink,跑起来对照:前级频谱是 2 MHz 宽视野、两座信道平台与一片噪声底;后级频谱只剩 12.5 kHz 宽的单信道、噪声底因带宽压缩而"抬高"(每赫兹功率密度不变,显示范围变了)。两图叠加换算后核对该信道的信噪比:若比宽带下改善约 10 到 12 dB,说明抽取链工作正确(32 倍带宽压缩对应理论 15 dB,实际留损耗余量)。

这个"前后各挂一块频谱"的调试手法值得固化为习惯:流图里每一级变换,都值得一对前后视窗。它把抽象的速率与带宽账变成肉眼可查的曲线,多数参数错误当场现形。

抽取链的设计模板

多级抽取的标准模板收尾本章:大倍数粗抽取在前,小倍数精抽取在后。以 2.048 MSPS 到 48 kHz 音频(约 42.7 倍)为例,推荐两段:先 8 倍(滤波器按 256 kHz 通带设计,抽头约 64 个,CPU 便宜),降速后再 5 倍多相抽取(通带 48 kHz,抽头数十个)。若一步到位设计 42.7 倍抽取,单级滤波器需要数千抽头——与第 6.1 节的账本完全吻合。GNU Radio 的 Rational Resampler 与 mmse resampler 块内部已按多相结构优化,直接用即可,关键是抽取比的分配要遵守"先粗后精"。

深入一层:滤波器参数的自检脚本

流图跑通后,值得用离线脚本验证"设计值"与"实际响应"是否一致——把 GRC 里 firdes 表达式复制到 scipy 里跑一遍 freqz,核对通带边缘、阻带衰减与群延迟三项。设计值与预期偏差超过 3 dB 时,通常是采样率参数填错(firdes 的 samp_rate 必须是该块的输入速率,抽取块前后不同)或过渡带过窄导致数值病态。五分钟的验证能省掉流图里"凭感觉调参数"的半小时,这个习惯在多级链路里尤其值钱——级联滤波器的总响应是各级乘积,任何一级的意外凹陷都会在最终输出里出现。

常见问题

问题:双信道流图里两路信号会互相干扰吗?

数字域不会——并联分支各自处理自己的样本副本,互不影响。真正的干扰发生在模拟域:两个目标信道都在 ADC 的 2 MHz 视野里,若其中一路有超强信号,8bit 量化的非线性会让它"污染"整段视野。对策是 8.1 节说的前端滤波,或把中心频率选得让强信号落在视野边缘外。

问题:Frequency Xlating FIR 的偏移量是正还是负?

符号约定容易绕:偏移量等于"目标频率减去当前中心频率",表示把目标搬到零频所需的频率修正。验证方法很简单:偏移设好后看频谱窗口,目标信号应该正好出现在正中央——图形反馈比记符号约定可靠。

问题:抽取后的"噪声底抬高"是变差了吗?

不是。显示上噪声底抬高约 15 dB(32 倍带宽压缩),但那是把同样的总噪声摊在更窄的频带上,每赫兹的噪声密度完全不变。判读时看单位带宽信噪比——它不变或略升都正常,明显下降才说明抽取前的抗混叠滤波没做好。

问题:两个信道的增益差异很大,怎么各自适配?

在并联分支里各加一个 AGC 块或不同的 Multiply Const——信道化之后每路是独立的处理链,增益可以各调各的。这正是并联架构的隐性收益:宽带里的强弱差异,在分路之后可以用各自的窄带链路分别优化,比单链路硬扛动态范围从容得多。

本节要点回顾

  • firdes 四参数:截止与过渡带是性能账本,采样率必须填本级实际值。
  • 过渡带宽度即算力阀门:取目标带宽的十分之一量级,别为冗余指标付费。
  • Xlating FIR 一块两用:频谱搬移加信道滤波合并,是信道化架构的标准件。
  • 先粗后精:多级抽取先大倍数低分辨率、后小倍数高分辨率。

至此,接收链的每个环节——采样、滤波、变频、解调——都已在理论与实操双线上打通。下一章横向看硬件:同一套知识如何帮你在设备丛林里选对工具。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U