Code de détection Matlab (traitement d’un signal audio)
Bonjour.
Je travaille sur un hydrophone sous-marin qui enregistre en continu (24h/24h) tous les sons présents sous l’eau. Je travaille sur Matlab R2001b (7.13.0.564). Le but de mon étude est de filtrer le son afin d’observer le son des cétacés (notamment ceux émettant en basse fréquence. Outre l’utilisation de la fonction « filter », j’aimerais faire un filtre de détection par rapport à l’énergie du signal. Je voudrais donc prendre un morceau du signal où je n’aurais observé (visuellement et auditivement) aucun son autre que le bruit de fond (pas de cétacé, pas de bateau… Juste le bruit de la mer lui-même) et définir que toute séquence supérieure en énergie à ce morceau contient un bruit d’intérêt (que cela soit bateau, cétacé…). De cette manière, je gagnerai du temps en écoute du fichier audio en écoutant que les morceaux d’intérêt au lieu d’écouter les 24h d’enregistrements.
Actuellement l’hydrophone n’a pas été déployé donc je n’ai pas à ma disposition beaucoup de fichiers pour m’entrainer. J’ai réalisé un code sur le peu de son que j’ai. Le problème des sons que j’ai pour l’instant c’est qu’il y a présence de cétacés sur pratiquement tout le fichier donc il y a beaucoup de détection. Mon code a l’air de marcher mais je voudrais savoir votre avis et surtout si vous pensez que cela peut marcher sur un fichier plus long.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [x,fs]=wavread('Take57.wav');
[N,p]=size(x);
t=0:1/fs:(N-1)/fs;
position1=1e7 %entre position 1 et 2, je n'ai observé aucune détection
position2=1.2e7
a=x(position1:position2);
M=max(abs(a));
for k=1:N
if x(k)>M
y(k)=1;
else
y(k)=0;
end
end
figure;
plot(t,y,'r')
title('détection avec la section d interet') |
Merci par avance