從理想響應到實用濾波器
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 方法
貝塞爾函數 I₀(x) 出現在 Kaiser 的視窗公式中。它計算為快速收斂級數:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
對於小的 x,由於分母中的 m!²,級數在幾項內收斂。