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();
}
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.
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. –