Podręcznik
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
| \(\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.