FIRフィルタとIIRフィルタの違い:構造・安定性・位相・次数・演算量を比較

どちらもデジタル信号処理で周波数特性を整えるフィルタですが、過去の出力を計算に使うかどうかが違います。FIRフィルタ(有限インパルス応答フィルタ)は、現在と過去の入力に係数を掛けて足すだけで、インパルス応答はタップ数の長さで終わります。IIRフィルタ(無限インパルス応答フィルタ)は、過去の出力も入力の側に戻して計算するので、インパルス応答が理論上いつまでも続きます。FIRフィルタは常に安定で、係数を左右対称にすれば直線位相にできますが、急峻な特性には多くのタップが必要です。IIRフィルタは少ない次数で急峻な特性が得られますが、位相は直線にならず、極の位置によっては不安定になります。

項目FIRフィルタIIRフィルタ
計算の形とインパルス応答y[n] = Σh[k]x[n − k]。入力だけの重み付きの和で、インパルス応答はタップ数Nで終わるy[n] = Σb[k]x[n − k] − Σa[k]y[n − k]。過去の出力も使い(帰還)、インパルス応答は減衰しながら続く
伝達関数H(z)と安定性分母がなく、極はz = 0だけ。係数によらず常に安定分母をもつ。すべての極が単位円の内側にあるときだけ安定
位相特性係数を左右対称にすれば直線位相。群遅延は周波数によらず(N − 1)/2サンプル直線位相にはならない。群遅延が周波数で変わり、遮断周波数の近くで大きくなる
同じ特性に必要な次数(例)fs = 48 kHz、通過域の端4 kHz、阻止域の端5 kHz、減衰60 dB、通過域のリプル0.5 dBのローパスで、等リプル設計では約110タップ同じ条件の楕円フィルタなら7次(2次のセクション4段)
演算量(出力1サンプルあたり)タップ数と同じ回数の積和。上の例では約110回(係数の対称性を使えば乗算は約半分)2次のセクション1段あたり乗算5回程度。上の例では約20回
遅延(N − 1)/2サンプルで一定。上の例では約56サンプル(約1.2 ms)周波数によって変わる。上の例では低い周波数で約9サンプル、通過域の端では約75サンプル
係数の量子化(固定小数点)周波数特性は少し変わるが、安定性は失われない高次の式をそのまま実装すると、極が動いて不安定になりうる。2次のセクション(バイクワッド)の縦続接続で実装する
主な設計方法窓関数法、等リプル(パークス・マクレラン)法アナログフィルタ(バターワース、チェビシェフ、楕円など)の伝達関数を双一次変換する
主な用途波形の形を保ちたい通信や計測、音声・画像の処理、デシメーションや補間のフィルタ、適応フィルタ演算量やメモリを抑えたい組み込み機器、オーディオのイコライザ、直流の除去や指数平滑化

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

FIRフィルタ
波形の形をくずしたくないとき(通信の波形整形、計測、音声や画像の処理)、デシメーションや補間のフィルタ、係数を動かしても安定でいてほしい適応フィルタに使います。積和の回数は多いものの、DSPやFPGAの積和演算器で並列に処理できます。
IIRフィルタ
演算量やメモリ、遅延を小さくしたいときに使います。位相のゆがみが問題にならない用途で、急峻な特性や狭い帯域のノッチ、直流の除去などを少ない計算で実現できます。

よくある質問

FIRとIIRという名前は、何を表していますか?

インパルス(n = 0だけ1の信号)を入れたときの出力、つまりインパルス応答の長さです。FIR(Finite Impulse Response)は有限の長さで0になり、Nタップなら長さはNです。IIR(Infinite Impulse Response)は帰還のために応答が残り続け、例えばy[n] = 0.2x[n] + 0.8y[n − 1]のインパルス応答は0.2 × 0.8ⁿで、0に近づきながらいつまでも続きます。

直線位相だと、何がよいのですか?

すべての周波数の成分が同じ時間だけ遅れるので、通過域の信号の波形の形が変わりません。係数が左右対称なNタップのFIRフィルタでは、遅れは周波数によらず(N − 1)/2サンプルで、101タップなら50サンプル(48 kHzで約1.04 ms)です。IIRフィルタは周波数によって遅れが違うので、パルスやステップの形がくずれます。

IIRフィルタは、なぜ不安定になることがあるのですか?

出力を帰還するので、極(伝達関数の分母が0になるz)が単位円の外にあると、出力が限りなく大きくなるからです。1次のy[n] = x[n] + 0.5y[n − 1]のように帰還の係数の大きさが1より小さければ安定ですが、高次の急峻なフィルタでは極が単位円の近くに集まり、係数を丸めただけで外に出ることがあります。そのため、2次のセクションに分けて実装します。

IIRフィルタで位相のずれをなくす方法はありますか?

記録したデータをあとから処理するなら、同じフィルタを順方向と逆方向にかけて位相のずれを打ち消す方法(ゼロ位相フィルタリング)があります。実時間の処理では未来の入力を使えないのでこの方法は使えず、オールパスフィルタで群遅延を補正するか、直線位相のFIRフィルタを選びます。

理解度チェック

FIRフィルタ(有限インパルス応答フィルタ)の特徴として正しいものはどれか。

  1. A出力を入力の側に戻す帰還をもつので、少ない係数で急峻な特性が得られる
  2. Bインパルス応答が無限に続くので、係数の量子化によって不安定になりやすい
  3. C帰還をもたないので常に安定で、係数を対称にすれば直線位相にできる
答えと解説を見る

正解:C. 帰還をもたないので常に安定で、係数を対称にすれば直線位相にできる

FIRフィルタは、現在と過去の入力に係数を掛けて足すだけで、出力の帰還をもちません。インパルス応答は係数の数(タップ数)で終わり、極は z = 0 にしかないので、係数がどんな値でも安定です。係数を左右対称にすると、すべての周波数の成分が同じ時間だけ遅れる直線位相になり、波形の形をくずしません。その代わり、急峻な特性を得るには、IIRフィルタより多くのタップが必要です。

次の係数をもつ5タップのFIRフィルタのうち、直線位相(線形位相)の特性をもつものはどれか。

  1. Ah = {1, 2, 3, 2, 1}
  2. Bh = {1, 2, 3, 4, 5}
  3. Ch = {5, 4, 3, 2, 1}
答えと解説を見る

正解:A. h = {1, 2, 3, 2, 1}

FIRフィルタの係数が中心について左右対称(h[n] = h[N − 1 − n])なら、位相は周波数に比例する直線になり、すべての周波数の成分が同じ (N − 1)/2 サンプルだけ遅れます。{1, 2, 3, 2, 1} は中央の3について対称なので、遅れが2サンプルで一定の直線位相のフィルタです。{1, 2, 3, 4, 5} と {5, 4, 3, 2, 1} は対称でも反対称でもないので、周波数によって遅れが変わります。

101タップの直線位相FIRフィルタ(係数が左右対称)の群遅延として正しいものはどれか。

  1. A50サンプル
  2. B50.5サンプル
  3. C101サンプル
答えと解説を見る

正解:A. 50サンプル

係数が対称なNタップのFIRフィルタの群遅延は、周波数によらず (N − 1)/2 サンプルです。N = 101 なら (101 − 1)/2 = 50 サンプルで、係数の中心(51番目の係数 h[50])の位置に当たります。サンプリング周波数48 kHzなら 50 ÷ 48000 ≈ 1.04 ms の遅れになり、実時間の処理では、タップ数を増やすほど遅延が大きくなる点に注意が必要です。

  1. 指数平滑化 y[n] = 0.2x[n] + 0.8y[n − 1] で表される1次のIIRローパスフィルタの、直流とナイキスト周波数での利得の組み合わせとして正しいものはどれか。
  2. アナログフィルタの伝達関数 H(s) からデジタルフィルタを設計するときに使う、双一次変換の説明として正しいものはどれか。
  3. 次数の高いIIRフィルタを、係数のビット数が限られた固定小数点で実装するときの注意として正しいものはどれか。

デジタル信号処理の基礎の練習問題へ

関連する用語の解説

FIRフィルタ
インパルス応答が有限の長さで終わるデジタルフィルタ(有限インパルス応答フィルタ)。現在と過去の N 個の入力に係数を掛けて足し合わせる y[n] = Σh[k]x[n − k] で計算し、出力の帰還をもたない。極が z = 0 にしかないので係数によらず常に安定で、係数を左右対称にすると、すべての周波数の成分が (N − 1)/2 サンプルだけ遅れる直線位相になる。一方、急峻な特性を得るには多くのタップが必要で、出力1サンプルごとにタップ数と同じ回数の積和演算を行う。
IIRフィルタ
過去の出力を入力の側に戻す帰還をもち、インパルス応答が無限に続くデジタルフィルタ(無限インパルス応答フィルタ)。例えば y[n] = 0.2x[n] + 0.8y[n − 1](指数平滑化)のような差分方程式で計算し、伝達関数は分母をもつ。少ない係数と演算量で急峻な特性が得られ、遅延も小さいが、位相は直線にならない。すべての極が単位円の内側にないと不安定になり、高次のフィルタは係数の量子化に弱いので、2次のセクション(バイクワッド)の縦続接続で実装することが多い。アナログフィルタから双一次変換で設計する方法がよく使われる。
直線位相
フィルタの位相特性が、周波数に比例する直線になっていること。このとき、すべての周波数の成分が同じ時間だけ遅れる(群遅延が一定になる)ので、波形の形がくずれない。FIRフィルタでは、係数を中心について対称(または反対称)にすると正確に直線位相になり、Nタップなら遅れは (N − 1)/2 サンプルである。安定で因果的なIIRフィルタでは正確な直線位相は実現できないので、波形を保ちたいオーディオ、通信の受信、計測などの処理ではFIRフィルタがよく使われる。
群遅延
フィルタを通る信号の成分が、周波数ごとにどれだけ遅れるかを表す量で、位相特性 φ(ω) を周波数で微分して符号を反転したもの(−dφ/dω)。群遅延がすべての周波数で同じなら、波形の形を保ったまま全体が遅れるだけになる。係数が対称なNタップのFIRフィルタの群遅延は、(N − 1)/2 サンプルで一定である。IIRフィルタやアナログフィルタでは周波数によって群遅延が変わり、多くの場合カットオフ周波数の付近で大きくなるので、パルスの波形がひずむ。ベッセル特性のフィルタは、群遅延の平坦さを重視したものである。
インパルス応答
システムに単位インパルス δ[n](n = 0 だけ1で、ほかは0)を入力したときの出力 h[n]。線形時不変(LTI)なシステムでは、任意の入力に対する出力が、入力と h[n] の畳み込み y[n] = Σx[k]h[n − k] で求められるので、h[n] がシステムの性質をすべて表す。h[n] が有限の長さで終わるものをFIRフィルタ、無限に続くものをIIRフィルタと呼ぶ。Σ|h[n]| が有限であることがBIBO安定の条件で、h[n] のz変換が伝達関数 H(z) になる。
差分方程式
離散時間のシステムの出力を、現在と過去の入力、および過去の出力の重み付きの和で表した式。例えば y[n] = x[n] + 0.5y[n − 1] は、1つ前の出力の半分を現在の入力に足す。右辺に過去の出力を含まないものはFIRフィルタで、過去の出力を含むもの(帰還があるもの)は、ふつうインパルス応答が無限に続くIIRフィルタになる。初期値を与えれば順に計算でき、そのままプログラムやハードウェアで実装できる。両辺をz変換すると、伝達関数 H(z) が得られる。
z変換
離散時間の信号 x[n] を、複素数 z の関数 X(z) = Σx[n]z^(−n) に変換する方法。1サンプルの遅れは z⁻¹ を掛けることに当たるので、差分方程式を z の分数式(伝達関数 H(z))として扱える。H(z) の分母を0にする z を極、分子を0にする z を零点と呼び、因果的なシステムはすべての極が単位円の内側にあるとき安定である。z = e^(jω) とおいて単位円の上で評価すると、周波数応答が得られる。連続時間のラプラス変換に当たる道具である。
移動平均フィルタ
直近 N 個のサンプルの平均を出力する、最も簡単なローパスフィルタ。y[n] = (x[n] + x[n − 1] + … + x[n − N + 1])/N で、係数がすべて 1/N のFIRフィルタである。直流の利得は1で、周波数 fs/N の整数倍で利得が0になるので、例えば電源の周期にちょうど合わせた区間で平均すると、電源の周波数とその高調波の雑音を取り除ける。係数が対称なので直線位相で、遅れは (N − 1)/2 サンプルである。新しいサンプルを足して最も古いサンプルを引くことで和を更新すれば、N によらず少ない演算で計算できる。

関連する比較