1

'complex_to_real'変換を実行したい、つまりIFFTを実行したい。後で使用するために変換の入力を保持する必要があることに気付いたので、「dft」の計画にフラグ「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); 

よろしく

アントニオ

4

1 に答える 1

2

このリンクでわかるように、多次元の実際のDFTではこのフラグはサポートされていません

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

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

于 2011-10-20T07:53:51.130 に答える