1
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
2
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
ró
be
k
3
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
ró
be
k
4
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;
5
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)));
6
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
ię
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
a
sy
gn
ał
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
a
pr
ze
jś
ć
pr
ze
z
ze
ro
7
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
8
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
9
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
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
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
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ść
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);
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);
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
ró
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
ró
bk
i
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
ró
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
ró
bk
i
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
ró
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
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
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
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
|
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
|
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
|
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
|
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
|
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)))];
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
)
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
)
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)]));
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
)
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);
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'));
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
|
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
|
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.