デジタルフィルタ設計と窓関数
狙った周波数だけ通すフィルタを、リプルと遷移幅のトレードオフから設計できる。窓関数法・周波数サンプリング法・双一次変換の原理を式で押さえます。
- 1.窓関数法は理想フィルタの逆変換で得た無限長 sinc を有限長で打ち切り、窓を掛けて実現する。矩形打ち切りはギブス現象で約9%のオーバーシュートを残す。
- 2.窓を変えるとメインローブ幅(遷移幅)とサイドローブ高さ(阻止量・リプル)がトレードオフする。ハミング/ハン/カイザーで β を上げるほど阻止量は増え、遷移帯は広がる。
- 3.IIR は双一次変換でアナログ伝達関数を s = (2/T)(z-1)/(z+1) により z 領域へ写像する。周波数軸が非線形に圧縮されるため、設計前にプリワープで補正する。
理想フィルタは実現できない、から始める
デジタルフィルタ設計の出発点は、周波数領域で欲しい応答(理想の通過帯域と阻止帯域)を決め、それを時間領域のインパルス応答へ落とすことです。ところが理想的な「壁のように切り立った」特性は物理的に実現できません。本稿では、なぜ実現不能なのか、そのギャップを 窓関数法・周波数サンプリング法(FIR)と双一次変換(IIR) でどう埋めるのか、そして避けられない 通過帯域リプルと遷移幅のトレードオフ を原理から開封します。信号処理の土台は プログラミング の数値計算とも地続きです。
理想ローパスの周波数応答 H(e^jω) はカットオフ ωc まで 1、それ以上で 0 の矩形です。これを逆離散時間フーリエ変換すると、インパルス応答は次の sinc になります。
h[n] = (ωc / π) * sinc(ωc * n / π)
= sin(ωc * n) / (π * n) (n ≠ 0)
h[0] = ωc / π
この h[n] は n が正負の無限まで伸び、しかも非因果的(未来のサンプルを要する)です。実装するには 有限の長さに切り詰め、時間をずらして因果的にする 必要があり、ここで理想からのズレが生まれます。
窓関数法:打ち切りとギブス現象
最も素朴な方法は、無限長 h[n] を -M ≤ n ≤ M(長さ N = 2M+1)で単純に打ち切ることです。これは時間領域で矩形窓を掛けるのに等しく、周波数領域では 理想応答と矩形窓のスペクトル(ディリクレ核)の畳み込み になります。畳み込みの結果、カットオフ付近に振動が乗ります。
矩形打ち切りで生じる不連続点近傍のオーバーシュートは、フィルタ長 N を増やしても振動の幅が狭くなるだけで、ピークの高さは約 9%(不連続の跳躍量に対して)に留まり続けます。これがギブス現象です。長さを増やせば遷移帯は急峻になりますが、リプルは減りません。リプルを下げたいなら「窓の形」を変える必要があります。
そこで矩形以外の、両端でなだらかに 0 へ減衰する窓 w[n] を掛けます。実際に実装する係数は次式です。
h_fir[n] = h[n - M] * w[n] n = 0 .. N-1 (M だけ右シフトして因果化)
窓のスペクトルは中央の メインローブ と周囲の サイドローブ を持ちます。設計特性はこの2つで決まります。
- メインローブ幅 → 遷移帯域幅(通過から阻止へ移る急峻さ)を支配する。狭いほど急峻。
- サイドローブの高さ → 阻止帯域の減衰量と通過帯域リプルを支配する。低いほど深い阻止が得られる。
窓ごとのトレードオフを読む
窓の選択は「遷移帯を狭くする(メインローブを細く)」ことと「阻止量を深くする(サイドローブを低く)」ことの綱引きです。両立はできません。代表的な窓を比較します。
| 窓関数 | メインローブ幅(相対) | 最大サイドローブ | 阻止帯域減衰の目安 |
|---|---|---|---|
| 矩形 | 最狭 (2) | -13 dB | 約 21 dB |
| ハン (Hann) | 広 (4) | -31 dB | 約 44 dB |
| ハミング (Hamming) | 広 (4) | -41 dB | 約 53 dB |
| ブラックマン | 最広 (6) | -58 dB | 約 74 dB |
| カイザー | β で可変 | β で可変 | β で連続調整 |
矩形は遷移帯こそ最も急峻ですが阻止量が浅く、ブラックマンは深い阻止と引き換えに遷移帯が広くなります。同じ阻止量なら、フィルタ長 N を伸ばすほど遷移帯は狭められる ため、実務では「必要な阻止量から窓を選び、必要な遷移幅から長さを決める」順で設計します。
カイザー窓は形状パラメータ β を持ち、β を上げるとサイドローブが下がって阻止量が増える代わりにメインローブが広がります。所望の阻止量 A(dB) と遷移帯域幅 Δω から、β と必要次数 N を経験式(カイザーの式)で直接見積もれるのが利点です。目安として、阻止量 50 dB なら β はおよそ 4.5、次数はおおよそ N ≈ (A - 8) / (2.285 * Δω) で求まります。
周波数サンプリング法:欲しい応答を直接置く
窓関数法が「時間領域の理想応答を削る」のに対し、周波数サンプリング法 は「周波数領域で欲しい応答を等間隔に指定する」設計です。長さ N のフィルタに対し、N 点で所望の周波数応答 Hd[k](k = 0 .. N-1)を並べ、逆離散フーリエ変換(IDFT)でインパルス応答を得ます。
h[n] = (1/N) * Σ_k Hd[k] * exp( j * 2π * k * n / N ) k = 0 .. N-1
サンプリング点 ω = 2πk/N の上では応答が厳密に Hd[k] に一致します。問題は 点と点の間 です。理想的なステップをそのまま指定すると、サンプル間で大きなリプルが生じます。
通過帯域と阻止帯域の境界に、値を 0 でも 1 でもない中間値(遷移サンプル)を1〜2点差し込むと、サンプル間のオーバーシュートが劇的に下がります。最適な遷移値は最適化で求めることが多く、これにより窓関数法に近い阻止量を、より直感的な「周波数を置く」操作で得られます。境界を急峻にするほどリプルが増える点は窓関数法と同じトレードオフです。
FIR はインパルス応答が有限で、係数を左右対称(h[n] = h[N-1-n])にすれば 厳密な直線位相(群遅延が全周波数で一定)を保証できます。これは波形の相対的な形を崩さない大きな利点で、画像や通信で重宝されます。ただし急峻な特性には長い N が要り、演算量とレイテンシが増えます。
IIR と双一次変換:アナログ設計を写す
急峻な特性を短い次数で得たいときは IIR(無限インパルス応答)を使います。定番は、成熟したアナログフィルタ(バターワース、チェビシェフ、楕円)の伝達関数 H(s) を、離散系の H(z) へ写す 双一次変換 です。連続系の s を次の写像で置き換えます。
s = (2/T) * (z - 1) / (z + 1) T: サンプリング周期
この写像は s 平面の左半面(安定極)を z 平面の単位円内へ1対1で写すため、元のアナログフィルタが安定なら離散化後も必ず安定 です。これは単純な微分の差分近似(前進差分)にはない、双一次変換の決定的な長所です。
双一次変換はアナログ角周波数 Ω とデジタル角周波数 ω を Ω = (2/T) * tan(ω/2) で対応づけます。tan により、高い周波数ほど強く圧縮され、ω = π(ナイキスト)に無限大の Ω が写り込みます。この非線形なひずみがワーピングです。放置するとカットオフが設計値からずれます。対策は、設計前に狙いのデジタル周波数 ωc を Ωc = (2/T) * tan(ωc/2) へ変換(プリワープ)してアナログ側を設計し、その後で双一次変換を掛けることです。これで臨界周波数がぴたりと合います。
FIR と IIR、どちらを選ぶか
同じ仕様なら IIR の方が圧倒的に低次数(少ない乗算・少ないメモリ)で急峻な特性を実現できます。代償は、位相特性が一般に非線形(群遅延が周波数依存)で波形がひずむこと、そしてフィードバックを持つため係数の量子化やオーバーフローで 不安定化しうる ことです。FIR は必ず安定し直線位相を作れる代わりに、同じ急峻さに高い次数が必要です。
- ギブス現象:矩形打ち切りのリプルは次数を上げても約9%残る。低減は窓の形で。
- トレードオフの本質:メインローブ幅=遷移帯、サイドローブ高=阻止量/リプル。両立不可。
- 直線位相の条件:FIR で係数が対称/反対称なら群遅延一定。IIR は一般に不可。
- 双一次変換の安定性:s 左半面 → z 単位円内。安定なアナログ→安定なデジタル。
- ワーピング:
Ω=(2/T)tan(ω/2)。プリワープでカットオフのずれを補正。
まとめ
デジタルフィルタ設計は「実現不能な理想を、制御されたトレードオフで近似する」営みです。要点は、(1) 理想 sinc は無限長・非因果なので打ち切りと因果化が要り、矩形打ち切りはギブス現象で約9%のリプルを残すこと、(2) 窓関数法ではメインローブ幅(遷移帯)とサイドローブ高(阻止量・リプル)が綱引きし、カイザー窓は β でこれを連続調整できること、(3) 周波数サンプリング法は欲しい応答を直接置き、遷移サンプルでリプルを抑えること、(4) IIR は双一次変換でアナログ設計を安定に写せるが、tan による周波数ワーピングをプリワープで補正する必要があること、です。急峻さ・位相・演算量・安定性の要求を天秤にかけ、FIR と IIR を使い分けてください。
信号処理・制御 Article
デジタルフィルタ設計と窓関数を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
DSP
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 6
導入後に効く点
窓を変えるとメインローブ幅(遷移幅)とサイドローブ高さ(阻止量・リプル)がトレードオフする。ハミング/ハン/カイザーで β を上げるほど阻止量は増え、遷移帯は広がる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 6
判断チェックリスト
- 自社の用途が「DSP / デジタルフィルタ」に近いか確認する。
- 強みである「窓関数法は理想フィルタの逆変換で得た無限長 sinc を有限長で打ち切り、窓を掛けて実現する。矩形打ち切りはギブス現象で約9%のオーバーシュートを残す。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。