【发布时间】:2011-05-19 19:21:26
【问题描述】:
我正在使用此代码创建一个具有复杂数据类型的二维数组(来自 c 中的 complex.h)。然后我想“就地”找到那个数组的 fft。但是它给出了分段错误,我担心这是由于指针的不正确铸造造成的。我们如何为 fftw 使用复杂数据类型?
//a is a 2d array of size blockSize*NO_INPUTS
complex float* a=(complex float*)malloc(sizeof(complex float)*NO_INPUTS*blockSize);
//****** Put data in a*******//
//blah//
//blah//
//a has data now//
fftw_plan p;
p=fftw_plan_dft_2d(blockSize,NO_INPUTS,(fftw_complex*)a,(fftw_complex*)a,FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
请注意,我不想使用 fftw_complex 或 fftw_malloc。 谢谢。
【问题讨论】:
-
自从我使用 FFTW 以来已经有一段时间了,但我似乎记得如果定义了 complex,则 fftw_complex 默认为 complex。关于fftw_malloc,你为什么不想用呢?这些算法高度依赖于字节对齐的内存。
-
除了上面@Jim 的优点之外,我认为对于就地 2D FFT 的 2D 数组的大小还有一些额外的限制 - 我相信每行需要一些额外的存储空间(一个额外的元素?) - FFTW 手册中有一节关于此。
标签: c fftw complex-numbers