cours du 11/02

This commit is contained in:
Pierre-antoine Comby 2019-02-12 09:33:02 +01:00
parent 476b8b99a7
commit a965b98d67
7 changed files with 228 additions and 95 deletions

View file

@ -44,18 +44,18 @@ On a $V(x) = (1-1.75)^2\times0.5 + (2-1.75)^2\times0.25 + (3-1.75)^2\times0.25=0
\begin{example}[Générer des réalisations de VA] \begin{example}[Générer des réalisations de VA]
Génération d'une suite de réalisations d'une VA $X$ tel que $\X=\{0,1\}$ avec $p_0=0.9,\quad p_1=0.1$ Génération d'une suite de réalisations d'une VA $X$ tel que $\X=\{0,1\}$ avec $p_0=0.9,\quad p_1=0.1$
\begin{lstlisting} \begin{minted}{matlab}
x=rand(1,10)>0.9 x=rand(1,10)>0.9
% rand : generateur de loi uniforme % rand : generateur de loi uniforme
% randn : generateur de loi gaussienne % randn : generateur de loi gaussienne
\end{lstlisting} \end{minted}
\noindent Pour générer une suite de réalisations correspondant aux exemples précédents \noindent Pour générer une suite de réalisations correspondant aux exemples précédents
\begin{lstlisting} \begin{minted}{matlab}
x=rand(1,10) x=rand(1,10)
y= (x<0.5) + 2*(x<0.75 & x>0.5) + 3*(x>0.75) y= (x<0.5) + 2*(x<0.75 & x>0.5) + 3*(x>0.75)
\end{lstlisting} \end{minted}
\end{example} \end{example}
\medskip \medskip

View file

@ -4,64 +4,119 @@
\newcommand{\Y}{\mathcal{Y}} \newcommand{\Y}{\mathcal{Y}}
\newcommand{\X}{\mathcal{X}} \newcommand{\X}{\mathcal{X}}
\section{Introduction} \section{Introduction}
L'objectif de la quantification est de représenter les réalisations d'une source à valeurs dans un "grand" alphabet $\X$ , par exemple $\mathbb{R}$, à l'aide d'éléments d'un alphabet plus "petit" $\Y \in\N $.\\
Le quantificateur est donc défini par $q: \X \to \Y$. L'opération de quantification inverse, appelée aussi désindexation, est la fonction $q^{-1}: \Y \rightarrow \X$.\\ \begin{defin}
\begin{itemize}
\item La \emph{quantification} est une génération non réversible qui permet à
une source $X$ à valeur dans $\X$ d'associer un index $I\in\{0,...M-1\}$ ou
$M$ est le nombre de cellule de quantification. La
\item \emph{quantification inverse} consiste à associer une estimée $\hat{X}$ de $X$ à valeur dans $\X$ à un index $I$.
\item
Pour cela on introduit une fonction de quantification :
Remarque: l'opération de quantification n'est pas réversible donc $q^{-1}$ n'a pas de réalité, par contre, par abus de langage on note : $Q(x) = q^{-1}(q(x))$.\\ \[
q :\X \to \{0,...,M-1\}
\]
et des fonction de quantification inverse:
\[
r :\{0,...,M-1\} \to \X
\]
\item Pour une réalisation $x$ de $\X$,$i = q(x)$ est l'index de quantification.
\[
\hat{x}= r(q(x)) = Q(x)
\]
est la valeur reconstruite/quantifiée.
\end{itemize}
\end{defin}
\begin{rem}
Si $\X = \N $ ou $\Z$ ou $\R$ on réalise une quantification vectorielle. Si $\X =\R^n$ on réalise une quantification vectorielle.
\end{rem}
\begin{figure}[H] Les quantifications sont optimisées de manière à obtenir un débit minimale sous contrainte de distortion ou bien une distortion minimale sous contrainte de débit. La distorsion étant une mesure de l'erreur entre $X$ et $\hat{X}$.
\centering
\begin{tikzpicture}
\begin{axis}
[axis lines=middle,
xtick={-2,-1,1,2},
ytick={-1.5,0.5,1.5},
xlabel =$x$,ylabel=$Q(x)$,
ymin=-2,ymax=2
]
\addplot+[no marks,color=black] plot coordinates {(-2,-1.5) (-1,-1.5) (-1,-0.5) (0,-0.5) (0,0.5) (1,0.5) (1,1.5)(2,1.5)};
\end{axis}
\end{tikzpicture}
\caption{Exemple de quantificateur}
\end{figure}
Un quantificateur est défini par des intervalles de quantification $b_0 < b_1 < ... < b_n$ et par des valeurs de reconstitution $y_1,...,y_n$ : si on a $x \in[b_{i-1} ; b_i[$ alors $Q(x) = y_i$.\\
Un quantificateur est défini par des intervalles de quantification $b_0 < b_1 < ... < b_n$ et par des valeurs de reconstitution $y_1,...,y_n$ : si on a $x \in[b_{i-1} ; b_i[$ alors $Q(x) = y_i$.
Dans la suite, on va voir comment régler de façon efficace les $b_i$ et les $y_i$. Dans la suite, on va voir comment régler de façon efficace les $b_i$ et les $y_i$.
\section{Distorsion et mesure de distorsion}
\begin{defin}
\newpage On introduit une mesure de distorsion pour les performances d'un quantificateur qui toute les bonnes propriétés d'une distance symétrique, définie positive). Les principales mesures considérées sont:
\section{Mesure de distorsion et distorsion}
On introduit une mesure de distorsion pour les performances d'un quantificateur. Les principales mesures considérées sont:
\begin{itemize} \begin{itemize}
\item la mesure de distorsion en valeur absolue, $d(x,y) = |x-y|$ \item la mesure de distorsion en valeur absolue, $d(x,y) = |x-y|$
\item la mesure de distorsion quadratique, $d(x,y) = (x-y)^2$ \item la mesure de distorsion quadratique, $d(x,y) = (x-y)^2$
\item le mesure de distorsion de Hamming, $d(x,y) =
\begin{cases}
0 & \text{ si } x=y \\
1 & \text{ sinon}
\end{cases}$
\end{itemize} \end{itemize}
\bigbreak \end{defin}
Pour une source $X$ décrite par une distribution de probabilité $f_X(x)$, la distorsion introduite par un quantificateur $Q(x)$, est la moyenne de la mesure de la distorsion: Pour une source $X$ décrite par une distribution de probabilité $f_X(x)$, la distorsion introduite par un quantificateur $Q(x)$, est la moyenne de la mesure de la distorsion:
\[D = \int_{-\infty}^{\infty} d(x,Q(x))f_X(x) dx \] \[D = \int_{-\infty}^{\infty} d(x,Q(x))f_X(x) dx = E(d(X,Y))\]
Pour la mesure de distorsion quadratique, on a: Pour la mesure de distorsion quadratique, on a:
\[D = \int_{-\infty}^{\infty} (x-Q(x))^2f_X(x) dx \] \[D = \int_{-\infty}^{\infty} (x-Q(x))^2f_X(x) dx \]
\section{Quantification uniforme d'une source uniforme} \section{Quantification scalaire}
\subsection{Quantification uniforme d'une source uniforme}
On considère une source $X$ uniformément distribuée sur $[-X_{max} ; X_{max}]$. On considère aussi un quantificateur uniforme, c'est à dire que les intervalles de quantification sont tous de même taille, à M niveaux de sortie, situés au milieux des intervalles de quantification. On considère une source $X$ uniformément distribuée sur $[-X_{max} ; X_{max}]$. On considère aussi un quantificateur uniforme, c'est à dire que les intervalles de quantification sont tous de même taille, à M niveaux de sortie, situés au milieux des intervalles de quantification.
Prenons par exemple, un quantificateur à 4 niveaux de quantification: Prenons par exemple, un quantificateur à 4 niveaux de quantification:
%\img{0.5}{2/1/2.png} %\img{0.5}{2/1/2.png}
\begin{center}
\begin{tikzpicture}
\begin{axis}
[axis lines =middle,
xmin=-3,xmax=3,
ymin=-2,ymax=2,
xtick={-2,-1,1,2},
ytick={0.5,1.5},
xticklabels={$-X_m$,$-\frac{X_m}{2}$,$\frac{X_m}{2}$,$X_m$},
yticklabels={$\frac{X_m}{4}$,$\frac{3X_m}{4}$},
]
\addplot[black] plot coordinates {(-2,-1.5) (-1,-1.5)};
\addplot[black] plot coordinates {(-1,-0.5) (0,-0.5)};
\addplot[black] plot coordinates {(0,0.5) (1,0.5)};
\addplot[black] plot coordinates {(1,1.5) (2,1.5)};
\addplot[black,dashed] plot coordinates {(-1,-1.5) (-1,-0.5)};
\addplot[black,dashed] plot coordinates {(1,0.5) (1,1.5)};
\end{axis}
\end{tikzpicture}%
\begin{tikzpicture}
\begin{axis}
[axis lines =middle,
xmin=-3,xmax=3,
ymin=-0.7,ymax=0.7,
xtick={-2,-1,1,2},
ytick={0.5},
xticklabels={$-X_m$,$-\frac{X_m}{2}$,$\frac{X_m}{2}$,$X_m$},
yticklabels={$\frac{X_m}{4}$},
]
\addplot[black] plot coordinates {(-2,-0.5) (-1,0.5)};
\addplot[black] plot coordinates {(-1,-0.5) (0,0.5)};
\addplot[black] plot coordinates {(0,-0.5) (1,0.5)};
\addplot[black] plot coordinates {(1,-0.5) (2,0.5)};
\addplot[black,dashed] plot coordinates {(-1,-0.5) (-1,0.5)};
\addplot[black,dashed] plot coordinates {(1,-0.5) (1,0.5)};
\end{axis}
\end{tikzpicture}
\end{center}
On note $\Delta$ l'intervalle de quantification, dans ce cas, $\Delta = \frac{2 X_{max}}{M}$.\\ On note $\Delta$ l'intervalle de quantification, dans ce cas, $\Delta = \frac{2 X_{max}}{M}$.\\
Pour déterminer la distorsion qui va être introduite par le quantificateur, on calcule simplement: Pour déterminer la distorsion qui va être introduite par le quantificateur, on calcule simplement:
\begin{align*} \begin{align*}
D &= \int_{-X_{max}}^{X_{max}}\frac{1}{2X_{max}}(x-Q(x))^2 dx D &= \int_{-X_{max}}^{X_{max}}\frac{1}{2X_{max}}(x-Q(x))^2 dx
\intertext{Comme $Q(x)$ est connu et constant sur un intervalle de quantification, on découpe simplement l'intervalle en sous-intervalles de quantification:} \intertext{Comme $Q(x)$ est connu et constant sur un intervalle de quantification, on découpe simplement l'intervalle en sous-intervalles de quantification:}
D &= \sum_{i=-M/2}^{(M-1)/2} \int_{i\Delta}^{(i+1)\Delta} \frac{1}{2X_{max}}(x-(i+\frac{1}{2})\Delta)^2 dx D &= \sum_{i=0}^{(M-1)} \int_{i\Delta}^{(i+1)\Delta} \frac{1}{2X_{max}}(x-(i+\frac{1}{2})\Delta)^2 dx
\intertext{On calcule} \intertext{On calcule}
I & = \int_{i\Delta}^{(i+1)\Delta} (x-(i+\frac{1}{2})\Delta)^2 \frac{1}{2X_{max}} dx \\ I & = \int_{i\Delta}^{(i+1)\Delta} (x-(i+\frac{1}{2})\Delta)^2 \frac{1}{2X_{max}} dx \\
\intertext{on pose $u = x+X_{max}-(x+\frac{1}{2})\Delta)$}
& = \int_{-\Delta/2}^{\Delta/2} \frac{u^2}{2X_{max}} du \\ & = \int_{-\Delta/2}^{\Delta/2} \frac{u^2}{2X_{max}} du \\
I & = \frac{\Delta^3}{24X_{max}} = \frac{X_{max}^2}{3M^3} I & = \frac{\Delta^3}{24X_{max}} = \frac{X_{max}^2}{3M^3}
\end{align*} \end{align*}
Dans $D$, on a $M$ intégrales égales à $I$ donc \[ D = \frac{X_{max}^2}{3M^2}\] Dans $D$, on a $M$ intégrales égales à $I$ donc \[ D = \frac{X_{max}^2}{3M^2}\]
L'énergie de la source est mesurée par sa variance L'énergie de la source est mesurée par sa variance
@ -71,9 +126,12 @@ L'énergie de la source est mesurée par sa variance
\sigma^2 & = \frac{X_{max}^2}{3} \sigma^2 & = \frac{X_{max}^2}{3}
\end{align*} \end{align*}
On obtient donc $D = \frac{\sigma^2}{M^2}$. Sans codage entropique, le nombre de bits nécessaires pour représenter un niveau de reconstruction est $R = \lceil \log_2 M \rceil $, d'où On obtient donc $D = \frac{\sigma^2}{M^2}$.
\begin{prop}
Sans codage entropique, le nombre de bits nécessaires pour représenter un niveau de reconstruction est $R = \lceil \log_2 M \rceil $, d'où
\[ \boxed{ D = \sigma^2 2^{-2R} } \] \[ \boxed{ D = \sigma^2 2^{-2R} } \]
\end{prop}
La distorsion maximale est égale à l'énergie de la source, et diminue très rapidement quand on augmente le nombre de bits du quantificateur. La distorsion maximale est égale à l'énergie de la source, et diminue très rapidement quand on augmente le nombre de bits du quantificateur.
\begin{rem} \begin{rem}
@ -88,30 +146,94 @@ RSB_{dB} & = 10\log_{10}(2^{2R}) = 6.02R \text{decibel}
Le $RSB$ est utilisé comme mesure de qualité en audio, image... Le $RSB$ est utilisé comme mesure de qualité en audio, image...
\newpage \begin{center}
\section{Quantification uniforme d'une source quelconque} \begin{tikzpicture}
\begin{axis}
[axis lines = middle,
xmin=0,xmax=5,ymin = 0,ymax=8,
xlabel=$R$(bits),
ylabel=$\sigma_x^2$,
ytick={0.5,2,8},
yticklabels={$D/16$,$D/4$,$D$},
]
\addplot[red,mark=+,samples at={0,1,2,3,4,5}] {2^(-2*(x-1.5)};
\addplot[gray, dashed,no marks,xcomb,samples at={0,1,2,3,4,5}] {2^(-2*(x-1.5)};
On considère une source $X$ décrite par sa ddp $f_X(x)$, quantifiée par un quantificateur uniforme à $M$ niveaux de pas $\Delta$. \end{axis}
\end{tikzpicture}
\end{center}
La pente a l'origine est de $-2\ln(2)\sigma_x^2$. La distorsion décroit très vite avec $R$
%\img{0.5}{2/1/3} On peux aussi tracer la courbe distortion- débit (R= f(D))
Pour une source quelconque, il faut régler $\Delta$ de manière à équilibrer distorsion de granularité et distorsion de surcharge.
\newpage \subsection{Quantification uniforme d'une source quelconque}
\section{Quantification non-uniforme d'une source quelconque - Algorithme de Lloyd-Max}
On considère une source $X$ décrite par sa ddp $f_X(x)$, quantifiée par un quantificateur uniforme à $M$ niveaux de pas $\Delta$. Si $M$ est fini on peux considérer deux type de quantificateur:
\begin{figure}[H]
\centering
\begin{subfigure}{0.5\textwidth}
\begin{tikzpicture}
\begin{axis}
[axis lines =middle,
xmin=-3,xmax=3,
ymin=-3,ymax=3,
xtick={-2,-1,1,2},
ytick={-1.5,-0.5,0.5,1.5},
xticklabels={$-2\Delta$,$-\Delta$,$\Delta$,$2\Delta$},
yticklabels={$-3\frac{\Delta}{2}$,$\frac{\Delta}{2}$,$\frac{\Delta}{2}$,$3\frac{\Delta}{2}$},
]
\addplot[black, jump mark left]coordinates {(-2,-1.5)
%(-1,-1.5)
(-1,-0.5)
(0,0.5)
(1,1.5) (3,1.5)};
\end{axis}
\end{tikzpicture}
\subcaption{Quantificateur sans zone morte}
\end{subfigure}%
\begin{subfigure}{0.5\textwidth}
\begin{tikzpicture}
\begin{axis}
[axis lines =middle,
xmin=-3,xmax=3,
ymin=-3,ymax=3,
xtick={-3,-2,-1,1,2,3},
ytick={-2.5,-1.5,1.5,2.5},
xticklabels={$-d-2\Delta$,$-d-\Delta$,$-d$,$d$,$d+\Delta$,$d+2\Delta$},
yticklabels={$-d-3\frac{\Delta}{2}$,$-d-\frac{\Delta}{2}$,$d+\frac{\Delta}{2}$,$d+3\frac{\Delta}{2}$},
x tick label style={yshift={mod(\ticknum,2)*1.5em}},
y tick label style={xshift={3em}}
]
\addplot[black,thick, jump mark left]coordinates {(-3,-2.5)
%(-1,-1.5)
(-2,-1.5)
(-1,0)
(1,0.5)
(2,1.5) (3,2.5)};
\end{axis}
\end{tikzpicture}
\subcaption{Quantificateur avec zone morte}
\end{subfigure}
\end{figure}
On considère une source $X$ discrète décrite par une ddp $f_X(x)$. On cherche le quantificateur non-uniforme à $M$ niveaux de sortie qui minimise la distorsion de quantification pour une norme de distorsion quadratique.\\ On considère une source $X$ discrète décrite par une ddp $f_X(x)$. On cherche le quantificateur non-uniforme à $M$ niveaux de sortie qui minimise la distorsion de quantification pour une norme de distorsion quadratique.\\
Un tel quantificateur est caractérisé par
\begin{itemize}
\item $b_0 < b_1 < \dots < b_n$ les bornes des intervalles de quantification
\item $y_1 < y_2 < \dots < y_n$ les valeurs de reconstruction
\end{itemize}
Ainsi, si $x \in [b_{i-1},b_i], Q(x) = y_i$.\\
On cherche à minimiser la distorsion On cherche à minimiser la distorsion
\[ D = \int_{-\infty}^{+\infty} (x-Q(x))^2f_X(x)dx = \sum_{i=1}^M \int_{b_{i-1}}^{b_i} (x-y_i)^2f_X(x)dx \] \[ D = \int_{-\infty}^{+\infty} (x-Q(x))^2f_X(x)dx \]
\begin{align*}
D &= \underbracket{\int_{-\infty}^{(-M/2+1)\Delta} (x-Q(x))^2f_X(x)dx }_{\text{distorsion de surcharge}}\\
&+ \underbracket{\sum_{i=1}^{M-2} \int_{-\frac{M}{2}\Delta+i\Delta}^{-\frac{M}{2}\Delta+(i+1)\Delta}}_{\text{distorsion de granularité}} (x-Q(x))^2f_X(x)dx \\
&+\underbracket{\int_{(\frac{M}{2}-1)\Delta}^{+\infty} (x-Q(x))^2f_X(x)dx}_{\text{distorsion de surcharge}}\\
\end{align*}
Pour M fixé on a :
Les conditions nécessaires pour avoir $D$ minimale sont : Les conditions nécessaires pour avoir $D$ minimale sont :
\begin{itemize} \begin{itemize}
@ -302,3 +424,8 @@ Cette méthode permet de réaliser une quantification sans avoir à connaître l
\end{rem} \end{rem}
\end{document} \end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main"
%%% End:

View file

@ -24,10 +24,10 @@ Estimateur biaisé :
\[ \gamma_x(k) = \frac{1}{N} \sum_{i=-k}^N x_i x_{i+k}, \forall k \leq 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 : Avec Matlab, on l'obtient avec :
\begin{lstlisting} % \begin{lstlisting}
[c,k] = xcorr(x,'biased'); % [c,k] = xcorr(x,'biased');
plot(k,c); grid; % plot(k,c); grid;
\end{lstlisting} % \end{lstlisting}
$\gamma_x(k)$ est maximale en 0 et est égale à l'énergie $\sigma^2$ du signal. $\gamma_x(k)$ est maximale en 0 et est égale à l'énergie $\sigma^2$ du signal.

View file

@ -0,0 +1,16 @@
\documentclass[main.tex]{subfiles}
\begin{document}
\section{Codage d'Huffman}
\section{Codage arithétique}
\section{Codage LZW}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

View file

@ -1,10 +0,0 @@
clear all
close all
M=20;
Delta = 0.1;
x = -5:0.01:5;
[y,idx] = quantif(x,M,Delta);
plot(x,y); grid; axis([-5 5 -5 5])

View file

@ -1,32 +1,36 @@
\documentclass{../../cours} \documentclass{../../cours}
\usepackage{../../raccourcis} \usepackage{../../raccourcis}
\let\framed\relax \let\endframed\relax
\let\shaded\relax \let\endshaded\relax
\let\leftbar\relax \let\endleftbar\relax
\let\snugshade\relax \let\endsnugshade\relax
\usepackage{minted}
% Mise en page % Mise en page
\renewcommand{\vec}{\mathbf} \renewcommand{\vec}{\mathbf}
\title{Notes de Cours} \title{Notes de Cours}
\author{Pierre-Antoine Comby} \author{Pierre-Antoine Comby}
\teacher{Michel Kieffer} \teacher{Michel Kieffer}
\module{455\\ Codage de source} \module{455\\ Codage de source}
\usepackage{listings} % \usepackage{listings}
\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue % \definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue
\definecolor{mylilas}{RGB}{170,55,241} % \definecolor{mylilas}{RGB}{170,55,241}
\begin{document} \begin{document}
\lstset{language=Matlab, % % \lstset{language=Matlab, %
% basicstyle=\color{red}, % % basicstyle=\color{red},
breaklines=true,% % breaklines=true,%
morekeywords={matlab2tikz}, % morekeywords={matlab2tikz},
keywordstyle=\color{blue},% % keywordstyle=\color{blue},%
morekeywords=[2]{1}, keywordstyle=[2]{\color{black}}, % morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
identifierstyle=\color{black},% % identifierstyle=\color{black},%
stringstyle=\color{mylilas}, % stringstyle=\color{mylilas},
commentstyle=\color{mygreen},% % commentstyle=\color{mygreen},%
showstringspaces=false,%without this there will be a symbol in the places where there is a space % showstringspaces=false,%without this there will be a symbol in the places where there is a space
numbers=left,% % numbers=left,%
numberstyle={\tiny \color{black}},% size of the numbers % numberstyle={\tiny \color{black}},% size of the numbers
numbersep=9pt, % this defines how far the numbers are from the text % numbersep=9pt, % this defines how far the numbers are from the text
emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise % emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise
%emph=[2]{word1,word2}, emphstyle=[2]{style}, % %emph=[2]{word1,word2}, emphstyle=[2]{style},
} % }
\maketitle \maketitle
\tableofcontents \tableofcontents
\chapter*{Rappel de probabilité} \chapter*{Rappel de probabilité}
@ -39,6 +43,10 @@
\subfile{chap2.tex} \subfile{chap2.tex}
\chapter{Codage prédictif} \chapter{Codage prédictif}
\subfile{chap3.tex} \subfile{chap3.tex}
\appendix
\chapter{Implémentation des différents algorithme}
\subfile{chapA.tex}
\end{document} \end{document}
%%% Local Variables: %%% Local Variables:

View file

@ -1,8 +0,0 @@
function [y,idx] = quantif(x,M,Delta)
idx = floor(x/Delta);
idx = max(idx,-M/2);
idx = min(idx,M/2-1);
y = idx*Delta + Delta/2;