2013-02-25 56 views
1

首先我对我的英语不好,我很抱歉...FFTW3落后对我不起作用

所以这里是我的问题。我用一个简单的输入信号测试了FFTW3库,这是一个连续的输入信号。然后我计算FFT并得到好的结果:只是一个频率为0的信号,其他的都是0.

然后我想用反向FFT得到我的输入,但它不起作用。这是我的代码:

fftw_complex* imgIn; 
fftw_complex* imgIn2; 
fftw_complex* imgOut; 
fftw_plan plan; 

int taille = 100; 
int i; 

//Allocation des entrées et sorties 
imgIn = fftw_malloc(sizeof(fftw_complex)*taille); 
imgIn2 = fftw_malloc(sizeof(fftw_complex)*taille); 
imgOut = fftw_malloc(sizeof(fftw_complex)*taille); 

//Remplissage des données d'entrées pour le calcul de la FFT 
for(i = 0 ; i < taille ; i++){ 
    imgIn[i][0] = 1.0; 
    imgIn[i][1] = 0.0; 
} 

//Plan d'execution 
plan = fftw_plan_dft_2d(taille/10, taille/10, imgIn, imgOut, FFTW_FORWARD, FFTW_ESTIMATE); 

//Execute la FFT 
fftw_execute(plan); 

//Inverse 
plan = fftw_plan_dft_2d(taille/10, taille/10, imgOut, imgIn2, FFTW_BACKWARD, FFTW_ESTIMATE); 

for(i = 0 ; i < taille ; i++){ 
    printf("%d : %g\n%d : %g\n", i, imgIn2[i][0], i, imgIn2[i][1]); 
} 

正如你所看到的,我只是尝试执行正常的FFT,然后将其反转。问题是,我的输出imgIn2只是满0,而不是1和0 ...

那么,我的代码有什么问题?

谢谢:)

+1

你还没有执行第二个计划? – 2013-02-25 20:44:43

+0

另请注意,在FFTW中,前进和后退通常会使您得到缩放结果,因为一些归一化被遗漏,可能需要作为后期变换步骤完成。 FFTW文档更深入地解释了...... – twalberg 2013-02-25 20:51:46

+0

@OliCharlesworth:如果您不会将其作为答案发布,我会发布它以“窃取”您的声誉并教您上一堂课。 :-) – 2013-02-25 21:24:01

回答

2

您的代码不执行第二个计划。