background image

 

 
 
 
 

Wojskowa Akademia Techniczna 

 
 
 
 

Systemy Dialogowe 

 

Sprawozdanie  

z ćwiczenia laboratoryjnego 

nr 2 

 

Temat ćwiczenia: 

Analiza sygnału mowy. Ekstrakcja charakterystyk w 

środowisku MATLAB

 

 

 
 
 
 
 
 

Grupa I9M1S1 

Mateusz Fruba 

 

Prowadzący: 

dr inż. Andrzej Wiśniewski 

 
 
 
 
 
 
 

background image

 

Zadanie 1. 
 
Zarejestrowane słowo stanowi L-próbkowy sygnał 



i

s , gdzie 

L

i

1

. Będziemy analizować 

sygnał 



i

s  pozyskany w środowisku umiarkowanie zakłóconym. Usunąć ciszę z sygnału 



i

s , 

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ł 



i

z  o 

zerowej wartości średniej: 



L

1

i

i

s

L

1

 

 

i

s

i

z

 dla 

L

i

1

 

Wykonać wykres sygnału 



i

z  w funkcji czasu. 

 
Rozwiązanie: 

[s, fs] = wavread(

'lab2_shortV1.wav'

);

%wczytwanie pliku

 

ts=1/fs;

 

L=length(sig);

 

t_sygnalu=ts*(L-1);

 

os_czasu=0:ts:t_sygnalu; 

 

u = ((1/L)*sum(s, 

'double'

 ));

 

z=zeros(1,L);

 

for

 j=1 : L 

 

    z(j)=s(j) - u;

 

end

;

 

 

 

W powyższym rozwiązaniu po wczytaniu pliku dźwiękowego wyznaczam czas całkowitego 
sygnału (t_sygnalu), który jest potrzebny do wykonania wykresu przebiegu czasowego 
oryginalnego sygnału. 
Jako pierwszy wyrysowywany jest wykres przedstawiający L-próbkowy sygnał s(i) w funkcji 
czasu: 

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

Przebieg czasowy oryginalnego sygnału

czas [s]

w

ar

to

śc

i p

be

k

 

background image

 

 
 
Następnie zgodnie z wzorami: 



L

1

i

i

s

L

1

 

 

i

s

i

z

 dla 

L

i

1

 

Wyznaczam z(i): 
 

u = ((1/L)*sum(s, 

'double'

 ));

 

z=zeros(1,L);

 

for

 j=1 : L 

 

    z(j)=s(j) - u;

 

end

;

 

 

Otrzymamy wykres sygnału z(i) o zerowej wartości średniej w funkcji czasu: 

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

-1.2

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

Przebieg czasowy sygnału z(i)

czas [s]

w

ar

to

śc

i p

be

k

 

 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 

Zadanie drugie: 
 

2.  Sygnał 



i

z  podzielić na ramki (segmenty) o długości 

N

256. Dla każdej ramki 

wyznaczyć: 

 

wartość największą M 

 

n

z

max

M

N

n

1

 

 

energię sygnału 

 

N

1

n

2

n

z

log

E

 

 

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

 

liczbę przejść przez zero PPZ 

 

 

N

2

n

1

n

z

sign

n

z

sign

2

1

PPZ

 

 

 

 

gdzie: 

 

 

 

 

 

 

0

n

z

dla

1

n

z

sign

0

n

z

dla

1

n

z

sign

 

 
 
 
 
Rozwiązanie: 

T = zeros(1,256);

 

M = zeros(1,256);

 

 

 

x=1;

 

W_rows=floor(L/256);

 

M=zeros(W_rows,1);

 

E=zeros(W_rows,1);

 

PPZ=zeros(W_rows,1);

 

LPC=zeros(W_rows,13);

 

W=zeros(W_rows,256);

 

tmp=zeros(1,256);

 

p=12;

 

 

 

for

 i=1:1:W_rows

 

    sumsig=0;

 

    

for

 i2=1:1:256;

 

        W(i,i2)=z(x);

 

        tmp(1,i2)=z(x)*z(x);

 

        

if

(i2>1)

 

            sumsig=sumsig+abs(sign(z(x))-sign(z(x-1)));

 

        

end

;

 

        x=x+1;

 

    

end

;

 

    

 

    M(i)=max(abs(W(i,:)));

 

    E(i)=log10(sum(tmp,

'double'

));

 

    LPC(i,:)=lpc(W(i,:),p);    

 

    PPZ(i)=0.5*sumsig;

 

end

;

 

 

 

l_ram=1:1:W_rows;

 

background image

 

Po  podzieleniu  sygnału  na  ramki  uzyskałem  57  pełnych  ramek  które  przechowywane  są  w 
zmiennej W. 
 
 
Kolejno wyznaczam dla każdej ramki: 
-wartość największą: zgodnie ze wzorem 

 

n

z

max

M

N

n

1

, odpowiada temu zapis w kodzie:  

 

M(i)=max(abs(W(i,:)));

 

-energię sygnału: zgodnie ze wzorem 

 

N

1

n

2

n

z

log

E

, odpowiada temu zapis w kodzie: 

 

E(i)=log10(sum(tmp,

'double'

)); 

-współczynniki LPC dla p=12: odpowiada temu zapis w kodzie: 

LPC(i,:)=lpc(W(i,:),p);

  

-liczbę przejść przez zero: zgodnie ze wzorem 

 

 

N

2

n

1

n

z

sign

n

z

sign

2

1

PPZ

,  

 
Odpowiadający temu zapis w kodzie:  

PPZ(i)=0.5*sumsig;  
gdzie  
sumsig=sumsig+abs(sign(z(x))-sign(z(x-1))); 
 

     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 

Następnie wyświetlone zostają kolejno wykresy: 
-Maksymalnych wartości w poszczególnych ramkach 
-Energia sygnału w poszczególnych ramkach 
-Wykres obrazujący liczbę przejść przez zero w poszczególnych ramkach 

0

10

20

30

40

50

60

0

0.5

1

1.5

Wykres maksymalnych wartości w poszczególnych ramkach

numer ramki

w

ar

to

ść

 n

aj

w

ks

za

 M

0

10

20

30

40

50

60

-3

-2

-1

0

1

2

Energia sygnału w poszczególnych ramkach

numer ramki

en

er

gi

sy

gn

u

0

10

20

30

40

50

60

0

20

40

60

80

100

Wykres obrazujący PPZ w poszczególnych ramkach

numer ramki

lic

zb

pr

ze

ć 

pr

ze

ze

ro

 

 
 
 

background image

 

Obserwując wykres wartości maksymalnych oraz wykres energii sygnału, zauważyć możemy 
że oba wykresy zachowują się podobnie z tym że dla wartości maksymalnych bliskich zeru 
energia przyjmuje wartości ujemne. Na wykresie wartości maksymalnych możemy także 
zaobserwować dużą różnicę pomiędzy wartościami maksymalnymi fonemów e1 oraz e2 nad 
pozostałymi fonemami. 
Za to na wykresie obrazującym ilość przejść przez zero możemy zaobserwować zależność 
pomiędzy gęstością sygnału a ilością ppz. 
Wartości największe i najmniejsze spośród wszystkich ramek: 
M

max

= 1.0046 

M

min

= 0.0161 

E

max

= 1.3729 

E

min

= -2.4928 

PPZ

max

= 99 

PPZ

min

= 4 

 
 
Wykresy prezentujące współczynniki LPC dla poszczególnych ramek: 

0

10

20

30

40

50

60

-3

-2

-1

0

1

2

3

W

ar

to

ść

 lp

c

Nr ramki

Współczynniki LPC 2,3,4 dla poszczególnych ramek

 

 
 

background image

 

0

10

20

30

40

50

60

-3

-2

-1

0

1

2

3

W

ar

to

ść

 lp

c

Nr ramki

Współczynniki LPC 5,6,7 dla poszczególnych ramek

0

10

20

30

40

50

60

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

W

ar

to

ść

 lp

c

Nr ramki

Współczynniki LPC 8,9,10 dla poszczególnych ramek

background image

 

0

10

20

30

40

50

60

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

W

ar

to

ść

 lp

c

Nr ramki

Współczynniki LPC 11,12,13 dla poszczególnych ramek

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 

10 

Zadanie trzecie 

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



i

z : 

 

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

 

dobrać szerokość i przekrycie okien. 
 

Wykresy sygnału z(i) po zastosowaniu spektrogramu dla stałej szerokości 1024, okna 
Hamminga oraz zmiennego przekrycia. 

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=1024 noverlap=32

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=1024 noverlap=128

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=1024 noverlap=512

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 

11 

Wykresy sygnału z(i) po zastosowaniu spektrogramu dla zmiennej szerokości, okna 
Hamminga oraz stałego przekrycia wynoszącego 128. 
 

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=256 noverlap=128

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=512 noverlap=128

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=1024 noverlap=128

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 

12 

Wykresy sygnału z(i) po zastosowaniu spektrogramu dla stałej szerokości 1024 i 512, okna 
Hamminga oraz bardzo zróżnicowanego przekrycia. 
 

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=1024 noverlap=1020

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Hamminga nfft=512 noverlap=8

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

 

Wykresy sygnału z(i) po zastosowaniu spektrogramu dla stałej szerokości 1024 i 512, okna 
prostokątnego oraz bardzo zróżnicowanego przekrycia. 
 

Time

F

re

q

u

e

n

c

y

Okno Prostokatne nfft=1024 noverlap=1020

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

Time

F

re

q

u

e

n

c

y

Okno Prostokatne nfft=512 noverlap=8

0.1

0.2

0.3

0.4

0.5

0.6

0

5000

10000

 

 
Powyżej wyrysowane są spektrogramy kolejno pod wpływem okna Hamminga, pod 
wpływem okna prostokątnego dla zmiennych szerokości i przekrycia. Jak możemy zauważyć 
spektrogram pod wpływem okna Hamminga jest bardziej posiada lepszą rozdzielczość 

background image

 

13 

częstotliwości, niż pod wpływem okna prostokątnego lecz jest gorszy pod względem 
rozdzielczości amplitudowej.  
 
Zadanie czwarte 

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 





2

f

0

s

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)  

 
Rozwiązanie 

ramka_s=zeros(1,256);

 

ramka_e1=zeros(1,256);

 

ramka_d=zeros(1,256);

 

ramka_2e=zeros(1,256);

 

ramka_m=zeros(1,256);

 

 

 

ramka_s(1,1:256)=z(2560:2815);

 

ramka_e1(1,1:256)=z(4608:4863);

 

ramka_d(1,1:256)=z(7936:8191);

 

ramka_2e(1,1:256)=z(8960:9215);

 

ramka_m(1,1:256)=z(11008:11263);

 

 

 

ramka=abs(fft(Hamming(256).*ramka_s'));

 

ramka1=abs(fft(Hamming(256).*ramka_e1'));

 

ramka2=abs(fft(Hamming(256).*ramka_d'));

 

ramka3=abs(fft(Hamming(256).*ramka_2e'));

 

ramka4=abs(fft(Hamming(256).*ramka_m'));

 

 

a1=lpc(hamming(256) .* ramka_s', 16);

 

a2=lpc(hamming(256) .* ramka_e1', 16);

 

a3=lpc(hamming(256) .* ramka_d', 16);

 

background image

 

14 

a4=lpc(hamming(256) .* ramka_2e', 16);

 

a5=lpc(hamming(256) .* ramka_m', 16);

 

 

 

 

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

 

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

 

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

 

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

 

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

 

 

ramka_s1=zeros(1,512);  
ramka_e11=zeros(1,512);

 

ramka_d1=zeros(1,512);

 

ramka_2e1=zeros(1,512);

 

ramka_m1=zeros(1,512);

 

 

 

ramka_s1(128:383)=ramka_s(1:256);

 

ramka_e11(128:383)=ramka_e1(1:256);

 

ramka_d1(128:383)=ramka_d(1:256);

 

ramka_2e1(128:383)=ramka_2e(1:256);

 

ramka_m1(128:383)=ramka_m(1:256);

 

 

 

ramka_s1=abs(fft(Hamming(512).*ramka_s1'));

 

ramka_e11=abs(fft(Hamming(512).*ramka_e11'));

 

ramka_d1=abs(fft(Hamming(512).*ramka_d1'));

 

ramka_2e1=abs(fft(Hamming(512).*ramka_2e1'));

 

ramka_m1=abs(fft(Hamming(512).*ramka_m1'));

 

 
 
Pierwszym zadaniem było wybranie i wyrysowanie pięciu przykładowych ramek, po jednej 
dla każdego fonemu. 
 
Na początek zadeklarowałem zerowe macierze dla każdej ramki 

ramka_s=zeros(1,256);

 

ramka_e1=zeros(1,256);

 

ramka_d=zeros(1,256);

 

ramka_2e=zeros(1,256);

 

ramka_m=zeros(1,256);

 

 
Następnie przepisuję wybrane zakresy sygnału z(i) do uprzednio 
zadeklarowanych macierzy

 

ramka_s(1,1:256)=z(2560:2815);

 

ramka_e1(1,1:256)=z(4608:4863);

 

ramka_d(1,1:256)=z(7936:8191);

 

ramka_2e(1,1:256)=z(8960:9215);

 

ramka_m(1,1:256)=z(11008:11263);

 

  
 

 
 
 
 
 

background image

 

15 

2550

2600

2650

2700

2750

2800

2850

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

Ramka dla fonemu ś

Nr próbki

W

ar

to

ść

 p

bk

i

 

4600

4650

4700

4750

4800

4850

4900

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

Ramka dla fonemu e1

Nr próbki

W

ar

to

ść

 p

bk

i

 

background image

 

16 

7900

7950

8000

8050

8100

8150

8200

-0.06

-0.04

-0.02

0

0.02

0.04

0.06

0.08

Ramka dla fonemu d

Nr próbki

W

ar

to

ść

 p

bk

i

 

8950

9000

9050

9100

9150

9200

9250

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

Ramka dla fonemu e2

Nr próbki

W

ar

to

ść

 p

bk

i

 

background image

 

17 

1.1

1.105

1.11

1.115

1.12

1.125

1.13

x 10

4

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

Ramka dla fonemu m

Nr próbki

W

ar

to

ść

 p

bk

i

Kolejnym  do  wykonania  zadaniem  było  wykonanie  analizy  autokorelacyjnej 
[xcorr(sig)].

2600

2650

2700

2750

2800

-0.5

0

0.5

1

Autokorelacja dla ramki fonemu ś

Czestotliwosc

x

c

o

rr

background image

 

18 

4650

4700

4750

4800

4850

-5

0

5

10

Autokorelacja dla ramki fonemu e1

Czestotliwosc

x

c

o

rr

7950

8000

8050

8100

8150

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

Autokorelacja dla ramki fonemu d

Czestotliwosc

x

c

o

rr

background image

 

19 

9000

9050

9100

9150

9200

-20

-15

-10

-5

0

5

10

15

20

Autokorelacja dla ramki fonemu e2

Czestotliwosc

x

c

o

rr

1.105

1.11

1.115

1.12

1.125

x 10

4

-1

-0.5

0

0.5

1

1.5

2

Autokorelacja dla ramki fonemu m

Czestotliwosc

x

c

o

rr

 

 
 
 
 
 

background image

 

20 

Na powyższych wykresach możemy zaobserwować że maksima znajdują się w tych samych 
położeniach  fonemów.  Dodatkowo  warto  zwrócić  uwagę  na  różnicę  pomiędzy  wartościami 
osiąganymi dla  fonemów e1 i e2 a fonemami ś, d oraz m. Jak widać na wykresie najmniejszą 
wartość  osiągnął  fonem  d.  Jako  że  druga  połowa  sygnału  jest  odbiciem  lustrzanym  lewej 
części wykresu zamieściłem tylko jedną połówkę wykresu. 
 
 
Następnym  punktem  do  wykonania  było  wyznaczenie  256-punktowego  FFT  z  oknem 
Hamminga. 
Zostało to wykonane za pomocą następującego kodu: 
 

ramka=abs(fft(Hamming(256).*ramka_s'));

 

ramka1=abs(fft(Hamming(256).*ramka_e1'));

 

ramka2=abs(fft(Hamming(256).*ramka_d'));

 

ramka3=abs(fft(Hamming(256).*ramka_2e'));

 

ramka4=abs(fft(Hamming(256).*ramka_m')); 
 

 

  

2560

2580

2600

2620

2640

2660

2680

0

0.5

1

1.5

2

2.5

3

3.5

4

Widmo amplitudowe dla fonemu ś w zakresie [0,fs/2]

Czestotliwosc

|U

n

|

background image

 

21 

4620

4640

4660

4680

4700

4720

0

2

4

6

8

10

12

14

16

18

20

Widmo amplitudowe dla fonemu e1 w zakresie [0,fs/2]

Czestotliwosc

|U

n

|

7940

7960

7980

8000

8020

8040

8060

0

0.5

1

1.5

2

2.5

3

3.5

4

Widmo amplitudowe dla fonemu d w zakresie [0,fs/2]

Czestotliwosc

|U

n

|

background image

 

22 

8960

8980

9000

9020

9040

9060

9080

0

2

4

6

8

10

12

14

16

18

20

Widmo amplitudowe dla fonemu e2 w zakresie [0,fs/2]

Czestotliwosc

|U

n

|

1.102

1.104

1.106

1.108

1.11

1.112

x 10

4

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Widmo amplitudowe dla fonemu m w zakresie [0,fs/2]

Czestotliwosc

|U

n

|

 

 
 
 
 

background image

 

23 

Kolejnym krokiem do wykonania było narysowanie widma amplitudowego za pomocą wzoru 
[abs(fft(sig)]; 
 

2560

2580

2600

2620

2640

2660

2680

0

0.5

1

1.5

2

2.5

3

3.5

4

Widmo amplitudowe dla ramki fonemu ś

Czestotliwosc

|U

n

|

4620

4640

4660

4680

4700

4720

0

2

4

6

8

10

12

14

16

18

20

Widmo amplitudowe dla ramki fonemu e1

Czestotliwosc

|U

n

|

background image

 

24 

7940

7960

7980

8000

8020

8040

8060

0

0.5

1

1.5

2

2.5

3

3.5

4

Widmo amplitudowe dla ramki fonemu d

Czestotliwosc

|U

n

|

8960

8980

9000

9020

9040

9060

9080

0

5

10

15

20

25

30

35

40

Widmo amplitudowe dla ramki fonemu e2

Czestotliwosc

|U

n

|

background image

 

25 

2560

2580

2600

2620

2640

2660

2680

-40

-35

-30

-25

-20

-15

-10

-5

0

5

Widmo mocy dla ramki fonemu ś

Czestotliwosc

P

(f

s

)

1.102

1.104

1.106

1.108

1.11

1.112

x 10

4

0

1

2

3

4

5

6

7

8

9

10

Widmo amplitudowe dla ramki fonemu m

Czestotliwosc

|U

n

|

 

Następnie wyznaczam widmo mocy ze wzoru [10 log10(abs(fft(hamming(256) .* sig)))]; 

background image

 

26 

4620

4640

4660

4680

4700

4720

-30

-25

-20

-15

-10

-5

0

5

10

15

Widmo mocy dla ramki fonemu e1

Czestotliwosc

P

(f

s

)

7940

7960

7980

8000

8020

8040

8060

-35

-30

-25

-20

-15

-10

-5

0

5

Widmo mocy dla ramki fonemu d

Czestotliwosc

P

(f

s

)

background image

 

27 

8960

8980

9000

9020

9040

9060

9080

-20

-15

-10

-5

0

5

10

15

Widmo mocy dla ramki fonemu e2

Czestotliwosc

P

(f

s

)

1.102

1.104

1.106

1.108

1.11

1.112

x 10

4

-35

-30

-25

-20

-15

-10

-5

0

5

10

Widmo mocy dla ramki fonemu m

Czestotliwosc

P

(f

s

)

 

 
 
 
 

background image

 

28 

2560

2580

2600

2620

2640

2660

2680

0

2

4

6

8

10

12

14

16

18

20

Widmo predykcji liniowej dla ramki fonemu ś

Czestotliwosc

H

(f

s

)

Drugą  metodą  analizy  formantów  dla  fonemów  jest  widmo  predykacji  liniowej,  wykonane 
przy zastosowaniu poniższych wzorów 

a=lpc(hamming(256) .* sig, 16); 
h=abs(1 ./ fft([a zeros(1,256-17)])); 

 
 
 
 
Kod odpowiadający za wykonanie tego podpunktu: 

a1=lpc(hamming(256) .* ramka_s', 16);

 

a2=lpc(hamming(256) .* ramka_e1', 16);

 

a3=lpc(hamming(256) .* ramka_d', 16);

 

a4=lpc(hamming(256) .* ramka_2e', 16);

 

a5=lpc(hamming(256) .* ramka_m', 16);

 

 

 

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

 

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

 

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

 

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

 

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

 

 

 

background image

 

29 

4620

4640

4660

4680

4700

4720

0

10

20

30

40

50

60

70

80

90

100

Widmo predykcji liniowej dla ramki fonemu e1

Czestotliwosc

H

(f

s

)

7940

7960

7980

8000

8020

8040

8060

0

10

20

30

40

50

60

70

80

90

100

Widmo predykcji liniowej dla ramki fonemu d

Czestotliwosc

H

(f

s

)

background image

 

30 

1.102

1.104

1.106

1.108

1.11

1.112

x 10

4

0

20

40

60

80

100

120

140

160

180

200

Widmo predykcji liniowej dla ramki fonemu m

Czestotliwosc

H

(f

s

)

 

 
Analizując otrzymane wykresy zarówno jak w metodzie 1 jak i 2 możemy zaobserwować że 
ilość maksymalnych wartości lokalnych dla fonemów e1 i e2 jest znacząco większa od 
pozostałych. Co za tym idzie dla samogłosek uzyskamy o więcej maksymalnych wartości 
lokalnych. 
Jak można zauważyć wyniki są zbliżone pod względem wielkości częstotliwości 
formantowych, w szczególności na początkach i końcach widm, za to różnicą którą możemy 
zauważyć w metodzie 1 w stosunku do metody drugiej to to że w 1 metodzie na środku widm 
uzyskaliśmy częstotliwości formantowe. 
 
 
Ostatnim  podpunktem  do  wykonania  było  rozszerzenie  ramek  o  256  zerowych  próbek  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). Oraz narysować wykres widma 
amplitudowego. 
 
 
Wykonałem to za pomocą poniższego kodu: 
 

ramka_s1=zeros(1,512); 

 

ramka_e11=zeros(1,512);

 

ramka_d1=zeros(1,512);

 

ramka_2e1=zeros(1,512);

 

ramka_m1=zeros(1,512);

 

  

 
 
 

background image

 

31 

2560

2580

2600

2620

2640

2660

2680

0

0.5

1

1.5

2

2.5

3

3.5

4

Okna Hamminga[512] dla fonemu ś dla f = [0,fs/2]

Czestotliwosc

|U

n

|

ramka_s1(128:383)=ramka_s(1:256);

 

ramka_e11(128:383)=ramka_e1(1:256);

 

ramka_d1(128:383)=ramka_d(1:256);

 

ramka_2e1(128:383)=ramka_2e(1:256);

 

ramka_m1(128:383)=ramka_m(1:256);

 

  

 

ramka_s1=abs(fft(Hamming(512).*ramka_s1'));

 

ramka_e11=abs(fft(Hamming(512).*ramka_e11'));

 

ramka_d1=abs(fft(Hamming(512).*ramka_d1'));

 

ramka_2e1=abs(fft(Hamming(512).*ramka_2e1'));

 

ramka_m1=abs(fft(Hamming(512).*ramka_m1'));

 

 

 

background image

 

32 

4620

4640

4660

4680

4700

4720

0

2

4

6

8

10

12

14

16

18

20

Okna Hamminga[512] dla fonemu e1 dla f = [0,fs/2]

Czestotliwosc

|U

n

|

7940

7960

7980

8000

8020

8040

8060

0

0.5

1

1.5

2

2.5

3

3.5

4

Okna Hamminga[512] dla fonemu d dla f = [0,fs/2]

Czestotliwosc

|U

n

|

background image

 

33 

8960

8980

9000

9020

9040

9060

9080

0

5

10

15

20

25

30

35

40

Okna Hamminga[512] dla fonemu e2 dla f = [0,fs/2]

Czestotliwosc

|U

n

|

1.102

1.104

1.106

1.108

1.11

1.112

x 10

4

0

1

2

3

4

5

6

7

8

9

10

Okna Hamminga[512] dla fonemu m dla f = [0,fs/2]

Czestotliwosc

|U

n

|

 

 
 
 
 

background image

 

34 

Porównanie widma amplitudowego 512-punktowego z widmem amplitudowych 256-
punktowym dla częstotliwości z zakresu [0,fs/2]. 
 
W obu przypadkach zmiany na widmach zachodzą w pierwszej części wykresów. Za to 
możemy zauważyć różnicę pomiędzy osiąganymi wartościami maksymalnymi w widmie 512-
punktowym i 256-punktowym. Od drugiej połowy oba typy wykresów zachowują się tak 
samo, ich wartości oscylują w okolicy zera.