Linear predictive coding

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Linear Predictive Coding (LPC) je kódovací algoritmus ztrátové komprese pro zajištění representace spektrální obálky digitalizovaného hlasového signálu v komprimované formě. Je to jeden z nejefektivnějších způsobů analýzy a zpětné konstrukce hlasového signálu použitelného pro low-bit-rate kodeky. Na straně vysílání musí proběhnout analýza hlasového signálu a jeho komprese a na straně příjmu obnova původního hlasového signálu s pokud možno co nejmenší deformací. LPC při provádění analýzy vychází z předpokladu, že hlas je generován zdrojem (hlasivkami), kde na hlasivkové štěrbině závisí průběh a intenzita generovaných vokálů a na krku a ústech, které tvoří jakýsi tubus, který pak způsobuje různé rezonance což dává hlasu jeho charakteristické zabarvení pro každého člověka. LPC při analýze hlasu nejprve prostřednictvím filtrů (inversní filtrace) oddělí tyto rezonanční kmitočty a pak provede analýzu zbytku hlasu. Protože lidská řeč sestává z opakujících se zvukových elementů, je možné z nich sestavit jakousi databázi. Zbytek hlasu je pak asociován se záznamy v této databázi. Na stranu volaného se pak přenesou odkazy do této databáze + informace o charakteristice hlasu. Jejich zpětnou syntézou vznikne vysoce věrná podoba původního hlasu.

Výpočet[editovat | editovat zdroj]

Celkový model lidského hlasového traktu můžeme zapsat jako čistý IIR filtr:

H(z) = {{1}\over{A(z)}}, kde polynom A(z) = 1+a_1z^{z-1}+...+a_Pz^{-P}\, je tzv. prediktor a má řád P (často 10 nebo 16), a_i jsou LPC koeficienty.

Predikovaný signál \tilde{s}[n] je dán lineární kombinací několika předchozích vzorků (odtud název):

\tilde{s}[n] = - \sum_{i=1}^{P}{a_is[n-i]}.

Chyba predikce je rozdíl skutečné a predikované hodnoty:

e[n]=s[n]-\tilde{s}[n].

K výpočtu LPC koeficientů můžeme použít autokorelační koeficienty \phi[i,j] \,:

\phi[i,j] = \sum_n{s[n-i]s[n-j]}\,, což vede k soustavě lineárních rovnic.

Autokorelační koeficienty můžeme odhadnou na rámci délce N vzorků korelační metodou (signál vně rámce je považován na známý ale nulový), což vede ke stejným koeficientům \phi[i,j] = \phi[i+c,j+c] \,. Získáme korelační koeficienty R[k], o nichž platí vztah R[|i-j|] = \phi[i,j] = \phi[j,i]\,.

R[k]=\sum_{n=0}^{N-1-k}{s[n]s[n+k]}.

Na základě těchto korelačních koeficientů můžeme přímo spočítat LPC koeficienty řešením soustavy rovnic:

\sum_{n=1}^{P}{R[|n-i|]a_n}=-R[i] pro 1 \leq i \leq P.

V případě maticového zápisu této soustavy rovnic ji můžeme řešit algoritmem Levinson-Durbinen (matice je symetrická a Töplitzovaen):

E^{(0)}=R[0]\,, což je inicializace energie chyby predikce.

Algoritmus postupně zvyšuje řád prediktoru i od 1 do P:

k_i=-{{R[i]+\sum_{j=1}^{i-1}{a_j^{(i-1)}R[i-j]}}\over{E^{(i-1)}}}, kde a_j^{(i)} je j-tý koeficient prediktoru řádu i.
a_i^{(i)}=k_i a a_j^{(i)}=a_j^{(i-1)}+k_ia_{i-j}^{(i-1)} pro 1 \leq j < i.
E^{(i)}=(1-k_i^2)E^{i-1}, což je aktualizace chyby pro další iteraci.

Výsledkem jsou koeficienty a_i filtru A(z).

Externí odkazy[editovat | editovat zdroj]