3

このコードを使用して、複雑なデータ型を持つ 2D 配列を作成しています (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います。それがおそらくsegfaultの原因です。

キャストを行う必要がなくなるcomplex.h前に、含めてみてください。fftw3.h

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

于 2011-05-19T19:52:34.120 に答える
1

FFTW はデフォルトで倍精度浮動小数点数を使用します。最も簡単な修正は、 のすべてのインスタンスを に変更するfloatことdoubleです。ただし、メモリやその他の理由で引き続き使用したい場合は、ここでcomplex float概説されているように単精度 fftw を使用する必要があります。すべての fftw 関数と型名の小文字を に変更する必要があります。例えば​​になります。コンパイル時には、ではなく にリンクする必要があります。fftwfftwffftw_planfftwf_planfftw3ffftw3

于 2012-04-30T19:47:53.250 に答える