2016-05-02 11 views
6

Transformata Fouriera gaussa jest gaussowskim, ale z jakiegoś powodu szybka biblioteka transformacji Fouriera z GSL (biblioteka naukowa GNU) nie daje tego w ogóle. Podałem kod, którego użyłem do wygenerowania (próbę) transformacji Fouriera i dwóch odpowiednich działek zaraz po nim. Czy mogę pomóc mi określić, co zawiodłem?GSL Szybka transformata Fouriera - bzdura Wyjście

#include <gsl/gsl_fft_complex.h> 
#include <fstream> 

#define REAL(z,i) ((z)[2*(i)]) //complex arrays stored as  
#define IMAG(z,i) ((z)[2*(i)+1]) 

using namespace std; 

int main(){ 

double N = pow(2,9); //power of 2 for Cooley-Tukey algorithm 
int n = (int) N; 

double f[2*n]; 
double dx = 10./N; 
double x = -5.; 
ofstream fileo("out.txt"); 

for (int i=0; i<n; ++i){  //initialize gaussian 
    REAL(f,i)=exp(-0.5*x*x); 
    IMAG(f,i)=0.; 
    x+=dx; 
    } 

    gsl_fft_complex_radix2_forward(f, 1, n); //Fourier transform 

    for (int i=0; i<n; ++i){ 
     fileo<<i<<" "<<REAL(f,i)<<'\n'; //plot frequency distribution 
    } 

    fileo.close(); 
} 

enter image description here

enter image description here


EDIT: rozwiązany!

Jak stwierdzono w odpowiedzi @ roadrunner66, szerokość oryginalnego Gaussa była bardzo szeroka, co prowadziło do absurdalnie wąskiej przestrzeni Gaussa w przestrzeni Fouriera. Co więcej, moja fabuła wyglądała dobrze, ponieważ, jak zasugerowano w komentarzu @ nm (teraz usunięty), transformata Fouriera zwraca DFT z projekcjami na wartości k indeksowane jako k = 0,1, ..., N/2, - N/2, ...- 2, -1.

enter image description here

Odpowiedz

4

Wygląda to dla mnie dobry. Przesunąć wektor wyjściowy o N/2 i narysować bezwzględną wartość wyjścia, a nie rzeczywistą część.

Należy również zauważyć, że wejście Gaussian jest dość szerokie, co powoduje, że jego spektrum jest bardzo wąskie. Sprawdź analityczne rozwiązanie dla tej sprawy dla porównania.

+1

To było to. Szerokość oryginalnego gaussa wynosiła 2, co stanowi szerokość przekształconego frakcji gaussowskiej. Dodałem wykres z szerokością oryginalnego gaussa zmienionego na 0.01. Zobacz edycję. –