logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Cepstrum - mały problem

koodłaty 12 Sie 2005 15:46 4147 4
  • #1 1728632
    koodłaty
    Poziom 14  
    Mam pewien problem z cepstrum rzeczywistym, czyli danym wzorem:
    c(n)=IFFT(log10(abs(FFT(x(n))))
    mianowicie, chodzi o poszukiwanie wysokości mowy (parametr pitch). Postępuje w matlabie w sposób następujący:
    -wczytywanie wave'a
    - obliczenie współczynników filtra (lpc)
    - filtracja sygnału mowy przez filtr FIR o współczynnikach otrzymanych z lpc()
    - wymnożenie z oknem Hamminga
    - dodanie zer by otrzymać sygnał długości 2^N
    - obliczenie cepstrum w zadanym przedziale częstotliwości (50-400 Hz)

    To wszystko dla cyklicznie fragmentów o długości dl.
    I tutaj niestety mam problem z wyznaczeniem czy dany fragment sygnału jest dźwięczny/bezdźwięczny. Przekopałem dużą ilość materiałów na sieci i jedyne co znalazłem, to informacja, że sygnał jest dźwięczny gdy pitch przekroczy próg 0.85. Nie jestem pewien co to oznacza - w moim przypadku sygnał testowy NIGDY nie osiąga tak dużej wartości pitch - metoda autokorelacji natomiast wyznacza dosyć poprawnie dźwięczność/bezdźwięczność. Również odniesienie do składowej w punkcie zero nie daje zadowalających efektów. Byłbym wdzięczny za pomoc bądź wskazanie jakiegoś źródła które by to wyjaśniło.
  • #2 1743198
    qrdel
    Poziom 28  
    Odpowiadam na goraco, i to po nocy, sorry jesli niezbyt precyzyjnie.

    Zgadzam sie ze zastosowanie cepstrum powinno dawac rezultaty przy detekcji dzwiecznosci, ale wiem to jedynie z teorii.

    proponuje najpierw sprawdzic pare rzeczy prostszymi metodami.
    1. zobacz jak wyglada estymator mocy widmowej sygnalu
    konkretnie stosunek mocy sygnalu w piku do calkowitej mocy mierzonego rekordu.
    do pomiarow zrob sobie "aaaaaaa" i "szszszszsz" do mikrofonu.
    2. piszesz o filtracji FIR z parametrami lpc
    nie jest to zbyt precyzyjne okreslenie co konkretnie robisz,
    ale cokolwiek by to bylo, to jak cos pojdzie na filtrze zle to potem wlasciwie nic juz nie pomoze.
    sprawdz wzorcowe rekordy (estymatorem mocy widmowej) przed i po filtracji
    3. mnozenie przez okno Hamminga _po_ filtracji tez mnie troche zastanawia, a do filtrowania nie uzywales okna ? (oczywiscie nic nie wiem o tym jakich rekordow uzywasz i czy po filtracji znowu nie segmentowales sygnalu), a dlaczego uzupelnianie zerami _po_ oknie? (brak wiedzy o rekordach i innych zalozeniach)
    4. cepstrum powinno (jak dobrze rozumiem) dac jako wynik cos pochodnego od calkowitej mocy glownego piku w widmie mocy razem z pikami harmonicznych. Przesledz spokojnie jak sie zachowuje widmo na wszystkich etapach, moze zlokalizujesz problem.
  • #3 1744576
    koodłaty
    Poziom 14  
    Już się tłumaczę bo faktycznie nieprecyzyjnie opisałem sytuację. Chodzi o to, by na podstawie fragmentu sygnału mowy, wyodrębnić:
    1. współczynniki filtra
    2. sygnał resztkowy, który otrzymany zostanie po przepuszczeniu przez filtr FIR (o współczynnikach z pkt 1) sygnału wejściowego.

    Dlaczego tak? Ponieważ w modelu LPC10 model traktu głosowego przyjmowany jest jako filtr IIR o transmitancji:
    H(z)=G(z)/(1+Σa(i)z^(-i))
    Jeśli połączyć filtr IIR kaskadowo z filtrem FIR (odwrotnym do IIR), to sygnał po przejściu powinien być sygnałem oryginalnym. Ale to tak na marginesie.

    Po otrzymaniu sygnału resztkowego, chciałbym z niego otrzymać informację o dźwięczności/bezdźwięczności oraz ewentualnej wartości pitch. Oczywiście nieprecyzyjnie się wyraziłem - przed filtracją JEST okno Hamminga - a nie tak jak napisałem PO. Uzupełnienie zerami ma na celu otrzymanie sygnału długości 2^N (aby wykorzystać efektywnie FFT) oraz aby zwiększyć rozdzielczość częstotliwościową.

    Samo cepstrum udało mi się zaimplementować - dla sygnałów testowych (wygenerowanych w matlabie o znanej częstotliwości podstawowej) wyniki obliczenia parametru pitch dają dokładnie (a raczej - prawie dokładnie ;) ) częstotliwość podstawową.
    I teraz przechodząc do sedna; wiem, że były na pewno prowadzone badania nad dźwięcznością/bezdźwięcznością za pomocą cepstrum. Z tego co znalazłem, wygląda na to, że przykładowy wynik cepstrum byłby taki jak na załączonym rysunku. Czyli jeśli wartość pitch "wyskoczy" ponad próg to fragment sygnału jest dźwięczny. Jeśli nie, to być może jest bezdźwięczny. Chodzi mi teraz o to czy dobrze rozumuję; powinienem brać wartość "piku" (pitch) i odnieść do jakiejś stałej wartości progowej (jeśli tak to jakiej??) czy też unormować najpierw względem np. składowej stałej?
  • #4 1776052
    qrdel
    Poziom 28  
    sorry, byly wakacje, ale jestem i przyjmuje odpowiedzialnosc za swoje wypociny
    jestes okrutny, bo zmuszasz mnie do myslenia
    a moze to jednak nie ja powinienem odpowiadac?
    bo ten lpc to dla mnie troche daleki...
    zrozumialem tyle, ze budujesz sobie od podstaw codec LPC10
    jak juz znajdziesz parametry filtru to zgodnie z zalozeniem ze wejsciowy sygnal (no wlasnie, ja raczej pamietam ze to mial byc bialy szum, ale z twoich wypowiedzi rozumiem, ze zakladasz ze jest to albo szum bialy, albo cos innego [dzwieczacego] moze sinus, a moze szum rozowy o waskim pasmie)
    wiec ze ten sygnal (hipotetyczny) wejsciowy zostal juz przepuszczony przez IIR (bo zalozenie) i jesli uzyskany sygnal mowy przepuscisz przez FIR (odwrocone parametry) to zrekonstruujesz znow sygnal wejsciowy i teraz pragniesz sprawdzic jego dzwiecznosc zeby zdecydowac czy przy dekodowaniu uzywac szumu bialego czy czegos bardziej dzwieczacego.
    ciekawe czy jestem blisko?
    co do problemu praktycznego:
    widzialem tylko nieprecyzyjne definicje
    cepstrum jest liczone jako transformata "pewnej funkcji" - czasem logarytmu, czasem kwadratu, czasem po prostu bez tej funkcji z rozkladu mocy widmowej sygnalu.
    Niestety moja wiedza pochodzi z dziel na tyle roznych ze pewnych rzeczy nie mam precyzyjnie zdefiniowanych, moze teraz juz wszyscy wiedza ze stosowac nalezy tylko i wylacznie logarytm (poza mna)
    Zaleznie od tego jaka jest ta funkcja (1 , log , sqr) popatrz sobie jak sie transformuje energia sygnalu. Bo powinnismy sprawdzac ile energii sygnalu jest w czesci dzwiecznej w stosunku do calosci sygnalu.
    Sadze ze nalezaloby normowac do "mocy" (sumy kwadratow) cepstrum.
    Np. wszelkie glosne stukniecia moga (chyba) dac wysokie wartosci cepstrum w zalozonym zakresie, ale nie bedzie to sygnal dzwieczny
    (prawdopodobnie nie byloby wtedy takich ladnych pikow, ale chcemy tylko znajdowac maksimum w przedziale a nie testowac czy pik jest waski itp.)

    Teraz moje zastrzezenia:
    1. mam jednak watpliwosci, kazdy najgladszy sinus mozna uzyskac z bialego szumu, tak robia to w naturze wszystkie piszczalki, trabki etc.
    wiec chyba jednak filtr LPC powinien byc "napedzany" szumem zawsze.
    2. ze tak powiem, po co sie meczyc? czy nie wystarczy zweryfikowac dzwiecznosc sygnalu mowy? (oczywiscie uzywajac cepstrum)
    3. popatrzylem sobie na przyklad lpc10 (svr-www.eng.cam.ac.uk/~ajr/SA95/node87.html) i jakos nie widze zeby trzeba bylo _poza_ standardowa procedura cos sprawdzac, uzywaja pasma 2400 bps i wszystko dziala.
    4. testy dla czystych tonow z Matlaba moga byc za proste, no co Ci szkodzi, powiedz do mikrofonu 'aaaaaa' a potem 'szszszsz'.

    mam nadzieje ze moje rozwazania w czyms pomoga
    pozdrawiam
  • #5 1788996
    koodłaty
    Poziom 14  
    qrdel napisał:
    Bo powinnismy sprawdzac ile energii sygnalu jest w czesci dzwiecznej w stosunku do calosci sygnalu.
    Sadze ze nalezaloby normowac do "mocy" (sumy kwadratow) cepstrum.

    Właśnie - ten fakt mnie zastanawia, bo np. w metodzie autokorelacji brany jest pod uwagę stosunek maksimum do r(0)

    qrdel napisał:

    Teraz moje zastrzezenia:
    1. mam jednak watpliwosci, kazdy najgladszy sinus mozna uzyskac z bialego szumu, tak robia to w naturze wszystkie piszczalki, trabki etc.
    wiec chyba jednak filtr LPC powinien byc "napedzany" szumem zawsze.

    Właśnie nie do końca - pobudzenie szumem białym (czy raczej - pseudoszumem) daje efekt charczenia. Pobudzenie ewidentnie okresowe (w pewnym zadanym przedziale częstotliwości) daje efekt bardziej metaliczny. Nie bardzo da się pobudzać tylko szumem - zauważ, że chodzi o stworzenie modelu ludzkiego głosu w którym w największym uproszczeniu można wyróżnić dwa stany - dźwięczny i bezdźwięczny. Wszelkie instrumenty wymagają stworzenia nowego modelu a co za tym idzie - nowych kryteriów podziału.

    Cytat:

    4. testy dla czystych tonow z Matlaba moga byc za proste, no co Ci szkodzi, powiedz do mikrofonu 'aaaaaa' a potem 'szszszsz'.
    mam nadzieje ze moje rozwazania w czyms pomoga
    pozdrawiam


    Hm, test to żaden problem, bo _ostatecznie_ mógłbym poprosić kilkanaście osób by nagrały przykłady głosek dźwięcznych/bezdźwięcznych i na tej podstawie wyznaczyć współczynnik dźwięczności. Niemniej miałem nadzięję, że to było już przez kogoś zrobione :)
    Anyway, dziękuję wszystkim za wszelkie uwagi i każdą pomoc, która rzuca jakieś światło na zastosowanie cepstrum przy wykrywaniu okresowości :)
REKLAMA