Semestrální práce z ASI

(detektor řečové aktivity)

Zadání:
    Differenční kepstrální detektor řečové aktivity

  * Pomocí rekurze určete z autoregresních koeficientů
    koeficienty kepstrální.
  * Určete tzv. delta-kepstrum, tj. rozdíl kepster
    dvou po sobě jdoucích segmentů.
  * Integrací a součtem určete průběh modifikované
    kepstrální vzdálenosti.
  * Pomocí adaptivního prahu realizujte detektor řeči.
  * Proveďte poslechové testy pomocí vyklíčování
    detekované řeči.
Popis algoritmu:
   Vstupní signál je segmentován a pomocí funkce lpc se pro každý segment vypočte 10
 autoregresních koeficientů.
   Z těch se pomocí rekurze (funkce a2c) vypočte 128 kepstrálních koeficientů. Z těchto
 128 kepstrálních koeficientů dále použijeme prvních 20 pro výpočet delta kepstra tj. rozdílu
 kepster dvou sousedních segmentů.
   Vektory těchto kepster se ukládají za sebou a alikuje se na ně kumulativní součet (funkce
 cumsum). V dalším kroku se průběh takto získaného signálu vyhlazuje pomocí střední
 hodnoty (funkce med) aby se zamezilo vlivu rychlých víceméně náhodných změn v kepstru.
   Pak následuje prahování tohoto signálu, kdy se při určité hodnotě rozdílu kepstra rozhodne
 o přítomnosti řečového signálu.

Tento obrázek ukazuje jak by měl vypadat výstup řečového detektoru.




Získané výsledky


   Na následujících obrázcích jsou zobrazeny vlivy velikosti překryvu mezi segmenty,
 počtu použitých kepstrálních koeficientů, délky mediánu a šumu přítomného v signálu.

   Na každém z nich je v prvním řádku zobrazen vstupní signál s červeně zobrazeným
 průběhem detekované řeči. Na druhém řádku je zobrazen průběh delta-kepstra po aplikaci
 kumulativního součtu a mediánu. Na třetím řádku je tento průběh po aplikaci prahování.

Tady byl použit čistý signál, 10 kepstrálních koeficientů,
a medián řádu 31.

Tady byl použit čistý signál, 20 kepstrálních koeficientů,
a medián řádu 31.

Je vidět, že 10 koeficientů celkem postačuje, ale při 20 koeficientech
je charakteristika v pazách lepší (už z hlediska prahování).

Tady byl použit čistý signál, 20 kepstrálních koeficientů,
a medián řádu 11.

Je vidět, že rozdíl v charakteristikách není velký, naopak se při
vyšším řádu mediánu neůměrně zvyšuje výpočetní doba.

V tomto případě nebyl použit překryv segmentů, ačkoliv před výpočtem
autoregresních koeficientů aplikuji Hammingovo okno.

Je vidět, že je třeba okna překrývat pokud budeme požadovat lepší výsledky.
V každém případě to má alespoň kladný vliv na hrubost charakteristiky.

V tomto případě byl k čistému signálu přidán šum
s odstupem signál/šum 10dB.

Tento algoritmus využívá lineární predikce a ta je na šum velmi citlivá.
Proto se nelze divit, že výsledek neodpovídá očekávání.



Závěr:
   Tato metoda je podle mých zjištění shopna detekovt přítomnost řečového signálu
 pouze pokud tento signál není zašuměn. Bylo by třeba dopracovat lepší algoritmus
 prahování, nebo alespoň nějak omezit zákmity na okrajích slov. Co se adaptivního
 přizpůsobování prahu týče, nenapadá mě jak bych ho využil

   Dále jsem zjistil, že není shopen detekovat malé přechodové jevy. Tím myslím
 ten malý přechod před posledním slovem a uprostřed druhého slova.

   Celkovou úspěšnost této metody bych odhadl tak na 80% správně označených segmentů.



   Pokud má někdo zájem o soubory pro matlab, tak jsou zde.
   A pro ty nejotrlejší nakonec řečový vyklíčený signál.