2011-04-03 109 views
0

我學習的NVIDIA CUDA SDK的convolutionFFT2D例子後面的代碼,但我沒有得到這條線的點:CUDA cufftPlan2d計劃規模的問題

cufftPlan2d(&fftPlan, fftH, fftW/2, CUFFT_C2C); 

顯然,這初始化一個複雜的平面要運行FFT,但我沒有看到將平面寬度除以2的點。

準確地說:fftH和fftW是imageX + kernelX + 1和imageY + kernelY +的四捨五入值。 1維(僅出於速度原因)。我知道,在頻域,你通常有積極的成分,相同頻率的對稱負成分..但是這聽起來像是切掉我的圖像數據的一半..

有人可以解釋這對我好一點?我從來沒有使用FFT(我只知道一個傅立葉變換背後的理論)

回答

1

當您執行真正複雜的FFT一半的頻域數據是冗餘的,由於對稱性。但這僅僅是2D FFT的一個軸上的情況。您可以將2D FFT視爲兩個1D FFT操作,第一個操作在所有行上,對於實際值的圖像,這會給您複雜的行值。在第二階段,你申請一個一維FFT,以每列,但由於該行值現在是複雜的,這將是一個複雜的複雜FFT在輸出中沒有冗餘。因此,您只需要橫軸上的寬度/ 2點,但您仍然需要垂直軸上的高度點。