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