Publikacje, którymi się kierowałem:
Speaker Recognition: A Tutorial, JOSEPH P. CAMPBELL, JR., - podpunkt II.E. (wcześniej jest o LP, ok, ale przeczytajcie co napisano w podpunkcie o melcepstrum)
Spectral Features for Automatic Text-Independent Speaker Recognition - Tomi Kinnunen, LICENTIATE’S THESIS (patrz Absract, akapit o MFCC; oraz punkt 5.3.2.)
TEXT INDEPENDENT AUTOMATIC SPEAKER RECOGNITION, Othman O. Khalifa, S. Khan, Md. Rafiqul Islam, M. Faizal and D. Dol
Demonstrator for Automatic Text-independent Speaker Identification, Kristian Kroschel, Dirk Bechler
Speaker Identification using MFCC and HMM based techniques, Ashish Jain, John Harris (patrz Introduction)
Voice-based Speaker Recognition Combining Acoustic and Stylistic Features, Sachin S. Kajarekar , Luciana Ferrer, Andreas Stolcke, Elizabeth Shriberg (patrz punkt: Features Extraction)
Po ich przeczytaniu nie da się nie powiedziedzzieć, że MFCC to sprawdzona i stosowana metoda ekstrakcji formantów... cóż więcej było mi potrzebne...
Tak czy inaczej , nie zależy mi na udowodnianiu swego zdania, interesuje mnie metoda, która da dobre rezultaty. Na poszukiwania wybrałem się sam, bo niewiele osób się tym zajmuje gdzieś w pobliżu mnie... sekwencje moich poszukiwań można określić w ten sposób:
1. Dowiedziałem się, iż do rozpoznawania mówcy potrzebne są formanty(źródło: wykładowca + "Sygnał mowy" Tadeusiewicza),
2. Potem wyczytałem w publikacjach, że jedną z metod ich pozyskiwania poza LPC i jej modyfikacjami oraz falkami jest cepstrum (jeden z przypadków to oczywiście MFCC), ta spodobała mi się najbardziej, bo wykorzystuje FFT, a dla mnie ta transformata jest intuicyjnie najbliższa,
3. W tym momencie zostało mi tylko podparcie się większą ilością publikacji, część to te wyżej wymienione, gdzie dość jasno powiedziano, że MFCC wykorzystywane są w problemie rozpoznawania mówcy,
4. Przyszedł czas na algorytm aby go stestowować, dostać wektory i wrzucić na sieć (ją na szczęście akurat mam w pewnym sensie z głowy)
5. Stan obecny: jestem na forum i właśnie dmuchacie jak wilk z tej bajki o trzech świnkach w mój domek ze snopków siana. ;)
Moim celem jest ekstrakcja formantów na tyle użytecznych aby system rozpoznawania był efektywny... niechże rozpozna chociaż 80% przypadków ;) Jeszcze będę próbował z tym cepstrum, bo zostało to zaimplementowane i działa choćby publikacja (TEXT INDEPENDENT AUTOMATIC SPEAKER RECOGNITION, Othman O. Khalifa, S. Khan, Md. Rafiqul Islam, M. Faizal and D. Dol), jeśli się nie uda to wezmę się za coś innego, np. LPC... tak na marginesie, to czy można gdzieś dostać wersje ekstrakcji MFCC, czy LPCC zestandaryzowaną, tak jak np. dostępne są standardy dla sieci komputerowych?
...póki co mam jeszcze kilka publikacji do przejrzenia... to raz, a dwa mogę ograniczyć zawsze rozważania do text-dependent, np. jedno hasło wypowiadane przez pewien zbiór osób, dla których i dla tylko których zostanie ono zatwierdzone.
MB
-podpróbkowanie, które opisujesz (stosunek N:1) brzmi dla mnie właśnie jak wyjmowanie z tego wektora jednej wartości (prążka), takie kolejne zawężenie podpasma i przypisanie mu jednej wartości... czy nie?
-"Skoro wracamy z wymiaru częstotliwości przez odwrotne przekształcenie to logiczne, że wracamy do czegoś co ma wymiar czasowy (choć nie jest czasem)."
W sumie ma to ręce i nogi, ale co wtedy gdy wykonamy nie odwrotną a powtórnie jeszcze raz transformatę (co ma miejsce u niektórych "twórców") wtedy musimy to nazwać wg. powyższego schematu pseudoczęstoliwością. I tak, i tak otrzymujemy formanty a dziedzina...? :)
-"cepstrum dzięki logarytmowi zamienia iloczyn charakterystyk odpowiedzialnych za źródło (tutaj: wyuczony wzorzec wymowy) oraz tor (tu: charakterystyka wokalna konkretnej osoby) zamieniając go na sumę, z której to sumy odrzuca się cechy mówcy"
Pytanie całkiem abstrakyjne: Da się tę właściwość jakoś wykorzystać? Tzn. Czy da się w jakiś sposób uratować/wykekstrahować te cechy mówcy. Niech to brzmi śmiesznie, ale chyba nie mogły tak po prostu zniknąć. Skoro mamy jakiś wektor (czy tam cokolwiek) z = a*b (gdzie zawarte są cechy mówcy x), to kiedy go zlogarytmujemy dostaniemy relacje z = a + b (bez cech mówcy x), wiec tak czysto schematycznie i intuicyjnie nasuwa się myśl, że w jakiś sposób: x= a*b - (a+b)
-"można sprawdzić metodą statystyczną (np. PCA) czy istnieją w zbiorze cech MFCC jakieś takie, które mają przynajmniej 95% korelacji z tym, kto mówi, i wybrać właśnie te cechy"
Co to jest PCA, po drugie czegoś tu nie kumam, skoro opierając się na technice cepstrum mam dostać wyniki prawie zerowe, to jak, któreś z tych współczynników uzyskanych drogą cepstralną ma mieć korelację, jeśli wogóle jakąś, to w jaki sposób tak wysoką jak 95%. Czy może wręcz na odwrót jeśli coś będzie dekorelowało w 95% to będzie to związane ze cechami mówcy... (chyba sam sobie odpowiedzialem na to abstrakcyjne pytanie ;)
Sebastian-D16:
-To będzie modelowane w MathCADzie, a potem w C/C++
-"chyba lepiej cos ulepszac niz pisac jeszcze raz"
...lepiej wogóle od czegoś zacząć ;)
paes:
- "Co do rozróżniania mówców, to można by badać takie parametry: (...)" to nie brzmi jak "zrób to sam" - strasznie sporo tego, wiem, że jeszcze była chyba metodanp. "przejść przez zero" (zero-crossing), ale mimo najszczerszych chęci ciężko znaleźć jakieś algorytmy a ja na eksperymentowanie nie mam czasu, może to brzmi jak praca na odwal się, nie jest jednak tak... jak się powoli okazuje nie jest to tak banalne pomimo zrealizowanych prac przez innych czy dość szeroko unoszących się informacji na temat cepstrum i jego zbawiennych właściwości ;)
Ekstrakcja formantów sygnału mowy (przypadek MFCC)
-
- Posty:4
- Rejestracja:piątek 02 sty 2009, 00:00
Re: Ekstrakcja formantów sygnału mowy (przypadek MFCC)
MB
-podpróbkowanie, które opisujesz (stosunek N:1) brzmi dla mnie właśnie jak wyjmowanie z tego wektora jednej wartości (prążka), takie kolejne zawężenie podpasma i przypisanie mu jednej wartości... czy nie?
****************************
Ależ nie jest to żadne "wyjmowanie". Po pierwsze: jeszcze raz zwracam uwagę na to, że współczynnik FFT (jedna z N wartości zwracanych przez algorytm FFT) to nie jest "prążek" w takim sensie, w jakim prążkiem jest widmo (ciągła transformata Fouriera) sinusoidy. Tak naprawdę to jest pasmo. Proponuję nie używać słowa prążek w odniesieniu do FFT, bo jest cholernie mylące.
Po drugie, prosty przykład: Mamy sygnał, który składa się dokładnie ze 100 próbek i dokonujemy jego podpróbkowania 100:1, które wymaga wpierw ograniczenia pasma do 1/100 oryginalnego pasma, a później odrzucenie 99 próbek. Najprostszy wariant takiego podpróbkowania to wyliczenie wartości średniej ze wszystkich 100 próbek. Efektem jest 1 liczba i teraz pytasz czy to jest równoważne wybraniu jednej z tych 100? Nie, to nie jest żadna z nich. Wyjęcie arbitralnie jednej próbki z sygnału o 100 próbkach absolutnie nic nam nie mówi o tym sygnale. Wynik prawidłowego podpróbkowania, na przykład wartość średnia powie nam bardzo wiele - dostarczy maksymalną ilość informacji (najbardziej użyteczną informację), jaką daje się zapisać przy pomocy 1 liczby.
-"Skoro wracamy z wymiaru częstotliwości przez odwrotne przekształcenie to logiczne, że wracamy do czegoś co ma wymiar czasowy (choć nie jest czasem)."
W sumie ma to ręce i nogi, ale co wtedy gdy wykonamy nie odwrotną a powtórnie jeszcze raz transformatę (co ma miejsce u niektórych "twórców") wtedy musimy to nazwać wg. powyższego schematu pseudoczęstoliwością.
**********************************
NIE.
Wyobraź sobie dwie prostopadłe osie: czasu i częstotliwości. Sygnały w czasie są opisane na osi czasu, widma na osi częstotliwości. Wykonanie jednej transformaty to obrót o 90 stopni w ortogonalnej przestrzeni czas-częstotliwość czyli przejście z jednej osi na drugą. Wykonanie odwrotnej transformaty to obrót z powrotem o 90 stopni. Natomiast wykonanie jeszcze jednej transformaty (zamiast tej odwrotnej) to kolejny obrót o 90 stopni czyli lądujemy z powrotem na osi czasu, tylko wspak.
Co do nazewnictwa - pisałem już, że pojęcie quefrency wymyślili amerykanie, a tłumaczenie go na język polski jest obarczone pewną dowolnością, nie ma tutaj wyznacznika jednoznacznie dobrego przetłumaczenia nazwy. Ja jestem zwolennikiem terminu pseudoczas, ponieważ ma on sens opóźnienia i wymiar sekundowy. Jeśli coś jest podobne do samochodu (powiedzmy: pojazd Melex) to prędzej nazwiemy do pseudo-samochodem niż pseudo-rowerem.
I tak, i tak otrzymujemy formanty a dziedzina...? :)
**************************************
MFCC czy cepstrum to nie są formanty. To pewna informacja reprezentująca w uproszczony i zwięzły sposób obwiednię widma mocy. Z MFCC nie wyliczysz częstotliwości formantowych (a jeśli już to baaardzo zgrubnie), tak jak wyliczysz je ze współczynników LPC.
-"cepstrum dzięki logarytmowi zamienia iloczyn charakterystyk odpowiedzialnych za źródło (tutaj: wyuczony wzorzec wymowy) oraz tor (tu: charakterystyka wokalna konkretnej osoby) zamieniając go na sumę, z której to sumy odrzuca się cechy mówcy"
Pytanie całkiem abstrakyjne: Da się tę właściwość jakoś wykorzystać? Tzn. Czy da się w jakiś sposób uratować/wykekstrahować te cechy mówcy.
***********************************
Da się. Cechy mówcy to są cechy wspólne, raczej niezmienne w czasie. Żeby je wyekstrahować należy usunąć wszystko to, co jest zmienne czyli zależy od treści wypowiadanej mowy. Czyli jeśli uśrednisz długi odcinek mowy to powinny pozostać cechy wspólne. Jak długi, to nie wiem, może wystarczy kilka godzin, może kilka tysięcy godzin. Wszystko zależy od wymaganej dokładności.
Niech to brzmi śmiesznie, ale chyba nie mogły tak po prostu zniknąć. ***********************************
One nie znikają tylko są mało widoczne, trudno wykrywalne, gdy bierzesz pod uwagę tylko jeden krótki segment mowy. Podobnie jak na podstawie krótkiego wycinka sygnału niewiele można powiedzieć o jego składowej stałej.
Skoro mamy jakiś wektor (czy tam cokolwiek) z = a*b (gdzie zawarte są cechy mówcy x), to kiedy go zlogarytmujemy dostaniemy relacje z = a + b (bez cech mówcy x), wiec tak czysto schematycznie i intuicyjnie nasuwa się myśl, że w jakiś sposób: x= a*b - (a+b)
*****************************************
Nie rozumiem, o czym piszesz. Jasne jest, że log(a*b)=log(a)+log(b).
Wydobywanie z tej sumy log(a) lub log(b) wymaga usunięcia niepożądanego składnika. W klasycznej metodzie rozplotu cepstralnego usuwa się ten niepożądany składnik zerując próbki cepstrum dla pseudoczasu w okolicach zera lub daleko od zera (w zależności od tego, co chcemy osiągnąć).
-"można sprawdzić metodą statystyczną (np. PCA) czy istnieją w zbiorze cech MFCC jakieś takie, które mają przynajmniej 95% korelacji z tym, kto mówi, i wybrać właśnie te cechy"
Co to jest PCA,
**************************************
Principal Component Analysis. Use google, Luke.
po drugie czegoś tu nie kumam, skoro opierając się na technice cepstrum mam dostać wyniki prawie zerowe, to jak, któreś z tych współczynników uzyskanych drogą cepstralną ma mieć korelację, jeśli wogóle jakąś, to w jaki sposób tak wysoką jak 95%. Czy może wręcz na odwrót jeśli coś będzie dekorelowało w 95% to będzie to związane ze cechami mówcy... (chyba sam sobie odpowiedzialem na to abstrakcyjne pytanie ;)
**********************
Jak już napisałem wyżej, spodziewam się, że cechy MFCC w ramach jednej ramki będą miały znikomą korelację z numerem mówcy, natomiast uśrednione cechy po bardzo wielu ramkach mogą mieć znaczącą korelację.
-podpróbkowanie, które opisujesz (stosunek N:1) brzmi dla mnie właśnie jak wyjmowanie z tego wektora jednej wartości (prążka), takie kolejne zawężenie podpasma i przypisanie mu jednej wartości... czy nie?
****************************
Ależ nie jest to żadne "wyjmowanie". Po pierwsze: jeszcze raz zwracam uwagę na to, że współczynnik FFT (jedna z N wartości zwracanych przez algorytm FFT) to nie jest "prążek" w takim sensie, w jakim prążkiem jest widmo (ciągła transformata Fouriera) sinusoidy. Tak naprawdę to jest pasmo. Proponuję nie używać słowa prążek w odniesieniu do FFT, bo jest cholernie mylące.
Po drugie, prosty przykład: Mamy sygnał, który składa się dokładnie ze 100 próbek i dokonujemy jego podpróbkowania 100:1, które wymaga wpierw ograniczenia pasma do 1/100 oryginalnego pasma, a później odrzucenie 99 próbek. Najprostszy wariant takiego podpróbkowania to wyliczenie wartości średniej ze wszystkich 100 próbek. Efektem jest 1 liczba i teraz pytasz czy to jest równoważne wybraniu jednej z tych 100? Nie, to nie jest żadna z nich. Wyjęcie arbitralnie jednej próbki z sygnału o 100 próbkach absolutnie nic nam nie mówi o tym sygnale. Wynik prawidłowego podpróbkowania, na przykład wartość średnia powie nam bardzo wiele - dostarczy maksymalną ilość informacji (najbardziej użyteczną informację), jaką daje się zapisać przy pomocy 1 liczby.
-"Skoro wracamy z wymiaru częstotliwości przez odwrotne przekształcenie to logiczne, że wracamy do czegoś co ma wymiar czasowy (choć nie jest czasem)."
W sumie ma to ręce i nogi, ale co wtedy gdy wykonamy nie odwrotną a powtórnie jeszcze raz transformatę (co ma miejsce u niektórych "twórców") wtedy musimy to nazwać wg. powyższego schematu pseudoczęstoliwością.
**********************************
NIE.
Wyobraź sobie dwie prostopadłe osie: czasu i częstotliwości. Sygnały w czasie są opisane na osi czasu, widma na osi częstotliwości. Wykonanie jednej transformaty to obrót o 90 stopni w ortogonalnej przestrzeni czas-częstotliwość czyli przejście z jednej osi na drugą. Wykonanie odwrotnej transformaty to obrót z powrotem o 90 stopni. Natomiast wykonanie jeszcze jednej transformaty (zamiast tej odwrotnej) to kolejny obrót o 90 stopni czyli lądujemy z powrotem na osi czasu, tylko wspak.
Co do nazewnictwa - pisałem już, że pojęcie quefrency wymyślili amerykanie, a tłumaczenie go na język polski jest obarczone pewną dowolnością, nie ma tutaj wyznacznika jednoznacznie dobrego przetłumaczenia nazwy. Ja jestem zwolennikiem terminu pseudoczas, ponieważ ma on sens opóźnienia i wymiar sekundowy. Jeśli coś jest podobne do samochodu (powiedzmy: pojazd Melex) to prędzej nazwiemy do pseudo-samochodem niż pseudo-rowerem.
I tak, i tak otrzymujemy formanty a dziedzina...? :)
**************************************
MFCC czy cepstrum to nie są formanty. To pewna informacja reprezentująca w uproszczony i zwięzły sposób obwiednię widma mocy. Z MFCC nie wyliczysz częstotliwości formantowych (a jeśli już to baaardzo zgrubnie), tak jak wyliczysz je ze współczynników LPC.
-"cepstrum dzięki logarytmowi zamienia iloczyn charakterystyk odpowiedzialnych za źródło (tutaj: wyuczony wzorzec wymowy) oraz tor (tu: charakterystyka wokalna konkretnej osoby) zamieniając go na sumę, z której to sumy odrzuca się cechy mówcy"
Pytanie całkiem abstrakyjne: Da się tę właściwość jakoś wykorzystać? Tzn. Czy da się w jakiś sposób uratować/wykekstrahować te cechy mówcy.
***********************************
Da się. Cechy mówcy to są cechy wspólne, raczej niezmienne w czasie. Żeby je wyekstrahować należy usunąć wszystko to, co jest zmienne czyli zależy od treści wypowiadanej mowy. Czyli jeśli uśrednisz długi odcinek mowy to powinny pozostać cechy wspólne. Jak długi, to nie wiem, może wystarczy kilka godzin, może kilka tysięcy godzin. Wszystko zależy od wymaganej dokładności.
Niech to brzmi śmiesznie, ale chyba nie mogły tak po prostu zniknąć. ***********************************
One nie znikają tylko są mało widoczne, trudno wykrywalne, gdy bierzesz pod uwagę tylko jeden krótki segment mowy. Podobnie jak na podstawie krótkiego wycinka sygnału niewiele można powiedzieć o jego składowej stałej.
Skoro mamy jakiś wektor (czy tam cokolwiek) z = a*b (gdzie zawarte są cechy mówcy x), to kiedy go zlogarytmujemy dostaniemy relacje z = a + b (bez cech mówcy x), wiec tak czysto schematycznie i intuicyjnie nasuwa się myśl, że w jakiś sposób: x= a*b - (a+b)
*****************************************
Nie rozumiem, o czym piszesz. Jasne jest, że log(a*b)=log(a)+log(b).
Wydobywanie z tej sumy log(a) lub log(b) wymaga usunięcia niepożądanego składnika. W klasycznej metodzie rozplotu cepstralnego usuwa się ten niepożądany składnik zerując próbki cepstrum dla pseudoczasu w okolicach zera lub daleko od zera (w zależności od tego, co chcemy osiągnąć).
-"można sprawdzić metodą statystyczną (np. PCA) czy istnieją w zbiorze cech MFCC jakieś takie, które mają przynajmniej 95% korelacji z tym, kto mówi, i wybrać właśnie te cechy"
Co to jest PCA,
**************************************
Principal Component Analysis. Use google, Luke.
po drugie czegoś tu nie kumam, skoro opierając się na technice cepstrum mam dostać wyniki prawie zerowe, to jak, któreś z tych współczynników uzyskanych drogą cepstralną ma mieć korelację, jeśli wogóle jakąś, to w jaki sposób tak wysoką jak 95%. Czy może wręcz na odwrót jeśli coś będzie dekorelowało w 95% to będzie to związane ze cechami mówcy... (chyba sam sobie odpowiedzialem na to abstrakcyjne pytanie ;)
**********************
Jak już napisałem wyżej, spodziewam się, że cechy MFCC w ramach jednej ramki będą miały znikomą korelację z numerem mówcy, natomiast uśrednione cechy po bardzo wielu ramkach mogą mieć znaczącą korelację.