2016-05-03 7 views
0

Все, что я хочу сделать, это оценить преобразование Фурье гауссова (как тест, конечно), но я получаю то, что выглядит как двузначная функция, как видно из графика ниже. Когда вы внимательно смотрите на хвосты гаусса, вы можете видеть, что возвращаемые значения FFT действительно колеблются между положительными и отрицательными, делая DFT похожим «двузначным». Почему это происходит? Есть ли способ исправить это (без разметки сложного модуля, конечно)?GSL Fast-Fourier Transform - двухзначный гауссовый?

#include <gsl/gsl_fft_complex.h> 
#include <gsl/gsl_errno.h> 
#include <fstream> 
#include <iostream> 
#include <iomanip> 

#define REAL(z,i) ((z)[2*(i)]) //complex arrays stored as [Re(z0),Im(z0),Re(z1),Im(z1),...] 
#define IMAG(z,i) ((z)[2*(i)+1]) 
#define MODU(z,i) ((z)[2*(i)])*((z)[2*(i)])+((z)[2*(i)+1])*((z)[2*(i)+1]) 
#define PI 3.14159265359 

using namespace std; 

int main(){ 

    int n = pow(2,9); 
    double data[2*n]; 
    double N = (double) n; 

    ofstream file_out("out.txt"); 

    double xmin=-10.; 
    double xmax=10.; 
    double dx=(xmax-xmin)/N; 
    double x=xmin; 

    for (int i=0; i<n; ++i){ 
     REAL(data,i)=exp(-100.*x*x); 
     IMAG(data,i)=0.; 
     x+=dx; 
    } 

    gsl_fft_complex_radix2_forward(data, 1, n); 

    for (int i=0; i<n; ++i){ 
     file_out<<(i-n/2)<<" "<<REAL(data,((i+n/2)%n))<<'\n'; 
    } 

    file_out.close(); 
} 

enter image description here

+0

Вы продолжаете строить реальную часть, когда она действительно не имеет физического смысла. Нарисуйте абсолютное значение, и вы в порядке. – roadrunner66

ответ

1

Вы черчения только реальный компонент, например, четный или косинусный компонент. Обратите внимание, что косинусоидальная волна целочисленной частоты N переключается между -1 в середине и 1 в середине, так как N увеличивается от нечетного числа до четного числа. Таким образом, любой шум в середине входа в окно DFT может привести к переключению различных реальных компонентов в результате DFT (если только этот шум не будет точно ортогонален всем этим векторам DFT).