FIR 滤波器设计 返回
数字信号处理模拟器

FIR 滤波器设计 模拟器 — 窗函数法

将 Hamming 或 Blackman 等窗函数乘以理想 sinc 脉冲响应,设计线性相位 FIR 低通滤波器。改变抽头数和截止频率时,实时可视化脉冲响应和幅度响应 (dB)。

参数
截止频率 f_c
Hz
采样频率 f_s
Hz
滤波器阶数 M
窗函数
计算结果
抽头数 N
过渡带宽 Δf
阻止带衰减
群延迟 τ_d
脉冲响应 h[n] 及窗函数
频率响应 |H(f)| [dB]
理论和主要公式

理想低通的脉冲响应 (sinc) 与窗函数的乘积得到 FIR 系数:

$$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),\quad h[n] = h_d[n]\,w[n]$$

抽头数、过渡带宽、群延迟:

$$N = M+1,\quad \Delta f \approx \dfrac{A \, f_s}{M},\quad \tau_d = \dfrac{M}{2 f_s}$$

$A$ 是窗函数的特征系数(矩形 0.9、Hann 3.1、Hamming 3.3、Blackman 5.5)。阻止带衰减通常为:矩形 -21 dB、Hann -44 dB、Hamming -53 dB、Blackman -74 dB。

FIR 滤波器设计(窗函数法)原理

🙋
老师,为什么 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。但衰减越深,过渡带越宽——这就是权衡。
🙋
增大抽头数 N 能同时改善陡峭度和衰减吗?
🎓
过渡带宽 Δf 随 M 反比例缩小,会变陡。但群延迟 τ_d = M/(2·f_s) 也会同比增长。实时控制和音频处理中,"延迟"是不能随便加的,必须在允许的延迟范围内选择 M。你可以滑动滑块,亲身感受过渡带和延迟的变化关系。
🙋
具体什么场景用 FIR 滤波器呢?
🎓
只要需要线性相位的地方就用 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],再乘同一窗函数。设计公式都适用。

使用指南

  1. 将截止频率 Fc 设置为 0.1~0.45 的归一化频率(滑块 slFcVal)
  2. 将采样频率 Fs 调整至实测基准(例如音频处理为 48 kHz,振动测量为 1 kHz)
  3. 增加抽头数 M,直到阻止带衰减达到目标值(Hamming 窗约 -53 dB,Blackman 窗约 -74 dB)
  4. 选择窗函数,实时查看脉冲响应和幅度响应(dB)
  5. 记录过渡带宽 Δf 和群延迟 τ_d 的值,验证是否满足设计规格

具体计算示例

某音频系统需 48 kHz 采样、5 kHz 截止的低通滤波器。设 fc = 5000 Hz(fc/fs = 0.104),选择 Hamming 窗、N = 65 抽头(阶数 M = 64)。结果为:过渡带宽约 2.5 kHz(3.3×48000/64≈2475 Hz)、阻止带衰减约 -53 dB、群延迟 τ_d = 32 采样点(0.67 ms)。窗函数法的截止点约为 -6 dB,奈奎斯特频率 24 kHz 附近可降至约 -65 dB。

工程实施注意

  1. 需要实时处理时,群延迟 τ_d 过大会导致同步偏差,应从允许延迟时间反推抽头数上限
  2. Blackman 窗虽阻止带衰减优,但过渡带比 Hamming 宽,需窄过渡时考虑 Hamming 或 Kaiser 窗高抽头化
  3. 归一化频率接近 0.5 时奈奎斯特混叠影响明显,Fc 建议不超过 0.45
  4. 设计的抽头系数在定点计算实现中,四舍五入误差可能使阻止带衰减劣化 3~5 dB