c中的complex.h的fftw接口

时间:2011-05-19 19:21:27

标签: c fftw complex-numbers

我正在使用此代码创建一个数据类型复杂的二维数组(来自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。 谢谢。

2 个答案:

答案 0 :(得分:3)

fftw_complex相当于complex double,您正在使用complex float。这可能是段错误的根源。

complex.h之前尝试包含fftw3.h,您不需要进行任何演员表。

http://www.fftw.org/fftw3_doc/Complex-numbers.html

答案 1 :(得分:1)

默认情况下,FFTW默认使用双精度浮点数。最简单的解决方法是将float的所有实例更改为double。但是,如果您想继续使用complex float作为内存或其他原因,那么您应该按照here概述使用单精度fftw。您应该在所有fftw函数中更改小写fftw并将类型名称更改为fftwf。例如,fftw_plan变为fftwf_plan。在编译时,您应该链接到fftw3f而不是fftw3