Zadání pro laboratoř 08 a projekt 3 - rozpoznávání pomocí DTW ... Archiv dtw_matlab.tgz je pouze pro ilustraci toho, co se dělalo na přednášce, ve vlastní práci jej nepoužijete. Je ale dobrou ilustrací toho, co DTW dělá...: - rozbalte archiv - spusťe Matlab - sigceps - reco_dtw - obrázky z Matlabu si dejte do sloupečků vedle sebe, ale přitom zkuste zachovat i viditelnost konce okna s příkazy Matlabu. - vidíte srovnávání testovacích slov jedna dvě tři čtyři ... pak i dalších vždy se 4-mi referencemi - jedna - dvě - tři - čtyři. - matice lokálních vzdáleností - matice částečných kumul vzdáleností - optimální cesta (nad ní je malými písmeny DTW vzdálenost) - rozpoznané slovo je vybráno podle minimální vzdálenosti. --- Vlastní práce: Máte za úkol napsat DTW-rozpoznávač několika slov. Jako parametrizaci budete používat LPC-cepstrální koeficienty (10). Odvodíte je z LPC koeficientů, které již umíte počítat, pomocí rovnice uvedené na konci přednášky o LPC (1. část rovnice 38). Je i součástí souboru speech1.[ch] (viz dále). - doplňte konverzi LPC->LPCC do Vašeho detektoru řečové aktivity - namluvte si 5-10 referenčních slov (například číslovky jedna až pět) - detektor Vám je uloží do 5-ti souborů s LPCC koeficienty. --- - inspirujte se programem dtw z balíku dtw_c.tgz a napište DTW-rozpoznávač (vlastní funkce pro DTW-vzdálenost a pro vzdálenost dvou vektorů jsou v souboru speech1.[ch]). - Můžete použít exáč dtw bez jakýchkoliv zásahů a ostatní k němu "dobastlit" v shellu nebo Perlu (v Linuxu i Win): - volání dtw tolikrát, kolik je referencí - výběr maxima. - nebo použít funkce z dtw.c a speech1.c a integrovat je do programového balíku, který bude zajišťovat vše - čtení ze souboru/zvukovky, parametrizaci i rozpoznávání. Výsledkem projektu je opět soubor zdrojáků, příp. skriptů, makefile, Vaše reference (cps soubory) a popis toho všeho v krátkém textovém souboru. Prosím Ty, kdož budou pracovat pod Windous, i o přiložení zkompilovaných exáčů. --- Návod k otestování dtw v C: - prostudujte a pusťe dávku test_dtw.sh - pozor, srovnává se zde pouze s jednou referencí, Vy budete muset dělat ještě výběr minima ! - další pozor: v tomto případě byla použita slova se vzorkovací frekvencí 16 kHz, která byla parametrizována 16-ti LPCC koeficienty. Použijte (podobně jako v předcházejících cvičeních) 8 kHz a 10 LPCC koeficientů. --- Odpověď na otázku pana kolegy Leštacha, která by mohla zajímat více lidí: > Druha vec sa tyka funkcie LpcToCps() zo suboru speech1.cpp. > > Nezda sa mi tam nasledovna vec: > > Pole float* pfC ma obsahovat pri prevedeni kodu funkcie LPCC koeficienty. > Ale hodnoty tohto pola sa bez predoslej inicializacie pouzivaju v > predposlednom prikaze na vypocet premennej sum, z ktorej su v poslednom > prikaze znovu prepocitane. > > Kedze sa toto pole pred jeho samotnym pouzitim neinicializuje, je potrebne > predat funkcii v tomto poli urcite hodnoty? (V popisnej hlavicke funkcie o > tom nie je zmienka.) pole, jehoz pointer davate funkci jako druhy parametr, musi byt alokovane, jeho velikost je pocet pozadovanych cepstralnich koeficientu. Je uplne jedno, jake jsou v nem pri volani funkce hodnoty, funkce je prepise. > (V zadani projektu sice stoji, ze LPC-cepstralni koeficienty spocitame > podla rovnice z prednasky o LPC, ale tuto rovnicu som tam bohuzial > nenasiel.) na webu byla divna verze slajdu, uz je to tam.