我正在使用此代码创建一个数据类型复杂的二维数组(来自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。 谢谢。
答案 0 :(得分:3)
fftw_complex
相当于complex double
,您正在使用complex float
。这可能是段错误的根源。
在complex.h
之前尝试包含fftw3.h
,您不需要进行任何演员表。
答案 1 :(得分:1)
默认情况下,FFTW默认使用双精度浮点数。最简单的解决方法是将float
的所有实例更改为double
。但是,如果您想继续使用complex float
作为内存或其他原因,那么您应该按照here概述使用单精度fftw。您应该在所有fftw函数中更改小写fftw
并将类型名称更改为fftwf
。例如,fftw_plan
变为fftwf_plan
。在编译时,您应该链接到fftw3f
而不是fftw3
。