6.1 FIR 与 IIR 滤波器设计


文档摘要

6.1 FIR 与 IIR 滤波器设计 本节摘要:数字滤波器两大结构:FIR(有限冲激响应,纯卷积、可线性相位)与 IIR(无限冲激响应,带反馈、算力省但相位失真)。本节用滑动平均引出 FIR,讲清抽头数与性能的定量关系,给出窗函数法与等波纹法两条设计路线,并用 scipy 完成设计、验证、对比的完整实验。 从滑动平均到 FIR 最朴素的滤波器是滑动平均:对最近 N 个样本取平均,毛刺被抹平、缓变被保留。写成通式:输出等于最近 N 个输入的加权和,权重(抽头系数)全为 1/N。把权重换成任意一组系数 h,就得到 FIR 滤波器——"有限冲激响应"的意思是:喂一个冲激进去,输出最多持续 N 个样本就归零(没有反馈回路)。 FIR 有一个数字通信离不开的性质:系数对称时相位严格线性。

6.1 FIR 与 IIR 滤波器设计

本节摘要:数字滤波器两大结构:FIR(有限冲激响应,纯卷积、可线性相位)与 IIR(无限冲激响应,带反馈、算力省但相位失真)。本节用滑动平均引出 FIR,讲清抽头数与性能的定量关系,给出窗函数法与等波纹法两条设计路线,并用 scipy 完成设计、验证、对比的完整实验。

从滑动平均到 FIR

最朴素的滤波器是滑动平均:对最近 N 个样本取平均,毛刺被抹平、缓变被保留。写成通式:输出等于最近 N 个输入的加权和,权重(抽头系数)全为 1/N。把权重换成任意一组系数 h,就得到 FIR 滤波器——"有限冲激响应"的意思是:喂一个冲激进去,输出最多持续 N 个样本就归零(没有反馈回路)。

FIR 有一个数字通信离不开的性质:系数对称时相位严格线性。相位线性意味着所有频率成分延迟相同——波形形状不被滤波器扭曲。对语音广播无所谓,但对数字信号致命:相位失真会让星座点旋转弥散,误码率飙升。第 4.3 节的根升余弦成形滤波器必须线性相位,原因就在此。

IIR 则引入反馈:输出的一部分回送输入,理论上冲激响应无限长。好处是极省算力——同样的阻带性能,阶数(近似计算量)只有 FIR 的十分之一;坏处是相位非线性(各频率延迟不同),且反馈带来稳定性与系数量化敏感问题。SDR 领域 FIR 占绝对多数的原因在此:通用处理器算力相对充裕,愿意用计算量换线性相位与绝对稳定。

抽头数的账本

滤波器性能与抽头数 N 有清晰的定量关系(哈里斯近似):过渡带宽度约等于 4 除以 N(以归一化频率计),即抽头数约等于采样率除以过渡带宽再乘 4。代入数字:采样率 2.048 MHz、想要 20 kHz 的过渡带,N 约 410 个抽头;若先用 10 倍抽取把速率降到 204.8 kHz 再设计同宽过渡带,N 只需 41 个——先抽取再滤波,计算量直接降一个数量级。第 5 章流图里 Low Pass Filter 顺手设了 Decimation 10,真正的作用此刻揭晓:它不只是省数据量,更让后续每级滤波便宜十倍。

另一笔账是群延迟:FIR 的信号延迟约为 (N-1)/2 个样本。N 为 410 时延迟约 205 样本,2.048 MSPS 下约 100 微秒——对话音无感,但对需要时间戳的遥测解码(如 ADS-B)必须补偿。这两笔账合起来就是滤波器设计的工程权衡全貌:抽头数换性能,抽取率换算力,延迟是隐性成本。

图:滤波器幅频响应的解剖与 FIR、IIR 对比

图:滤波器幅频响应的解剖与 FIR、IIR 对比

设计实验:scipy 三条路线

窗函数法最直观:给理想矩形频响套一个窗,折中泄漏与分辨率。等波纹法(Parks-McClellan,scipy 的 remez)把误差均匀分摊到通带与阻带,同抽头数下阻带衰减更深,是性能上限路线。最小二乘法(firls)居中,适合加权不均匀的需求。三种方法同一指标下的对比实验:

import numpy as np import matplotlib.pyplot as plt from scipy.signal import firwin, remez, freqz fs, n_taps = 204800, 129 f = np.linspace(0, fs/2, 512) # 路线一:窗函数法(汉明窗),截止 100 kHz h_win = firwin(n_taps, 100e3, window="hamming", fs=fs) # 路线二:等波纹法,通带 0 到 90 kHz,阻带 110 kHz 起 h_eq = remez(n_taps, [0, 90e3, 110e3, fs/2], [1, 0], fs=fs) for name, h in (("窗函数法", h_win), ("等波纹法", h_eq)): w, H = freqz(h, worN=1024, fs=fs) plt.plot(w/1e3, 20*np.log10(np.abs(H) + 1e-12), label=name) plt.axhline(-60, color="gray", ls="--", lw=0.8) plt.xlabel("频率 kHz"); plt.ylabel("幅度 dB") plt.ylim(-100, 5); plt.legend(); plt.grid(True); plt.show()

读图要点:两条曲线通带都平、阻带都深,但等波纹法的阻带衰减在同一抽头数下多出约 10 dB,代价是通带出现细密波纹。选型口诀:语音与一般接收用窗函数法(通带最平);强邻道干扰下挖弱信号用等波纹法(阻带最深);被要求"指标卡死、抽头最少"时用等波纹法加过渡带放宽。

IIR 的出场场景也验证一下:一个二阶巴特沃斯低通就能达到上述 FIR 129 抽头的阻带水平,计算量相差两个量级——所以音频路径上的去加重、AGC 环路滤波都愿意用 IIR(scipy 的 butter 加 sosfilt),只要那条路径对相位失真不敏感。

8bit 设备的滤波策略

RTL-SDR 用户要补一条特殊性:量化噪声是宽带白噪声,滤波每窄一倍带宽,量化噪声功率减半——第 3.1 节的噪声账在这里兑现。于是窄带弱信号的最佳策略是"尽早抽取、逐级窄化":第一级抽取器(比如 10 倍)用中等性能滤波器挡住大邻道,降速后用小抽头数精细滤波。反过来,一开始就用 800 抽头的窄带滤波器既浪费算力,也因群延迟过大拖慢系统响应。滤波器设计从来不是孤立问题,它与采样率规划是同一道题的两半。

常见问题

问题:抽头数到底怎么快速估算?

一条工程近似:抽头数约等于 4 乘采样率再除以过渡带宽。采样率 2.048 MHz、过渡带 20 kHz,得到约 410 个抽头;同指标下把采样率先抽到 204.8 kHz 再设计,只需约 41 个。这个式子是本章最重要的数字,值得背下来。

问题:为什么线性相位对数字通信如此致命般重要?

星座判决依赖符号的相位取值。非线性相位的滤波器让不同频率成分延迟不同,波形整形后星座点被系统性扭曲——点云不再以象限中心对称,误码率凭空上升。语音广播听不出相位失真,数字通信处处受制,这就是 FIR 占绝对多数的根本原因。

问题:IIR 会不会完全被淘汰?

不会。算力受限的嵌入式场景(助听器、传感器节点)与控制环路(AGC、锁相环的环路滤波)仍然是 IIR 的主场。工程上正确的问法不是"哪个先进",而是"这条路径对相位失真敏不敏感、算力账怎么算"。

本节要点回顾

  • FIR 是 SDR 默认:线性相位保护波形形状,无条件稳定;代价是抽头数与延迟。
  • 抽头账本:抽头数约等于采样率除以过渡带宽乘 4,先抽取再滤波省一个量级。
  • 三种设计法:窗函数通带最平、等波纹阻带最深、firls 居中,按需求选。
  • IIR 的位置:算力极紧且相位不敏感的路径(音频、控制环路)。

滤波器的理论账算清了,下一节回到 GRC:firdes 函数族如何把这套设计流程变成流图里的几个参数框。


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