Probleme pour comprendre programme avec GSL

Voir le sujet précédent Voir le sujet suivant Aller en bas

Probleme pour comprendre programme avec GSL

Message par valerian.stroppiana le Jeu 27 Oct - 10:03

Bonjour, j'ai trouvé sur le site de GNU un exemple ressemblant à celui mis en ligne ici, ce programme doit faire la FFT de longueur 630 d'une impulsion.
le programme est le suivant :

Here is an example program which computes the FFT of a short pulse in a sample of length 630 (=2*3*3*5*7) using the mixed-radix algorithm.

#include
#include
#include
#include

#define REAL(z,i) ((z)[2*(i)])
#define IMAG(z,i) ((z)[2*(i)+1])

int
main (void)
{
int i;
const int n = 630;
double data[2*n];

gsl_fft_complex_wavetable * wavetable;
gsl_fft_complex_workspace * workspace;

for (i = 0; i < n; i++)
{
REAL(data,i) = 0.0;
IMAG(data,i) = 0.0;
}

data[0] = 1.0;

for (i = 1; i <= 10; i++)
{
REAL(data,i) = REAL(data,n-i) = 1.0;
}

for (i = 0; i < n; i++)
{
printf ("%d: %e %e\n", i, REAL(data,i),
IMAG(data,i));
}
printf ("\n");

wavetable = gsl_fft_complex_wavetable_alloc (n);
workspace = gsl_fft_complex_workspace_alloc (n);

for (i = 0; i < wavetable->nf; i++)
{
printf ("# factor %d: %d\n", i,
wavetable->factor[i]);
}

gsl_fft_complex_forward (data, 1, n,
wavetable, workspace);

for (i = 0; i < n; i++)
{
printf ("%d: %e %e\n", i, REAL(data,i),
IMAG(data,i));
}

gsl_fft_complex_wavetable_free (wavetable);
gsl_fft_complex_workspace_free (workspace);
return 0;
}

Il me semble un plus difficile à comprendre. Je débute en C, et c'est dans le cadre d'un stage que je dois utiliser GSL. Voici mes questions :
Est ce que wavetable et workspace sont des objets ou des fonctions du C, ou de simple nom de variable? A quoi servent ils ici dans le programme? Et que font exactement les fonctions gsl_fft_complex_wavetable_alloc (n); et gsl_fft_complex_workspace_alloc (n) et quelle est leur différence avec gsl_fft_complex_wavetable * wavetable;
gsl_fft_complex_workspace * workspace;? Merci de me répondre cela fait deux jours que je m'arrache les cheveux pour comprendre.

valerian.stroppiana

Nombre de messages : 1
Age : 31
Date d'inscription : 26/10/2011

Revenir en haut Aller en bas

Re: Probleme pour comprendre programme avec GSL

Message par domi le Dim 30 Oct - 17:45

Bonjour,
wavetable et workspace sont des pointeurs vers des structures de données de type gsl_fft_complex_wavetable et gsl_fft_complex_workspace respectivement. Ces types sont définis dans les fichiers header mentionnés en début de code.
les fonctions X_alloc procèdent à l'allocation de l l'espace mémoire nécessaire aux structures de données.
Connais-tu l'algo de Cooley-Tukey de calcul de la FFT? ici, ton code calcule la FFT avant (forward) du signal contenu dans la structure de données wavetable. La routine utilise un espace de travail nommé workspace (sic!).
Tu trouveras les détails du fonctionnement des routines GSL dans le manuel de référence GNU Scientific Library Reference Manual, que tu devrais avoir sous la main si tu veux faire ce genre de programmation...

_________________
"Donne un poisson à un homme, tu le nourris pour un jour. Apprends-lui à pêcher, tu le nourris pour toujours." Lao-Tseu
avatar
domi
Admin

Nombre de messages : 1348
Age : 59
Localisation : Noyon
Date d'inscription : 22/10/2008

http://www.tangenteX.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum