Fast fourier transform

niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010 - 10 juin 2006 à 18:33
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010 - 11 juin 2006 à 21:45
Salut.
J'ai pris une source de fft mais je n'ai pas compris un truc:
Je me retrouve avec deux tableaux de sortie (reel et imaginaire en floats).
Je n'ai pas comrpis comment et dans quelle ordre ercuperer les frequence svp.
Que signifie ceci:

for (i=0;i<1024;i++){
mag=(float)(sqrt(pow(RealOut[i],2)+pow(ImageOut[i],2)));
freq=(float)((44100*(i+1))*2);
   freq/=Buffer.dwBufferLength;
}

Merci a vous.

4 réponses

Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
11 juin 2006 à 14:16
Salut.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>
 




FFT produit une suite de vecteurs  complexes de la forme x+iy, ( i=opérateur qui appliqué à un vecteur le fait pivoter de 90° , c'est pourquoi l'appliquer 2 fois revient à multiplier par -1).



 




Le module de (x+iy)= racine carrée de (x2+y2 ) appelé ici  mag  dans la ligne 2. (théorème de Pythagore)



 




FFT agit sur une suite de valeurs d'une grandeur, prises à  intervalles égaux pendant une durée T,la fréquence associée à chaque vecteur  dépend donc de la valeur de T et du nombre de valeurs. D'où les  lignes 3 et 4.  Pour les décoder il faudrait afficher tout le code : on utile parfois des artifices de calcul pour gagner de la place ou du temps.



 J'espère que celà répond à la question.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
11 juin 2006 à 17:22
Donc je recupere les valeurs des tableaux RealOut et ImagOut.

//Je fais une boucle de 1024
for (i=0;i<1024;i++){
//je calcule le module
mag=(float)(sqrt(pow(RealOut[i],2)+pow(ImageOut[i],2)));

//ensuite l'amplitude pour chaque frequence de i ?

freq=(float)((44100*(i+1))*2);
   freq/=Buffer.dwBufferLength;
}
0
Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
11 juin 2006 à 20:51
module =amplitude
En principe il  faut creer deux vecteurs un pour l'amplitude  mag [n] et un pour la fréquence freq[n].
Et dans la boucle remplacer mag par mag[i] et freq par freq[i]  pour obtenir un spectre de fréquences.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
11 juin 2006 à 21:45
Salut.
Micro eteint je trouve
 pendant la boucle i= 2 je fais une pause:

mag[i]=(float)(sqrt(pow(RealOut[i],2)+pow(ImageOut[i],2)));
freq[i]=(float)((44100*(i+1))*2);
   freq[i]/=Buffer.dwBufferLength;

mag[i]= 399414.
freq[i]=258.398

Je ne comprend pas , le micro est sur off je devrais avoir 0.
Merci .
0
Rejoignez-nous