Comme une extension à this question que j'ai demandé. La transformée de Fourier d'un vrai Gaussien est un vrai Gaussien. Maintenant, bien sûr, une DFT d'un ensemble de points qui ne ressemblent qu'à un Gaussien ne sera pas toujours un Gaussien parfait, mais il devrait certainement être proche. Dans le code ci-dessous, je prends cette transformation de Fourier [discrète] en utilisant GSL. Mis à part le problème des composants réels retournés/transformés (décrits dans la question liée), j'obtiens un résultat bizarre pour le composant imaginaire (qui devrait être identique à zéro). Certes, c'est de très petite taille, mais c'est quand même bizarre. Quelle est la cause de cette sortie asymétrique &?GSL Fast-Fourier Transform - Imaginaire non nul pour Gaussian 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)<<" "<<IMAG(data,((i+n/2)%n))<<'\n';
}
file_out.close();
}