3. Predykcja i kodery ADPCM

3.3. Metody sekwencyjne (materiał dodatkowy)

Współczynniki predykcji można obliczyć ze współczynników autokorelacji sygnału (wzory 24, 26). Aby oszacować wartości współczynników autokorelacji, trzeba wpierw zgromadzić pewną liczbę próbek sygnału. Oznacza to wprowadzenie opóźnienia, w kodowaniu mowy rzędu 10-30ms. Obliczone współczynniki trzeba ponadto przesłać do odbiornika, żeby tam uruchomić identyczny predyktor. Aby tego uniknąć, w koderach ADPCM oblicza się współczynniki predykcji z poprzednich, do tego obarczonych błędem kwantyzacji próbek sygnału (x_n^\ast na rys.15). Na tej samej zasadzie działa algorytm adaptacji kwantyzatora metodą „wstecz”. 
Algorytm sekwencyjny aktualizuje, co próbkę n, wektor współczynników predykcji przechowywany w pamięci. 
\mathbf{a}\left(n\right)=[a_1\left(n\right),\ a_2\left(n\right),\ldots,a_p\left(n\right)]T , gdzie T oznacza transpozycję. Predykcja jest obliczona jak we wzorze (20): x_n^p=\sum_{i=1}^{p}{a_i\ x_{n-i}^\ast}=\mathbf{a}^T\left(n\right)\mathbf{X}_n^\ast , gdzie \mathbf{X}_n^\ast=[x_{n-1}^\ast,\ x_{n-2}^\ast,\ \ldots,x_{n-p}^\ast]T jest wektorem złożonym z p próbek sygnału poprzedzających próbkę bieżącą. Aktualizacja współczynników predykcji odbywa się przez dodanie niewielkiej poprawki: 

\mathbf{a}(n+1)=\mathbf{a}(n)+\mathrm{\Delta}\mathbf{a}(n) (27)

Poprawka winna zmierzać w kierunku zmniejszenia mocy błędu predykcji [\varepsilon_n^\ast]2.  Na rys.17 pokazano proces aktualizacji predyktora o dwóch współczynnikach. W chwili n dysponujemy wektorem współczynników \mathbit{a}Nie. Kierunek wzrostu błędu predykcji pokazuje gradient grad[\varepsilon_n^\ast]^2=∇[εn*]^2 . Poprawka \mathrm{\Delta}\mathbf{a}(n) winna zmierzać w przeciwną stronę:  \mathrm{\Delta}\mathbf{a}(n)\propto-grad[\varepsilon_n^\ast]^2
Ponieważ  \varepsilon_n^\ast=x_n^\ast-x_n^p=x_n^\ast-\sum_{i=1}^{p}{a_i\ x_{n-i}^\ast}=x_n^\ast-\mathbf{a}^T\left(n\right)\mathbf{X}_n^\ast , to gradient (wektor pochodnych) wynosi 

grad[\varepsilon_n^\ast]^2=\frac{∂}{∂\mathbf a(n)}[xn*-\mathbf a^T(n)\mathbf X_n^*]^2=-2ε_n^*\mathbf X_n^*  

Poprawka \mathrm{\Delta}\mathbf{a}(n) powinna mieć przeciwny znak, natomiast długość skoku niech będzie regulowana współczynnikiem szybkości adaptacji b

∆\mathbf a(n)=βε_n^*\mathbf X_n^*  

Ostatecznie otrzymuje się dość prosty w stosowaniu wzór 

\mathbf{a}\left(n+1\right)=\mathbf{a}\left(n\right)+\beta\varepsilon_n^\ast\mathbf{X}_n^\ast (28)

Ta metoda adaptacji nazywana jest metodą stochastycznego gradientu.  Według wzoru (28) aktualizuje się współczynniki predykcji – synchronicznie w nadajniku i odbiorniku ADPCM.  Adaptacja sekwencyjna nie wymaga przesyłania współczynników predykcji do dekodera. 

Rysunek 17 Metoda gradientowa adaptacji predyktora

Dobór szybkości adaptacji b nie jest sprawą łatwą. Za duża wartość współczynnika b prowadzi do niestabilności procesu adaptacji (zbyt duże kroki ∆\mathbf a(n)). Wzór (28) pokazuje, ze wielkość poprawki zależy ponadto od mocy sygnału. Rozwiązaniem tego problemu jest metoda stochastycznego gradientu z normalizacją, w której współczynnik b jest odwrotnie proporcjonalny do estymaty mocy sygnału:

\beta_n=\frac{L_\beta}{{\hat{\sigma}}_x^2(n)+M_\beta} (29)

gdzie L_\beta reguluje szybkość adaptacji a  M_\beta zapobiega dzieleniu przez zero. 
W ćwiczeniu „Kwantyzacja skalarna” zaimplementowano metodę stochastycznego gradientu bez normalizacji i z normalizacją.