2019-01-15 15:56:28 +01:00
\documentclass [main.tex] { subfiles}
\begin { document}
L'idée du codage prédictif est d'utiliser les corrélations (ressemblances) temporelles ou spatiales du signal à compresser.
\section { Rappels sur la corrélation}
On considère une source $ X $ qui émet un signal constitué de $ x _ 1 , \dots ,x _ N $ considérés comme une réalisation d'une suite de variables aléatoires $ X _ 1 , \dots ,X _ N $ de moyenne nulle.
%\img{0.5}{3/1/1}
La fonction de corrélation permet de mesurer la ressemblance entre échantillons voisins :
\[ \gamma _ x ( n,k ) = E ( X _ nX _ { n + k } ) \]
Pour un signal stationnaire (dont les caractéristiques statistiques n'évoluent pas au cours du temps :
\[ \gamma _ x ( n,k ) = \gamma _ x ( k ) = E ( X _ nX _ { n + k } ) , \forall n \]
En pratique, on estime la corrélation à partir des échantillons du signal à compresser.
Estimateur biaisé :
\[ \hat { \gamma _ x } ( k ) = \frac { 1 } { N } \sum _ { i = 1 } ^ { N - k } x _ i x _ { i + k } , \forall k \geq 0 \]
\[ \gamma _ x ( k ) = \frac { 1 } { N } \sum _ { i = - k } ^ N x _ i x _ { i + k } , \forall k \leq 0 \]
Avec Matlab, on l'obtient avec :
2019-02-12 09:33:02 +01:00
% \begin{lstlisting}
% [c,k] = xcorr(x,'biased');
% plot(k,c); grid;
% \end{lstlisting}
2019-01-15 15:56:28 +01:00
$ \gamma _ x ( k ) $ est maximale en 0 et est égale à l'énergie $ \sigma ^ 2 $ du signal.
2019-03-11 16:31:32 +01:00
\section { Codage prédictif en boucle ouverte}
Schéma en boucle ouverte:
\begin { figure} [H]
\centering
\begin { tikzpicture}
\sbEntree { E}
\node [above] at (E) { $ x _ n $ } ;
\sbDecaleNoeudy [5] { E} { mem}
\sbBloc { mem2} { Mémoire} { mem}
\sbBlocL { pred} { Prédiction} { mem2}
\sbRelieryx { E} { mem2}
\sbDecaleNoeudy [-5] { pred} { comp2}
\sbComp { comp} { comp2}
\sbRelierxy { pred} { comp}
\sbRelier { E} { comp}
\sbBlocL { Q} { Quantif} { comp}
\sbBlocL { C} { Codage entropique} { Q}
\sbSortie [5] { S} { C}
\sbRelier [0100..1] { C} { S}
\end { tikzpicture}
\caption { Emetteur en boucle ouverte}
\end { figure}
\begin { figure} [H]
\centering
\begin { tikzpicture}
\sbEntree { E}
\sbBlocL { Dc} { Décodeur entropique} { E}
\sbBlocL { Di} { Desindexation} { Dc}
\sbSumb [7] { comp} { Di}
\sbRelier { Di} { comp}
\sbDecaleNoeudy [5] { comp} { comp2}
\sbBloc { pred} { Prédicteur} { comp2}
\sbBlocL { mem} { Mémoire} { pred}
\sbDecaleNoeudy [-5] { mem} { S}
\sbSortie [5] { X} { S}
\sbRelierxy { pred} { comp}
\sbRelieryx { X} { mem}
\sbRelier { comp} { X}
\end { tikzpicture}
\caption { Recepteur en boucle ouverte}
\end { figure}
Ca marche mais la quantification introduit des erreurs qui peuvent s'accumuler. On s'en sort en réinitialisant le codeur régulièrement.
\subsection { Prédicteur linéaire optimal à 1 pas}
2019-01-15 15:56:28 +01:00
On souhaite prédire la valeur de $ X _ n $ à partir de la valeur de $ X _ { n - 1 } $ .
Le prédicteur sera linéaire :
\[ \hat { X _ n } = a _ 1 X _ { n - 1 } \]
On cherche la valeur de $ a _ 1 $ qui minimise $ e = E ( ( X _ n - \hat { X _ n } ) ^ 2 ) $
\begin { align*}
e & = E((X_ n-a_ 1X_ { n-1} )^ 2) \\
& = E(X_ n^ 2 -a_ 1^ 2 X_ { n-1} ^ 2 - 2a_ 1X_ { n-1} X_ n) \\
& = E(X_ n^ 2) + a_ 1^ 2E(X_ { n-1} ^ 2) - 2a_ 1E(X_ { n-1} X_ n)\\
e & = \gamma _ x(0) + a_ 1^ 2 \gamma _ x(0) - 2a_ 1 \gamma _ x(1) \text { par stationnarité} \\
\derivp [e] { a_ 1} |_ { \hat { a_ 1} } = 0 & \Leftrightarrow 2 \hat { a_ 1} \gamma _ x(0) - 2 \gamma _ x(1) = 0\\
& \Rightarrow \hat { a_ 1} = \frac { \gamma _ x(1)} { \gamma _ x(0)}
\end { align*}
\begin { rem}
Lorsque le signal sera très corrélé, $ \gamma _ x ( 1 ) \approx \gamma _ x ( 0 ) $ et $ \hat { a _ 1 } \approx 1 $ . Pour un signal peu corrélé, $ \gamma _ x ( 1 ) \approx 0 $ et $ \hat { a _ 1 } \approx 0 $ .
\end { rem}
Pour la valeur de $ \hat { a _ 1 } $ obtenue, on a
\begin { align*}
\hat { e} & = \gamma _ x(0) + (\frac { \gamma _ x(1)} { \gamma _ x(0)} )^ 2 \gamma _ x(0) - 2 \frac { \gamma _ x(1)^ 2} { \gamma _ x(0)} \\
& = \frac { \gamma _ x(0)^ 2-\gamma _ x(1)^ 2} { \gamma _ x(0)} \leq \gamma _ x(0)
\end { align*}
$ \hat { e } $ est l'énergie de la partie qui n'a pas pu être prédite de $ x _ 1 , \dots ,x _ N $ .\\
2019-03-11 16:31:32 +01:00
Lorsque le signal est fortement corrélé, $ \gamma _ x ( 1 ) \simeq \gamma _ x ( 0 ) $ et $ \hat { a _ 1 } \simeq 1 $ .
2019-01-15 15:56:28 +01:00
Le résidu de prédiction a une variance plus faible. Si on le quantifie, il permettra de reconstituer le signal initial avec une distorsion plus faible.
\newpage
\section { Prédiction à $ p $ pas}
2019-03-11 16:31:32 +01:00
On cherche à prédire $ \vec { X _ n } $ à partir des échantillons précédents $ X _ { n - 1 } , \dots ,X _ { n - p } $ .
\newcommand { \ap } { \vec { a} }
\newcommand { \Xn } { \vec { X_ n} }
\newcommand { \cp } { \vec { c} }
\newcommand { \Rp } { \vec { R} }
2019-01-15 15:56:28 +01:00
2019-03-11 16:31:32 +01:00
\[ \hat { X _ n } = a _ 1 X _ { n - 1 } + \dots + a _ pX _ { n - p } = \ap ^ T \Xn \quad \text { avec } \quad \ap ^ T = ( a _ 1 \dots a _ p ) \text { et } \Xn ^ T = ( X _ { n - 1 } \dots X _ { n - p } ) \]
2019-01-15 15:56:28 +01:00
On cherche $ \ap $ minimisant
\begin { align*}
e & = E((X_ n-\hat { X_ n} )^ 2) \\
& = E((X_ n-\ap ^ T\Xn )^ 2) \\
& = E(X_ n^ 2) + \ap ^ T E(\Xn \Xn ^ T) \ap -2\ap ^ t E(X_ n\Xn ) \\
\text { Or, } E(X_ n\Xn )& =(E(X_ nX_ { n-1} ),\dots ,E(X_ nX_ { n-p} ))^ T \\
& = (\gamma _ x(1), \gamma _ x(2),\dots ,\gamma _ x(p))^ T = \cp \\
\text { De plus, } E(\Xn \Xn ^ T) & =
\left [
\begin { array} { cccc}
E(X_ { n-1} X_ { n-1} ) & E(X_ { n-1} X_ { n-2} ) & \dots & E(X_ { n-1} X_ { n-p} ) \\
E(X_ { n-2} X_ { n-1} ) & \ddots & & \vdots \\
\vdots & & \ddots & \vdots \\
E(X_ { n-p} X_ { n-1} ) & \dots & \dots & E(X_ { n-p} X_ { n-p} )
\end { array}
\right ] \\
& =
\left [
\begin { array} { cccc}
\gamma _ x(0) & \gamma _ x(1) & \dots & \gamma _ x(p-1) \\
\gamma _ x(1) & \gamma _ x(0) & & \vdots \\
\vdots & & \ddots & \gamma _ x(1) \\
\gamma _ x(p-1) & \dots & \gamma _ x(1) & \gamma _ x(0)
\end { array}
\right ] = \Rp \\
\text { donc } e & = \gamma _ x(0) + \ap ^ T \Rp \ap - 2 \ap ^ T \cp
\end { align*}
2019-03-11 16:34:58 +01:00
\[ \left . \derivp [ e ] { \ap } \right | _ { \hat { \ap } } = 0 \quad \Leftrightarrow \quad \vec { 0 } + 2 \Rp \hat { \ap } - 2 \cp = 0 \quad \Rightarrow \quad \hat { \ap } = \Rp ^ { - 1 } \cp \]
2019-01-15 15:56:28 +01:00
Pour cette valeur de $ \hat { \ap } $ , on a
\begin { align*}
\hat { e} & = \gamma _ x(0) + \cp ^ T \Rp ^ { -1} \Rp \Rp ^ { -1} \cp -2\cp ^ T\Rp ^ { -1} \cp \\
& = \gamma _ x(0) - \cp ^ T \Rp ^ { -1} \cp \leq \gamma _ x(0)
\end { align*}
Ce prédicteur à $ p $ pas est en général plus efficace que le prédicteur à 1 pas mais il est plus complexe.
\newpage
\section { Mise en oeuvre du prédicteur}
On considère le codeur prédictif de structure suivante à l'émetteur :
%\img{0.4}{3/2/1}
et de structure suivante au décodeur de récepteur:
%\img{0.4}{3/2/2}
On met en œuvre un dispositif de prédiction exploitant les échantillons disponibles au récepteur, de manière à éviter l'accumulation des erreurs de quantification. Il n'y a pas d'accumulation d'erreur de prédiction car le prédicteur est le même à l'émetteur et au récepteur.\\
Pour le réglage du prédicteur, on distingue plusieurs méthodes :
\begin { enumerate} \setlength { \itemsep } { 5mm}
2019-03-11 16:34:58 +01:00
\item On calcule $ \hat { \gamma _ x } $ sur tout le signal et on transmet $ \vec { \hat { a } } _ { opt } $ .
2019-01-15 15:56:28 +01:00
Avantage :
\begin { itemize}
\item sa simplicité de mise ne œuvre
\end { itemize}
Inconvénients :
\begin { itemize}
\item il ne permet pas de tenir compte des non stationnarités
\item on règle le prédicteur à partir de $ x _ n $ et non de $ \hat { x _ n } $ .
\end { itemize}
\item On découpe le signal en blocs et on recalcule le prédicteur sur chaque bloc.
Avantages :
\begin { itemize}
\item sa simplicité de mise ne œuvre
\item permet de s'adapter aux non-stationnarités
\end { itemize}
Inconvénient :
\begin { itemize}
2019-03-11 16:34:58 +01:00
\item débit nécessaire à la transmission des $ \vec { \hat { a } } _ { opt } $ .
2019-01-15 15:56:28 +01:00
\end { itemize}
2019-03-11 16:34:58 +01:00
\item Mettre en place un prédicteur adaptatif. On travaille sur une fenêtre glissante contenant les N échantillons décalés : $ \vec { \hat { X } } _ n = ( \hat { x } _ { n - 1 } , ..., \hat { x } _ { n - N } ) ^ T $ .
2019-01-15 15:56:28 +01:00
2019-03-11 16:34:58 +01:00
On calcule $ \vec { \hat { a } } _ { opt } $ à partir de $ \vec { \hat { X } } _ n $ (au codeur et au décodeur). On applique $ \vec { \hat { a } } _ { opt } $ pour coder et décoder $ x _ n $ en $ \hat { x } _ n $ . À l'itération suivante, on calcule $ \vec { \hat { a } } _ { opt } $ à partir de $ \vec { \hat { X } } _ { n + 1 } = ( \hat { x } _ { n } , ..., \hat { x } _ { n - N + 1 } ) ^ T $ .
2019-01-15 15:56:28 +01:00
Avantages :
\begin { itemize}
\item Il est très adaptatif.
2019-03-11 16:34:58 +01:00
\item On ne transmet plus $ \vec { \hat { a } } _ { opt } $
2019-01-15 15:56:28 +01:00
\end { itemize}
Inconvénient :
\begin { itemize}
\item et bien... c'est pas simple.
\end { itemize}
\end { enumerate}
\end { document}
2019-01-28 13:08:24 +01:00
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main"
%%% End: