détection du son + analyse

Bonjour à tous,

Je réalise un projet ayant pour but la réalisation d'une main robotisé marchant par le son . On joue une note à la flûte (donc un son pur,par exemple avec un la :440Hz) et les doigts se referment (à l'aide de servomoteurs). Donc normalement je n'ai pas besoin d'utiliser les FFT vu que mon son est pur . Mais mon problème est que je n'arrive pas à comprendre comment je peux détecter une fréquence.

Mon idée était d'avoir un microphone branché à l'Arduino mais après c'est le vide totale, je ne sais pas si il existe des fonctions permettant une détections de fréquences, ou dois je réaliser un montage en complément ? bref je suis un peu perdu et désemparé ^^'.

Une aide me serait bien utile, Merci
cordialement.

ymsiema:
On joue une note à la flûte (donc un son pur,par exemple avec un la :440Hz) et les doigts se referment (à l'aide de servomoteurs). Donc normalement je n'ai pas besoin d'utiliser les FFT vu que mon son est pur .

Ton son ne sera jamais pure à 100%, si c'était le cas ta flute serait un vrai générateur de fonction sortant une sinusoïde parfaite :wink:

ymsiema:
Mais mon problème est que je n'arrive pas à comprendre comment je peux détecter une fréquence.

Mon idée était d'avoir un microphone branché à l'Arduino mais après c'est le vide totale, je ne sais pas si il existe des fonctions permettant une détections de fréquences, ou dois je réaliser un montage en complément ? bref je suis un peu perdu et désemparé ^^'.

Cherche "goertzel" sur google tu devrais être content :wink:

Je te joint un de mes anciens projets sur goertzel justement.
Je t'avertis tout de suite le code ne marche pas super bien, la détection est toujours à +/-40Hz de la fréquence voulu.
Pour régler le problème il faudrait revoir la partie échantillonnage avec un timer + centrer la freq. d'échantillonnage sur les bandes de fréquences à détecter.
Mais j'ai pas le temps ... et j'ai aussi pas mal la flemme de le faire :grin:

goertzel_opti.zip (2.47 KB)

Merci beaucoup, je vais déjà regarder ça puis je vais voir ce que je peux faire :smiley:

Sinon je n'arrive pas à ouvrir ton dossier ^^': "Error 503 Service Unavailable"

ymsiema:
Sinon je n'arrive pas à ouvrir ton dossier ^^': "Error 503 Service Unavailable"

Ha ... les serveurs arduino.cc sont (encore) plantés ... :roll_eyes:

Bon attendant que ça remarche :
http://www60.zippyshare.com/v/22816712/file.html

Merci beaucoup, mais une dernière question en faite j'ai le choix entre : goertzel ou FFT ?
Bonne soirée ! :slight_smile:

ymsiema:
Merci beaucoup, mais une dernière question en faite j'ai le choix entre : goertzel ou FFT ?

En réalité les deux algo sont basé sur le même principe, mais pas pour les même applications.
La transformation de Fourier (FFT) a pour but d'avoir le spectre d'un signal découpé par tranche de fréquence.
L'algo de Goertzel a pour but de détecter l'amplitude (et par extension la présence) d'une certain fréquence dans un signal.

L'algo de goertzel est utile pour détecter des fréquences bien précise en nombre réduit, la FFT est utile pour détecter toute une gamme de fréquence sans distinction.

Il a également la possibilité de faire un filtre audio hardware

Merci beaucoup sky

Sinon B@tto , parlerais tu de réaliser des filtres passe bande? car si c'est le cas, on m'a expliqué que c'était très galère à mettre en pratique étant donnée que des résistance et les condensateur ont une marge d'erreur ce qui fait que le montage n'est pas précis...
Si tu parles d'autres choses peux tu me dire ce que tu entends précisément par hardware (un shield?)

on m'a expliqué que c'était très galère à mettre en pratique étant donnée que des résistance et les condensateur ont une marge d'erreur ce qui fait que le montage n'est pas précis.

"On" devrait déjà donner plus de renseignements sur le peigne de fréquence avant de dire que c'est galère.
Quel est le nombre de fréquences attendues ?
Quel est l'espacement (en Hz) entre les fréquences ?
Une fréquence ne fera pas pile 440 Hz par exemple mais 440 Hz +/- x Hz. Quel est la valeur de ce x ?

Effectivement si ces données ne sont pas connues ce ne sera pas "galère" mais "impossible" et il faudra se rabatre sur une analyse de Fourier.

B@tto:
Il a également la possibilité de faire un filtre audio hardware

Toute de suite la solution de facilité :grin:

68tjs: et bien je veux jouer les notes d'une octave à la flute (262 Hz 294 Hz 330 Hz 349 Hz 392 Hz 440 Hz 494 Hz, soit do re mi fa sol la si)
Pourquoi ces galères?,Et bien un de mes profs m'a expliqué que "oui" ça allait très bien marcher sur simulink et isis proteus(donc en théorie), mais en pratique pour réaliser un passe bande précis c'était très difficile.

Après si vous me dites que le "x"(espace entre les fréquences) est suffisant (ici en l’occurrence on tourne autour de 20 à 40 hz) et bien je vais tester ça.
:slight_smile:

Et pour l'avoir vu utiliser avec succès dans des produits commerciaux, la détection des pics + mesure de période marche assez bien sur microcontroleur tout en étant beaucoup moins consommateurs de cpu que les méthodes de traitement de signal.

Deux points :
1)Je ne doute pas que tu avais toute l'information sur les valeurs de fréquence mais nous n'avions connaissance que d'une valeur de fréquence donc pour moi, n'étant pas joueur de flûte, impossible de conclure et donc d'éliminer une solution.

  1. Maintenant que le cahier des charges est connu, je dirais qu'avec 3 fréquences bien éloignées les une des autres cela aurait valu le coup de regarder de près surtout si tu as du matériel de mesure à ta disposition pour la mise au point.
    Mais avec un peigne de 7 fréquences rapprochées et l'imprécision de la fréquence émise car je ne pense pas qu'avec une flûte le "la" fera exactement 440hz +/-1hz la partie n'est pas jouable avec des filtres analogiques.
    Si tu peut utiliser un analyseur de spectre il sera intéressant que tu joue de la flûte devant un micro relié à l'analyseur de spectre, histoire de chiffrer les valeurs de niveau et de fréquence pour chaque fréquence discrète ainsi que le niveau des harmoniques.

Pour rester (peut-être) dans le domaine des filtres je te donne une info toute chaude : il y a 1 heure en cherchant tout autre chose je suis tombé sur la note d'application AVR223 sur des filtres numériques réalisés avec un ATMega, filtres numériques donc du logiciel. Si tu as des connaissances dans le filtrage numérique cela vaut peut-être le coup que tu y jette un oeil.

je vous remercie tous pour vos réponses, je ne peux pas répondre grand chose pour le moment vu que je ne connais pas toutes les techniques cité ci dessus, donc je vais me pencher sur celles la et je vous tiens au courant :wink: si d'autres ont aussi des suggestions je suis toujours preneur et curieux
Merci beaucoup en tout cas! :slight_smile:

Quelques pistes
1/ Hacker un petit accordeur électronique pour guitare en récupérant son signal de sortie.

2/ S'inspirer de cet accordeur électronique chromatique pour piano (qui identifie précisément toutes les notes)

3/ Echantillonner le son et utiliser un algorithme d’auto-corrélation temporelle sur l'Arduino, ce sera sans doute plus simple que de passer par une décomposition en fréquences (FFT).