fftfilt
オーバーラップ加算法を使用した FFT ベースの FIR フィルター処理
説明
例
入力引数
出力引数
詳細
アルゴリズム
fftfilt では、FIR フィルターに対してのみ機能する周波数領域のフィルター処理手法である、効率的な FFT ベースの "オーバーラップ加算" 法[1]を使用して、連続的な周波数領域のフィルター処理された入力シーケンスのブロックを組み合わせることで、データをフィルター処理します。
Nx 個の要素をもつ入力信号ベクトル x と N 個の要素をもつフィルター ベクトル b があると仮定します。ここで、b = [b1 b2 ⋯ bN] です。fftfilt で実行される演算は、差分方程式により時間領域内で、以下のように表されます。
これと等価な表現は、Z 変換、すなわち "周波数領域" 表現で、以下のように表されます。
fftfilt 関数は、fft を使用してオーバーラップ加算法を実装します。fftfilt は、入力シーケンス x を長さが L の k 個のデータ ブロックに分割します。ここで、L はフィルターの長さ N よりも大きくなければなりません。ここで、k = ⌈Nx/L⌉ および ⌈⌉ の記号は天井関数を表します。
関数は、次を使用して各ブロックをフィルター b で畳み込みます。
y = ifft(fft(x(i:i+L-1),nfft).*fft(b,nfft));
ここで、i = 1, L+1, 2L+1, ⋯ と nfft は FFT 長です。fftfilt は、連続する出力セクションを N–1 点ずつオーバーラップさせ、その和を計算します。
fftfilt は、フィルターと信号の FFT 長 nfft が指定されているかどうかに応じ、異なる方法で主要パラメーターの L と nfft を選択します。
nfft(これにより FFT 長が決まる) の値が指定されていない場合、fftfiltは次の主要パラメーターを自動的に選択します。length(x)がlength(b)より大きい場合、fftfiltでは、ブロック数と FFT ごとのフロップ数を乗算した結果が最小になる値が選択されます。length(b)がlength(x)以上の場合、fftfiltは、長さ2^nextpow2(length(b) + length(x) - 1)の単一 FFT を使用します。これらの仮定により、
yが次のように得られます。y = ifft(fft(b,nfft).*fft(x,nfft))
nfftに値が指定されている場合、fftfiltは、FFT 長として2^nextpow2(nfft)を、データ ブロック長としてnfft-length(b)+1を選択します。nfftがlength(b)未満の場合、fftfiltは、2^nextpow(length(b))の FFT 長を選択します。
参照
[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.
拡張機能
バージョン履歴
R2006a より前に導入
参考
conv | designfilt | digitalFilter | filter | filtfilt
