DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE

cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 - 19 sept. 2005 à 10:27
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 - 8 oct. 2007 à 14:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33777-dll-effectuant-une-transformee-de-fourier-rapide

cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
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és 2 Date d'inscription jeudi 3 juillet 2003 Statut Membre Dernière intervention 30 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és 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
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

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
Rejoignez-nous