2011-03-09 101 views
6

我寫了一個簡單的測試程序,在那裏我正在做Complex到Complex FT,我只是生成了一些數據1..50,並將它插入數組中每個索引的實部和虛部。CUFFT的比例因子

當我做這樣的IFFT(FFT(A))的操作= A

測試出來,我正在爲每個庫不同的結果。

FFTW,我有LEN(A)的輸出劃分找回原來的一個

但是,這樣做前進然後反向FFT與CUFFT,它看起來像我有(SQRT分(2 )* 50)返回到原始數據。

這個額外的平方根因子來自哪裏?

根據CUFFT文檔: CUFFT執行未歸一化的FFT;也就是說,對輸入數據組執行正向FFT運算,然後對得到的集合 集合進行逆FFT,得到的數據等於輸入數據集的數量,該數據按比例縮小了 元素的數量。按比例縮放數據集大小倒數的變換,以供用戶按照適合的方式執行。

由於提前

+0

它是一維FFT函數嗎? – fabrizioM 2011-03-16 00:03:26

+0

你能提一下你正在執行的變換嗎? sqrt(2)的名稱是否具有直接意義。 – 2011-04-22 06:37:36

+0

這聽起來不對。 CUDA文檔明確指出它應該按照數組長度進行縮放。你確定你正確計算長度嗎? – Mikola 2011-06-16 07:57:46

回答

0

這最終成爲計算複數的絕對值的方式的問題。在std :: complex庫中,它正在計算矢量的距離。

6

CUFFT具有相同的行爲FFTW,它計算非標準化的FFT。 IFFT(FFT(A))=n A其中n是矢量的長度。長度爲n的採樣數(不是浮點數或字節)。 FFTW和CUFFT與C2R和R2C之間存在一些填充差異,可能導致簡單的比較,但C2C不適用。我會仔細檢查您的數據設置和長度計算,並在FFTW和CUFFT中驗證您的計劃。