我正在尝试使用 CUFFT 进行二维实数到复数 FFT。
我意识到我会这样做并得到 W/2+1 复数值(W 是我的 H*W 矩阵的“宽度”)。
问题是 - 如果我想在转换后构建该矩阵的完整 H*W 版本怎么办 - 我如何将一些值从 H*(w/2+1) 结果矩阵复制回一个全尺寸矩阵,用于在正确的位置获得两个部分和 DC 值
谢谢
最佳答案
我不熟悉 CUDA,所以在阅读我的回复时请考虑到这一点。不过,我总体上熟悉 FFT 和信号处理。
这听起来像是您从一个 H(行)x W(列)矩阵开始,并且您正在做一个 2D FFT,它基本上在每一行上做一个 FFT,最后您得到一个 H x W/2 +1 矩阵。 W 范围的 FFT 返回 W 个值,但 CUDA 函数只返回 W/2+1,因为实际数据在频域中是偶数,所以负频率数据是冗余的。
因此,如果您想重现缺失的 W/2-1 点,只需镜像正频率即可。例如,如果其中一行如下所示:
索引数据
0 12 + 我
1 5 + 2i
2 6
3 2 - 3i
...
索引 0 是您的直流电源,索引 1 是最低的正频率仓,依此类推。因此,您将使最接近 DC 的负频率仓为 5+2i,下一个最接近的为 6,依此类推。您将这些值放在数组中的什么位置取决于您。我会按照 Matlab 的方式来做,在正频率数据之后使用负频率数据。
我希望这是有道理的。
关于c++ - 如何在 Cuda 中从 2D 实数到复数 FFT 获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872118/