Obtenir la fréquence d'un son?

oorbbb

Membre confirmé
3 Juillet 2003
10
0
Je voudrais trouver un moyen permettant de connaître la fréquence d'un son, par exemple en provenance du micro.
Je ne sais pas trop dans quelle direction chercher
confused.gif

Merci!
 
Ok, je vais investiguer cette piste qui me semble intéressante. Merci beaucoup, je donnerai des nouvelles si j'arrive à mes fins!
 
Salut,
(Je fais de gros raccourcis, car il faudrait des pages pour expliquer correctement ce qui suit)
Un son peut être assimilé à une somme de sons purs, appelés harmoniques. L'harmonique de plus basse fréquence, celle qui pourrait servir à donner la "note" du son, est la fondamentale. Les fréquences des harmoniques sont des multiples de la fréquence de la fondamentale. Elles donnent la richesse du son, le timbre. Lorsqu'on additionne tout ce petit monde, on retrouve notre son original.

Lorsque tu enregistres un son avec l'entrée audio de ton mac, tu te retrouves avec une liste de nombres: des échantillons. A 44.1 Khz, il faut 44100 échantillons pour représenter une seconde de signal sonore. Les valeurs des échantillons représentent les positions successives de la membrane de ton micro lorsque tu la fais vibrer en parlant devant.

Tu passes donc d'une bouillie de fréquences à une suite d'échantillons.

Pour faire le chemin inverse, et retrouver des fréquences, tu peux prendre des paquets d'echantillons (par exemple 512, 1024...), et leur appliquer une DFFT. (Digital Fast Fourier Transform, Digital car notre son est échantilloné).

Je ne sais pas ce que tu comptais faire, mais une simple DFFT ne permet pas de retrouver la fondamentale, ou la note d'un son, elle permet uniquement de calculer le contenu harmonique d'une portion de son.

Explication: lorsque tu calcules une DFFT sur 512 points, le résultat est le volume d'une fondamentale dont la fréquence correspond justement à 512 points, et le volume de toutes les harmoniques qui suivent. En gros, la FFT te donne une bête combinaison de fréquences qui correspondent à tes 512 échantillons, mais elle ne peut pas te donner la combinaison originale.

Si c'est pour un simple égaliseur, pour voir la quantité de graves et d'aigus, comme dans iTunes, ca roule. Si c'est pour trouver LA fréquence d'un son, il faut plutot chercher a "Pitch tracking" ou "Pitch tracker".

A ciao
wink.gif


PS: La DFFT est un algorithme, il en existe optimisées Altivec, mais ca peut être calculé par n'importe quel processeur.


 
Merci pour tes explications! J'aurais besoin de connaître la fondamentale, en fait je voudrais faire un accordeur, qui prendrait soit l'entrée micro ou le built-in mic (en espérent que les interférences extérieures...). Bref, il faudrait trouver un moyen de retrouver la note ou en tout cas pouvoir afficher en temps réel la fréquence jouée. Il faut en fait simuler un petit accordeur! Ca devrait être possible avec la puissance des machinnes actuelles?
 
oorbbb a dit:
Il faut en fait simuler un petit accordeur! Ca devrait être possible avec la puissance des machinnes actuelles?

Oui, car je l'ai fait. Bon travail !
(En fait, pas personnellement mais quelqu'un qui travaille sur notre projet commun)

Cordialement
 
Ah! Bonne nouvelle!
Pourrais-tu m'en dire un peu plus: quel langage de proggrammation, quelles technologies... Est-il possible d'obteinr les sources ou une version compilée pour voir ce que ça donne?
Merci d'avance
 
Bonjour,

Bon, en gros,
peut importe le langage (nous c'est du C, mais en Logo cela peut marcher aussi)

La FFT te donne la repartition des fréquence sous forme de pics, le probleme est d'isoler le bon pic, qui te donnera la fondamentale (ce que tu cherche)

En général une note donne un pic en frequence assez fort pour la fondamentale, puis pour les harmoniques un pic plus petit a deux fois la frequence, puis trois fois, puis quatre fois etc.

Le probleme est de reperer le bon pic.

Une astuce consiste a faire la FFT de la FFT qui mettra en évidence le fait qu'il ya des harmoniques regulierement espacés.
Le pic principal donnera (normalement) la frequence fondamentale recherchée.

Cordialement
 
Ok, je vois... mais j'ai une petite question: sur le site d'apple, FFT semble être destiné aux G4 (Velocity Engine). Mais FFT, ce n'est pas avant tout un algorithme? Ou puis-je trouver une librairie qui l'implémente (aussi pour G3) et éventuellement quelques exemples de code?
 
Bonjour,

Un conseil, évite de trop croire ce qu'il y a sur le site Apple
wink.gif


Le FFT c'est un algo, tu le programme en ce que tu veux.

Voici le site de la mort qui tue, avec des sources C (le DFT à pied)

http://www.dspdimension.com/

Quand tu auras epluché ça, tu sera le FFT master...

Cordialement
 
Ok, encore merci!!!
C'est le lien qui me manquais
laugh.gif

Avec ça j'ai de quoi m'amuser pour les vacances!
Je vais pouvoir en faire ma page d'acceuil
wink.gif

Merci a tous pour vos conseils avisés.
 
Il y a plusieurs techniques pour détecter les fréquences, a peu près toutes doivent êtres basées sur des combinaisons de DFFT (d'ailleur, je me corrige, c'est pas Digital, c'est Discret). Peut être aussi également avec des wavelet ou des réseaux de filtres (ou de neurones, mais c'est peut être pas encore vraiment temps réel
smile.gif
)

Mais dans le cas d'un accordeur, tu t'attends à une fréquence particulère, et ça simplifie nettement le problème. Du coup, c'est peut être même possible avec un filtre résonnant.





 
TylerOnZeWeb a dit:

( si tu veux en savoir plus sur les FFT et surtout sur la fondamentale, je peux t'envoyer par e-mail notre projet , c'est relativement bien exliquer et pas compliqué !!)
Voila !

Ca m'intéresserait de voir votre projet! Tu peux me l'envoyer à l'adresse suivante:
[email protected]
(Si le fichier n'est pas trop gros (<2,5M))

 
jemeor a dit:
Mais dans le cas d'un accordeur, tu t'attends à une fréquence particulère, et ça simplifie nettement le problème. Du coup, c'est peut être même possible avec un filtre résonnant.

En effet, je connais à l'avance la fréquence qui doit être atteinte, mais il faut en outre savoir afficher la fréquence jouée (affichage graphique d'une barre ou son centre représente la bonne note). Est-ce qu'un filtre résonnant me permet de le faire? Peut-être que ça pourrait fonctionner en utilisant une série de filtres résonnants autour de la fondamentale; a chaque filtre correspondrait une 'led' qui s'allumerait... Mais est-ce assez précis? Les harmoniques riquent peut-être de faire des interférences dans cette technique?
 
oorbbb a dit:


En effet, je connais à l'avance la fréquence qui doit être atteinte, mais il faut en outre savoir afficher la fréquence jouée (affichage graphique d'une barre ou son centre représente la bonne note). Est-ce qu'un filtre résonnant me permet de le faire? Peut-être que ça pourrait fonctionner en utilisant une série de filtres résonnants autour de la fondamentale; a chaque filtre correspondrait une 'led' qui s'allumerait... Mais est-ce assez précis? Les harmoniques riquent peut-être de faire des interférences dans cette technique?

C'est un problème très interressant, mais je n'ai pas assez de connaissances dans le domaine pour te donner une réponse tranchée. Mais a mon avis, des gens ont surement déja essayé le coup du filtre. Il faut chercher à savoir s'ils ont reussi
smile.gif


Si j'etais a ta place, je commencerais par me demander si c'est vraiment utile de vouloir obtenir la fréquence. A mon avis, c'est très difficile de rivaliser avec l'oreille humaine. Peut être que ton logiciel devrait se contenter de faire diapason, et de laisser le musicien ecouter la déviation entre la fréquence théorique (que ton soft enverait sur la sortie audio), et la note qu'il joue. Je dis peut être une bêtise: je crois qu'un humain doit être capable d'entendre une différence de fréquence entre deux son, par exemple, deux cordes de guitare jouées à la même note, de l'ordre d'un ou deux dixièmes de Hertz. C'est a dire 5 secondes pour que les cordes reviennent en "phase". Il faudrait demander à un bon guitariste ou a un accordeur de piano
smile.gif


Ensuite, effectivement, je partirai sur un filtre resonnant assez pointu. (Cela dit, le code source est plus difficile à trouver que celui des FFT, mais peut être plus facile à utiliser. Chercher dans les projets open-source musicaux sur sourceforge.net )

Pour éviter que les harmoniques ne perturbent ton filtre de "mesure", tu peux deja préparer le son: filtrer une première fois avec un simple passe-bas, et peut-être le corriger pour qu'il soit toujours a la même puissance (il est impossible de jouer deux notes avec exactement le même volume), mais ca n'a peut être pas d'importance dans notre cas. Ensuite, faire varier la fréquence de resonnance de ton filtre (ne pas confondre avec la fréquence de coupure) par petit "pas" de quelques dixièmes de Hz autour de la fréquence théorique, et de mesurer avec quel "pas" le gain de sortie est maximal (ou alors avoir plusieurs filtres en parallèle). Ensuite, la différence entre cette fréquence mesurée et la fréquence désirée te donne le résultat que tu veux. Ca revient exactement à ton idée de mettre des filtres résonnant autour de la fondamentale. D'ailleur, le fait d'avoir 4, 8, 12... filtres en parallèle est hautement optimisable Altivec. De plus, avec une telle methode, le calcul peut se faire sur très peu d'echantillons, et donc avoir un excellent temps de réponse. Reste a voir si ca peux marcher
smile.gif
Ce qui devient dur avec ce schéma, c'est la détéction des fréquences trop éloignée de la fréquence de référence.
 
jemeor a dit:


Si j'etais a ta place, je commencerais par me demander si c'est vraiment utile de vouloir obtenir la fréquence. A mon avis, c'est très difficile de rivaliser avec l'oreille humaine. Peut être que ton logiciel devrait se contenter de faire diapason, et de laisser le musicien ecouter la déviation entre la fréquence théorique (que ton soft enverait sur la sortie audio), et la note qu'il joue. Je dis peut être une bêtise: je crois qu'un humain doit être capable d'entendre une différence de fréquence entre deux son, par exemple, deux cordes de guitare jouées à la même note, de l'ordre d'un ou deux dixièmes de Hertz. C'est a dire 5 secondes pour que les cordes reviennent en "phase". Il faudrait demander à un bon guitariste ou a un accordeur de piano
smile.gif


Je suis tout a fait d'accord, mais ce style d'accordeur existe déjà et exige un environnement silencieux. L'idée c'est de permettre également de brancher directement la guitare sur l'entrée son (comme un véritable accordeur) car dans un local de répèt ou avant un concert il y a toujours du bruit
smile.gif
!. Je pourrais éventuellement proposer a l'utilisateur de choisir sa méthode d'accordage (oreille ou visuelle).