この学習項目では「FIR (Finite Impulse Response: 有限インパルス応答) フィルタ」について学びます。
FIRフィルタの定義は以下の通りです。

定義: FIR (Finite Impulse Response: 有限インパルス応答) フィルタ

正整数 $\textrm{L}$ を有限の数とした時、インパルス応答 $h[i]$ が

\[ h[i] = \{ h[0], h[1], \cdots, h[\textrm{L}-1], 0, 0, 0, \cdots \} \]

(ただし $h[\textrm{L}-1] \ne 0$ )となるフィルタのことを FIR フィルタと呼ぶ。

$\textrm{L}$ を「FIRフィルタ長」または「FIRフィルタ次数」または「タップ数」と言う。

$h[0]$ 〜 $h[\textrm{L}-1]$ を「FIRフィルタ係数」または「タップ係数」と言う。

FIRフィルタの伝達関数は$h[i]$をZ変換することで以下の式で与えられる。

\begin{align*} \textrm{H}(z) & = \sum_{i=0}^{\infty} \{ h[i] \cdot z^{-i} \} \\ & = \sum_{i=0}^{\textrm{L}-1} \{ h[i] \cdot z^{-i} \} \\ & = h[0] + h[1] \cdot z^{-1} + h[2] \cdot z^{-2} + \cdots + h[\textrm{L}-1] \cdot z^{-(\textrm{L}-1)} \end{align*}

このFIR フィルタの場合は畳み込み演算の $\sum$ の範囲が有限個内に収まりますのでコンピュータを使って出力値を計算することが可能です。

FIR フィルタの畳み込み演算 \begin{align*} y[i] & = \sum_{n=0}^{\textrm{L}-1} \{ h[n] \cdot x[i-n] \} \} \\ & = h[0]\cdot x[i] + h[1] \cdot x[i-1] + h[2] \cdot x[i-2] + \cdots + h[\textrm{L}-1] \cdot x[i-(\textrm{L}-1)] \end{align*}

なおFIRフィルタの伝達関数の極は $z=0$ のみで Z 平面上の単位円の内側にありますので、フィルタの安定性のところで述べたように

「FIRフィルタは常に安定」

ということが分かります。

また、FIR フィルタのブロック図はこちらで示した例を応用して次の様になります。

定義: FIR フィルタのブロック図

 

よって FIRフィルタのプログラム表現は次の通りになります。

FIR フィルタのプログラム表現 (C言語):

x[i] は時刻 i が負の時は 0 とする

y[i] = 0 ;
for( int n = 0; n < L; ++n ) y[i] += h[n] * x[i-n] ;