dft_c2r_2d&的分配内存错误FFTW_PRESERVE_INPUT

时间:2011-10-19 09:46:35

标签: memory-management malloc fft allocation fftw

我想做一个'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); 

此致

安东尼奥

1 个答案:

答案 0 :(得分:2)

从这个链接可以看出,多维真实DFT不支持这个标志

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

如上所述,即使对于异地变换,c2r变换也会破坏其输入数组。如果需要,可以通过在标志中包含FFTW_PRESERVE_INPUT来防止这种情况,遗憾的是性能上有所牺牲。多维真实DFT目前也不支持此标志(下一节)。