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

标签 c++ math cuda fft

我知道在时域中,两个矩阵之间的卷积是一项非常昂贵的操作,您可以通过在复平面中转换它们并使用乘法(然后返回时域)在频域中执行它

无论如何,我不明白这是如何在 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/

相关文章:

c++ - Win32_NetworkAdapter 类为 boolean NetEnabled 返回 NULL;

c++ - 如何简化检查一对数字是(1,2)还是(2,1)?

excel - 以有限的速度求解时间加速度

javascript - 转换为数字的问题

cuda - 为什么我的 __device__、__constant__、__shared__ 不支持动态初始化?

c++ - 矩阵 vector 乘法 (cublasDgemv) 返回零

c++ - 如何将 32 位整数转换为 32 位 float 以便保留顺序?

java - 为什么这个二次方程不会返回负数?

c++ - C++ 中的 3d 卷积

c++ - 使用 stringstream 提取特定标记