Projekt nr 4 Analiza Mel

Transkrypt

Projekt nr 4 Analiza Mel
Teoria sygnałów – Laboratorium
Projekt nr 4
Analiza Mel- Cepstralna
Prowadzący:
prof. zw. dr hab. inŜ. Ryszard Makowski
Wykonał:
Łukasz Antkowiak 171078
Grupa:
Poniedziałek/Tydzień nieparzysty 17.05
1) Zadania do wykonania
a) Wczytać sygnał o nazwie: mbi04ceme.wav
b) Przeprowadzić 4-krotną decymację sygnału
c) Wykreślić jego wykres
d) Obliczyć cepstra MFCC dla kolejnych fragmentów sygnału o długości 20ms z
nakładkowaniem 10ms
e) Wyniki te przedstawić na wykresie 3D
f) Punkty 1-5 powtórzyć dla 6-krotnej decymacji i długości 30ms z nakładkowaniem 10ms
g) Wyniki te przedstawić na wykresie 3D
Po kaŜdym z zadań przeprowadzić analizę uzyskanych wyników a na końcu opracowania zebrać
najwaŜniejsze wnioski
2) Przygotowanie do wykonania zadań
Na podstawie zebranych informacji napisałem funkcję zwracającą macierz współczynników
cepstralnych z podanego do niej sygnału. Wykorzystywać będę ją do wykonywania punktu 4.
function wynik = mfcc( sygnal, fp, szerokosc, nakladkowanie )
% Obliczenie szerokosci Ramki w probkach
rSzerokosc = floor(szerokosc * fp);
% Obliczenie szerokosci nalozenia sie ramek w probkach
nSzerokosc = floor(nakladkowanie * fp );
%Ustalenie dlugosci wykonywanej szybkiej transformaty
Nfft = 2^nextpow2(rSzerokosc);
N21 = Nfft/2+1;
%Obliczenie kroku ramki
krokRamki = rSzerokosc-nSzerokosc;
%Obliczenie ilosci ramek, odrzucenie ostatnich probek
LiczbaRamek = ceil((length(sygnal)-rSzerokosc)/(rSzerokosc-nSzerokosc));
% Przygotowanie okna hamminga
okno = hamming(rSzerokosc);
%Dla kazdej mozliwej ramki
for i = 1:LiczbaRamek-1
% Pobieramy fragment kodu
SygnalPoRamkach(:,i)=sygnal((i-1)*(krokRamki)+1:(i-1)*krokRamki+rSzerokosc);
% Zokienkowanie wycietego fragmentu sygnalu
SygnalPoRamkach(:,i)=SygnalPoRamkach(:,i).*okno;
% Obliczenie transformaty dla badanego fragmentu
WidmoPoRamkach(:,i)=fft(SygnalPoRamkach(:,i),Nfft);
end
%Przygotowanie filtru melowego
melfbank = melfb( 20, Nfft, fp );
%Zmienienie na skale melowa
WidmoWMel = melfbank * abs(WidmoPoRamkach(1:N21,:)).^2;
%Obliczenie transformaty cosinusowej,
% przejscie w dziedzine cepstralna
wynik = dct(log(abs(WidmoWMel)));
% Usuniecie pierwszej składowej obniŜającej czytelność wykresu
wynik(1,:)=[];
end
Do wykonania pozostałych zadań wykorzystywać będę, wyłącznie
cznie funkcje istniejące
istniej
juŜ w
środowiskach MatLab i Octave
3) Wykonanie zadań
a) Wczytanie pliku zawierającego
zawierają
dźwięk.
[x,fp] =wavread('mbi04ceme.wav');
Po wykonaniu tego zadania, moŜemy
mo
stwierdzić Ŝe częstotliwość próbkowania mojego
sygnału wynosi 48 kHz, a ilość
ść próbek wynosi 34938 z czego wynika Ŝee sygnał próbkowano około
0.72s
b) Decymacja 4 krotna, wyświetlenie obrazu sygnału.
%decymacja sygnalu
Y = decimate(x,4);
%obliczenie czestotliwosci probkowania
Yfp = fp/4;
%wyznaczenie osi czasu
Yt = 0:1/Yfp:(length(x)-1)/Yfp;
plot(t,x);
ylabel('Badany sygnal po 4 krotnej decymacji');
xlabel('Czas[s]');
Na podstawie wykresu przebiegu sygnału, moŜna
mo
dojść do wniosku, Ŝe badana
bad
próbka
posiada głoski dźwięczne,
czne, poniewaŜ
poniewa mocno zarysowane są szczyty pojawiające się
si w przybliŜenie
równych okresach czasu.
wietlenie współczynników cepstralnych dla 4 krotnej decymacji.
c) Obliczenie i wyświetlenie
mesh(mfcc(Y,Yfp,0.02,0.01));
xlabel('nr ramki');
ylabel('wartosc cechy MFCC');
zlabel('nr cechy');
JuŜ na pierwszy rzut oka moŜna zauwaŜyć podobieństwo między współczynnikami dla ramek z
okolicy 20 oraz 40 ( wiersze zaczynające się od wartości pokolorowanych na czerwono ) nasuwa to
wniosek, Ŝe są one opisami takich samych fonemów. W tym wypadku jest to głoska e, która w
wyrazie cement występuje 2 razy. Między tymi dwoma głoskami znajdują się wartości specyficzne
dla głoski m, co jeszcze bardziej utwierdza fakt, iŜ wartości MFCCs dla okolic 50 ramki ( litery n )
są w podobne ze względu na podobieństwo tych dwóch głosek. Fonemy odpowiadające literze
początkowej c oraz końcowej t znajdują się w ramkach, dla których moc sygnału jest znacznie
mniejsza od wewnętrznych głosek, jest to skutkiem sposobu w jaki wymawiamy pojedyncze
wyrazy, akcentując głoski znajdujące się w jego wnętrzu.
d) Decymacja 6 krotna, wyświetlenie obrazu sygnału.
%decymacja sygnalu
Y = decimate(x,6);
%obliczenie czestotliwosci probkowania
Yfp = fp/6;
%wyznaczenie osi czasu
Yt = 0:1/Yfp:(length(x)-1)/Yfp;
plot(t,x);
ylabel('Badany sygnal po 6 krotnej decymacji');
xlabel('Czas[s]');
Obraz sygnału po większej
kszej decymacji nie róŜni
ró się w sposób szczególny od poprzedniego.
Szczególnie znaczących róŜnic
nic nie widać
wida takce na znacznym powiększeniu wykresu, co moŜe
mo
sugerować nam fakt, iŜ sygnał nie stracił swoich właściwości
wła
po większej
kszej decymacji
e) Obliczenie i wyświetlenie
wietlenie współczynników cepstralnych dla 6 krotnej decymacji.
mesh(mfcc(Y,Yfp,0.03,0.01));
xlabel('nr ramki');
ylabel('wartosc cechy MFCC');
zlabel('nr cechy');
Wykres ten niesie bardzo podobne informacje jak ten który został wykreślony
wykre
dla 4 krotnej
decymacji. Charakterystyczna jest mniejsza dokładność
dokładno wykresu, spowodowana mniejszą
mniejsz ilością
ramek
mek przeznaczonych do analizy, oraz większym
wi kszym przedziałem czasowym przeznaczonym na jedną
jedn
ramkę. Zmniejszeniu uległy teŜŜ róŜnice
róŜ
względne między sąsiadującymi
cymi ze sobą
sob współczynnikami,
co utrudniło by analizę sygnału.
4) Wnioski ogólne
Brak większych zmian we wnioskach po róŜnych decymacjach, utwierdza nas w fakcie
pasmo niosące dane z którego korzysta ludzka mowa nie przekracza znacząco 3,5 kHz. Tak
niewielka względem podanej nam częstotliwości próbkowania wartość pozwoliła nam na dowolną
decymację bez utraty właściwości sygnału.
Dzięki obliczeniu MFCCs i wykreśleniu ich na jednym wykresie umoŜliwiliśmy
porównywanie zmian współczynników zaleŜnych od głosek, które reprezentują. ZauwaŜyliśmy
relację między identycznymi głoskami, oraz tymi zbliŜonymi do siebie. W ten sposób
potwierdziliśmy przydatność tej metody do detekcji ludzkiej mowy.

Podobne dokumenty