2016-05-02 9 views
6

Die Fourier-Transformation eines Gaussian ist ein Gaussian, aber aus irgendeinem Grund gibt die Fast Fourier Transform Bibliothek von GSL (GNU Scientific Library) dies überhaupt nicht. Ich habe den Code, den ich verwendet habe, um die (versuchte) Fourier-Transformation zu generieren, und zwei relevante Diagramme unmittelbar danach eingefügt. Könnte mir helfen zu identifizieren, was ich vermasselt habe?GSL Fast-Fourier-Transformation - Nonsense-Ausgabe

#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: Gelöst!

Wie in der Antwort von @ roadrunner66 angegeben, war die Breite des ursprünglichen Gaussian sehr breit, was zu einem lächerlich schmalen Gaußschen Fourierraum führte. Außerdem sah meine Handlung funky aus, weil, wie in @ nms (jetzt entfernt) Kommentar vorgeschlagen, die Fourier-Transformation die DFT mit Projektionen auf k-Werte zurückgibt, die als k = 0,1, ..., N/2, - indiziert sind. N/2, ...- 2, -1.

enter image description here

Antwort

4

Es scheint mir gut. Verschieben Sie den Ausgabevektor um N/2 und zeichnen Sie den absoluten Wert des Ausgangs anstelle des realen Teils.

Beachten Sie auch, dass Ihre Eingabe Gaussian eher breit ist, wodurch das Spektrum sehr schmal ist. Überprüfen Sie die analytische Lösung für diesen Fall zum Vergleich.

+1

Das war es. Die Breite des ursprünglichen Gaussian war 2, was die Breite des transformierten Gaußschen Bruchteils machte. Ich habe ein Diagramm mit der Breite des ursprünglichen Gaussian auf 0,01 geändert. Siehe die Änderung. –

Verwandte Themen