Als eine Erweiterung zu this question, die ich fragte. Die Fourier-Transformation eines realen Gaußschen ist eine echte Gaußsche. Natürlich wird eine DFT einer Menge von Punkten, die nur einer Gaußschen ähneln, nicht immer eine perfekte Gauß'sche sein, aber sie sollte sicher nahe sein. Im folgenden Code nehme ich diese [diskrete] Fourier-Transformation unter Verwendung von GSL. Abgesehen von der Frage der zurückgegebenen/transformierten realen Komponenten (die in der verknüpften Frage umrissen sind), bekomme ich ein merkwürdiges Ergebnis für die imaginäre Komponente (die identisch Null sein sollte). Zugegeben, es ist sehr klein in der Größenordnung, aber es ist immer noch seltsam. Was ist die Ursache für diesen asymmetrischen & funky Ausgang?GSL-Fast-Fourier-Transformation - Nicht-Null-Imaginär für transformierte Gauß-Transformation?
#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)<<" "<<IMAG(data,((i+n/2)%n))<<'\n';
}
file_out.close();
}