2013-02-25 27 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

您的代碼不執行第二個計劃。