Détection

Transcription

Détection
Détection
Le but de cet exercice est de réussir à trouver la période d’un métronome
même si cette période est masquée par un bruit englobant le son principal.
J’ai commencé par supposer que l’intervalle de temps s’écoulant entre deux
sons ne dépassait pas 2 secondes et ne pouvait pas non plus être plus court
que 100 ms.
Pour trouver cet intervalle, j’ai utilisé la technique de l’autocorrélation sur
mon signal audio. Cette méthode est très efficace lorsqu’il n’y a pas trop de
bruit parasite, d’où l’importance d’avoir de bons filtres.
L’autocorrélation est une technique qui permet d’identifier les répétitions
dans un signal. Or ces répétitions sont exactement celles d’un métronome ce
qui fait en sorte que cette méthode est à privilégier dans le cas qui nous
occupe.
Voici le résultat d’une autocorrélation qui utilise le bon filtre
Ensuite je crée des fenêtres de 50 ms qui recouvrent toute l’autocorrélation
et je reconstruis un nouveau signal qui a comme points la moyenne de
chacune des fenêtres.
Puis je prends le nombre de points équivalents à deux secondes en
commençant avec le point le plus élevé qui se trouve au centre du signal et
en finissant vers la droite, deux secondes plus tard.
Enfin, j’identifie le premier sommet à droite en partant du début du signal de
deux secondes. Pour y parvenir, la technique consiste à prendre le premier
point qui est plus grand que les deux points à sa gauche et les deux points a
sa droite. Ce point doit aussi être plus grand que la moyenne du signal de
deux secondes, sans tenir compte de la première période de 100 ms qui
possède une valeur trop grande par rapport au reste du signal correspondant
à deux secondes. Ce procédé est simple mais peu robuste, néanmoins il
fonctionne très bien quand on l’applique sur des points qui représentent
chacun la moyenne d’une fenêtre de 50 ms.
Avec cette technique, j’obtiens de bons résultats tels que le démontrent les
tableaux suivants.
Nom de fichier
Filtre utilisé
Interval de temps
metro-clean1
metro-clean2
metro-clean3
metro-clean4
metro-clean5
metro-clean6
900Hz à 2000Hz
700Hz à 1200Hz
200Hz à 500Hz
400Hz à 800Hz
700Hz à 1200Hz
400Hz à 800Hz
857ms
513ms
664ms
423ms
1277ms
205ms
Nom de fichier
Filtre utilisé
Interval de temps
metro-lessnoisy1
metro-lessnoisy2
metro-lessnoisy3
metro-lessnoisy4
metro-lessnoisy5
metro-lessnoisy6
900Hz à 2000Hz
200Hz à 500Hz
1900Hz à 22049Hz
400Hz à 800Hz
700Hz à 1200Hz
1900Hz à 22049Hz
857ms
513ms
680ms
423ms
1276ms
205ms
Nom de fichier
Filtre utilisé
Interval de temps
metro-noisy1
metro-noisy2
metro-noisy3
metro-noisy4
metro-noisy5
metro-noisy6
200Hz à 500Hz
50Hz à 300Hz
1900Hz à 22049Hz
700Hz à 1200Hz
700Hz à 1200Hz
1900Hz à 22049Hz
836ms
492ms
682ms
417ms
1278ms
205ms
En dernier lieu, pour trouver la fréquence de la note de musique je prends
dans le signal original le point qui a la plus grande amplitude (ce qui
correspond normalement au moment où la note est jouée) et je fais la
transformée de Fourier sur les 20 ms qui entourent ce point. Cette technique
n’est pas toujours efficace, car il se peut qu’une partie du bruit ait une
amplitude plus grande que la note que je cherche.
Nom de fichier
Metro1
Metro2
Metro3
Metro4
Metro5
Metro6
clean
lessnoisy
noisy
1034 Hz
1077 Hz
215 Hz
2024 Hz
689 Hz
1034 Hz
3962 Hz
301 Hz
86 Hz
4694 Hz
689 Hz
1034 Hz
3962 Hz
775 Hz
474 Hz
689 Hz
1034 Hz
603 Hz