Je dobré si čas od času říci, kdo na čem zrovna pracuje a co udělal. V mém případě je to teď zrovna docela jednoduché, protože, na rozdíl od mnoha předchozích projektů, nejsem vůči nikomu vázán mlčenlivostí a mohu si sám rozhodnout, co mohu prozradit a co raději ne.
Takže tedy: věnoval jsem se (kromě jiných věcí) naprogramování nástroje pro spektrální analýzu zvukového záznamu řečového projevu. Tak, chápu, že z předchozí věty není nikdo moc moudrý, ale naštěstí mám dost prostoru na to, abych to trochu vysvětlil.
Spektrální analýza je numerický výpočetní postup, který se používá například pro detekci poruch převodovek nebo obecně jakýchkoliv strojů s pravidelnými kmity, nebo jako vstup do interaktivní počítačové aplikace reagující na lidský hlas. Připadá mi to docela zajímavé, takže níže vysvětlím, jak to zhruba funguje. Kdo čeká zasvěcený odborný výklad, toho zklamu (protože přeci jenom nechci psát odborný článek), a kdo se těší na oddechové čtivo, toho zklamu také – bez nějakého přemýšlení se to asi pochopit nedá. A pokud se deklarovanou povrchností dotknu některého z na slovo vzatých odborníků, prosím o shovívavé prominutí – na otázky v mailu odpovím a všechno to dám do pořádku a pořádně vysvětlím.
Předpokládám, že většina náhodných čtenářů již odpadla a tuto a další věty už čtou jen opravdu odhodlaní návštěvníci.
Když v počítači zvukový záznam nahráváme, počítač zaznamenává polohu membrány mikrofonu v řadě rychle po sobě jdoucích časových okamžiků. Této rychlosti záznamu se říká vzorkovací frekvence a program Mentio Nahrávání uživateli umožňuje vybrat z hodnot 44,1 a 48 kHz. Počítač tedy pořizuje 44.100 nebo 48.000 hodnot během každé vteřiny, kdy zvuk nahrává. Při přehrávání záznamu jsou tyto hodnoty použity pro ovládání membrány reproduktoru, která svými kmity vytvoří opět zvuk.
Při frekvenční analýze využijeme tzv. Fourierovu transformaci, která pro určený krátký úsek časové křivky spočítá, jaké frekvence se v tomto úseku vyskytují. Nerozlišuje se přitom, zda se ta či ona frekvence vyskytla na začátku nebo konci analyzovaného úseku. Abychom výskyt frekvencí mohli určit pro celou časovou křivku, je potřeba ji postupně rozdělit na krátké úseky a pro každý spočítat vyskytující se frekvence.
Pokud jsou tyto úseky velmi krátké, můžeme sledovat rychlé změny frekvenčních charakteristik, protože frekvenční charakteristiku stanovujeme dostatečně často – ale počet sledovaných frekvencí je malý. A obráceně, pokud jsou tyto úseky dostatečně dlouhé, abychom mohli sledovat velké množství frekvencí, nebudeme schopni zachytit jejich rychlé změny.
Například program Mentio Hlas zaznamenává zvuk se vzorkovací frekvencí 44,1 kHz a pro frekvenční analýzu používá kombinaci různě dlouhých úseků – každý úsek o 256 vzorcích je ještě rozdělen na dva úseky o 128 vzorcích. Analýza delších úseků umožňuje sledovat dvakrát více frekvencí a analýza kratších úseků umožňuje detekovat dvakrát rychlejší frekvenční změny – rozhodovací algoritmy pak využívají informace z obou těchto analýz.
Jednotlivé úseky je před zpracováním Fourierovou transformací nutné vynásobit vhodným "oknem", které zjednodušeně řečeno hlasitost zvuku na začátku a konci každého kousku křivky ztlumí tak, aby křivka začínala blízko nuly a ne třeba na maximální hodnotě – v takovém případě by totiž výsledek výpočtu byl plný šumu. Aby se informace obsažená v signálu na začátcích a koncích těchto oken při analýze využila a abychom zvýšili časové rozlišení frekvenční analýzy, začíná každé následující okno již v polovině délky okna předcházejícího.
V programu Mentio Nahrávání si můžeme vybrat, zda použijeme úseky dlouhé 256, 1024 nebo 4096 vzorků. Rozdíly při použití různě dlouhých úseků jsou vidět na první pohled. Po Fourierově transformaci máme pro každý krátký úsek původní křivky hned celou skupinu hodnot – pro každou ze sledovaných frekvencí míru jejího zastoupení tak, jak vidíme na obrázku níže.
V dolní části obrazovky vidíme spektrum zvukového záznamu z horní části obrazovky. Světlejší části grafu odpovídají menšímu zastoupení dané frekvence, tmavší pak většímu zastoupení dané frekvence. Dolní okraj odpovídá frekvenci 0 Hz, horní pak hodnotě 5 kHz (program umožňuje rozsah zvětšit na 8 kHz). Hodnoty jsou zlogaritmovány, takže vyšší špičky nejsou již tak výrazné a naopak nižší špičky vynikly.
Tenké vodorovné proužky při použití úseků o 4096 vzorcích odpovídají harmonickým frekvencím v analyzovaném zvuku, jejichž skupiny, jak uvidíme níže, tvoří "formanty". Zkušené oko odborníka již na tomto grafu odhadne, kde přesně formanty jsou, po dalším zpracování bude jejich poloha jasně vidět – tmavé oblasti na grafu s úseky o 256 vzorcích jim zhruba odpovídají. Při použití takto krátkých úseků totiž není frekvenční rozlišení dostatečně podrobné, abychom mohli pozorovat harmonickou strukturu tónů.
Abychom mohli formanty dobře odlišit, musíme signál dále zpracovat. Tuto spektrální mapu zpracujeme další Fourierovou transformací, jako kdyby jednotlivé frekvenční profily pro každý časový okamžik byly další časové řady. Tím vznikne tzv. "cepstrum". Přesmyčka spektrum => cepstrum se obdobně použije i na další charakteristiky získaných dat. Místo frekvence používáme "quefrenci", místo filtrace pak "liftraci".
Pozor, nejedná se o "kepstrum" – to je používáno pro podobný pojem, a sice "Kolmogorov equation power series time response".
Černé oblasti na Cepstru odpovídají případným ozvěnám při nahrávání a také quefrencím, které charakterizují obálku spektra – jakousi průměrnou hodnotu frekvenčního profilu bez oněch výše viditelných tenkých vodorovných proužků (obraz v grafu je opět zlogaritmovaný). Pokud z cepstra odliftrujeme quefrence odpovídající těmto tenkým proužkům a provedeme – jak jinak – další Fourierovu transformaci (tentokráte zpětnou), získáme spektrum liftrovaného cepstra, na kterém velmi pěkně jednotlivé formanty již vidíme.
Na obrázku níže vidíme tu část cepstra, která po liftraci zbyla. Jedná se o oblast, která je na obrázku výše těsně nad dolním okrajem grafu (quefrence u dolního okraje rostou k nekonečnu a směrem nahoru klesají jako 1/x).
A nyní se již podíváme na výsledek zpětné transformace – tedy na spektrum liftrovaného cepstra.
Tmavé oblasti na tomto grafu odpovídají frekvencím, které jsou v daný okamžik využívány, a označují se jako formanty. Jejich vzájemná poloha je specifická pro každou hlásku a proto je lze využít při rozpoznávání řeči počítačem – ale to program Mentio Nahrávání neumí.
Podrobné informace o využití formantové struktury lze najít například v knize Pavla Machače a Radka Skarnitzla "Fonetická segmentace hlásek".
Tak co, je to jasnější? Pokud ano, tak to je skvělé, pokud ne, tak to vůbec nevadí – ale určitě z toho čtení zůstal nějaký pocit o tom, že se vezme nahraná řeč, se záznamem se dělají všemožné kejkle, a nakonec z toho vyleze nějaký šedivý graf, ze kterého někdo něco vidí, ale stejně není moc jasné, k čemu se to dá dále použít – což je také docela dobrý výsledek.
No a příště napíšu něco o tom, jak se dají tyto informace archivovat tak, aby byla zaručena tzv. nepopiratelnost původu – znalí odborníci z použití této terminologie správně odhadují nějakou aplikaci elektronického podpisu, ale o tom opravdu až příště.