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.
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.
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 .
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 ]
Mapowanie do skali Mel i logowanie. Wiem, jak konwertować regularne liczby częstotliwości na skalę Mel. Dla każdego od (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 ? 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 ponieważ wtedy, gdy 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 (?).
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.
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?