3

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

4

2 回答 2

3

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

在你不需要做任何演员complex.h之前尝试包括。fftw3.h

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

于 2011-05-19T19:52:34.120 回答
1

FFTW 默认使用双精度浮点数。最简单的解决方法是更改​​ to 的所有float实例double。但是,如果您想继续使用内存或其他原因,那么您应该使用此处complex float概述的单精度 fftw 。您应该将所有 fftw 函数中的小写字母更改为. 例如变成. 在编译时,您应该链接到而不是.fftwfftwffftw_planfftwf_planfftw3ffftw3

于 2012-04-30T19:47:53.250 回答