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}<0.5\), 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.