Vous êtes sur la page 1sur 2

Université Sultan Moulay Slimane

Ecole Nationale des Sciences Appliquées de Khouribga


Filière : 2ème années IRIC
Elément : Initiations au traitement de la parole
TP2 : Caractérisation du signal de parole à l’aide d’une analyse formantique

But de TP : Ce TP a pour but de caractériser le signal vocal enregistré en utilisant une analyse
formantique.

Lancer « COLEA » et appeler le signal « bababa_h1_1 ».

1- Présenter le spectrogramme correspondant


2- Présenter la courbe de la fréquence fondamentale en utilisant l’approche cepstrale.
3- Présenter la densité spectrale d’énergie
4- Présenter l’enveloppe spectrale à t=340 ms et à t=420 ms, donner les valeurs des
formants pour ces deux instants et leurs amplitudes. Que remarquez-vous concernant
les amplitudes ? (sélectionner la méthode LPC puis la méthode FFT, prendre l’ordre de
LPC=8 coefficients, la taille de FFT est 512 points)
5- La même question précédente mais avec ordre de 32 coefficients. (Que remarquez-
vous).
6- Copier les codes suivants :

«
function [F] = spFormantsLpc(a, fs)
r = roots(a);
r = r(imag(r)>0.01);
F = sort(atan2(imag(r),real(r))*fs/(2*pi));
save spFormantsLpc F;
end
»

«
function [a P e est_x] = spLpc(x,fs, ncoef)

[a P] = lpc(x, ncoef);

est_x = filter([0 -a(2:end)],1,x); % Estimated signal


e = x - est_x; % Residual signal

save spLpc est_x a P e;


end
»

«
function [F, T, FF] = spFormantsTrackLpc(x, fs, ncoef, frame_length,
frame_overlap, window, show)

x=wavread('bo_s_14');
fs=22050;
frame_length = 10;
frame_overlap = 5;
window = 'hamming';
ncoef=24;
N = length(x);

nsample = round(frame_length * fs / 1000); % convert ms to points


noverlap = round(frame_overlap * fs / 1000); % convert ms to points
window = eval(sprintf('%s(nsample)', window)); % e.g., hamming(nfft)

pos = 1; t = 1;
FF= [];
F = []; % formants
T = []; % time (s) at the frame
mid = round(nsample/2);
while (pos+nsample <= N)
frame = x(pos:pos+nsample-1);
frame = frame - mean(frame);
a = spLpc(frame, fs, ncoef);
fm = spFormantsLpc(a, fs);
fm=fm(1:4);
FF=[FF fm];

for i=1:4 %i=1:length(fm)


F = [F; FF(i)]; % number of formants are not same for each frame
T = [T (pos+mid)/fs];
end
pos = pos + (nsample - noverlap);
t = t + 1;

end

t=(0:N-1)/fs;
subplot(2,1,1);
plot(t,x);
legend('Waveform');
xlabel('Time (s)');
ylabel('Amplitude');
xlim([t(1) t(end)]);

% plot formants trace


subplot(2,1,2);
plot(T, F, '.');
hold off;
legend('Formants');
xlabel('Time (s)');
ylabel('Frequency (Hz)');
xlim([t(1) t(end)]);

save spFormantsTrackLpc F T FF;


end
»
Représenter les formants à court-terme.

Vous aimerez peut-être aussi