Příprava na rozpoznávání řeči - detekce řečové aktivity (Voice activity detection - VAD) od příští přednášky se budeme zabývat rozpoznáváním řeči a to jejím jednoduchou variantou - rozpoznáváním izolovaných slov. V "tekoucím" řečovém signálu je třeba tato slova detekovat - určit "řečovou" aktivitu. Pro rozpoznávání pak budeme potřebovat, aby byly parametry každého slova uloženy v samostatném souboru. Nejjednodušší VAD je založena na krátkodobé energii. Pokud je energie vysoká, je pravděpodobné, že člověk mluví, pokud ne, asi mlčí. Problém mohou (i v nepřítomnosti šumu) působit plozívy ('t', 'p', 'b'), které obsahují tzv. okluzi - velmi krátké ticho před "výbuchem". Aby se toto ticho nedetekovalo jako hranice slova, je třeba odhad řečové aktivity vyhladit. K tomu se používá mediánový filtr. K dnešnímu cvičení je připraven balík vad.tar.gz (založený na cv4.tgz od Petra Schwarze), který dokáže zpracovávat data on-line nebo off-line ze souboru: V balíku vad.tar.gz má tento soft: - v souborech lpc.{cpp,h} doplněno počítání krátkodobé energie. Energie je uložena na 11. pozici ve výstupních parametrech (index 10) tak, jak jsme to po Vás požadovali v minulém projektu. - konfigurační soubor config.h obsahuje některé pomocné definice. - v mainu je hlavní jádro VAD: - pro parametry i pro energii jsou definovány pomocné buffery (pro med. filtr potřebujeme zpoždění) - energie je porovnávána s prahem (ten jsem určil na svém počítači, musíte jej vyzkoušet, případně změnit !), rozhodnutí jsou uložena do bufferu vad_buffer. - má tento buffer je aplikována mediánová filtrace - pokud jsou hodnoty pouze 0 a 1, je mediánem ta, která se v vad_buffer objevuje vícekrát. - vad obsahuje konečné rozhodnutí, uvědomte si ale, že ne pro aktuální rámec, ale pro střed bufferu ! - je řešeno zavírání a otevírání souborů a generování jejich jmen. - jako test je do výsledného souboru ukládána krátkodobá energie (1 float). Připravte se na to, že budete muset ukládat vektor (je to tam nachystané, ale zakomentované). Úkoly: 1) odzkoušet funkčnost. 2) podívat se na pár souborů s energií v Matlabu (pokud obsahují krátké úseky pod prahem, medián funguje). Pomůcka pro Matlab: ff = fopen('detected1','r'); ene = fread (ff,[1 inf],'float'); fclose (ff); 3) pohrát si s prahem, aby fungoval s Vaším počítačem/zvukovkou/nastavením mixéru. 4) vysypat do souboru LPC koeficienty (v případě, že už máte napsanou autokorelaci a Levinsona-Durbina !). V rozpoznávacím projektu po Vás budeme chtít ještě převod mezi LPC a LPC-cepstrem, ale ten je jednoduchý. 5) advanced: ruční nastavování prahu je humus... Dal by se práh odhadnout automaticky ? Což takhle ho nějak průměrnou hodnotu mean(e), pak použít vzoreček pro on-line odhad střední hodnoty (viz přednáška o předzpracování řeči) a pak použít porovnání: if (energie > relativni_prah * prumerna_energie) vad = 1 else vad = 0