2013-02-08 1 views
2

У меня есть проблема с FastFourier ... (FFTW3)fttw3 создать 2D план частично терпит неудачу

данные 100х100 образцов> преобразованные в комплексной частотной области с использованием FFTW3 и позже я хочу использовать backtransform

перспективный план:

fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1, 
           double *in, fftw_complex *out, 
           unsigned flags); 

обратное выглядит точно так же, как это

fftw_plan fftw_plan_dft_c2r_2d(int n0, int n1, 
           fftw_complex *in, double *out, 
           unsigned flags); 

Это мой код:

int ncols = 100; // a 100x100 picture 
int nrows = 100; 
int nccols = ncols/2+1; 

// комплекс должен быть выделен п/2 + 1 в соответствии с // http://www.fftw.org/doc/Multi_002dDimensional-DFTs-of-Real-Data.html

double * Aa = (double*)fftw_malloc(sizeof(double)*ncols*nrows); 
fftw_complex * Af = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nccols*nrows); 
double * Ba = (double*)fftw_malloc(sizeof(double)*ncols*nrows); 
fftw_complex * Bf = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nccols*nrows); 
double * Bc = (double*)fftw_malloc(sizeof(double)*ncols*nrows); 

fftw_plan forwardA = fftw_plan_dft_r2c_2d(nrows,ncols,Aa,Af,FFTW_FORWARD | FFTW_ESTIMATE); 
fftw_plan backwardA = fftw_plan_dft_c2r_2d(nrows,ncols,Af,Aa,FFTW_BACKWARD | FFTW_ESTIMATE); 
fftw_plan forwardB = fftw_plan_dft_r2c_2d(nrows,ncols,Ba,Bf,FFTW_FORWARD | FFTW_ESTIMATE); 
fftw_plan backwardB = fftw_plan_dft_c2r_2d(nrows,ncols,Bf,Bc,FFTW_BACKWARD | FFTW_ESTIMATE); 

Это точно такой же код, как здесь: http://werner.yellowcouch.org/Papers/subimg/index.html

Моя проблема теперь в том, что forwardA и forwardB указывают на 0x0, тогда как назад A и назад B действительны.

любая идея о том, почему это происходит?

+0

ОК ... Я нашел проблему. функции r2c имеют только одно возможное направление. По-видимому, библиотеке не нравится дополнительная информация: D РЕШЕНИЕ: FTW_FORWARD, поскольку флаг не нужен – lyk

ответ

0

Попробуйте это:

fftw_plan forwardA = fftw_plan_dft_r2c_2d(nrows,ncols,Aa,Af,FFTW_ESTIMATE); 

, который должен работать.

Смежные вопросы