2013-09-11 3 views
1

Я вычислил БПФ массива {1,2,3,4,5,6} с помощью fftw/C++ и онлайн-калькулятора (http://calculator-fx.com/calculator/fast-fourier-transform-calculator-fft/1d-discrete-fourier-transform). И результаты, казалось, были немного разными.fftw и онлайн-калькулятор DFT получают разные результаты

FFTW выход:

0  21.000000  0.000000 
1  -3.000000  5.196152 
2  -3.000000  1.732051 
3  -3.000000  0.000000 
4  0.000000  0.000000 
5  0.000000  0.000000 

Интернет Выход калькулятор:

21 + 0j 
-3 + 5.196152j 
-3 + 1.732051j 
-3 + 0j 
-3 - 1.732051j 
-3 - 5.196152j 

Как показано выше, последние два результата FFTW оказалось равным нулю. Не могу понять, почему. Может ли кто-нибудь помочь мне? Благодарю.

[Изменено] код каст:

int main() 
{ 
    fftw_complex *out; 
    fftw_plan plan; 

    double arr[]={1,2,3,4,5,6}; 
    int n = sizeof(arr)/sizeof(double); 

    out = (fftw_complex*)fftw_malloc (sizeof (fftw_complex) * n); 
    plan = fftw_plan_dft_r2c_1d (n, arr, out, FFTW_ESTIMATE); 
    fftw_execute (plan); 

    for (int i = 0; i < n; i++) 
    { 
     printf (" %3d %12lf %12lf\n", i, out[i][0], out[i][1]); 
    } 

    fftw_free(out); 
    fftw_destroy_plan(plan); 
    return 0; 
} 
+1

Как именно вы вызываете FFTW? Потому что этот результат определенно неверен. –

+0

Привет, мой код прилагается. – babel92

ответ

6

О, вы используете режим r2c (не знаю, почему я не думал об этом раньше). Это только записывает результаты n/2 + 1 из-за симметрии.

Это описание документировано: http://www.fftw.org/doc/One_002dDimensional-DFTs-of-Real-Data.html.

+0

Спасибо большое! Я прочитал эту страницу, но не понял ее. – babel92

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