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.