La physique du lycée à la prépa
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

Probleme pour comprendre programme avec GSL

2 participants

Aller en bas

Probleme pour comprendre programme avec GSL Empty Probleme pour comprendre programme avec GSL

Message par valerian.stroppiana 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 : 37
Date d'inscription : 26/10/2011

Revenir en haut Aller en bas

Probleme pour comprendre programme avec GSL Empty Re: Probleme pour comprendre programme avec GSL

Message par domi 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...
domi
domi
Admin

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

http://www.tangenteX.com

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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