TRANSFORMEE DE FOURIER DANS LES APPLICATIONS AUDIO-NUMERIQUES

Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
- - Dernière réponse : comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
- 13 nov. 2010 à 20:39
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/36172-transformee-de-fourier-dans-les-applications-audio-numeriques

Afficher la suite 
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Evite de coder PI ainsi : tu perds un peu de précision, utilise plutot Math.PI
Voir aussi :
http://patrice.dargenton.free.fr/vbwavecomp/index.html
http://patrice.dargenton.free.fr/vbwavecomp/VBWaveCompSrc.html
cs_AbriBus
Messages postés
492
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
25 avril 2007
5 -
Salut,
Tout ca me semble un peu obscur dans son application finale... apres quelques recherche sur le net, j'ai cru comprendre que fourier pouvait etre utilisé pour le cadage de Mp3 (?)
Serait-il possible d'avoir plus d'informations quand à l'application du calcul de la transformee de fourier ?

AbriBus
jazzd2
Messages postés
1
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
22 mars 2006
-
La transformée de fourrier, sans rentrer dans les détails, sert à pas mal de choses dans l'analyse du signal. Elle est utilisé pour faire apparaitre les fréquences d'un signal. Elle est utilisé pour le son, les signaux acquis dans l'industrie, le traitement d'image.... en gros chaque fois que tu veux analyser un signal pour trouver certaines infos c'est une des méthodes utilisées.
cs_AbriBus
Messages postés
492
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
25 avril 2007
5 -
Salut,
tout d'abord, merc jazzd2 pour l'info... mais, toujours sans rentrer dans des détails indescents, quel est le genre d'info qu'on recupere par ces methode ? la qualité, la puissance, l'integrité ...?
En fait la question, c'est quel est l'objectif final d'une telle analyse (je ne doute pas ici qu'il y en a une...)?
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
La TF donne le spectre du signal, c'est-à-dire la distribution (répartition) des fréquences contenues dans le signal, ce qui est utile par exemple pour l'audio, pour savoir l'énergie du signal qui risque d'être perdu selon le type d'écouteur.
Voir par exemple :
http://patrice.dargenton.free.fr/vbwavecomp/index.html
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Merci énormément comemich ! Je cherchais depuis un moment des infos sur la transformée de Fourier car je développe un mini-oscillo en VB 2005 et je veux ajouter une fonction analyseur de spectre, mais pas moyen de trouver une description de l'algorithme... Sans celui que tu as posté (et qui fonctionne parfaitement !!) je n'y serais jamais arrivé...
Par contre j'ai essayé de le comprendre mais ça reste un peu obscur... Je m'en sers donc sans savoir comment ça marche (ce qui n'est pas un problème : l'essentiel est que ça marche...)
Bref, merci c'est très utile !!
ninja hacker
Messages postés
45
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
19 mai 2008
-
Bonjour!

Je cherche et je cherche mais je ne trouve pas ce que je veux. Je veux analyser le spectre d'un fichier audio. J'ai limpression que le code plus haut dans la page fait cette action mais je ne le comprend pas. Est-ce que vous pouriez me l'expliquer un peu plus en détail et surtout m'expliquer comment pouvoir men servir pour analyser le spectre d'un fichier audio. Merci!
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Ben...
c'est pas simple. Ca dépend de ton niveau d'étude en maths.. Je suis en classe préparatoire aux grandes écoles (maths sup), donc je comprends ce que fait ce code.
Mais pour cela, il faut savoir ce qu'est un nombre complexe, une intégrale et avoir un minimum de bases en analyse de Fourier.

Je vais essayer d'expliquer comment s'en servir sans connaissance importantes en maths..
Mais c'est compliqué et je vais simplifier au maximum.

Toute fonction mathématique périodique peut (sous certaines conditions) se décomposer en une somme infinie de cosinus et de sinus d'amplitude et de fréquences différentes.
Par exemple, un signal en créneaux de fréquence 1Hz :
f(t) = 4/Pi * ( sin(2Pi*t) + sin(2Pi*3*t)/3 + sin(2Pi*5*t)/5 + ......)

Le but de la transformée de Fourier est de récupérer l'amplitude de chaque sinus.
Pour chaque fréquence, on a la valeur de l'amplitude correspondante : c'est le spectre.
Le spectre est la représentation du signal dans le domaine des fréquences.

Donc si le signal est l'enregistrement d'un diapason, on va avoir un pic de fréquence à 440Hz, la fréquence du la.

Maintenant, si ce que je raconte est pas clair, direction Google pour plus d'infos...

Le problème est que le signal sonore que l'on veut analyser n'est pas continu, mais numérisé. En clair, c'est une suite de nombres. Les matheux ont donc inventé la transformée de Fourier discrète. C'est cette transformée que l'on utilise avec les signaux numérisés.

Le code ci dessus est celui de la FFT (Fast Fourier Transform, ou Transformée de Fourier Rapide).
C'est une version de la transformée discrète bien plus rapide à calculer. Mais elle n'est rapide que si le nombre d'échantillons est une puissance de 2

Premier impératif pour utiliser ce code :
- utiliser un nombre d'échantillons en puissance de 2 (512, 2048... échantillons)
Si ton signal audio contient trop de valeurs, il faudra le racourcir.

Ce module utilise des nombres complexes. C'est des nombres qui comportent une partie réelle et une partie imaginaire. Mais je vais expliquer comment s'en servir même si tu ne sais pas ce que c'est...

Comment entrer des échantillons dans la moulinette :
- Déclarer un tableau (de longueur puissance de 2, rappelle-toi!) en tant que complexe :

Dim Signal(511) As NombreComplex

- Pour chaque valeur du tableau, entrer la valeur du signal dans la partie réelle, et mettre 0 dans la partie imaginaire :

For i As Integer = 0 to 511
Signal(i).Réel = .... (la valeur du ième échantillon)
Signal(i).Imaginaire = 0
Next i

- Déclarer un tableau pour recevoir le résultat :

Dim Résultat(511) As NombreComplex

- Exécuter la FFT. Le paramètre sera Signal(), et le résultat sera stocké dans Résultat()

Résultat = Fourier(Signal)

Le tableau Résultat contient maintenant le spectre, mais sous forme de nombres complexes. Pour avoir l'amplitude, il faut récupérer le module de chaque nombre complexe :

Dim Spectre(511) As Single

For i As Integer = 0 To 511
Spectre(i) = Math.Sqrt(Résultat(i).Réel ^ 2 + Résultat(i).Imaginaire ^ 2)
Next i

Voilà, c'est fini. Le spectre est maintenant contenu dans le tableau Spectre.
On peut alors le tracer par exemple.


Oui, mais... (parce qu'il y a forcément un mais...)
On a l'amplitude de chaque fréquence, mais quelle est la valeur de la fréquence ??

Je m'explique : Spectre(25) vaut 15.4 par exemple.
A quelle valeur de fréquence correspond le 15.4 ?

Et bien cela dépend du signal original. Cela dépend en fait de sa fréquence d'échantillonage, et du nombre d'échantillons que l'on a pris.
Pour des signaux sonores issus d'un CD, c'est 44100 Hz.

Donc si on prend 512 échantillons à 44100 Hz, voilà ce qu'on va avoir :

Spectre(0) correspond à 0 Hz
Spectre(1) correspond à 44100 / 512 = 86.1 Hz
Spectre(2) correspond à 2 * 44100 / 512 = 172.3 Hz
..
Spectre(i) correspond à i * 44100 / 512
..
Spectre(256) correspond à 22050 Hz

Et après : stop ! (voir remarque...)


Remarque :

Si on traite 512 échantillons (comme dans le cas précédent), on n'utilise que les 257 premières valeurs du spectre, c'est à dire de Spectre(0) jusqu'à Spectre(256).
En effet, les valeurs de fréquence suivantes sont les mêmes que celles d'avant, donc elles n'apportent rien.

Si tu traces le tableau Spectre(i) pour i allant de 0 à 511, tu auras une courbe symétrique.
C'est à dire Spectre(0) Spectre(511), Spectre(2) Spectre(509) ect...

Donc tu récupères les fréquences de 0 jusqu'à 22050 Hz (la moitié de la fréquence d'échantillonnage)


Voilà pour une rapide explication, mais qui devrait cependant permettre d'utiliser le formidable code de comemich (c'est pas lui qui l'a inventé, mais on ne le remerciera jamais assez de l'avoir écrit en VB2005)

J'ai essayé de faire mon explication aussi complète que possible. Je me concentre sur la mise en oeuvre de ce code.

Mais pour la théorie, ou pour comprendre correctement l'analyse de Fourier, il faut un minimum de connaissances en maths..

VIVE LES MATHS !
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Bravo ARNAL88 pour tes explications.

Afin de faciliter la compréhension du mode d’ emploi , j’ ai écrit une petite application qui utilise le module de Fourier. C’ est une illustration de ce qu’ on peut faire en audio-numérique avec la transformée rapide de Fourier. Un exemple vaut souvent mieux que de longs discours.

DémoFFT analyse un fichier wave contenant une note de musique.

- Calcule le spertre de fréquences et affiche le graphique
- Analyse le spectre pour savoir où est la fréquence fondamentale et ses harmoniques
- En déduit le nom de la note qui a été jouée. (Do Ré Mi Fa Sol La Si)

Télécharger l’ archive :
http://michelcome@free.fr/solutiondemofft.zip

COMEMICH
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
ERRATUM : l'URL de DémoFFT

http://michelcome.free.fr/solutiondemofft.zip

Bien sûr !
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Merci pour tes encouragements..

C'est vrai que je me suis un peu laissé aller côté longueur.. J'ai essayé d'être complet.
Mais il y a tellement de choses à dire ! J'aurais pu en écrire le double.

En tout cas, maintenant tout le monde pourra utiliser ton code sans trop de soucis !

PS : pour ma part, je suis en train de bosser sur la FFT elle-même pour comprendre comment l'algorithme fonctionne. Je n'aime pas utiliser des trucs que je ne comprends pas...
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Pas mal ton petit programme.. C'est bien fait. Il montre ce qu'on peut faire avec la FFT.

Tu nous fais quand la transformée en ondelettes ?? ;)
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Oh la la ! N'en demandes pas trop.
Si tu es aussi bon en englais qu' en math, je te conseille:
http://www.dsprelated.com/groups/adsp/show/4302.php
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Ok, je me débrouille un peu en maths (pas trop le choix) mais je préfère la physique. Faut voir le nombre d'applications que peut avoir la FFT en physique !!

Concernant les ondelettes, c'est pour te charier ! Je n'en connais que le principe.

Je conseille fortement le site du lycée le Dantec : http://www.lycee-ledantec.ac-rennes.fr/
Fouillez dans Articles > Tutorial Ondelettes. C'est vraiment bien expliqué ! Et il traite aussi de la transformée de Fourier...
ninja hacker
Messages postés
45
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
19 mai 2008
-
wow Merci!

Ont a une chouete communauté ici a vb france :). J'ai pas encore tout tester les indications dans vos commentaire. Je viens de finir de les lires (j'avais pas eu le temps de revenir depuis un petit bout de temps) et c'est fou! bravo Arnal tu ma fais comprend un peu plus ce qu'était le FFT. Je suis encore confu par l'algorithme mais je m'estime déja bien de comprendre tout ca n'entend qu'en secondaire 4! Bref je telecharge ta source a l'instant Comemich. Merci encore pour tout =D
ninja hacker
Messages postés
45
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
19 mai 2008
-
Est-il possible d'utuliser le microphone comme source a analyser en temps réel avec ce code? (désolé n'ayant pas les capacité VB et mathématique pour résoudre se probleme je dois posé beaucoup de questions... c'est pour un projet d'expo science a mon école)
ninja hacker
Messages postés
45
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
19 mai 2008
-
Ah et j'oubliais comment as tu créer tes fichier wav? j'essai dutuliser mon micro pour enregistrer un de mes diapason et je ne peu pas l'ouvrir avec ton code. J'ai essailler de le sauvegarder avec un taux d'échantillonage de 44Khz, taille de l'échantillion 16 bit en PCM et mono comme tes fichier fourni mais je ne peux pas plus les ouvrir. Une idée?
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Je dois reconaitre que je ne suis pas très fier de ma routine pour lire dans les fichiers wave car je n' ai pas beaucoup d' information la dessus. Je suis bien incapable d'assurer une lecture fiable. Est ce que quelqu'un a de la doc là dessus ?. Mon intention, au départ, c' était juste de distribuer la FFT. Le reste, c' était juste pour expliquer comment s' en servir. Mais tout n'est pas très propre là dedans. Il ne faut pas prendre ça pour du bon pain . Ce n'est surement pas un exemple à suivre.
Enregistre avec Sndrec32.exe de Microsoft. C'est livré avec Windows et ça fait des fichiers généralement lisibles par ma routine. Mais pour faire plus sérieux, il serait souhaitable de trouver une source mieux adaptée.
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Voici ma liste actuelle de liens pour lire un fichier wav :

- [.Net2] Lecture fichier .cda + Extraction piste audio d'un CD
www.csharpfr.com/code.aspx?ID=41094

- WAVE File Processor in C#
www.codeproject.com/useritems/WAVE_Processor_In_C_.asp

- Utilitaire pour créer des wav contenant des fréquences données : NCH Tone Generator
www.world-voices.com/software/nchtone.html

- Générateur de fichier wav de référence pour CD de test
www.cppfrance.com/code.aspx?ID=34327

- Compose sounds from frequencies and visualize them, By Corinna John
What you never wanted to know about PCM
www.codeproject.com/cs/media/wavemixer.asp

- www.codeproject.com/useritems/Concatenation_Wave_Files.asp en C# 2005

- CD audio : http://fr.wikipedia.org/wiki/Disque_compact
galinabuzz
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
salut et tout d'abord merci pour ce joli code ^^
Je dois toute fois vous exposer le problème auquel je suis confronté.
J'ai voulu tester cette transormée de fourier en y mettant en entrée une somme de 4 sinusoïdes de fréquences 2500, 3500, 4500, 5500Hz et de mêmes amplitudes.
Lorsque j'ai tracé le résultat ds un graphique (excel), il s'est avéré que les amplitudes des raies correspondant à chaque sinus étaient très différentes (je n'ai plus les chiffres en tête). Ceci me pose un gros problème car je souhaiterais calculer le niveau de pression équivalent d'un signal audio issus d'un micro, et pour ce faire, il est impératif que les amplitudes soient correctes.
Voilà, si mon problème est plus lié à une erreur de compréhension de ma part, s'il vous plait faites le moi savoir.
Merci d'avance
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Les magnitudes maxi correspondent bien aux fréquences des sinusoïdes que vous avez ajoutées. Qu'entendez vous par "les amplitudes des raies correspondant à chaque sinus étaient très différentes " ?
galinabuzz
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Et bien en fait, j'ai envoyé 4 sinusoïdes de mêmes amplitudes. Par contre, les 4 raies issues de la fft n'avaient pas les mêmes amplitudes. Je ne suis pas sur d'être beaucoup plus clair...

Bon, exemple :
signal d'entrée :
e(t) = A*sinus(2*pi*2500*t)+A*sinus(2*pi*3500*t)+A*sinus(2*pi*4500*t)+A*sinus(2*pi*5500*t)
A étant l'amplitude du signal.

je récupère en sortie :
- une raie à 2500Hz d'amplitude B
- une raie à 3500Hz d'amplitude C
- une raie à 4500Hz d'amplitude D
- une raie à 5500Hz d'amplitude E
avec B, C, D et E différents!! Alors qu'ils devraient être égaux...

Je ne crois pas (je n'espère pas ^^) dire de bêtise. Quoi qu'il en soit, merci de vous être penché sur mon problème.
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
La transformée de Fourier permet de calculer le spectre de fréquences correspondant à l'échantillon PCM dont la longueur est obligatoirement une puissance de 2 .
Exemple pour un bloc de 8192 impulsions (2^13),dans un échantillon cadencé à 44100 hz on aura une fréquence de base de 44100 / 8192 = 5.38330078125 Hz C'est à dire des magnitudes et angles correspondants aux fréquences : 10.76 , 16.14 , 21.53 , 26.91 , 32.29 , 37.68 , 43.06 , 48.44 , 53.83... jusqu'à 22050 Hz .(fréquence de Nyquist)
REMARQUE : On ne connaitra jamais la magnitude exacte correspondant à 2500 Hz car ce n'est pas un multiple de 5.3833
Pour celà , il faudrait un échantillon cadencé à : 2500 * 8192 / 464 = 44138 Hz.
La magnitude que vous calculez avec un échantillon de 8192 valeurs d'une onde cadencée à 44100 Hz correspond à une fréquence de 2497.85 Hz et non 2500 comme vous l'auriez souhaité. L'imprécision du résultat vient de là.
Il faut utiliser la FFT avec prudence !
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Normalement, il suffit d'augmenter le nombre de bits de la TFR pour s'approcher du résultat exact, les amplitudes devraient être conservées, sauf petites imprécisions.
Voir aussi :
http://patrice.dargenton.free.fr/publications/these.html#_Toc483625179
Ici est montré comment générer et tester des signaux avec la TFR :
http://patrice.dargenton.free.fr/vbwavecomp/VBWaveComp.html
Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
galinabuzz, quand tu dis que les amplitudes sont différentes, est ce que tu peux préciser ?
Si A est 2 fois plus élevé que B, alors il y a un problème, mais si c'est seulement de quelques pourcent, c'est normal ! Cela vient de l'algorithme lui-même..

PS : Le code de comemich mérite bien un petit 10/10 (j'avais oublié de le mettre à l'époque..)
galinabuzz
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Et bien en fait j'avais fait la transformée sur 32768 (2^15) échantillons, donc, en ce qui concerne la fréquence, j'étais relativement proche de la valeur exacte.
Quoi qu'il en soit je devrais normalement réussir à me débrouiller avec les petites variations d'amplitude que j'ai constaté.
Donc je vous remercie, d'une part pour votre code et d'autre part pour votre aide ^^

PS : à Patrice99, merci pour ces liens, je m'empresse d'aller les lire
galinabuzz
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Alors voilà, j'ai refait le test afin de pouvoir vous en montrer le résultat.
Les valeurs du signal ont été générées comme suit :

For i 0 To NumSamples - 1 'NumSamples 32768
t = (i / fe)
With suite(i)
.Reel = 0
For j = 1 To 80
.Reel = .Reel + System.Math.Sin(2 * system.math.Pi * (j * 250) * t)
Next
.Imaginaire = 0
End With
Next

Et en sortie je récupère le spectre hébérgé à cette adresse : http://www.imagup.com/imgs/1207758580.html

Il y a, je trouve, tout de même une certaine différence entre certains pics. Dites-moi, s'il vous plait, si je fais une erreur quelque part.
galinabuzz
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Je n'arrive pas à éditer mon message donc désolé pour le double post.
J'ai juste oublié de préciser que fe = 44100
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Je vous remercie beaucoup de l'intérêt que vous portez à ma contribution FFT. J'avais entrepris de développer un échantillonneur (sampler) mais comme je n'ai pas un niveau très élevé en mathématiques, j'avais du mal à m'en sortir avec les problèmes de spectre de fréquences. J'ai pu surmonter ces difficultés grace aux sites de Don Cross et Jean Debord que je remercie. Mais j'ai un peu galéré pour mettre au point le code Visual Basic. Aussi, j'ai pensé que ça pouvait rendre service à d'autres internautes pour bricoler, comme moi, des applications audio-numériques.Je suis content de constater que vous êtes nombreux à utiliser ce code.
J'utilise la FFT pour localiser les pics et donc identifier les notes dont on connait la fréquence théorique. La précision n'est donc pas un problème dans ce cas. J'aurais même un résultat juste avec un musicien qui joue faux !.
Dans le cas qui semble intéresser GALINABUZZ , il faut augmenter la dimension de l'échantillon pour améliorer la précision comme le suggère PATRICE99. Cette méthode a ses limites: Outre le fait que les temps de calcul s'allongent, il faut disposer d'un échantillon sonore suffisant. 32768 c'est déjà presque une seconde. En musique, il n'est pas courant qu'une note dure aussi longtemps.
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Oui, une fois que l'échantillon à analyser loge completement dans la fenetre de calcul, il n'est plus nécessaire d'augmenter la taille de la fenetre, les résultats seront les memes.
cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4 -
Bonjour

Bravo comemich pour ce code

D'abord, je suis béotien en fft, et je ne travaille sur ce sujet que depuis quelques jours, donc il ne faut pas m'en vouloir si ma question n'est pas pertinente.

Voila, je souhaiterais savoir pourquoi la fonction Magnitude retourne un tableau dont le Dim est égal à la moitié du Dim du tableau Transformées, et seule la première moitié du tableau Transformée est traitée.

Merci par avance
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
En réalité, le tableau de la transformée a la même dimension que le tableau d'origine mais les valeurs qu'il contient sont symétriques. Donc, seule la moitier est utilisable.
cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4 -
Bonjour comemich

Merci pour ta réponse limpide. Il est vrai que comme je ne connais rien aux fft, cette symétrie n'était pas évidente.

Est-ce que je peux t'importuner avec une autre question ?
Dans cette même fonction, tu divises par deux la racine carrée pour obtenir l'amplitude, alors que dans les explications d'arnal82, cette division n'apparaît pas. Cela veut-il dire qu'une magnitude donnée n'a pas de signification, et qu'il faut seulement s'intéresser aux magnitudes relatives du spectre ?

Merci encore
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Je ne sais pas pourquoi on divise par deux. J'ai trouvé la recette de cuisine numérique sur le site de Jean Debord et je l'ai mise au goût de visual Basic mais je ne sais pas, dans le détail, ce qui fait le succès de la sauce.
cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4 -
ok, merci en tout cas pour ta recette de cuisine. De toute façon, dans un premier temps, c'est l'amplitude relative qui m'intéresse, donc pas de souci.
Voila, c'est tout, merci encore et bonne année.
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Je viens de me renseigner sur le site de Jean Debord. C'est effectivement une erreur de diviser par deux. J'ai mal interprèté l'expression "Double Magnitude" en turbo Pascal qui ne représente pas une valeur deux fois supérieure à la magnitude, mais la valeur de magnitude en double précision.
Dans la pratique, ça ne change pas grand chose. Comme tu l'as dit, ce sont les valeurs relatives qui nous intéressent quand on analyse le spectre. Mais pour plus de rigueur mathématique, il serait souhaitable de corriger le code de la ligne 52 comme suit:

M(Id) = Math.Sqrt(Math.Pow(Transformée(Id).Réel, 2) + Math.Pow(Transformée(Id).Imaginaire, 2))
cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4 -
J'ai corrigé et je t'ai mis 10/10 dans la foulée, parce que tu as vraiment fait du bon boulot.
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2 -
Bonjour comemich,

Merci pour le code et les explications.

En plus de la visualisation du spectre je voudrais faire également un vu-mètre(ou un bargraph pour chaque voie et j'aimerai savoir quelle peut être la magnitude maximum d'un signal.

Merci et bon week-end.

Cheyenne
comemich
Messages postés
39
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
23 août 2017
-
Théoriquement, la magnitude est comprise entre -1,79769313486231570E+308 et 1,79769313486231570E+308 mais dans la pratique,je ne sais pas.