概要

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) があります。


図1 : FIR の例


図2 : IIR の例

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

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


図3 : FIR/IIR の適・不適

FIR が適しているケース

位相歪が許されない場合

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

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

FIR を使うと直線位相 (リニア・フェーズ) 特性を持ち、全周波数で群遅延一定のフィルタを作ることができます。

【注意】FIR は直線位相のフィルタしか作れないわけではありません。十分なタップ数があれば、任意の振幅特性と位相特性を持つフィルタを近似することができます。

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

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

【参考】安定な時不変 IIR でも量子化誤差に起因する「リミット・サイクル」という小振幅の発振が生じる場合がありますが、 FIR にはフィードバック経路がありませんので、リミット・サイクルが生じることはありません。

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

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

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

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

IIR が適しているケース

高速性が必要な場合, 演算量を抑えたい場合

IIR は極と零点を組み合わせてフィルタを実現するため自由度が高く、零点だけ*で特性を実現せねばならない FIR に比べて、遥かに少ないメモリと演算量で所望特性を実現できることが多いです。

* 実は FIR にも \(z=0\) に極があるのですが、ここにある極は遅延をもたらすだけで振幅特性には無関係なため、除外して考えるケースがほとんどです。
【参考】FIR に極は無い?

このため、高速性が必要な場合や演算量を抑えたい場合は、IIR での実現を考えた方がよいでしょう。

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

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

ただし IIR の設計実装は FIR より難しく、安定性判別やノイズ(S/N)の推定には、それなりの知識を必要とします。

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

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

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


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

FIR の演算量はインパルス応答の長さに比例するため、インパルス応答が長いと演算量が膨大となり、リアルタイム動作させるには必要以上に高速/高価な計算デバイス(DSPなど)を使わねばならなくなります。 このような場合は、極と零点を組み合わせて鋭く尖った特性を作り出せる IIR を使うほうがよいでしょう。

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

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

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

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

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

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

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

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

迷ったら…

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

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