diff --git a/455-Codage_Sources/Cours/chap0_MAN.tex b/455-Codage_Sources/Cours/chap0_MAN.tex index a0028d1..f5171f7 100644 --- a/455-Codage_Sources/Cours/chap0_MAN.tex +++ b/455-Codage_Sources/Cours/chap0_MAN.tex @@ -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] 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 % rand : generateur de loi uniforme % 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 -\begin{lstlisting} +\begin{minted}{matlab} x=rand(1,10) y= (x<0.5) + 2*(x<0.75 & x>0.5) + 3*(x>0.75) -\end{lstlisting} +\end{minted} \end{example} \medskip diff --git a/455-Codage_Sources/Cours/chap2.tex b/455-Codage_Sources/Cours/chap2.tex index 7709a8d..cdd2fc2 100644 --- a/455-Codage_Sources/Cours/chap2.tex +++ b/455-Codage_Sources/Cours/chap2.tex @@ -4,64 +4,119 @@ \newcommand{\Y}{\mathcal{Y}} \newcommand{\X}{\mathcal{X}} \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] - \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$.\\ +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}$. +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$. +\section{Distorsion et mesure de distorsion} +\begin{defin} -\newpage -\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} -\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$ -\end{itemize} -\bigbreak + 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: + \begin{itemize} + \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 le mesure de distorsion de Hamming, $d(x,y) = + \begin{cases} + 0 & \text{ si } x=y \\ + 1 & \text{ sinon} + \end{cases}$ + \end{itemize} +\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: -\[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: \[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. Prenons par exemple, un quantificateur à 4 niveaux de quantification: %\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}$.\\ Pour déterminer la distorsion qui va être introduite par le quantificateur, on calcule simplement: + \begin{align*} 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:} -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} -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 \\ I & = \frac{\Delta^3}{24X_{max}} = \frac{X_{max}^2}{3M^3} \end{align*} + 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 @@ -71,9 +126,12 @@ L'énergie de la source est mesurée par sa variance \sigma^2 & = \frac{X_{max}^2}{3} \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} } \] +\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. \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... -\newpage -\section{Quantification uniforme d'une source quelconque} +\begin{center} + \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 -\section{Quantification non-uniforme d'une source quelconque - Algorithme de Lloyd-Max} +\subsection{Quantification uniforme d'une source quelconque} + +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.\\ -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 -\[ 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 : \begin{itemize} @@ -302,3 +424,8 @@ Cette méthode permet de réaliser une quantification sans avoir à connaître l \end{rem} \end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "main" +%%% End: diff --git a/455-Codage_Sources/Cours/chap3.tex b/455-Codage_Sources/Cours/chap3.tex index 29f4a17..df0a3b5 100644 --- a/455-Codage_Sources/Cours/chap3.tex +++ b/455-Codage_Sources/Cours/chap3.tex @@ -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 \] Avec Matlab, on l'obtient avec : -\begin{lstlisting} -[c,k] = xcorr(x,'biased'); -plot(k,c); grid; -\end{lstlisting} +% \begin{lstlisting} +% [c,k] = xcorr(x,'biased'); +% plot(k,c); grid; +% \end{lstlisting} $\gamma_x(k)$ est maximale en 0 et est égale à l'énergie $\sigma^2$ du signal. diff --git a/455-Codage_Sources/Cours/chapA.tex b/455-Codage_Sources/Cours/chapA.tex new file mode 100644 index 0000000..4602a8d --- /dev/null +++ b/455-Codage_Sources/Cours/chapA.tex @@ -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: diff --git a/455-Codage_Sources/Cours/lol.m b/455-Codage_Sources/Cours/lol.m deleted file mode 100644 index 9839b22..0000000 --- a/455-Codage_Sources/Cours/lol.m +++ /dev/null @@ -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]) \ No newline at end of file diff --git a/455-Codage_Sources/Cours/main.tex b/455-Codage_Sources/Cours/main.tex index e219b7e..56a3adc 100644 --- a/455-Codage_Sources/Cours/main.tex +++ b/455-Codage_Sources/Cours/main.tex @@ -1,32 +1,36 @@ \documentclass{../../cours} \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 - \renewcommand{\vec}{\mathbf} \title{Notes de Cours} \author{Pierre-Antoine Comby} \teacher{Michel Kieffer} \module{455\\ Codage de source} -\usepackage{listings} -\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue -\definecolor{mylilas}{RGB}{170,55,241} +% \usepackage{listings} +% \definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue +% \definecolor{mylilas}{RGB}{170,55,241} \begin{document} -\lstset{language=Matlab, % -% basicstyle=\color{red}, - breaklines=true,% - morekeywords={matlab2tikz}, - keywordstyle=\color{blue},% - morekeywords=[2]{1}, keywordstyle=[2]{\color{black}}, - identifierstyle=\color{black},% - stringstyle=\color{mylilas}, - commentstyle=\color{mygreen},% - showstringspaces=false,%without this there will be a symbol in the places where there is a space - numbers=left,% - numberstyle={\tiny \color{black}},% size of the numbers - 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=[2]{word1,word2}, emphstyle=[2]{style}, -} +% \lstset{language=Matlab, % +% % basicstyle=\color{red}, +% breaklines=true,% +% morekeywords={matlab2tikz}, +% keywordstyle=\color{blue},% +% morekeywords=[2]{1}, keywordstyle=[2]{\color{black}}, +% identifierstyle=\color{black},% +% stringstyle=\color{mylilas}, +% commentstyle=\color{mygreen},% +% showstringspaces=false,%without this there will be a symbol in the places where there is a space +% numbers=left,% +% numberstyle={\tiny \color{black}},% size of the numbers +% 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=[2]{word1,word2}, emphstyle=[2]{style}, +% } \maketitle \tableofcontents \chapter*{Rappel de probabilité} @@ -39,6 +43,10 @@ \subfile{chap2.tex} \chapter{Codage prédictif} \subfile{chap3.tex} + +\appendix +\chapter{Implémentation des différents algorithme} +\subfile{chapA.tex} \end{document} %%% Local Variables: diff --git a/455-Codage_Sources/Cours/quantif.m b/455-Codage_Sources/Cours/quantif.m deleted file mode 100644 index 4ba340f..0000000 --- a/455-Codage_Sources/Cours/quantif.m +++ /dev/null @@ -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; \ No newline at end of file