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 回答