DFTによるフィルタ計算

[] [] []


フィルタ計算はx(n)h(n)DFTしてかけ算してからIDFTで戻すことにより計算できる。

ここでh(n)x(n)は周期関数と定義する。

t軸での畳み込み積分はω軸ではかけ算になった(フィルタ(畳み込み)と窓(かけ算))

同様に、離散信号の畳み込みもDFTのかけ算を使って計算できる

ただしDFTは周期関数を前提としているので、

でなければならない。

長いフィルタの計算(畳み込み)は上記のDFTを使った方法の方が速いことがある

今、入力x(n)の長さをN、フィルタ h(n)の長さをL(N)とすると、出力y(n)の長さはNで、このうち最初の(L-2)点は過渡応答になる。

したがってy(n)DFTを使って計算するにはN点のDFTをすればよい。このときh(n)をゼロ詰めして長さNそろえておく。

 

FFTのアルゴリズムを使えば、N点のDFTは、(N/2)log2N回の複素乗算で計算でき、複素乗算は実数の乗算4回だから、結局、フィルタ計算するには、

xのFFT:               2Nlog2N

Hの乗算:             4N

(H*X)IFFT      2Nlog2N

で合計4N(1+log2N)回の乗算が必要になる。一方、フィルタを式のとおりに積和計算すると乗算はNL回になる。

したがって、4(1+log2N)Lとなるぐらいフィルタの長さLが長いときは、FFTを使って計算した方が乗算回数が少なくたぶん速い

◇◇

h(n)だけ平行移動したh(n-)に置き換えると、出力y(n)

と、同じだけ平行移動する。したがって、h(n) (L-2)点だけ左に平行移動すれば、y(n)の過渡応答を除いた部分を計算結果の先頭に持ってくることができる。

◇◇◇

x(n)FFT点数より長いときは、分割して計算すればよい。


[] [] []