このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
fftfilt
オーバーラップ加算法を使用した FFT ベースの FIR フィルター処理
構文
説明
は y
= fftfilt(d
,x
)digitalFilter
オブジェクト d
を使用してベクトル x
のデータをフィルター処理します。
例
入力引数
出力引数
詳細
アルゴリズム
fftfilt
では、FIR フィルターに対してのみ機能する周波数領域のフィルター処理手法である、効率的な FFT ベースの "オーバーラップ加算" 法[1]を使用して、連続的な周波数領域のフィルター処理された入力シーケンスのブロックを組み合わせることで、データをフィルター処理します。fftfilt
で実行される演算は、差分方程式により時間領域内で、以下のように表されます。
これと等価な表現は、Z 変換、すなわち "周波数領域" 表現で、以下のように表されます。
fftfilt
は fft
を使用してオーバーラップ加算法を実装します。fftfilt
は、入力シーケンス x
を長さ L のデータ ブロックに分割します。このとき、L はフィルター長 N よりも長くなければなりません。
さらに、以下の操作により、フィルター b
で各ブロックを畳み込みます。
y = ifft(fft(x(i:i+L-1),nfft).*fft(b,nfft));
ここで、nfft
は FFT の長さです。fftfilt
は、連続的な出力セクションを n-1
点ずつオーバーラップさせ、その和を計算します。ここで、n
はフィルターの長さです。
fftfilt
では、フィルターと信号の FFT 長 n
を指定するかどうかによって、さまざまな方法で主要パラメーターの L
と nfft
が選択されます。FFT の長さを決定する n
の値を指定しない場合は、fftfilt
によってはこれらの主要パラメーターが自動的に選択されます。
length(x)
がlength(b)
より大きい場合、fftfilt
では、ブロック数と FFT ごとのフロップ数を乗算した結果が最小になる値が選択されます。length(b)
がlength(x)
に等しいまたは大きい場合、fftfilt
では、以下の長さの単一 FFT が使用されます。2^nextpow2(length(b) + length(x) - 1)
これは以下を計算します。
y = ifft(fft(B,nfft).*fft(X,nfft))
n
に値を指定すると、fftfilt
では FFT の長さ nfft
に 2^nextpow2(n)
、データ ブロック長に nfft
- length(b)
+ 1
が選択されます。n
が length(b)
未満の場合、fftfilt
では n
に length(b)
が設定されます。
参照
[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