3. Predykcja i kodery ADPCM

3.2. Obliczanie predyktora

Jak skonstruować predyktor o wysokim zysku predykcji? Aby rozpatrzyć to zagadnienie, oddzielimy predyktor od układu ADPCM, przyjmując, że do przewidywania próbki sygnału wejściowego x_n możemy wykorzystać poprzednie próbki tego samego sygnału  x_{n-1}^\ ,\ x_{n-2},\ldots,x_{n-p} – rys.16.

 

Rysunek 16 Predykcja próbki sygnału

Predyktory wykorzystywane w koderach mowy należą do predyktorów liniowych, tzn. predykcja x_n^p jest kombinacją liniową poprzednich próbek sygnału. 
Najprostszy predyktor wykorzystuje wprost wartość poprzedniej próbki x_n^p=x_{n-1} . Lepszym rozwiązaniem jest użycie poprzedniej próbki pomnożonej przez współczynnik predykcji x_n^p=a_1x_{n-1}^\ . Ogólnie predyktor liniowy wyraża się wzorem: 

x_n^p=\sum\limits_{i=1}^{p}{a_ix_{n-i}^\ } (20)

Współczynniki predykcji a_1, a_2,\ldots,a_p  obliczamy na minimum mocy błędu predykcji: 

{min\sigma}_\varepsilon^2{,}\circ\circ\ \sigma_\varepsilon^2=E(x_n-x_n^p)^2 (21)

gdzie E – operator uśredniania, który w praktyce jest zastępowany obliczaniem wartości średniej w bloku próbek. 
Przyjmijmy, że znamy współczynniki autokorelacji sygnału:

R_i=E(x_nx_{n-i}) (22)

Współczynnik R_0 jest równy mocy sygnału: R_0=E\left(x_n^2\right)=\sigma_x^2
Na początku obliczmy zysk predykcji najprostszego predyktora opisanego równaniem  x_n^p=x_{n-1}^\ .


\sigma_\varepsilon^2=E\left((x_n-x_{n-1})^2\right)=E\left(x_n^2\right)-2E\left(x_nx_{n-1}\right)+E\left(x_{n-1}^2\right)=2R_0-2R_1

G_p=\frac{\sigma_x^2}{\sigma_\varepsilon^2}=\frac{R_0}{2R_0-2R_1}=\frac{1}{2(1-\frac{R_1}{R_0})} (23)

Jeżeli  \frac{R_1}{R_0}>0.5, wówczas G_p>1 i stosowanie tego predyktora jest korzystne. Jeżeli \frac{R_1}{R_0}, wówczas jakość sygnału na wyjściu układu ADPCM jest niższa niż  ta, jaką oferuje sam kwantyzator. 
Zajmijmy się teraz predyktorem ze współczynnikiem predykcji:  x_n^p=a_1x_{n-1} . Próbka sygnału błędu predykcji wynosi:  \varepsilon_n=x_n-x_n^p=x_n-a_1x_{n-1}, a moc tego sygnału

\sigma_\varepsilon^2=E\left((x_n-a_1x_{n-1})^2\right)=E\left(x_n^2\right)-2a_1E\left(x_nx_{n-1}\right)+(a_1)^2E\left(x_{n-1}^2\right)=R_0-2a_1R_1+(a_1)^2R_0

Minimum mocy błędu predykcji obliczymy, różniczkując  σ_ε^2    względem  a_1 i przyrównując do zera:

\frac{\partial\sigma_\varepsilon^2}{\partial a_1}=-2R_1+2a_1R_0=0\quad \Rightarrow \quad a_1=\frac{R_1}{R_0} (24)

Zysk dla optymalnego współczynnika predykcji  a_1=\frac{R_1}{R_0} wynosi 

G_p=\frac{\sigma_x^2}{\sigma_\varepsilon^2}=\frac{R_0}{R_0-2\frac{R_1}{R_0}R_1+(\frac{R_1}{R_0})^2R_0}=\frac{1}{1-(\frac{R_1}{R_0})^2}\geq1 (25)

Jest on większy od 1, gdyż współczynniki autokorelacji spełniają nierówność \left|R_1\right|\le R_0 . Wartość równą 1 osiąga dla nieskorelowanego sygnału, dla którego R_1=0. Wówczas również a_1=0. Predyktor nie jest w stanie przewidzieć próbki nieskorelowanego sygnału, w związku z tym wyłącza się. 
Podobnie postępujemy w ogólnym przypadku, gdy predyktor ma p współczynników i jest opisany wzorem (20). Do wyznaczenia współczynników predykcji będą potrzebne współczynniki autokorelacji R_0,R_1,\ldots,R_p. Współczynniki predykcji są rozwiązaniem układu równań liniowych [1]. Np., dla p=3 jest to następujący układ równań: 

\begin{matrix}R_0&R_1&R_2\\R_1&R_0&R_1\\R_2&R_1&R_0\\\end{matrix}\ \ \cdot\ \ \ \begin{matrix}a_1\\a_2\\a_3\\\end{matrix}\ =\ \ \begin{matrix}R_1\\R_2\\R_3\\\end{matrix} (26)

Wykonując symulacje w ramach ćwiczenia laboratoryjnego „Kwantyzacja skalarna” można będzie porównać działanie kodera ADPCM z działaniem samego kwantyzatora. Różnica wartości SNR[dB] to zysk predykcji wyrażony w decybelach (wzór 19). Zysk predykcji zależy od predyktora (jest tym większy im więcej poprzedzających próbek wykorzystamy do przewidywania próbki bieżącej). W głównej jednak mierze zależy od samego sygnału. W przypadku sygnału nieskorelowanego predykcja nie jest możliwa. Podstawiając zerowe wartości współczynników autokorelacji (poza wartością R_0, która jest mocą sygnału) do równania (26) otrzymamy zerowy wektor prawej strony i zerowe wartości współczynników predykcji. Predykcja x_n^p=0  i zysk wynosi 1 (w decybelach 0). Z kolei sygnał o wartości stałej jest bezbłędnie przewidywalny z wykorzystaniem predykcji x_n^p=x_{n-1} . Tu zysk jest nieskończony.  Bezbłędnie przewidywalny jest też sygnał harmoniczny, wystarczy znać 2 poprzednie próbki, aby obliczyć kolejną próbkę jako kombinację liniową tych 2 poprzednich. Będzie się o tym można przekonać, symulując koder ADPCM z predyktorem o co najmniej 2 współczynnikach predykcji. Należy się wówczas spodziewać wysokich wartości SNR.