cufftExecC2C incorrect for certain FFT sizes

我发现cufftExecC2C的结果在NX和NY不相同的情况下,计算结果不对,按道理说不应该出现这样的情况。
各位不知道有没有遇到相同的情况?

#define NX 64
#define NY 64

cufftHandle plan;
cufftComplex data1, data2;
cudaMalloc((void
)&data1, sizeof(cufftComplex)NXNYNZ);
cudaMalloc((void**)&data2, sizeof(cufftComplex)NXNY
NZ);
/* Create a 3D FFT plan. */
cufftPlan2d(&plan, NX, NY, CUFFT_C2C);

/* Transform the first signal in place. */
cufftExecC2C(plan, data1, data1, CUFFT_FORWARD);

/* Transform the second signal using the same plan. */
cufftExecC2C(plan, data2, data2, CUFFT_FORWARD);

/* Destroy the cuFFT plan. */
cufftDestroy(plan);
cudaFree(data1); cudaFree(data2);

类似以上的代码。

LZ您好:

目测您的用法似乎没有问题。(除了您注释中写的是3D,实际建立的是2D)

如果当NX和NY不相等的时候,结果有误,那么我贸然猜测有可能是库函数的参数的含义和您约定的不一致造成的,您可以尝试将NX和NY的值交换,看看是不是这里的问题。

其他暂时没有意见提供。

祝您好运~

自己结贴,我仔细看了cufft的文档 发现cufftPlan2d(&plan, NX, NY, CUFFT_C2C);的NX代表图像高度,NY代表图像宽度。写反了。

LZ您好:

CUFFT手册中是这样表示的:nx是number of rows,ny是number of columns。
这样表示可能是与矩阵理论中,3*2的矩阵表示3行2列的矩阵,这种说法相一致。

您的问题最终解决了么?

如已解决,请简要总结并反馈结果,以便其他网友参考。

祝您好运~

已经解决了,如您所说的:nx是行的数量,是高度Height,ny是列的数量,是宽度Width。一般在图像处理和矩阵理论中nx是宽度,ny是高度,这是和手册相反的。 请大家注意就行了。

感谢LZ回馈经验以造福论坛~