2011-10-19 6 views
1

私は 'complex_to_real'変換をしたい、それはIFFTを意味します。私は後で使うために変換の入力を保存する必要があることに気づきました。そのため、フラグ "dft"のプランに "PRESERVE_INPUT"を追加します。dft_c2r_2dとFFTW_PRESERVE_INPUTの割り当てメモリエラー

コンパイル時に問題が発生したら、「dbgmalloc.c」に移動します。つまり、割り当てメモリの問題であるはずですが、何も変更せずに新しいフラグそれは適切に働いた。

ヒントを教えてもらえますか?

// IFFT (U1,U2 --> u1,u2) 
    //----IFFT----- 
    double *u1 = (double*) malloc(sizeof(double)*N_fft); 
    double *u2 = (double*) malloc(sizeof(double)*N_fft); 
    fftw_plan p3; 
    fftw_plan p4; 

    p3 = fftw_plan_dft_c2r_2d(alto, ancho, U1, u1, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT); 
    p4 = fftw_plan_dft_c2r_2d(alto, ancho, U2, u2, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT); 
    fftw_execute(p3); 
    fftw_execute(p4); 
    fftw_destroy_plan(p3); 
    fftw_destroy_plan(p4); 

よろしく

アントニオ

+0

'malloc'ではなく' fftw_malloc'を使用してください。 –

+0

お返事ありがとうございます。ポインタ 'u1'と 'u2'は出力用です。そのため、mallocを使用しています。これは、fftw_mallocを使用するベクトルU1とU2に対して、 'fftw_preserve_input'を追加するまで動作するためです。 – Antonio

答えて

2

このリンクで見ることができるように、それは多次元実数のDFTのために、このフラグがサポートされていない

http://www.fftw.org/doc/One_002dDimensional-DFTs-of-Real-Data.html

上述したように、 c2r変換は、アウトオブプレイス変換の場合でも入力配列を破壊します。これは、必要に応じてFFTW_PRESERVE_INPUTをフラグに含めることで防止できますが、残念なことにパフォーマンスが低下します。このフラグは、多次元実DFTでは現在サポートされていません(次のセクション)。