理想応答から実用的なフィルタへの変換
ハミングは、FIRフィルタのためのフーリエシリーズの4ステップ設計方法を提案しました。
ステップ 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の場合: c_k = sin(2πf_c·k) / (πk) for k ≠ 0, c_0 = 2f_c。
このインピュース応答は無限に続く — sinc関数は時間に永遠に続く。この実用的なフィルタには有限の係数が必要です。
ステップ 3: 2N+1項目のトリム
c_kを|k| ≤ Nの範囲で保持します。これは最も単純なトリムで、2N+1項目のRECT角形ウィンドウです。このウィンドウはギブズ現象を生じる: カットオフ近くのオーバーシュートは約9%です。
ステップ 4: ウィンドウの適用
ギブズのオーバーシュートを減らすために、切断された係数c_kをウィンドウ関数w_kで乗算します:
c̃_k = c_k · w_k
ウィンドウ付きの係数c̃_kは実用的なフィルタを定義します。
フーリエ係数の計算
ローパスフィルタのカットオフf_cの場合、フーリエ係数の式c_k = sin(2πf_c·k) / (πk)はインピュース応答のインピュース応答を与えます。
バンドパスフィルタの下限カットオフf_lおよび上限カットオフf_uの場合、理想応答のフーリエ係数は次のとおりです:c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk)。
ウィンドウがギブズオーバーシュートをどのように減らすか
ウィンドウ関数w_kは、截断された係数列の中心値から端まで傾けることで、尖った端を緩和します。傾きは、四角形の截断による尖った端を取り除きます。
なぜ傾きが効果的か
ギブズオーバーシュートは、四角形ウィンドウのフーリエ変換(サイン関数)が大きい副周波数を持つため発生します。これらの副周波数は、切断点近くで約9%のオーバーシュートを生じるように加算されます。
滑らかなウィンドウは、より小さい副周波数を持つフーリエ変換を持っています。係数をウィンドウで乗じることで、理想的な周波数応答をウィンドウのフーリエ変換で乗じたものになります。小さい副周波数→リップルが少なくなります。
一般的なウィンドウ
四角形(ノーウィンドウ):副周波数≈−13dB、ギブズ≈9%。
ハン(von Hann):w_k = 0.5 + 0.5·cos(πk/N)。副周波数≈−31dB。
ハミング:w_k = 0.54 + 0.46·cos(πk/N)。副周波数≈−41dB、最初の副周波数≈−43dB。ギブズ<0.2%。
カイザー:w_k = I₀(α·√(1−(k/N)²)) / I₀(α)。調整可能:αは副周波数の高さとトランジションバンドの幅のトレードオフを制御できます。
ウィンドウのトレードオフ
すべてのウィンドウはトレードオフを引き起こします:副周波数を抑制することは常に主lobeを広げることです。
広い主lobeは、通過帯域と停止帯域の間のトランジションバンドの幅を広げることを意味します。
ハミングは、カイザーの設計パラメータを次のように形式化しました:
- δ: 容差(理想から垂直に逸脱することができる量)
- ΔF: トランジション幅(水平容差)—通過帯域から停止帯域への変化の範囲
カイザーの方法は、δとΔFだけからN(係数の数)とα(窓の形状パラメータ)を求める。窓のタイプを当てる必要がない。
仕様から係数への移行
カイザーの方法は、δ(リップル容差)とΔF(トランジション幅)という2つの仕様を受け取り、試行錯誤なく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. カイザーの窓の重みを計算する:w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. 理想的なフーリエ係数を窓の重みで乗算する
6. 結果の伝達関数を評価し、δとリップルが一致するか確認する。リップルがδを超える場合(エッジ干渉)、より小さい容差で再試行する。
ハミングは指摘した:カイザーは指数0.4を試しに0.5に到着し、0.4がよく適応することを発見した。コンピュータは理論研究のための実験的ツールとして役立ちました。
カイザーの方法の適用
Bessel函数 I₀(x) 出现在Kaiser窗公式中。它计算为快速收敛的系列:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
对于小的 x,系列在几项内收敛,因为有 m!² 在分母中。