Probleme pour comprendre programme avec GSL
2 participants
Page 1 sur 1
Probleme pour comprendre programme avec GSL
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.
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 : 38
Date d'inscription : 26/10/2011
Re: Probleme pour comprendre programme avec GSL
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...
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...
Sujets similaires
» Problème avec le symbole "<"
» Diffraction avec Scilab
» Scilab : Problème
» Calcul du gradient d'un champ de scalaires avec V200 ou TI-89
» Centre de gravité d'un prisme tronqué
» Diffraction avec Scilab
» Scilab : Problème
» Calcul du gradient d'un champ de scalaires avec V200 ou TI-89
» Centre de gravité d'un prisme tronqué
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum