cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 8 oct. 2007 à 14:52
Bonjour BICOUN,
La formule pour trouver la fréquence en fonction de l'indice est la suivante:
f=indice*Fe/n
où Fe est la fréquence d'échantillonnage de ton signal et n le nombre de points mesurés (puissance de 2)
Si tu effectue un échantilonnage à 44100Hz durant 0,5s, tu auras 0,5*44100 =22050 mesures dont seules 16384 seront utilisées - soit une durée utile de 16384/44100 = 0,371s. Ton pas temporel sera de 1/44100 = 22,68µs.
Si au sortir de ta transformation de Fourier tu a un pic à l'indice i=372 alors la fréquence correspondante sera de
f 372*44100/16384 1001,29Hz
Ton pas fréquenciel est de 44100/16384 = 2,69Hz
Pour améliorer la résolution tu peux:
- augmenter la durée (nombre de points) pour la même fréquence d'échantillonnage
- diminuer la fréquence d'échantillonnage (pour la même durée)
Il faut faire attention au fait que l'analyse n'est valable que jusqu'à Fe/2 (ici 22050 Hz), si tu réduit la fréquence d'échantillonnage à 8000 Hz (par exemple), ta résolution sera de 0,488 Hz mais ton analyse spectrale sera limité à 4000Hz
J'espère que ces explication te permettrons de voir l'origine de ton pb
cs_bicoun
Messages postés2Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention30 juin 2017 5 oct. 2007 à 18:55
Ca tourne tres bien, et surtout tres vite (rien a voir avec certain bout de code en C).
Mais j'ai du mal a interprétrer les résultats de mon essai:Je rentre un signal composé de 2 sinus (f0 200Hz et f1 1000Hz)
Après le passage dans la fct de FFT, je trouve bien 2 raies , mais à 4 fois la fréquence (800 et 4000 Hz).J'ai pris un DeltaF de VitesseDigit / NbPoints 1e6 / 65536 15.3 Hz
pour reconstruire mon echelle en fréquence.
Quelqu'un a une idée pour expliquer et corriger ce facteur 4?
Merci pour vos réponses.
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 19 sept. 2005 à 10:27
J'ai oublié de préciser que le nombre de valeurs doit être une puissance de deux. A priori la dll devait fonctionner à partir de n=2 mais celà n'aurait pas beaucoup de sens. L'algorythme utilisé est décrit dans le document suivant
8 oct. 2007 à 14:52
La formule pour trouver la fréquence en fonction de l'indice est la suivante:
f=indice*Fe/n
où Fe est la fréquence d'échantillonnage de ton signal et n le nombre de points mesurés (puissance de 2)
Si tu effectue un échantilonnage à 44100Hz durant 0,5s, tu auras 0,5*44100 =22050 mesures dont seules 16384 seront utilisées - soit une durée utile de 16384/44100 = 0,371s. Ton pas temporel sera de 1/44100 = 22,68µs.
Si au sortir de ta transformation de Fourier tu a un pic à l'indice i=372 alors la fréquence correspondante sera de
f 372*44100/16384 1001,29Hz
Ton pas fréquenciel est de 44100/16384 = 2,69Hz
Pour améliorer la résolution tu peux:
- augmenter la durée (nombre de points) pour la même fréquence d'échantillonnage
- diminuer la fréquence d'échantillonnage (pour la même durée)
Il faut faire attention au fait que l'analyse n'est valable que jusqu'à Fe/2 (ici 22050 Hz), si tu réduit la fréquence d'échantillonnage à 8000 Hz (par exemple), ta résolution sera de 0,488 Hz mais ton analyse spectrale sera limité à 4000Hz
J'espère que ces explication te permettrons de voir l'origine de ton pb
5 oct. 2007 à 18:55
Mais j'ai du mal a interprétrer les résultats de mon essai:Je rentre un signal composé de 2 sinus (f0 200Hz et f1 1000Hz)
Après le passage dans la fct de FFT, je trouve bien 2 raies , mais à 4 fois la fréquence (800 et 4000 Hz).J'ai pris un DeltaF de VitesseDigit / NbPoints 1e6 / 65536 15.3 Hz
pour reconstruire mon echelle en fréquence.
Quelqu'un a une idée pour expliquer et corriger ce facteur 4?
Merci pour vos réponses.
19 sept. 2005 à 10:27
http://membres.lycos.fr/huckphilippe/fft.zip
La permutation des indices à la fin des calculs doit s'effectuer en utilisant une variable intermédiaire pour éviter une double permutation. Par exemple pour 16 valeurs:
0 0000 permute avec 0 0000
1 0001 8 1000
2 0010 4 0100
3 0011 12 1100
4 0100 2 0010
5 0101 10 1010
6 0110 6 0110
7 0111 14 1110
8 1000 1 0001
9 1001 9 1001
10 1010 5 0101
11 1011 13 1101
12 1100 3 0011
13 1101 11 1011
14 1110 7 0111
15 1111 15 1111
Permuter sur la moitié des indice ne permet pas de résoudre le problème: la permutation de 2 donnerait 4 qui redonnerait 2