2017-06-08 25 views
1

簡単なfftを実行し、MATLABとCUDAの結果を比較しようとしました。CUDA fft MATLAB fftと異なる結果

MATLAB:9つの数字1-9

I = [1 2 3 4 5 6 7 8 9]; 

と、このコードを使用する ベクトル:

fft(I) 

結果を与える:

45.0000 + 0.0000i 
    -4.5000 +12.3636i 
    -4.5000 + 5.3629i 
    -4.5000 + 2.5981i 
    -4.5000 + 0.7935i 
    -4.5000 - 0.7935i 
    -4.5000 - 2.5981i 
    -4.5000 - 5.3629i 
    -4.5000 -12.3636i 

そして、CUDAコード:

enter image description here

あなたはCUDAは4ゼロの(セル5-9)を与えることがわかります。このCUDAコードで iは、結果を得ました。

何が欠けていますか?

ありがとうございました!

答えて

3

CUFFT_D2Zは実数から複素数のFFTなので、出力データの先頭のN/2 - 1は冗長です - 変換の下半分の複素共役です(MATLABの出力ではこれを見ることができます中間点について鏡像化された用語の対を比較する)。

これらの「不足している」用語は、必要な場合はそれぞれの対応する用語の複素共役を取るだけで入力できますが、通常これを行うにはあまり意味がありません。

+1

よろしくお願いします。ありがとうポール私はそれを感謝しています。 –

+1

FYIこれはhttp://docs.nvidia.com/cuda/cufft/index.html#fft-typesで文書化されています。「cuFFTはこの冗長性を利用し、エルミートベクトルの前半でのみ動作します」 – Tom

+0

私も同じ質問に答えることができます(2次元アレイでは、結果はちょっと真実ではないと思います)。 https://stackoverflow.com/questions/44436155/cuda-fft-2d-different-results-from-matlab -fft-on-2d –