1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
// Méthode qui permet de calculer la FFT
// Indice Debut et IndiceFin sont des indices pour la portion de ma liste de points que je dois traiter.
// TCalculs est un classe qui contient plusieurs liste.
void __fastcall TOnglet::FFT(int IndiceDebut, int IndiceFin, TCalculs *LesCalculs)
{
// Variables pour le calculs
double *in;
fftw_complex *out;
fftw_plan p;
// Nombre de points
int N = (IndiceFin - IndiceDebut) + 1;
// On dimensionne le tableau d'entrée
in = (double*) fftw_malloc(sizeof(double) * N);
// On dimensionne le tableau de sortie
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
// On rempli le tableau d'entrée
for(int i = 0; i < N; i++)
{
// On extrait le point X TPointD est une classe de points avec des coordonnées double
TPointD *Point = (TPointD *)(LesCalculs->ListeDesPoints->Items[i]);
in[i] = Point->x;
}
p = fftw_plan_dft_r2c_1d(N, in, out, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed*/
ListeFFT = new TList();
// On rempli le tableau de la FFT
for(int i = 0; i < N; i++)
{
ListeFFT->Add(out[i]);
}
fftw_destroy_plan(p);
fftw_free(in); fftw_free(out);
} |