FIR 滤波器设计:窗函数法

从理想的无限长信号,到现实的有限长滤波器

💡 核心原理:为什么需要“窗”?

想象你要制作一个完美的圆形饼干(理想滤波器),但你的面团是无限大的(无限长的 $h_d[n]$)。 你需要用一个饼干模具(窗函数)把它截断,才能放进烤箱(计算机)里处理。

1. 理想状态 (The Dream)
频域是完美的矩形(墙)。
时域是无限长的 $\text{sinc}$ 函数。
2. 现实手段 (The Window)
我们只能保留一段 N 个点。
相当于乘以一个“窗函数” $w[n]$。
=
3. 最终结果 (The Reality)
时域变有限了。
代价:频域边缘出现了“褶皱”(吉布斯现象),过渡带变宽。

🛠️ 交互实验室:所见即所得

← 调整参数,实时观察频谱变化
时域:$h_{ideal}[n]$ (灰) $\times$ $w[n]$ (绿) = $h[n]$ (蓝)
频域:幅度响应 $20\log|H(e^{j\omega})|$ (dB)
观察重点: 1. 矩形窗的过渡带很窄,但在阻带有很多波纹(衰减差)。
2. 切换到 Blackman窗,主瓣变宽(过渡带变宽),但阻带衰减非常深(波纹消失)。
3. 增加长度 N,过渡带会变陡峭。

📚 详细设计步骤

🎓 综合例题:传感器噪声滤除

场景: 一个采样率为 $F_s = 2000 \text{ Hz}$ 的系统,需要设计一个低通滤波器滤除 $500 \text{ Hz}$ 以上的高频噪声,要求在 $400 \text{ Hz}$ 处衰减不超过 3dB,在 $600 \text{ Hz}$ 处至少衰减 50 dB

Fs = 2000 Hz Fp = 400 Hz Fs_stop = 600 Hz As >= 50 dB

Step 1: 归一化频率

$$ \omega_p = 2\pi \frac{400}{2000} = 0.4\pi $$ $$ \omega_s = 2\pi \frac{600}{2000} = 0.6\pi $$ $$ \omega_c = \frac{0.4\pi + 0.6\pi}{2} = 0.5\pi \quad (\text{理想截止频率}) $$ $$ \Delta\omega = \omega_s - \omega_p = 0.2\pi \quad (\text{过渡带宽度}) $$

Step 2: 选择窗函数

需求是阻带衰减 $\ge 50 \text{ dB}$。
查表可知:

决定:使用 Hamming 窗。

Step 3: 计算长度 N

Hamming 窗过渡带公式: $\Delta\omega \approx \frac{6.6\pi}{N}$ $$ N \ge \frac{6.6\pi}{0.2\pi} = 33 $$ 取奇数 $N = 33$。因此阶数 $M = N-1 = 32$,延迟 $\alpha = 16$。

Step 4: 最终表达式

设计完成!滤波器系数 $h[n]$ (对于 $0 \le n \le 32$) 为:

$$ h[n] = \frac{\sin[0.5\pi (n-16)]}{\pi (n-16)} \cdot \left( 0.54 - 0.46 \cos\left( \frac{2\pi n}{32} \right) \right) $$