周波数領域フィルターの実装
時間領域と周波数領域の間には二重性があるため、いずれかの領域で任意の操作を実行することができます。通常、特定の演算に対してはいずれか一方の領域の方が便利ですが、同じ演算は常にもう一方の領域でも実行できます。
一般的な IIR フィルター処理を周波数領域で行うには、入力シーケンスの離散フーリエ変換 (DFT) とフィルターの DFT の商を乗算します。
n = length(x); y = ifft(fft(x).*fft(b,n)./fft(a,n));
これにより、関数 filter と同じ結果が算出されますが、開始時の過渡状態 (エッジ効果) が異なります。長いシーケンスでは、フィルター係数に対して多くのゼロをパディングした FFT 操作が行われ、FFT アルゴリズムは n の数が増加するにつれて効率が下がるため、この計算は非常に非効率です。
一方 FIR フィルターでは、長いシーケンスを短く分割して、効率的に計算できる FFT 長にすることができます。その関数は以下を実行します。
y = fftfilt(b,x)
オーバーラップ加算法を使用して、長いシーケンスが複数の中程度の長さの FFT にフィルターされます。出力は、filter(b,1,x) と同様です。