Pomoc w obliczaniu / zrozumieniu MFCC: Współczynniki cepstrum częstotliwości Mel

17

Czytałem fragmenty w Internecie, ale po prostu nie mogę tego wszystkiego poskładać. Mam podstawową wiedzę na temat sygnałów / DSP, które powinny być wystarczającymi warunkami do tego. Jestem zainteresowany ostatecznym kodowaniem tego algorytmu w Javie, ale jeszcze go nie rozumiem i dlatego tu jestem (liczy się to jako matematyka, prawda?).

Oto, jak myślę, że to działa wraz z lukami w mojej wiedzy.

  1. Zacznij od próbki mowy audio, powiedz plik .wav, który można odczytać z tablicy. Nazwij tę tablicę , gdzie wynosi od (więc próbek). Wartości odpowiadają chyba natężeniu dźwięku - amplitudom.n 0 , 1 , , N - 1 N.x[n]n0,1,,N.-1N.

  2. Podziel sygnał audio na wyraźne „klatki” o długości około 10 ms, przy założeniu, że sygnał mowy jest „stacjonarny”. Jest to forma kwantyzacji. Więc jeśli częstotliwość próbkowania wynosi 44,1 KHz, 10 ms jest równe 441 próbkom lub wartościom .x[n]

  3. Wykonaj transformatę Fouriera (FFT w celu obliczeń). Czy to się dzieje na całym sygnale lub na każdej oddzielnej ramce ? Myślę, że jest różnica, ponieważ ogólnie transformacja Fouriera patrzy na wszystkie elementy sygnału, więc dołączył z połączone z \ ldots \ mathcal F (x_N [n]), gdzie x_i [n] to mniejsze ramki. W każdym razie powiedzmy, że robimy FFT i kończymy na X [k] przez resztę tego.F ( x [ n ] ) F ( x 1 [ n ] ) F ( x 2 [ n ] ) F ( x N [ n ] ) x i [ n ] X [ k ]x[n]fa(x[n])fa(x1[n])fa(x2)[n])fa(xN.[n])xja[n]X[k]

  4. Mapowanie do skali Mel i logowanie. Wiem, jak konwertować regularne liczby częstotliwości na skalę Mel. Dla każdego k od X[k] (na osi „x” jeśli mi pozwoli), można zrobić wzór tutaj: http://en.wikipedia.org/wiki/Mel_scale . A co z „wartościami y” lub amplitudami X[k] ? Czy po prostu pozostają takie same wartości, ale są przesunięte do odpowiednich miejsc na nowej osi Mel (x-)? Widziałem w pewnym artykule, że jest coś o rejestrowaniu rzeczywistych wartości X[k] ponieważ wtedy, gdy X[k]=ZA[k]b[k] gdzie jeden z tych sygnałów jest przypuszczalnie szumem, nie chcesz , operacja dziennika na tym równaniu zamienia multiplikatywny hałas w szum addytywny, który, mam nadzieję, może być filtrowany (?).

  5. Ostatnim krokiem jest pobranie DCT zmodyfikowanego z góry (jednak skończyło się to modyfikacją). Następnie bierzesz amplitudy tego końcowego wyniku i to są twoje MFCC. Przeczytałem coś o wyrzucaniu wysokich częstotliwości.X[k]

Staram się więc naprawdę wyjaśnić, jak obliczyć tych facetów krok po kroku i najwyraźniej niektóre rzeczy wymykają mi się z góry.

Słyszałem także o stosowaniu „banków filtrów” (w zasadzie szeregu filtrów pasmowych) i nie wiem, czy odnosi się to do tworzenia ramek z oryginalnego sygnału, czy może tworzysz ramki po FFT?

Wreszcie, jest coś, co widziałem w MFCC mających 13 współczynników?

YoungMoney
źródło
1
To świetne pytanie, ale tutaj jest wiele odpowiedzi. Poleciłbym podzielenie tego na 2-3 różne pytania (możesz odwoływać się od jednego do drugiego, jeśli chcesz zachować ciągłość), aby łatwiej było na nie odpowiedzieć.
jonsca
Ponieważ wcześniej zadałeś to samo pytanie na math.SE (i poinformowano cię, że dsp.SE jest dla niego lepszym miejscem), być może powinieneś usunąć pytanie na math.SE.
Dilip Sarwate,
Usunąłem wersję na math.SE
YoungMoney
Bardzo fajny i ciekawy poradnik dziękisssssssssssssss
1
Hej, powiedziałeś w swoim pytaniu, że „Mapowanie do skali Mel i logowanie. Wiem, jak konwertować regularne liczby częstotliwości na skalę Mel.”. czy możesz mi pomóc obliczyć tę część. Ponieważ mam mój wynik FFt x [k] = 1 * 184, ale mój trójkątny filtr pasmowy jest ustawiony na 20 * 3. jak mogę pomnożyć oba z nich. Proszę ASAp
Ayush Agrawal

Odpowiedzi:

25

Krok po kroku...

1. i 2 . To jest poprawne. Zauważ, że ramki zwykle się nakładają, na przykład ramka 0 to próbki od 0 do 440; ramka 1 to próbki od 220 do 660; ramka 2 to próbki od 440 do 880 i tak dalej ... Zwróć też uwagę, że do próbek w ramce zastosowano funkcję okna .

3 . Transformacja Fouriera jest wykonywana dla każdej klatki. Motywacja jest prosta: sygnał mowy zmienia się w czasie, ale jest stacjonarny w krótkich segmentach. Chcesz analizować każdy krótki segment osobno - ponieważ w tych segmentach sygnał jest wystarczająco prosty, aby można go było skutecznie opisać kilkoma współczynnikami. Pomyśl o kimś, kto mówi „cześć”. Nie chcesz, aby wszystkie fonemy zwinięte w jednym widmie (FFT zwija informacje czasowe) poprzez analizę całego dźwięku naraz. Chcesz zobaczyć „hhhhheeeeeeeeeeelloooooooooo”, aby rozpoznać słowo etap po etapie, więc należy je podzielić na krótkie segmenty.

4 . „Mapowanie do skali Mela” jest mylące i prawdopodobnie dlatego się mylisz. Lepszym opisem tego kroku byłoby: „Oblicz energię sygnału za pomocą zestawu filtrów dostrojonych do częstotliwości skalowanych według mel”. Oto jak to się robi. Uważamy, że częstotliwości (najczęściej stosowaną wartością jest N = 40 ) w równych odstępach zgodnie ze skalą mel, między 20 Hz (dolna część zakresu słyszenia) a częstotliwością Nyquista. Praktyczny przykład: sygnał jest próbkowany przy 8 kHz i chcemy 40 binsów. Ponieważ 4 kHz (Nyquist) wynosi 2250 mel, częstotliwości środkowe banku filtrów będą wynosić: 0 mel, 2250/39 mel, 2 x 2250/39 mel .. 2250 mel.N.N.=40

Po zdefiniowaniu tych częstotliwości obliczamy ważoną sumę wielkości FFT (lub energii) wokół każdej z tych częstotliwości.

Spójrz na poniższy obrazek przedstawiający bank filtrów z 12 pojemnikami:

Bank filtrów częstotliwości Mel z 12 kanałami

8. przedział ma częstotliwość środkową około 2 kHz. Energia w ósmym przedziale jest uzyskiwana przez zsumowanie ważonych energii FFT w przybliżeniu w zakresie 1600 do 2800 Hz - przy szczytowej wadze około 2kHz.

Nota implementacyjna: Ta wiązka ważonych sum może być wykonana w jednej operacji - mnożeniu macierzy „macierzy banku filtrów” przez wektor energii FFT.

Na tym etapie „podsumowaliśmy” widmo FFT na zbiór 40 (12 na ilustracji) wartości energii, z których każda odpowiada innemu zakresowi częstotliwości. Bierzemy dziennik tych wartości.

K.K.=13

fenenety
źródło
Krótkie pytanie na temat banku filtrów Mel - wysokość / amplitudy w zakresie od 1,8 - 2 jest to ważne, czy mogą być wysokością jednostki (1)?
YoungMoney
1
To nie jest ważne. Efekt użycia maks. amplituda przy 1,0 vs 2,0 spowoduje przesunięcie energii logarytmicznej tylko o stałą w kroku 4., a zatem wpłynie tylko na pierwszy współczynnik w kroku 5 (który i tak jest często odrzucany). Zauważ, że niektóre implementacje wykorzystują normalizację energii, więc im szerszy jest filtr, tym niższa jest jego amplituda szczytowa ( i.imgur.com/IOaLa.gif ). Może to spowodować niewielkie zmiany wydajności w aplikacjach do rozpoznawania. Jeśli przyjrzymy się zastosowanym implementacjom MFCC, w rzeczywistości na każdym kroku jest wiele małych odmian - bit.ly/ULatdL
pikenety
To stary temat, ale muszę zapytać o wykres. Jeśli Nyquist ma częstotliwość 4 kHz, dlaczego te filtry z ograniczonym pasmem przekraczają punkt 4 kHz. czy to jest OK dla MFCC. Zwykle nie chcesz, aby filtr przepuścił Nyquist? Czy mam rację?
Celdor
2
Czy masz odniesienie do tego, dlaczego N = 40 częstotliwości filtrów filtrów banku Mel (lub 26, inna wspólna wartość, którą widziałem)?
James Owers
1
skąd 39 melpochodzi krok 4?
Gert Kommer,