2013-02-08 36 views
2

我有FastFourier ...(FFTW3)的100×100樣品fttw3創建2D計劃部分失敗

數據>使用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; 

//絡合物具有根據 // 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); 

這正是如此相同的代碼爲N/2 + 1分配:http://werner.yellowcouch.org/Papers/subimg/index.html

我現在的問題是forwardA和forwardB指向0x0,而backwardA和backwardB是有效的。

關於爲什麼發生這種情況的任何想法?

+0

好的...我發現了這個問題。 r2c功能只有一個可能的方向。顯然,圖書館不喜歡附加信息:D SOLUTION:FTW_FORWARD作爲標誌是沒有必要的 – lyk 2013-02-08 18:30:21

回答

0

試試這個:

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

,應該工作。