从理想响应到实际滤波器
Hamming 提出了一种使用傅里叶级数的 FIR 滤波器的四步设计方法。
步骤 1:指定理想响应
定义 H_ideal(f):您想要的确切频率响应。对于低通滤波器:当 f < f_c 时 H = 1,当 f > f_c 时 H = 0。这是频域中的阶跃函数。
步骤 2:计算傅里叶系数
将 H_ideal(f) 展开为频率变量的傅里叶级数。系数 c_k 是滤波器的理想冲激响应值:
c_k = ∫₀¹ H_ideal(f) · e^{i2πfk} df
对于截止频率为 f_c 的低通滤波器:当 k ≠ 0 时 c_k = sin(2πf_c·k) / (πk),c_0 = 2f_c。
这个冲激响应是无限的 — sinc 函数在时间上永远延伸。实际滤波器需要有限数量的系数。
步骤 3:截断到 2N+1 项
只保留 |k| ≤ N 的系数 c_k。这个 2N+1 项的矩形窗是最简单的截断。它产生 Gibbs 现象:在截止处附近约有 9% 的超调。
步骤 4:应用窗函数
将截断的系数乘以窗函数 w_k 以减少 Gibbs 超调:
c̃_k = c_k · w_k
加窗系数 c̃_k 定义实际滤波器。
计算傅里叶系数
傅里叶系数公式 c_k = sin(2πf_c·k) / (πk) 对于截止频率为 f_c 的低通滤波器给出冲激响应。
对于下截止频率为 f_l、上截止频率为 f_u 的带通滤波器,理想响应的傅里叶系数为:c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk)。
窗函数如何减少 Gibbs 超调
窗函数 w_k 将截断系数序列从中心值逐步缩减至边缘的零。缩减去除了矩形截断引入的尖锐边缘。
为什么缩减有效
Gibbs 超调源于矩形窗傅里叶变换(sinc 函数)具有大的旁瓣。这些旁瓣在不连续性附近相加以产生约 9% 的超调。
光滑窗具有傅里叶变换,其旁瓣较小。将系数乘以窗函数将理想频率响应与窗傅里叶变换进行卷积。旁瓣较小 → 波纹较少。
常见窗函数
矩形 (无加窗):旁瓣约 −13 dB,Gibbs 约 9%。
Hann (von Hann):w_k = 0.5 + 0.5·cos(πk/N)。旁瓣约 −31 dB。
Hamming:w_k = 0.54 + 0.46·cos(πk/N)。旁瓣约 −41 dB,第一旁瓣约 −43 dB。Gibbs < 0.2%。
Kaiser:w_k = I₀(α·√(1−(k/N)²)) / I₀(α)。可调:α 控制旁瓣水平,允许设计在旁瓣高度和转移带宽之间进行权衡。
窗函数权衡
每个窗函数都强加一个权衡:抑制旁瓣总是加宽主瓣。
更宽的主瓣意味着更宽的转移带 — 通带与阻带之间的频率范围。
Hamming 用 Kaiser 设计参数将其形式化:
- δ:允许的波纹(垂直容限,响应与 0 或 1 偏差多少)
- ΔF:转移宽度(水平容限 — 从通过到阻止的转移有多窄)
Kaiser 的方法仅从 δ 和 ΔF 找到 N(系数数量)和 α(窗形状参数)。无需猜测窗类型。
从规范到系数
Kaiser 的方法采用两个规范 — δ(波纹容限)& ΔF(转移宽度)— & 生成 N 和窗系数而无需试错。
设计序列
1. 计算 A = −20·log₁₀(δ)(以 dB 为单位的衰减)
2. 计算形状参数 α:
- 如果 A > 50:α = 0.1102·(A − 8.7)
- 如果 21 ≤ A ≤ 50:α = 0.5842·(A − 21)^{0.4} + 0.07886·(A − 21)
- 如果 A < 21:α = 0(矩形窗)
3. 计算 N = (A − 8) / (2.285 · 2πΔF)
4. 计算 Kaiser 窗权重:w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. 将理想傅里叶系数乘以窗权重
6. 评估结果传递函数并对照 δ 检查波纹。如果波纹超过 δ(边缘干扰),使用较小的容限重复。
Hamming 指出:Kaiser 通过尝试 0.5(太大)& 发现 0.4 很好地拟合来得到指数 0.4。计算机充当理论研究的实验工具。
应用 Kaiser 方法
Bessel 函数 I₀(x) 出现在 Kaiser 窗公式中。它计算为快速收敛级数:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
对于较小的 x,级数快速收敛,因为分母中有 m!²。