【发布时间】:2011-08-09 00:51:15
【问题描述】:
我目前正在使用以下matlab函数:
function out = fft_2d(in)
out = fftshift(fft2(ifftshift(in)));
据我了解,这需要一个“自然顺序”输入,并“交换”它以传递给 fft2,然后使用 fftshift 再次移动 fft2 的结果以返回自然顺序输出。这是正确的吗?
我正在将此代码移植到 C,并且我想使用 CUFFT 来执行此操作。根据文档,我想我会使用:
/* Create a 2D FFT plan. */
cufftPlan2d(&plan, NX, NY, CUFFT_C2R);
/* Use the CUFFT plan to transform the signal out of place. */
cufftExecC2R(plan, idata, odata);
但是我必须对来自 cufftExecC2R 的数据做什么样的转变?此外,odata 是否需要是 NX*NY 连续数据块?它必须按列或行主要顺序吗?我猜是行,因为这就是 C。
谢谢
【问题讨论】:
-
我不确定 ifftshift 做了什么以及为什么需要它,但 cuda fft 部分看起来不错。
-
根据matlab的帮助撤消fftshift的结果
标签: c++ matlab cuda signal-processing fft