2011-04-20 89 views
5

我知道在時域卷積是兩個矩陣之間相當昂貴的操作,你可以通過在複平面中變換它們並使用乘法(然後返回到時域)來在頻域中執行它操作用FFT進行卷積,這是如何工作的?

無論如何我不明白這是如何在CUDA SDK中執行的,其中數據和內核被填充並放入兩個緩衝區(m_PaddedKernel和m_PaddedData),這應該是加速Cooley-Tuckey方法,然後調用函數cufftExecC2C來首先轉換內核(以及爲什麼C2C?複雜到複雜,爲什麼不是真正的複雜?)到複雜平面,然後將整個數據放入同一個平面

定義的內核spProcess2D_kernel然後在d似乎正常化並在頻域中執行數據和內核之間的乘法(如何執行兩個函數的乘法?我認爲他們的意思是組成這兩個功能),並回來與C2C轉換(仍然想知道爲什麼C2C而不是C2R)

+0

您是否指'simpleCUFFT.cu'示例? – 2011-04-20 09:57:56

+0

是的,先生,確切 – 2011-04-20 18:09:03

回答

2

至於爲什麼這可以用FFT完成,您需要閱讀有關convolution theorem

通常,您的輸入數據可能很複雜。所以這就是使用C2C的原因。

+1

謝謝,但我不是在尋找這是否可以完成,我同意這一點。但我不知道它是如何實現的 – 2011-04-20 18:09:56

+0

@Paul:然後我不確定你的問題是什麼... – 2011-04-22 11:37:39

+0

我不確定FFT是如何在CUDA SDK中實現的,但我閱讀它但無法理解它 – 2011-04-25 21:24:51