Kompresní metody
Komprese řeči

Ačkoliv je řeč ve své podstatě audiosignál, má některé specifické vlastnosti, které umožňují použití radikálnějších kompresních technik než u všeobecného zvuku. V prvé řadě se řečový signál považuje za médium na vyjádření informace. Informace nemusí být po rekonstrukci vyjádřená úplně stejně jako v originále, aby byla srozumitelná. Z toho vyplývá možnost odstranění některých vlastností zvuku. Například standardní telefonní hovor je vzorkován s frekvencí 8 kHz (v porovnání s 44,1 kHz vzorkovací frekvencí při běžném audiu), což znamená zachycení šířky pásma jen 4 kHz. Přesto toto pásmo obsahuje většinu energie řeči, a tedy informace.

Za druhé je řečový signál jednoduchý v porovnání například s nahrávkou rockové kapely – obyčejně je v něm zachycen jediný řečník bez dalších hudebních nástrojů. Kromě toho na dosažení co možno nejčistší řeči můžeme použít algoritmy na potlačení šumu a ruchů v pozadí.

Metody používané pro kompresi řeči můžeme rozdělit do těchto skupin:

- Kódování tvaru vlny
  - v časové oblasti
  - ve frekvenční oblasti
- Vokodéry
  - lineární predikční kódování
  - formantové kódování

Pro účely hodnocení kvality různých algoritmů na zpracování řeči existuje míra srozumitelnosti. Ta popisuje, jak je řeč pochopitelná a srozumitelná. V úvahu se přitom berou různé vlastnosti, například hlasitost řeči, nelineární zkreslení, úroveň šumu na pozadí, ozvěny i dozvuky a mnohé jiné. Pro porovnávání srozumitelnosti existují dvě hlavní stupnice: index přenosu řeči (Speech Transition Index - STI) a všeobecná stupnice srozumitelnosti (Common Intelligibility Scale - CIS), které mají rozsah od 0 (nejhorší) do 1 (nejlepší), resp. 0% až 100%. Obecně se řeč považuje za srozumitelnou, když algoritmus dosáhne na stupnici skóre alespoň 0,5 (50%).

## Časová oblast

Kódování tvaru vlny v časové oblasti je reprezentováno technikami PCM. Zatímco lineární PCM používá stejné rozestupy mezi kvantizačními úrovněmi, nelineární PCM využívá nelineární kvantizační stupnici anebo její modifikaci v podobě komprese dynamiky (kompanzi) vstupního signálu na straně vysílače a její expanzi na straně přijímače.

Doporučení G. 711 definuje dvě kompanzní charakteristiky µ-zákon (µ-law - USA a Japonsko) a A-zákon (A-law - Evropa). Na příklad charakteristika A-zákona je dána vztahem:

kde sgn (x) = ±1 pro kladnou anebo zápornou hodnotu x a A je parametr komprese. Obyčejně A=87,7.

Příklad kompanzní křivky A-zákona. Vyšší frekvence (na horizontální ose reprezentované vyššími čísly) jsou kódovány menším počtem hodnot než nižší frekvence.

## Frekvenční oblast

Ve frekvenční oblasti se využívají metody subpásmového a adaptivního transformačního kódování. Při subpásmovém kódování (Subband Coding - SBC) se řečový signál pomocí sady pásmových propustí (banky filtrů) rozdělí na několik frekvenčních pásem a na snížení počtu vzorků se zdecimuje. Každé pásmo se potom kóduje samostatně, nejčastěji použitím metody ADPCM, která umožňuje flexibilní kvantizaci a přiřazování bitů.

Příklad banky filtrů

Alternativně se místo metody ADPCM mohou použít techniky založené na adaptivním transformačním kódování (Adaptive Transform Coding - ATC). Zde se signál transformuje do frekvenční oblasti pomocí FFT anebo jiné transformace a rozdělí se na subpásma. Potom se jednotlivým vzorkům v subpásmech dynamicky přidělí bity podle jejich potřeby.

## Lineární predikční kódování

Přirozená lidská řeč se může chápat jako odezva vokálního traktu řečníka na budící signál, v našem případě na vzduch vydechovaný z plic. Výstupní signál se modeluje změnami vlastností vokálního traktu (hlasivek, ústní dutiny, zubů, atd.). Když se na tento proces podíváme z pohledu analýzy signálů, můžeme výstupní signál reprezentovat pomocí budícího signálu a filtru představujícího hlasový trakt s parametry měnícími se v čase. Tyto koeficienty se přepočítávají přibližně každých 10 až 30 ms. I když na popis koeficientů funkce vokálního traktu existuje mnoho metod, nejpoužívanější je metoda založená na lineární predikci, z čehož vychází její název lineární predikční kódování (Linear Prediction Coding - LPC).

Všeobecné schéma LPC dekodéru

LPC koeficienty minimalizují kvadratickou odchylku mezi originálními a predikovanými vzorky řeči. Jak je vidět, model LPC generátoru řeči se skládá ze dvou částí vycházejících z výše uvedeného textu:

- Buzení vokálního traktu
- Filtr vokálního traktu

Buzení vokálního traktu reprezentuje generátor impulsů a generátor šumu, mezi kterými je možno přepínat v závislosti na znělosti řeči. Budící signál se dále zesiluje zesilovačem (G) na požadovanou úroveň.

Hlasivky se chvějí, vibrují s určitou základní frekvencí f0, ze které umíme odvodit základní hlasivkovou periodu T0. Čím vyšší je základní frekvence, tím vyšší je výška řeči.

V závislosti na tom, zda se hlasivky použijí anebo ne, rozdělujeme zvuky řeči na:

- znělé – zvuky jsou vyprodukovány pomocí chvění hlasivek, přes které přechází vzduch z plic, např. „a“, „v“, „z“. Všecky samohlásky jsou znělé.
- neznělé – zvuky jsou produkované jen za pomoci toku vzduchu podobnému šumu a hlasivky se nezapojují, například „s“, „c“, „f“.

Filtr vokálního traktu je dán lineárním predikčním filtrem s konečnou odezvou (FIR filtr), jehož přenosovou funkci charakterizuje vztah:

,

kde ai jsou koeficienty filtru a p je řád filtru. Jestliže S (z) představuje výstupní vzorek a E(z) je buzení, následující vzorek s(n) získáme jako lineární kombinaci předcházejících vzorků s buzením G.e(n):

Pro použití LPC generátoru řeči potřebujeme pro každý segment určit tyto parametry:

- znělost segmentu
- základní periodu T0
- parametry filtru (zesílení G a koeficienty ai)

Bitový tok řečového signálu zakódovaného pomocí LPC se pohybuje v rozmezí od 1,2 do 2,4 kbit/s a jeho srozumitelnost je okolo 80-85%.

Rekonstruovaný hovorový signál však zní strojově, což je způsobeno dvěma hlavními důvody:

1. Je těžké segmentovat řeč přesně na znělé a neznělé segmenty, protože v přirozené řeči se znělost prolíná a kombinuje.
2. Základní perioda (která charakterizuje hlas řečníka) se v přirozené řeči mění častěji než je délka rámců a změny nejsou periodické.

Na potlačení nedokonalostí metody LPC existují postupy, které kódují reziduum (rozdíl) mezi originálním signálem a signálem generovaným LPC.

Metoda lineární predikce buzené reziduem (Residually Excited Linear Prediction - RELP) přenáší přímo rozdíl mezi originálním a rekonstruovaným signálem. Na straně přijímače se LPC koeficienty použijí na rekonstrukci signálu a na přesnější rekonstrukci se reziduum připočte.

Nástupcem algoritmu RELP je lineární predikce buzená kódem (Code Excited Linear Prediction - CELP). Algoritmus je založen na principu analýzy syntézou a v uzavřené smyčce percepčně (vjemově) optimalizuje syntetizovaný signál. Potom se prohledá kódová kniha a vybere se nejvhodnější budící funkce. Spolu s LPC koeficienty se přenáší pouze pozice v kódové knize. Budící funkce se může zakódovat pomocí vektorové kvantizace.

Metoda CELP dosahuje bitový tok od 4 do 8 kbit/s. Jejími nevýhodami jsou relativní výpočetní náročnost a zpoždění na úrovni 35 ms.

Modifikace CELP-u s malým zpožděním (Low Delay CELP, LD-CELP) snižuje zpoždění na 2 ms při bitovém toku 16 kbit/s a stala se součástí standardu G. 728 organizace ITU-T. Další kodek založený na metodě CELP je Speex, který vytvořila organizace Xiph.Org, autor kodeku Ogg Vorbis, a má otevřený zdrojový kód.

## Sinusoidální kódování

Sinusoidální kódování vychází z předpokladu, že každý audio signál je kombinací deterministické a stochastické složky. Deterministickou složku tak můžeme reprezentovat harmonickými funkcemi (sinus, kosinus) a stochastickou složku pomocí šumu anebo jinou parametrizací. Principiální schéma takového kodéru je uvedena níže. Sinusoidy jsou spojení v čase se měnících frekvencí, o kterých předpokládáme, že tvoří jeden souvislý tón.

Všeobecné schéma sinusoidálního kodéru

Tento model však nedokáže dostatečně zpracovat rychle se měnící zvuky, proto byla do metody přidána třetí složka, tzv. transienty, které modelují rychlé změny v signálu. To vede k modelu sinusoidy+transienty+šum (STN).

Jiným rozšířením základného SN modelu je model Harmonické + samostatné linie + šum (HILN). V tomto přístupu se sinusoidy rozdělí do dvou skupin, harmonickou a individuální. V harmonické části jsou sinusoidy reprezentovány jako harmonické násobky základních frekvencí a ukládají se pouze násobiče. Potom se kódují individuální sinusoidy a reziduum se zpracovává jako šum.

Od sinusoidálního kódování se očekává dobré zpracování jednoduchých signálů, skládajících se obvykle z harmonických zvuků, například řeč. Techniku využíval kodek SVOPC, prvý kodek společnosti SKYPE, který dosahoval dobrou kvalitu při 20 kbit/s a byl odolný vůči ztrátám paketů.

Výpočetní náročnost kodeku SVOPC však vedla k vytvoření nového kodeku SILK, založeného na LPC.

Na základě kodeku SILK s přidáním vlastností kodeku CELT (Constrained Energy Lapped Transform) byl v září 2012 standardizován nový kodek s názvem Opus. Kodek je schopný využit dobrý výkon kodeku SILK při nízkých frekvencích s malým zpožděním kodeku CELT při vyšších frekvencích, mezi kterými dokáže přepínat na požádání. Kodek je vysoce vhodný na kódování řeči i obecného audia, a to i pro online aplikace, jako jsou VoIP a živé přenosy.