我知道在时域中卷积是两个矩阵之间的一项非常昂贵的操作,您可以在频域中执行此操作,方法是在复数平面中对其进行转换并使用乘法(然后在时域中进行卷积)
无论如何,我不明白在CUDA SDK中如何执行此操作,在其中将数据和内核填充并放入两个缓冲区(m_PaddedKernel和m_PaddedData)中,这应该是加速Cooley-Tuckey方法,然后将函数cufftExecC2C调用为首先将内核(为什么是C2C?从复杂到复杂,为什么不是从真实到复杂?)转换为复杂平面,然后将整个数据转换为同一平面
然后,已定义的内核spProcess2D_kernel进入,看起来像是规范化的,并在频域中执行数据和内核之间的乘法(如何进行两个函数的乘法?我认为它们意味着构成两个函数),然后返回C2C转换(仍然想知道为什么是C2C而不是C2R)
最佳答案
至于为什么可以通过FFT做到这一点,您需要阅读有关convolution theorem的信息。
通常,您的输入数据可能很复杂。这就是为什么使用C2C的原因。