用FFT进行卷积,这是如何工作的?

5
我知道在时间域中,两个矩阵之间的卷积运算是非常昂贵的。你可以通过将它们转换到复平面中并使用乘法(然后再回到时间域)在频域中执行它。
不过我不明白在CUDA SDK中如何执行这个操作,其中数据和内核被填充并放入两个缓冲区(m_PaddedKernel和m_PaddedData),这应该是为了加速Cooley-Tuckey方法,然后调用cufftExecC2C函数来首先将内核(为什么是C2C,而不是R2C?)转换成复平面,然后再将整个数据转换到同一平面上。
接着,定义的kernel spProcess2D_kernel开始工作,似乎对数据进行归一化,并在频域中执行数据和内核之间的乘法(如何进行两个函数的乘法?我认为他们是指组合这两个函数),然后再通过C2C变换回到时间域(我还在想为什么是C2C而不是C2R)。

你是指 simpleCUFFT.cu 的例子吗? - Oliver Charlesworth
1个回答

2

关于为什么可以使用FFT进行此操作,您需要阅读有关卷积定理的内容。

一般来说,您的输入数据可能是复杂的。因此需要使用C2C。


1
谢谢您,但我不是在寻找是否可以完成这项任务,我同意这一点。但我不知道它是如何以那种方式实现的。 - Marco A.
我不确定CUDA SDK中FFT是如何实现的,我已经阅读了它但无法理解。 - Marco A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接