C++ 卷积与FFT,这是如何工作的?

C++ 卷积与FFT,这是如何工作的?,c++,math,cuda,fft,C++,Math,Cuda,Fft,我知道在时域中,卷积是两个矩阵之间非常昂贵的运算,你可以通过在复平面上变换它们并使用乘法(然后回到时域)在频域中执行卷积 无论如何,我不明白在CUDA SDK中是如何执行的,数据和内核被填充并放入两个缓冲区(m_PaddedKernel和m_PaddedData),这应该是为了加速Cooley Tuckey方法,然后调用函数cufftExecC2C来首先转换内核(为什么C2C?复杂到复杂,为什么不是实到复杂?)然后将整个数据放入同一平面 然后,定义的内核spProcess2D_内核开始正常化,并

我知道在时域中,卷积是两个矩阵之间非常昂贵的运算,你可以通过在复平面上变换它们并使用乘法(然后回到时域)在频域中执行卷积

无论如何,我不明白在CUDA SDK中是如何执行的,数据和内核被填充并放入两个缓冲区(m_PaddedKernel和m_PaddedData),这应该是为了加速Cooley Tuckey方法,然后调用函数cufftExecC2C来首先转换内核(为什么C2C?复杂到复杂,为什么不是实到复杂?)然后将整个数据放入同一平面


然后,定义的内核spProcess2D_内核开始正常化,并在频域中执行数据和内核之间的乘法(如何进行两个函数的乘法?我认为它们意味着组合两个函数),然后返回C2C转换(仍在纳闷为什么是C2C而不是C2R)

至于为什么可以用FFT实现这一点,您需要阅读有关FFT的内容


一般来说,您的输入数据可能很复杂。这就是使用C2C的原因。

您指的是
simplecft.cu
示例吗?谢谢,但我不是在研究是否可以做到这一点,我同意这一点。但我不知道它是如何以这种方式实现的。我不确定FFT是如何在CUDA SDK中实现的,我读了它,但无法理解它