Comment se débarasser du racine de -1 dans la TFD?

Résolu
PavICF Messages postés 17 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 14 avril 2007 - 13 mars 2005 à 16:03
Sphaxs Messages postés 56 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 27 mars 2009 - 24 nov. 2005 à 19:55
La formule que j'ai trouvé est la suivante:
résultat(f) = Somme(k)k=0N-1 * s(k) * e<SUP>2Pi * racine(-1) * f * k
</SUP>où:
f = fréquence
N = nombre de points dans le spectre et d'échantillons analysés (à moins que j'ai mal compri)
s(k) = valeur de l'échantillon à la position k: amplitude quoi
e = exponentielle

Je veux faire une routine qui utilise cette formule, mais le problème, c'est que je ne sais pas comment considérer ce racine(-1) dans le calcul.
Est-ce que quelqu'un pourait m'éclairer à ce sujet?
D'avance merci et bonne prog à tous!

4 réponses

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
15 mars 2005 à 10:38
Tu cré un type complexe :

Type complex

real as double

imag as double

end type


puis tu ecris les opération sur les complexe :

function sommeC (c1 as complex, c2 as complex) as complex

sommec.real=c1.real+c2.real

sommec.imag=c1.imag+c2.imag

end function



etc...



et tu réecris ton algo avec pour la "racine de -1" le nombre I

function I() as complex

I.real=0

I.imag=1

end function



L'exponentielle complexe peut etre remplacé :

e(i.x) = cos(x) + i.sin(x)



Je te conseil d'autre part d'utiliser l'algo de la FFT (Fast Fourier
Transform) qui est apparement mieux que la DFT (Direct Fourier
Transform).


Flachy Joe
3
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
16 mars 2005 à 13:23
Je peut t'envoyer l'algo de la FFT codé en VB, pour ce qui est de la comréhension, c'est un peu obscure pour moi aussi...

Mail moi : flachyjoe @ hotmail.com

Flachy Joe
3
PavICF Messages postés 17 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 14 avril 2007
15 mars 2005 à 21:11
Alors là, vraiment, UN GRAND MERCI!
Pour être honnête, je ne pensais pas que le topic trouverait une réponse.
Cela va m'être très utile.
En ce qui concerne la FFT, j'ai aussi entendu dire que c'était plus rapide (ou plutôt je l'ai lu sur internet).
La raison principale pour laquelle j'ai finalement opté pour la TFD est qu'un de mes potes m'a expliqué à quoi correspondaient les notations de la formule que j'avais vu sur internet, et qu'il m'a donné la formule telle qu'il la connaissait.
Mon gros problème dans cette histoire est que je n'ai jamais vu ces formules en cours et, si j'ai cherché sur internet, je n'ai pas trouvé de docs assez complètes pour être de mon niveau de maths.
Donc, la FFT, je préférerais, mais je n'arrive pas à la comprendre (déjà que j'ai du mal avec la TFD).
Mais vu que t'as l'air de bien connaître la question, penses-tu avoir le temps de faire un petit tutoriel sur la question? Ou aurais-tu des adresses de sites web où le sujet est expliqué assez clairement pour quelqu'un qui n'a jamais abordé ces question?
En tout cas, encore merci, je vais essayer de creuser la question un peu plus de mon côté en attendant d'en savoir plus.
Bonne prog!

PS: je dis TFD pour Transgormée de Fourier Discrète, la même chose mais en français quoi.
0
Sphaxs Messages postés 56 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 27 mars 2009 1
24 nov. 2005 à 19:55
Salut,


Je viens de tomber sur ton mess.
Je me suis intéressé à la FFT il y a un peu plus d'un an maintenant et je continu à m'y intéresser pour les besoins d'un projet avec un ami.
J'avais trouvé un pdf qui expliquait bien le calcul de la fft mais je ne remet pas la main dessus ...


La FFT demande beaucoup moins de calculs que la TFD, elle est donc nettement plus rapide. Par contre, pour calculer la FFT, il faut un nombre de valeurs égal à une puissance de 2.


En VB, j'utilise le module de calcul de la FFT fait par un certain MacCallais ou un truc dans le genre, tu le trouves très facilement sur VBFrance, la dernière version est la 2-B il me semble. Il fonctionne très bien et est relativement rapide, par contre il calcule tout, c'est a dire les valeurs réelles (le niveau en fonction de la fréquence) et les valeurs imaginaires (le déphasage en fonction de la fréquence), ces dernières ne sont pas toujours utiles.
De plus, il y a un effet de repliement dans les résultats, c'est à dire que pour un signal de 1024 valeurs par exemple, les 512 dernières valeurs sont la symétrie des 512 premières valeurs (théorème de Shannon).


Donc si tu veux le spectre d'un signal avec ce module, tu envois 2 puissance N valeurs et tu récupères les premières 2 puissance N-1 valeurs réelles.


Il te permet aussi de calculer 2 ou 3 autres trucs qui peuvent être utiles comme le niveau pour une seule fréquence, etc ... Par contre, de mémoire car ca fait un moment que je ne l'ai pas utilisé et je ne l'ai pas sous les yeux, il me semble que le calcul de la FFT se fait sur une fenêtre rectangulaire dans ce module, ce n'est pas terrible pour les valeurs limites de fréquence. Mais tu peux trouver les formules de pleins de fenêtres différentes sur internet si tu n'en as pas déjà trouvé.


En espérant t'avoir aidé.


Sinon, regarde mon code SAA - Sphaxs Audio Analyser sur VBFrance, c'était la première version, non terminée, du projet cité plus haut.


Sphaxs
0
Rejoignez-nous