概要

FIR、IIR とは

MORE...

FIR が適しているケース

こういう時は FIR がオススメ

MORE...

IIR が適しているケース

こういう時は IIR がオススメ

MORE...

FIRとIIRの選択

概要

ディジタル・フィルタには、 インパルス応答【用語】離散時間の場合、通常
   x(n)=1, n=0
   x(n)=0, n≠0
の信号を「インパルス」といい、インパルスを入力した時のフィルタ出力を「インパルス応答」といいます。
が有限の長さで終わる FIR (Finite Impulse Response) と、インパルス応答が無限に続く IIR (Infinite Impulse Response) があります。

フィルタを設計する時、FIR にするか IIR にするかは大事な「分かれ道」で、 選択を誤ると仕様を満たせなかったり、満たせても高コストになってしまうことが少なからずあります。

FIR と IIR、どちらがいいか微妙な場合もありますが、ここでは「この場合は FIR が適している」「この場合は IIR が適している」と、はっきり言えるケースを挙げます。


図1 : FIR/IIR の適・不適

FIR が適しているケース

位相歪が許されない場合

リアルタイム動作で、多少の遅延は許されるが「位相歪【用語】位相歪は周波数によって遅延量が違うために生じる歪で、位相歪を持つフィルタを通ると、波形の全体的な「形」が時間方向に崩れてしまいます。」が全く許されない場合は、FIR 以外に選択肢はありません。

【参考】人間の耳は位相歪に鈍感なため、単純なオーディオ用途で位相歪が問題になることは少ないのですが、 パルス伝送のように波形が崩れるとトラブルが多発してしまう用途では、位相歪は極力ないことが求められます。
【参考】リアルタイム性は必要だが位相歪を厳密に禁止してはいない、という場合は IIR で近似することも可能ですが、ベッセル・フィルタのような例外を除くと、 設計が面倒になることが多いように思います。
【参考】リアルタイム性が必要ない場合は、IIR で簡単に (実用上十分なレベルで) 位相歪をなくすことができます。

絶対的な安定性が求められる場合

フィルタ係数が時間と共に変化する「時変フィルタ」の場合、IIR では発振/発散する危険性があります。

【参考】安定な時不変 IIR でも量子化誤差に起因する「リミット・サイクル」という小振幅の発振が生じる場合があります。

FIR は (フィルタ係数が有限なら) 絶対に安定ですので、適応フィルタなど時変フィルタの場合は FIR タイプの方が安心です。

【参考】IIR でもフィルタが安定かどうかは比較的簡単に判定できますので、 係数がゆっくり変化する場合は IIR でも実用上問題ないことがあります (不安定になると判定されたら係数更新を行わず、安定だった時の係数を維持するなど)。

マルチレートで使用する場合

マルチレートのアップ/ダウン・サンプリングに使うフィルタには、 必要ないサンプルの計算を省略する「ポリフェーズ分解」というテクニックを使えるため、 アップ/ダウン比率が大きい場合は FIR の方が高速になることが多いです。

IIR が適しているケース

急峻な周波数特性が必要な場合

インパルス応答の長さは周波数特性の滑らかさで決まります。

例えば急峻な LPF は、振幅特性のカットオフ周波数付近に尖った角(かど)があり、 滑らかでないためインパルス応答が長くなってしまいます。


図2 : 尖った所は「滑らか」とはいえない

FIR はインパルス応答全体が入るだけの係数メモリと遅延メモリを必要とし、 演算量もインパルス応答の長さ(サンプル数)に比例しますので、 インパルス応答が長いと IIR に比べて不利になります。

【注意】インパルス応答全体が入らないからといって、単純に「尻尾」を切り捨てると、周波数特性が (たぶん無視できないほど) 劣化してしまいます。

IIR はインパルス応答が長くてもメモリ量/演算量ともに低コストで実現できることが多いです。

非常に低い周波数を制御する場合

サンプリング周波数に対して非常に低い周波数の特性を指定されている場合は IIR の方が圧倒的に有利です。

これは盲点だと思うのですが、急峻な周波数特性が必要な場合 で述べた振幅特性の「急峻さ」は、リニア周波数/リニア振幅でプロットした時の「急峻さ」です。

【注意】-24dB/oct の HPF の振幅特性を対数周波数/対数振幅でプロットすると、カットオフ周波数 10Hz も 1kHz も同じ形、同じ傾きに見えますが、 リニアで見ると 10Hz の HPF の傾きの方が 100 倍も急なんです!

このため低い周波数帯域で急峻な特性を要求されると、思った以上にインパルス応答が長くなり、FIR ではメモリ量/演算量ともに苦しくなってしまいます。

中高域でも Q が高い場合は 急峻な周波数特性が必要な場合 に該当しますので、IIR が有利です。

マルチレートにできる場合は FIR でも可能ですが、回路はかなり大掛かりになり、設計も手間が掛かります。

サンプリング周波数に対して極端に低い周波数の特性を指定される場合は、係数誤差、演算誤差の影響が大きくなりますので、本当に IIR で大丈夫か確認を要します。

迷ったら…

特性的にもコスト的にも FIR と IIR で大差ない場合は、FIR にしておくことをお勧め致します。

IIR は理論も実装も FIR よりずっと面倒ですから、どちらでもできるなら、易しく作れて「後腐れ」のない FIR の方が良いと思います。