Ошибка памяти выделения с dft_c2r_2d & FFTW_PRESERVE_INPUT - PullRequest
1 голос
/ 19 октября 2011

Я хочу сделать преобразование 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 Ответ

2 голосов
/ 20 октября 2011

Как видно по этой ссылке, не поддерживается этот флаг для многомерных реальных ДПФ

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

Как отмечалось выше, преобразование c2r уничтожает свой входной массив даже для преобразований вне места. Это может быть предотвращено, если необходимо, путем включения FFTW_PRESERVE_INPUT в флаги, к сожалению, с некоторыми потерями производительности. Этот флаг также в настоящее время не поддерживается для многомерных реальных ДПФ (следующий раздел).

...