我知道在时域中,两个矩阵之间的卷积是一项非常昂贵的操作,您可以通过在复平面中转换它们并使用乘法(然后返回时域)在频域中执行它
无论如何,我不明白这是如何在 CUDA SDK 中执行的,其中数据和内核被填充并放入两个缓冲区(m_PaddedKernel 和 m_PaddedData),这应该是为了加速 Cooley-Tuckey 方法,然后是函数 cufftExecC2C被调用首先将内核(为什么是 C2C?复杂到复杂,为什么不是实到复杂?)转换为复平面,然后将整个数据转换为同一平面
然后定义的内核 spProcess2D_kernel 开始运行,看起来像是规范化并在频域中执行数据和内核之间的乘法(如何进行两个函数的乘法?我认为它们的意思是组合两个函数)并返回 C2C转换(仍然想知道为什么是 C2C 而不是 C2R)
最佳答案
至于为什么这可以用 FFT 完成,您需要阅读 convolution theorem .
通常,您的输入数据可能很复杂。这就是使用 C2C 的原因。
关于c++ - 与 FFT 的卷积,这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727686/