spr_lab2.docx

(2750 KB) Pobierz

WOJSKOWA   AKADEMIA   TECHNICZNA

 

SPRAWOZDANIE Z

LABORATORIUM

NR 2

SYSTEMY DIALOGOWE
 

st. kpr. pchor. Damian RAINKO
I9G1S1

 

 

 

 

 

 

 

 

 

1.     TREŚĆ ZADANIA

0. Dokonać rejestracji słowa (słów) zawierającego:

- dwie samogłoski (różne);

- spółgłoskę nosową (m, n, ń);

- spółgłoskę trącą bezdźwięczną (f, h, s, ś, sz, cz);

- spółgłoskę zwartą (p, t, k, b, d, g).

Przyjąć: mono, częstotliwość próbkowania =22050 Hz, liczba bitów na próbkę w konwersji A/C=16.

Zarejestrowane słowo stanowi L-próbkowy sygnał , gdzie . Będziemy analizować sygnał pozyskany w środowisku umiarkowanie zakłóconym. Usunąć ciszę z sygnału , wykonać wykres tego sygnału w funkcji czasu,

1.       Przetwarzanie wstępne: z powodu takich czynników jak ofset konwertera A/D i szumu o częstotliwości 50 (60) Hz w sygnale, digitalizowany sygnał mowy ma niezerową wartość średnią, niezbędną dla wielu sposobów przetwarzania. Utworzyć sygnał o zerowej wartości średniej:

dla

Wykonać wykres sygnału w funkcji czasu.

2.       Sygnał podzielić na ramki (segmenty) o długości 256. Dla każdej ramki wyznaczyć:

·          wartość największą M

·          energię sygnału

·          współczynniki LPC (przyjąć p=12)

·          liczbę przejść przez zero PPZ

                                          gdzie:

 

Wykonać odpowiednie wykresy dla sekwencji ramek sygnału. Ocenić przebieg wykresów dla różnych fonemów sygnału mowy.

 

3.       Wyznaczyć i porównać spektrogramy sygnału :

·         pokazać wpływ oknowania (przyjąć okna: prostokątne i Hamminga)

·         dobrać szerokość i przekrycie okien.

 

4.       Wybrać i narysować pięć ramek, po jednej z każdego z fonemów zarejestrowanego słowa. Dla każdej ramki:

a)      dokonać analizy autokorelacyjnej [xcorr(sig)];

b)      wyznaczyć 256-punktowe FFT z oknem Hamminga. Narysować widmo amplitudowe dla częstotliwości z zakresu ;

c)      dokonać analizy formantów dla fonemów (tam gdzie to możliwe) za pomocą poniższych metod:

Metoda I:

§         wyznaczyć widmo amplitudowe

[abs(fft(sig)];

§         wyznaczyć widmo amplitudowe

[abs(fft(hamming(256) .* sig))];

§         wyznaczyć widmo mocy

[10 log10(abs(fft(hamming(256) .* sig)))];

Metoda II:

§         wyznaczyć widmo predykcji liniowej:

a=lpc(hamming(256) .* sig, 16);

h=abs(1 ./ fft([a zeros(1,256-17)]));

Wykonać wykresy widm i wyznaczyć częstotliwości formantowe (porównać wyniki w/w metod);

d)      ramki rozszerzyć o 256 próbki zerowe i dla takiej ramki wyznaczyć widmo 512-punktowe („nowa” ramka powinna składać się z 256 próbek „starej” ramki w otoczeniu 128 próbek zerowych z przodu i z tyłu analizowanego sygnału mowy; zastosować 512-punktowe okno Hamminga); narysować wykres widma amplitudowego, porównać z widmem z punktu b)

 

 

 

 

 

2.     REALIZACJA ZADANIA

0)Do realizacji zadania wykorzystałem słowo ‘muszka’. Spełniało one wszystkie wymagania zadania. Zostało zarejestrowane przy pomocy mikrofonu z parametrami zalecanymi w treści zadania.

D:\sd\wykresy\1.jpg

Rys1. Wykres słowa ‘muszka’ w funkcji czasu

1)      Według treści zadania utworzyłem sygnał z(i) o zerowej wartości średniej. Ten element jest realizowany przez następujący kod programu Matlab:

 

tmp=0;      %zmienna pomocnicza

for i=1:1:dl

    tmp=tmp+s(i);       % obliczenie sumy s

end;

ni=tmp/dl;        %oblicznie ni

z=zeros(1,dl);     

for i=1:1:dl

    z(i)=s(i)-ni;   %pomniejszenie sygnalu wejsciowego o wartosc srednia   

end;

 

D:\sd\wykresy\2.jpg

Rys2.Wykres sygnału wejściowego o zerowej wartości średniej w funkcji czasu

2)      Według polecenia podzieliłem sygnał na ramki o długości 256. Otrzymałem w ten sposób 49 pełne ramki. Niestety cały sygnał nie dał się podzielić na ramki o długości 256 i ostatnia niepełna ramka została obcięta.

 

lram=floor(dl/256); %ilosc pelnych ramek w sygnale

 

              W dalszej części zadania dla każdej ramki wyznaczyłem wartość największą, energię sygnału, współczynnik LPC (z parametrem p=12) i liczbę PPZ .

 

for i=1:n:dl-n

  

        maxy_we(l)=max(z(i+n)-z(i));  %wyszukiwanie maksimum z kazdej ramki

        energia_we(l)=log(sum(z(i:i+n).^2));%obliczanie energi każdej ramki

  ppz_we(l)=sum(abs(sign(z(i:i+n-1))-sign(z(i+1:i+n))))/2;%obliczenie              ppz kazdej ramki

        lpc_we=lpc(z(i:i+n-1),12); % obliczanie lpc kazdej ramki

        lpc_mac(k,:)=lpc_we

        k=k+1;  

        l=l+1;

end;

 

D:\sd\wykresy\3.jpg

Rys3. Wykres wartości maksymalnych dla kolejnych ramek

D:\sd\wykresy\4.jpg

Rys4. Wykres energii dla poszczególnych ramek

D:\sd\wykresy\5.jpg

Rys5. Wykres PPZ dla poszczególnych ramek

D:\sd\wykresy\6.jpg

Rys6. Wykres lpc dla współczynnika 2 dla poszczególnych ramek

D:\sd\wykresy\7.jpg

Rys7. Wykres lpc dla współczynnika 3 dla poszczególnych ramek

D:\sd\wykresy\8.jpg

Rys8. Wykres lpc dla współczynnika 4 dla poszczególnych ramek

D:\sd\wykresy\9.jpg

Rys9. Wykres lpc dla współczynnika 5 dla poszczególnych ramek

D:\sd\wykresy\10.jpg

Rys10. Wykres lpc dla współczynnika 6 dla poszczególnych ramek

D:\sd\wykresy\11.jpg

Rys11. Wykres lpc dla współczynnika 7 dla poszczególnych ramek

D:\sd\wykresy\12.jpg

Rys12. Wykres lpc dla współczynnika 8 dla poszczególnych ramek

D:\sd\wykresy\13.jpg

Rys13. Wykres lpc dla współczynnika 9 dla poszczególnych ramek

D:\sd\wykresy\14.jpg

Rys14. Wykres lpc dla współczynnika 10 dla poszczególnych ramek

D:\sd\wykresy\15.jpg

Rys15. Wykres lpc dla współczynnika 11 dla poszczególnych ramek

D:\sd\wykresy\16.jpg

Rys16. Wykres lpc dla współczynnika 12 dla poszczególnych ramek

Na podstawie wykresu Rys1. obliczyłem jaki zakres ramek zajmują poszczególne fonemy słowa muszka:

M: ramki od 1 do 8

U: ramki od 9 do 18

Sz: ramki od 19 do 28

K: ramki od 34 do 36

A: ramki od 36 do 49

Z wykresu energii dla ramek Rys4. widać, że samogłoski (u, a) mają większą energię niż inne fonemy. Spółgłoska zwarta (k) i spółgłoska tracąca bezdźwięczność (sz) mają natomiast najmniejszą energię. Energia spółgłoski nosowej zaś wynosi około połowy energii samogłosek. Wykres ppz (przejść przez zero) Rys5. pokazuje jak często podczas trwania fonemu jego wykres przechodzi przez zero. Największą wartość tego współczynnika ma spółgłoska tracąca dźwięczność. Ta wartość dla tej spółgłoski jest wielokrotnie większa niż innych fonemów. Najmniej razy przez zero przechodzi wykres spółgłoski nosowej.

 

3)      Do wyznaczenia spektrogramu sygnału z(i) użyłem wbudowanej funkcji w program Matlab. Te zadanie realizuje następująca część kodu:

 

figure(fig);

spectrogram(z,ok,ok/2);

title('Spektrogram okno prostokatne szerokosc 128, przekrycie 50%');

fig=fig+1;

 

figure(fig);

spectrogram(z,hamming(ok),ok/4);

title('Spektrogram okno hamminga szerokosc 128, przekrycie 50%');

fig=fig+1;

 

ok=256;

figure(fig);

spectrogram(z,ok,ok/4);

title('Spektrogram okno prostokatne szerokosc 256, przekrycie 25%');

fig=fig+1;

 

figure(fig);

spectrogram(z,hamming(ok),ok/4);

title('Spektrogram okno hamminga szerokosc 256, przekrycie 25%');

fig=fig+1;

 

figure(fig);

spectrogram(z,ok,ok/2);

title('Spektrogram okno prostokatne szerokosc 256, przekrycie 50%');

fig=fig+1;

 

figure(fig);

spectrogram(z,hamming(ok),ok/2);

title('Spektrogram okno hamminga szerokosc 256, przekrycie 50%');

fig=fig+1;

 

ok=512;

figure(fig);

spectrogram(z,ok,ok...

Zgłoś jeśli naruszono regulamin