1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| function TIPE %transformer le script en fonction
%**********************************************************************************************************
% DETECTION SONORE
%**********************************************************************************************************
%IMPORTATION DE L'ENREGISTREMENT A ETUDIER
[x,fs,Nbits]=wavread('C:\Users\Hugo\Etudes\ECAM\TIPE detection sonore\Sons Wav\diapason 440 + dehors CUT');
%Fréquence d'échantillonnage
fs;
%Nombre de bits
Nbits;
%Longueur du signal "L" et nombre de colonne "C" de "x"
[L,C]=size(x);
%Définition de la Période
T=1/fs;
%Définition du vecteur temps:
t=(0:L-1)*T;
%dessiner le signal (fichier .wav)
figure(1)
plot(t(1:L),x(1:L))
%limiter l'étude de 0 à 1 seconde
xlim([0 1])
title('Signal bruité enregistré')
xlabel('Temps (secondes)')
%TRANSFORMEE DE FOURIER (Fast Fourier Transform)
Y=fft(x,L)/L;
%Définition du vecteur fréquence
f=linspace(0,fs/2,floor(L/2)); %Théorème de Shannon (sinon repliement)
%dessiner la fft
figure(2)
plot(f(1:floor(L/2)),abs(Y(1:floor(L/2))))
%limiter l'étude
xlim([20 4000])
title('Transformée de Fourier rapide de x(t)')
xlabel('Fréquence (Hz)')
ylabel('|Y(f)|');grid
%FILTRAGE (fft-ifft)
%dessin du gabarit (=du contour du spectre à conserver)
ymax=max(ylim);
hold on
line([0 430 430 450 450 L],[ymax ymax 0 0 ymax ymax],'color','r')
%filtrage
for i=1:L;
g(i)=Y(i)*heavi(abs(Y(i))-seuila(i,ymax));
end
figure(3)
i=1:L;
plot(i,abs(g(i)))
xlim([20 4000])
title('FFT de x(t) filtrée')
xlabel('Fréquence (Hz)')
ylabel('|Y(f)|');grid
%Transformée de Fourier inverse
figure(4)
iY=ifft(abs(g),L);
plot(t(1:L),real(iY(1:L)));
xlim([0 1])
title('Son produit par le diapason')
xlabel('Temps (secondes)')
%écoute du signal filtré
wavplay(real(iY),fs)
wavwrite(real(iY),fs,'diapaSon fin')
%Définition des fonctions
function s=seuila(n,ymax)
plage=[ymax 0;0 430;ymax 450];
if n>=plage(1,2)
s=plage(1,1);
end
if n>=plage(2,2)
s=plage(2,1);
end
if n>=plage(3,2)
s=plage(3,1);
end
function v=heavi(x)
if x<=0
v=0;
else
v=1;
end |
Partager