🙋老师,为什么 FIR 滤波器的设计要乘以"窗函数"?只用 sinc 函数不行吗?
🎓好问题。理想的"矩形"频率响应反变换得到的是时域 sinc 函数,但 sinc 无限延伸,无法实现 FIR。强行截断会造成 Gibbs 现象——通带和阻止带都会出现锯齿纹波。所以我们使用窗函数,将两端光滑衰减到 0,计算 h[n] = h_d[n]·w[n]。
🙋所以 Hamming、Blackman 等不同窗函数的区别就是"衰减方式"的不同对吧?
🎓完全正确。矩形窗只是直接截断,纹波最大,阻止带衰减只有 -21 dB 左右。Hamming 窗将两端降至 0.08,可以达到 -53 dB。Blackman 加上额外的余弦项,衰减能到 -74 dB。但衰减越深,过渡带越宽——这就是权衡。
🎓过渡带宽 Δf 随 M 反比例缩小,会变陡。但群延迟 τ_d = M/(2·f_s) 也会同比增长。实时控制和音频处理中,"延迟"是不能随便加的,必须在允许的延迟范围内选择 M。你可以滑动滑块,亲身感受过渡带和延迟的变化关系。
🎓只要需要线性相位的地方就用 FIR。心电图、脑电图分析,数字音频的分频器,无线通信的匹配滤波器,图像边缘增强……只要信号的相位畸变会破坏有用信息,FIR 就是首选。
理想(壁状)低通滤波器的频率响应 $H_d(f) = 1$(|f|≤f_c),$0$(其他)经过逆 DTFT 变换,得到无限长 sinc 函数。
$$h_d[n] = \dfrac{2 f_c}{f_s}\,\mathrm{sinc}\!\left(\dfrac{2 f_c}{f_s}\left(n - \dfrac{M}{2}\right)\right)$$
将其截断在 0 ≤ n ≤ M 的有限区间,乘以窗函数 $w[n]$,得到 FIR 系数 $h[n] = h_d[n]\,w[n]$。Hamming 窗的定义如下:
$$w_{\rm Hamming}[n] = 0.54 - 0.46\cos\!\left(\dfrac{2\pi n}{M}\right),\quad 0 \le n \le M$$
过渡带宽 $\Delta f$ 由窗函数的特征系数 $A$ 和 $\Delta f \approx A\,f_s/M$ 给出;Hamming 窗的 $A \approx 3.3$。由于系数对称 $h[n]=h[M-n]$,可以获得线性相位,群延迟恒定 $\tau_d = M/(2 f_s)$。
数字音频分频: 扬声器间的分频器和高清录音的下采样前置滤波,都用线性相位 FIR。因为相位无失真,音场才不会塌陷。
无线通信的脉冲成形: 在发送端和接收端都使用升余弦根 (RRC) FIR,抑制码间干扰 (ISI)。也有匹配滤波的优势。
测量与传感器前处理: 加速度计和麦克风的抗混叠滤波后低频提取,心电图的肌电噪声去除,地震动的长周期成分提取等。
图像处理: 高斯模糊和方向边缘增强也是 2D FIR 滤波器。如果系数可分离,只需做 2 次 1D FIR 卷积。
误区 1:换窗函数就能自由满足规格。 窗函数法的阻止带衰减是固定的(Hamming -53 dB 等),无法任意指定。严格规格需用等纹波设计(Parks-McClellan / Remez)。
误区 2:抽头数加倍陡峭度也加倍。 Δf 与 1/M 成反比变窄,延迟 τ_d = M/(2 f_s) 也同比增长。实时性紧张时需用 IIR 或 Parks-McClellan 来最小化 M。
误区 3:FIR 总是比 IIR 重。 同样规格系数数确实较多,但利用对称性或 FFT 卷积能大幅减少运算。相位失真不允许时,FIR 的优势无可撼动。
抽头数 N=M+1 设为奇数(M 偶数)时,中心处有一个抽头,DC 增益设计稳定。对于高通或带阻设计,Type-II FIR(M 奇数)在 f_s/2 处必然为 0,有零点约束。一般推荐 M 为偶数。
最简单的是增加 M(延迟也同比增加)。要在同一 M 下缩小,可用 Parks-McClellan / Remez 等纹波最优化,或调节 Kaiser 窗参数 β 满足规格(Δf 和 A_s)。
直接形 FIR 每个样本需 (M+1) 次乘加。用对称性可减至 (M/2)+1 次。对于长滤波器可用 FFT 的 overlap-add 或 overlap-save 降至 O(N log N)。GPU 和 DSP 的 SIMD 指令也很友好。
可以。高通是"全通减低通",带通是"两个低通的差",带阻是"全通减带通",都能用 sinc 差分构造 h_d[n],再乘同一窗函数。设计公式都适用。