ari23の研究ノート

メーカ勤務エンジニアの技術ブログです

ディジタル信号処理 |FIRとIIRの違い

今のPjに入って、数年ぶりにディジタル信号処理を勉強し直しています。

フィルタを設計するたびに、「いろんな理由があっていつもFIRを使っているけど、なんでIIRじゃだめなんだっけ?」と毎回調査しているので、今回はそれをまとめたいと思います🐜

間違っていたらごめんなさい。指摘くれると嬉しいです。

FIR

FIRは有限インパルス応答(Finite Impulse Response)の略語で、インパルス応答が有限であることを意味する1

差分方程式で書くと、以下の通り。

 \displaystyle
y[n] = \sum_{k=0}^{M}b_{k}x[n-k]

時刻 n のとき、 y[n] はシステムの出力、 x[n] はシステムの入力、 b_{n} はシステムの入力に対する係数である。

つまり、FIRフィルタでは、出力は入力の畳み込み和でのみ計算されることを示す。

IIR

IIRは無限インパルス応答(Infinite Impulse Response)の略語で、インパルス応答が無限であることを意味する2

差分方程式で書くと、以下の通り。

 \displaystyle
y[n] = \sum_{k=1}^{N}a_{k}y[n-k] + \sum_{k=0}^{M}b_{k}x[n-k]

時刻 n のとき、 y[n] はシステムの出力、 x[n] はシステムの入力、 a_{n} はシステムの出力に対する係数、 b_{n} はシステムの入力に対する係数である。

つまり、IIRフィルタでは、出力は入力の畳み込み和だけでなく、過去の出力の畳み込み和も使って計算されることを示す。

FIRとIIRの一般化

IIRの差分方程式において、 a_{k} の符号を置き換えると以下のようにかける。

 \displaystyle
\sum_{k=0}^{N}a_{k}y[n-k] = \sum_{k=0}^{M}b_{k}x[n-k]

つまりFIRとIIRの違いは、 k=0 を除く a_{k} が、ゼロかゼロでないかであることがわかる。

例として、 M=N=2 のときの差分方程式によるディジタルフィルタを、以下に表現する。

M=N=2のときの差分方程式を図示
上記の画像は以下のURLから引用させていただきました。
やる夫で学ぶディジタル信号処理 12. ディジタルフィルタの基礎

差分方程式にZ変換を導入

ところで、Z変換3では1時刻分遅延することを以下のように書く。

 \displaystyle
x[n-1] = z^{-1} x[n]

また、 x[n] をZ変換すると、以下のように書ける。

 \displaystyle
Z\{x[n]\} = X(z)

したがって、差分方程式は以下のように書き下せる。

 \displaystyle
\sum_{k=0}^{N} a_{k} z^{-k} Y(z) = \sum_{k=0}^{M} b_{k} z^{-k} X(z)

さらに、 Y(z) について解く。

 \displaystyle
Y(z) = \frac{\sum_{k=0}^{M} b_{k} z^{-k}} {\sum_{k=0}^{N} a_{k} z^{-k}} X(z)

ここで、

 \displaystyle
H(z) = \frac{\sum_{k=0}^{M} b_{k} z^{-k}} {\sum_{k=0}^{N} a_{k} z^{-k}}

とすると、 Y(z)  X(z)  H(z) 倍したものであり、このときの H(z) システムの伝達関数と呼ぶ。

なお、Z領域は複素領域であることに十分注意すること。

FIRとIIRの比較

FIRとIIRの特徴を比較すると以下の通り。

項目 FIR IIR
次数(タップ数) 多め 少なめ
計算量 次数に比例して高コスト 比較的小さい
周波数応答性 形状が鈍りがち 急峻な形状
安定性 常に安定 発散する可能性あるため
極配置などで評価の必要あり
線形位相特性 あり
理想的には一定に群遅延する
なし

移動平均はFIR?IIR?

いわゆる単純移動平均はFIRフィルタに相当します。
軽くフィルタリングするときは非常に便利ですよね。

結局どっち使うの?

私の場合、安定性と線形位相特性の有無を重視するのがほとんどなので、FIRを選択します。

用途によりますが、波形の形状などを重視しない加速度(センサ)を扱うときはIIRで設計すると思います。

おわりに

信号処理はとにかくノウハウの塊のようなところがあり、完全理解は難しいので、数学的な議論は極力省き、要点だけをざっとまとめました。4

今度はFFTや周波数応答の要点と、さらにプログラム(.py)も公開して整理したいと思っています。
→色々書いています。よろしければ、ディジタル信号処理の記事は以下のリンクを参照してください。もちろん、サンプルプログラムもあります!

DSP カテゴリーの記事一覧 - ari23の研究ノート

参考になれば幸いです(^^)

参考文献

参考文献は以下の通りです。

リンク

技術書



  1. ハンマーで叩いた(インパルス信号)とき、その応答(振動)が有限で終わる(無限に続かない)イメージ?

  2. ハンマーで叩いた(インパルス信号)とき、その応答(振動)が無限に続くイメージ?

  3. 離散時間でのラプラス変換を定義したもの

  4. 私も完全には理解できてないですorz