English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

ゲスト
1 / ?

理想的な応答から実用的なフィルタへ

ハミングはフーリエ級数を使用した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) (k ≠ 0), c_0 = 2f_c.

このインパルス応答は無限です — sinc関数は時間領域で永遠に拡張します。実用的なフィルタは限定された数の係数が必要です。

ステップ3: 2N+1項に切り詰める

|k| ≤ N の係数 c_k のみを保持します。この2N+1項の矩形ウィンドウが最も単純な切り詰めです。それはギブス現象を生成します: カットオフ付近で約9%のオーバーシュートです。

ステップ4: ウィンドウを適用する

切り詰められた係数にウィンドウ関数 w_k を乗算してギブスのオーバーシュートを減らします:

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).

カットオフ f_c = 1/4 を持つローパスフィルタについて、k = 0, 1, 2, −1 のフーリエ係数 c_k を計算します。c_0 = 2f_c と c_k = sin(2πf_c·k)/(πk) (k ≠ 0) を使用してください。それぞれの計算を示してください。次に、係数列が対称である理由を説明してください: c_k = c_{−k}.

ウィンドウがギブスのオーバーシュートを減らす方法

ウィンドウ関数 w_k は、切り詰められた係数列を中央の値から端でゼロに向かってテーパーします。テーパーは矩形の切り詰めによって導入された鋭い端を除去します。

テーパーが機能する理由

ギブスのオーバーシュートは、矩形ウィンドウのフーリエ変換 (sinc関数) が大きなサイドローブを持つという事実から生じます。これらのサイドローブは不連続付近に集まって約9%のオーバーシュートを生成します。

スムーズなウィンドウはより小さなサイドローブを持つフーリエ変換を持っています。係数をウィンドウで乗算すると、理想的な周波数応答とウィンドウのフーリエ変換を畳み込みます。より小さなサイドローブ → より少ないリップル。

一般的なウィンドウ

矩形 (ウィンドウなし): サイドローブ ≈ −13 dB、ギブス ≈ 9%。

ハン (フォンハン): w_k = 0.5 + 0.5·cos(πk/N)。サイドローブ ≈ −31 dB。

ハミング: w_k = 0.54 + 0.46·cos(πk/N)。サイドローブ ≈ −41 dB、最初のサイドローブ ≈ −43 dB。ギブス < 0.2%。

カイザー: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)。調整可能: α はサイドローブレベルを制御し、設計がサイドローブの高さと遷移帯幅をトレードオフできます。

ウィンドウのトレードオフ

すべてのウィンドウはトレードオフを課します: サイドローブを抑制することは常にメインローブを広げます。

より広いメインローブは、より広い遷移帯を意味します — 通過帯域と阻止帯域の間の周波数の範囲。

ハミングはこれをカイザー設計パラメータの観点から形式化しました:

- δ: 許容波紋 (理想からの垂直許容値 — 応答が0または1からどの程度のずれを許可するか)

- ΔF: 遷移幅 (水平許容値 — 通過から阻止への遷移がどの程度狭いか)

カイザー法は δ と ΔF だけから N (係数の数) と α (ウィンドウの形状パラメータ) の両方を見つけます。ウィンドウタイプを推測する必要はありません。

フィルタ仕様は以下が必要です: 通過帯域波紋 ≤ 0.01 (δ = 0.01) と遷移帯幅 ΔF = 0.05 (正規化)。2番目のフィルタは以下が必要です: 通過帯域波紋 ≤ 0.001 (δ = 0.001) と同じ ΔF = 0.05。どのフィルタがより多くの係数 N を必要としますか? フーリエ級数設計における波紋許容値 δ とフィルタ次数 N の関係を説明してください。

仕様から係数へ

カイザー法は2つの仕様 — δ (波紋許容値) と Δ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. カイザーウィンドウの重みを計算します: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)

5. 理想的なフーリエ係数をウィンドウの重みで乗算します

6. 結果の伝達関数を評価し、波紋を δ に対して確認します。波紋が δ を超える場合 (端の干渉)、より小さい許容値で繰り返します。

ハミングは指摘しました: カイザーは指数 0.4 に0.5を試して (大きすぎて) 0.4 がよく合うことを見つけることで到達しました。コンピュータは理論的研究の実験ツールとして機能しました。

カイザー法を適用する

ベッセル関数 I₀(x) はカイザーのウィンドウ公式に現れます。これは急速に収束する級数として計算されます:

I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²

小さい x の場合、分母の m!² のため級数は数項で収束します。

ローパスフィルタは以下が必要です: δ = 0.01 (1%波紋) と ΔF = 0.1 (サンプリングレートの10%の遷移幅)。カイザー公式を使用します: A = −20·log₁₀(0.01) = 40 dB。21 ≤ 40 ≤ 50 なので、α = 0.5842·(A−21)^{0.4} + 0.07886·(A−21) を使用します。α を計算してください。次に N = (A−8)/(2.285·2πΔF) を使用して必要なフィルタ係数の数を計算してください。N を最も近い整数に切り上げます。