高速フーリエ変換 (FFT) の使用は、特にフィルタリングが不可欠なデジタル信号処理の分野で、データ処理のパフォーマンスを向上するユニバーサルな方法です。
たたみ込み定理では、空間ドメインの 2 つの信号のフィルタリングを周波数ドメインの各点乗算として計算できるとしています。周波数ドメイン間のデータ変換は通常、フーリエ変換を使用して行われます。インテル® プロセッサー上で非常に高速に動作するインテル® IPP FFT 関数を使用して、入力信号に有限インパルス応答 (FIR) フィルターを適用できます。配列をゼロでパディングしてデータ配列の長さを次の 2 の累乗に増やした後、順方向の FFT 関数を入力信号と FIR フィルター係数に適用することもできます。この方法で得られたフーリエ係数は、各点乗算されていて、結果は簡単に空間ドメインに変換しなおすことができます。FFT の使用によりパフォーマンスは大幅に向上します。
適用するフィルターが複数の反復処理で同じ場合、1 回計算したフィルター係数を各反復で再利用できます。回転テーブルとビット反転テーブルは、順方向変換および逆方向変換関数で同時に作成されます。次の例は、この種のフィルタリングにおける主演算を示しています。
ippsFFTInitAlloc_R_32f( &pFFTSpec, fftord, IPP_FFT_DIV_INV_BY_N, ippAlgHintNone ); /// perform forward FFT to put source data xx to frequency domain ippsFFTFwd_RToPack_32f( xx, XX, pFFTSpec, 0 ); /// perform forward FFT to put filter coefficients hh to frequency domain ippsFFTFwd_RToPack_32f( hh, HH, pFFTSpec, 0 ); /// point-wise multiplication in freq-domain is convolution ippsMulPack_32f_I( HH, XX, fftlen ); /// perform inverse FFT to get result in time-domain ippsFFTInv_PackToR_32f( XX, yy, pFFTSpec, 0 ); /// free FFT tables ippsFFTFree_R_32f( pFFTSpec );
上記の例におけるゼロは、外部メモリーへのポインターです。これが、パフォーマンスを向上させる別の方法です。 パフォーマンスを大幅に向上させる別の方法として、大規模なサイズのデータ処理に FFT と乗算を使用する方法があります。
インテル® IPP の信号処理 FIR フィルターは FFT を使用して実装されているため、FIR 関数の特別な実装を作成する必要はありません。
© 2007 - 2010 Intel Corporation. 無断での引用、転載を禁じます。