2

FastFourierに問題があります...(FFTW3)

100x100サンプルのデータ>FFTW3を使用して複素周波数領域に変換され、後で逆変換を使用したい

将来計画:

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に従ってn/2+1を割り当てる必要があります

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を指しているのに対し、backwardAとbackwardBは有効であるということです。

なぜこれが起こるのかについて何か考えはありますか?

4

1 に答える 1

0

これを試して:

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

それはうまくいくはずです。

于 2013-02-23T00:08:24.583 に答える