From a9c68aa420491ece8493bcebfd465784fe2ff903 Mon Sep 17 00:00:00 2001 From: Pierre-antoine Comby Date: Mon, 21 Jan 2019 17:07:56 +0100 Subject: [PATCH] cours du 21/01 --- 455-Codage_Sources/Cours/chap1.tex | 151 +++++++++++++++++------------ 455-Codage_Sources/Cours/main.tex | 4 +- 2 files changed, 92 insertions(+), 63 deletions(-) diff --git a/455-Codage_Sources/Cours/chap1.tex b/455-Codage_Sources/Cours/chap1.tex index afd686b..acfa89c 100644 --- a/455-Codage_Sources/Cours/chap1.tex +++ b/455-Codage_Sources/Cours/chap1.tex @@ -36,56 +36,56 @@ On considère une source binaire $X$, à valeurs dans $\X = \{0,1\}$, et \[p_0 = Pr(X=0),\quad p_1 = Pr(X=1) = 1 - p_0\] \end{exemple} -\begin{defin}[Information] -L'information associée à chaque symbole de la VA X est \[I(i) = -log_2 p_i \text{ (en bits/symbole)} \] +\begin{defin} +\emph{L'information} associée à chaque symbole de la VA X est \[I(i) = -log_2 p_i \text{ (en bits/symbole)} \] \end{defin} \begin{rem} C'est une fonction décroissante sur ]0,1] qui s'annule en 1. En effet, l'information associée à quelque chose de certain ($p_i=1$) est nulle, alors que celle associée à quelque chose de peu probable ($p_i\rightarrow 0$) est très grande $(\rightarrow \infty)$. \end{rem} -\begin{defin}[Entropie] -L'information moyenne associé aux symboles de $X$ ou à $X$ est appelée entropie de la source $X$. +\begin{defin} +L'information moyenne associé aux symboles de $X$ ou à $X$ est appelée \emph{entropie} de la source $X$. \[H(X) = -\sum_{i\in\X}p_i log_2(p_i) = \sum_{i\in\X}p_i log_2(\frac{1}{p_i})\] \end{defin} On rappelle que $log_2(2^n)=n$. -\begin{exemple} +\begin{example} Pour la source binaire: si $p_0 = 0.5$ et $p_1 = 0.5$ alors $H(X) = 1$ bit/symbole. si $p_0 = 0.01$ et $p_1 = 0.99$ alors $H(X) = 0.08$ bit/symbole. -\end{exemple} +\end{example} -\begin{prop} -Propriété de l'entropie\\ +\begin{prop}[Propriété de l'entropie] -On considère deux VA $X_1$ et $X_2$ indépendantes et identiquement distribuées (iid). +On considère deux VA $X_1$ et $X_2$ \begin{align*} H(X_1,X_2) &= - \sum_{i\in \X, j \in \X} Pr(X_1=i,X_2=j)log_2(Pr(X_1=i,X_2=j))\\ -&= H(X_1)+H(X_2)\\ -&= 2H(X_1) +&= H(X_2|X_1)+H(X_1)\\ + &= H(X_1)+H(X_2) \iff X_1 \perp X_2 \end{align*} -Plus généralement, si on a N VA iid alors $H(X_1,...,X_N) = N(H(X_1))$.\\ -Et on a $\boxed{H(X) \leq log_2|\X|}$ (nombre d'élément de $\X$). +Plus généralement, si on a N VA iid alors $H(X_1,...,X_N) = N H(X_1)$.\\ +Et on a +\[\boxed{H(X) \leq log_2|\X|}\text{ (nombre d'élément de $\X$).}\] \end{prop} \subsection{Modèle de Markov d'ordre 1} \noindent Dans ce modèle, la probabilité d'apparition du symbole $n$ ne dépend que de la réalisation du symbole $n-1$. \\ -Les probabilités de transition vérifient donc : +Les probabilités de transition vérifient donc pour une source stationnaire : \[Pr(X_n=a_n|X_{n-1} = a_{n-1},X_{n-2} = a_{n-2},...,X_{1} = a_{1}) = Pr(X_n = a_n |X_{n-1} = a_{n-1})\] On considère des sources de Markov d'ordre 1 stationnaires, donc: \[Pr(X_n=a_n|X_{n-1} = a_{n-1}) = Pr(X_{n-1} = a_n | X_{n-2} = a_{n-1}), \forall n\] - -Pour décrire une source de Markov d'ordre 1 stationnaire, il suffit de décrire ses probabilités de transition : +\begin{defin} +Pour décrire une source de Markov d'ordre 1 stationnaire, il suffit de décrire ses \emph{probabilités de transition :} \[Pr(X_{n}=i|X_{n-1}=j) = p_{i|j},\quad \forall i \in \X, \forall j \in \X\] - +\end{defin} \begin{exemple} Comment estimer les probabilités de transition ? on a la séquence : a a b b a c a b b a\\ @@ -100,66 +100,83 @@ Avec $j=a$, si $i=a$ alors \[Pr(X_n=a|X_{n-1}=a) = \frac{\text{nombre de paires si $i = b$ alors \[Pr(X_n=b|X_{n-1}=a) = \frac{\text{nombre de paires ab}}{\text{nombre de paires débutant par a}}=\frac{2}{4}\] \end{exemple} +\begin{defin} +On défini la matrice de transition : -On range ces probabilités de transition dans une matrice : -\[\underline{\underline{P}} = (p_{a_j|a_i})_{(i,j)} = \begin{pmatrix} +\[\Pi = (p_{a_j|a_i})_{(i,j)} = \begin{pmatrix} p_{a_1|a_1} & p_{a_2|a_1} & \dots & p_{a_j|a_1}\\ p_{a_1|a_2} & p_{a_2|a_2} & \dots & p_{a_j|a_2}\\ \vdots & & & \\ p_{a_1|a_J} & p_{a_2|a_j} & \dots & p_{a_J|a_J}\\ -\end{pmatrix} \quad \text{avec $J = |\X|$ nombre d'éléments de $\X$}\] - - +\end{pmatrix}\] +avec $J = |\X|$ nombre d'éléments de $\X$.\\ +La somme de chaque ligne de $\Pi$ vaut 1. +\end{defin} \begin{exemple} On considère une source de Markov binaire: \[p_{0|0} = 0.9, \quad p_{1|0} = 0.1, \quad p_{0|1} = 0.3, \quad p_{1|1} = 0.7\] On a donc : -\[\underline{\underline{P}} = \begin{pmatrix} +\[\vec{\Pi} = \begin{pmatrix} 0.9&0.1\\0.3&0.7 \end{pmatrix}\] \end{exemple} - -Pour cette source de Markov, on peut être intéressé par les probabilités stationnaires $Pr(x_n=i)$ et on note : +\begin{defin} +Pour cette source de Markov, on peut être intéressé par les\emph{ probabilités stationnaires $Pr(x_n=i)$} et on note : \begin{align*} -\underline{\Pi} &= (Pr(X_n=a_1), \dots, Pr(X_n = a_J))\\ -&= (p_{a_1},...,p_{a_J}) +\vec{p}^T &= [Pr(X_n=a_1), \dots, Pr(X_n = a_J)]\\ +&= [p_{a_1},...,p_{a_J}] \end{align*} -On peut montrer que $\underline{\Pi}$ satisfait : -\[\boxed{\underline{\Pi} = \underline{\Pi}\underline{\underline{P}}}\] - -\begin{rem} -On peut aussi voir ce résultat sous la forme plus courante $\underline{\Pi}^T = \underline{\underline{P}}^T \underline{\Pi}^T$. Ceci permet notamment de calculer $\underline{\Pi}$ s'il n'est pas donné, en cherchant un vecteur propre de $\underline{\underline{P}}^T$. -\end{rem} - -\paragraph{Entropie d'une source de Markov d'ordre 1} +\end{defin} +On peut montrer que $\vec{p}$ satisfait : +\[\boxed{\vec{p}^T = \vec{p}^T\vec{\Pi}}\] +\begin{prop}[Entropie d'une source de Markov d'ordre 1] \begin{align*} H(X) &= -\sum_{i \in \X}p_i\sum_{j \in \X}p_{i|j}log_2(p_{i|j})\\ &= -\sum_{i \in \X}\sum_{j \in \X}p_{i,j}log_2(p_{i|j}) \end{align*} où $p_{i,j} = Pr(X_n = i, X_{n-1} = j)$\\ +\end{prop} +\begin{proof} + On considère une source de markov d'ordre 1 à valeur dans $\X$ et unvecteur de longueur $n$ de VA de cette source $(X_1 \dots X_n) \in \X^n$: + \begin{align*} + H(X_1\dots \X_n) &= - \sum_{x_1,\dots x_n \in \X^n} P((X_1 ... X_n )=(x_1 ..x_n))\log_2(P((X_1 ... X_n )=(x_1 ..x_n)))\\ +\intertext{On a modèle d'ordre 1 donc: } + &= \sum_{x_1...x_n\in\X^n}P((X_1 ... X_n )=(x_1 ..x_n))\left(\sum_{i=2}^{n}\log_2(P(X_i=x_i|X_{i-1}=x_{i-1}))+\log_2(P_rX_1=x_1)\right)\\ + &=-\sum_{i=2}^{n}\sum_{x_i,x_{i-1}\in\X^2}P(X_i=x_i,X_{i-1}=x_{i-1})\log_2(P(X_{i}=x_i|X_{i-1}=x_{i-1})) +\intertext{Pour une chaine stationnaire} + &= (n-1)\sum_{x_1,x_2\in\X^2}P(X_1=x_1,X_2=x_2)\log_2(P(X_1=x_1|X_2=x_2))+H(X_1)\\ + \intertext{L'entropie par symbole (débit d'entropie) de cette source est alors} + \lim_{n\to+\infty}\frac{1}{n}H(X_1...X_n) &= -\sum_{x_1,x_2\in\X^2}P(X_1=x_1,X_2=x_2)\log_2(P(X_1=x_1|X_2=x_2)) + \end{align*} +\end{proof} -\underline{Remarque}: Avec un modèle de Markov, si on essaie de "créer" des mots lettre par lettre, plus on monte dans les ordres, plus la structure de la langue commence à apparaître. À partir de l'ordre 3, il apparaît des mots qui seraient potentiellement de la langue considérée. Ce modèle peut être adapté, comme par exemple pour le correcteur orthographique des téléphones.\\ + + + +\begin{rem} +Avec un modèle de Markov, si on essaie de "créer" des mots lettre par lettre, plus on monte dans les ordres, plus la structure de la langue commence à apparaître. À partir de l'ordre 3, il apparaît des mots qui seraient potentiellement de la langue considérée. Ce modèle peut être adapté, comme par exemple pour le correcteur orthographique des téléphones.\\ L'idée générale de la compression d'une source de Markov est d'effectuer des prédictions pour avoir accès aux informations, de sorte qu'il ne reste à transmettre que ce que l'on ne peut pas prédire.\\ -\newpage +\end{rem} + \section{Codes} \subsection{Définitions et propriétés} On considère une source $X$ à valeurs dans $\X = \{a_1,..a_J\}$. -\begin{defin}[Code] -Un code est un ensemble binaire de $\{0,1\}^*$ (union de tous les ensembles $\{0,1\}^2 = \{00,11,01,10\}$ , $\{0,1\}^3 = ...$ ...). Un code est donc un sous-ensemble de $\{0,1\}^*$.\\ +\begin{defin} +Un \emph{code} est un ensemble binaire de $\{0,1\}^*$ (union de tous les ensembles $\{0,1\}^2 = \{00,11,01,10\}$ , $\{0,1\}^3 = ...$ ...). Un code est donc un sous-ensemble de $\{0,1\}^*$.\\ \end{defin} -\begin{defin}[Fonction de codage] -Une fonction de codage $c : \X \rightarrow C$ associe à chaque élément de $\X$, un élément de C.\\ +\begin{defin} +\emph{Une fonction de codage} $c : \X \rightarrow C$ associe à chaque élément de $\X$, un élément de C.\\ \end{defin} -\begin{defin}[Longueur d'un mot de code] -La longueur d'un mot de code associé à $x \in \X$ est notée \[l(x) = l(c(x)) = \text{ nombre de bits de } c(x)\] +\begin{defin} +La \emph{longueur d'un mot de code} associé à $x \in \X$ est notée \[l(x) = l(c(x)) = \text{ nombre de bits de } c(x)\] Pour une source sans mémoire avec $p_j = Pr(X=a_j)$. La longueur moyenne du code C associé à $\X$ est: \[\overline{l} = \sum_{j=1}^J p_jl(a_j)\] \end{defin} @@ -168,19 +185,16 @@ L'objectif du codage sans perte est de minimiser $\overline{l}$ tout en étant c \begin{defin} -Un code $C$ (et sa fonction de codage associée $c$) est dit non singulier si: +Un code $C$ (et sa fonction de codage associée $c$) est dit \emph{non singulier} si: \[x_1 \neq x_2 \Rightarrow c(x_1) \neq c(x_2) \] \end{defin} - \begin{defin} -L'extension $C^*$ d'un code $C$ est l'ensemble de toutes les suites, finies et infinies, de mots provenant du code $C$. - +\emph{L'extension} $C^*$ d'un code $C$ est l'ensemble de toutes les suites, finies et infinies, de mots provenant du code $C$. +\end{defin} \begin{exemple} Si C $=\{0,10\}$ alors $\{C^*=\{0,10,00,010,100,000,1010,...\}$ \end{exemple} -\end{defin} - \begin{prop} Un code C est décodable de façon unique si son extension $C^*$ est non singulière.\\ Si on prend deux successions de symboles dans $\X$: @@ -189,7 +203,7 @@ Si on prend deux successions de symboles dans $\X$: \begin{defin} Un code C est un code préfixe si aucun mot de code n'est le début d'un autre mot de code.\\ - +\end{defin} \begin{exemple} $\X = \{1,2,3,4\}$\\ @@ -211,7 +225,6 @@ X & Singulier & Non singulier & Décodable de manière unique & Préfixe \\ \end{center} \end{exemple} -\end{defin} \begin{rem} "Décodable de manière unique" implique "Non singulier". @@ -219,11 +232,12 @@ X & Singulier & Non singulier & Décodable de manière unique & Préfixe \\ \subsection{Inégalités} -\paragraph{Inégalité de Kraft} +\begin{prop}[Inégalité de Kraft] Un code binaire préfixe peut exister à condition que ses longueurs de mot de code $l_1,...l_J$ satisfassent: \[\sum_{j=1}^J2^{-l_j} \leq 1 \] +\end{prop} \begin{proof} Condition nécessaire : \\ Soit $l_{max}$ la plus grande des longueurs. Le nombre de feuilles à la profondeur $l_{max}$ que peut porter un arbre dont la racine est à la profondeur $l_j$ est $2^{l_{max}-l_j}$.\\ @@ -235,11 +249,15 @@ On a $\sum_{j=1}^J2^{l_{max}-l_j} \leq 2^{l_{max}}$ d'où le résultat.\\ Condition suffisante : ? \end{proof} -\paragraph{Inégalité de Kraft-McMillan} + +\begin{prop}[Inégalité de Kraft-McMillan] + Un code binaire décodable de manière unique peut exister à condition que ses longueurs de mot de code $l_1,...l_J$ satisfassent: \[\sum_{j=1}^J2^{-l_j} \leq 1 \] - - +\end{prop} +\begin{proof} + Par l'absurde +\end{proof} \begin{rem} Attention, ce sont des théorèmes d'existence : ils ne peuvent pas servir à vérifier qu'un code est préfixe ou décodable de manière unique. @@ -252,11 +270,12 @@ Le code $\{1,00,10\}$ n'est pas préfixe, pourtant on a $\sum 2^{-l_i} = 2^{-1} On sait que "préfixe" implique "décodable de manière unique". En revanche, si un code est décodable de manière unique, on peut seulement dire qu'il existe un code préfixe équivalent, sans qu'il soit le même. \end{rem} -\paragraph{Corollaire} Pour qu'un code binaire soit préfixe (ou décodable de manière uniquer), \emph{il faut} que ses longueurs de mot de code $l_1,...l_J$ satisfassent: +\begin{corol} +Pour qu'un code binaire soit préfixe (ou décodable de manière uniquer), \emph{il faut} que ses longueurs de mot de code $l_1,...l_J$ satisfassent: \[\sum_{j=1}^J2^{-l_j} \leq 1 \] +\end{corol} - \newpage -\subsection{Code de longueur minimale} +\section{Code de longueur minimale} On considère une source $X$ sans mémoire d'alphabet $\X = \{a_1,...,a_J\}$ et de probabilités $p_j = Pr(X=a_j)$. On souhaite construire un code préfixe de longueur moyenne minimale associé à $X$.\\ @@ -298,7 +317,14 @@ Une condition nécessaire d'optimisation est que: L'entropie (avec une source sans mémoire) donne une borne supérieure de la quantité d'information réelle contenue dans un message. Dans le cas d'un texte, l'entropie au sens d'une source de Makorv diminue quand on augmente l'ordre, jusqu'à se stabiliser au bout d'un certain ordre. \end{rem} -\newpage + \begin{prop}[Code préfixe à longueur minimale] + \begin{itemize} + \item Si $p_i\ge p_j$, $l_i\le l_j$ + \item Les noms de codes associé aux deux symboles les moins probables sont de même longueur + \item Les noms de codes associé aux deux symboles les moins probables ne diffère que d'un seul bit à la fin. + \end{itemize} + \end{prop} + \subsection{Codage de Huffmann} On considère une source $X$ à valeurs dans $\X$, de probabilités associées $p_i=Pr(X=a_i)$, pour $a_i\in\X$. @@ -331,13 +357,14 @@ Si $a_1^{(J-2)}$ est un symbole fictif résultant du regroupement de deux symbol Plus généralement, si $\underline{C}$ est le code associé au symbole fictif $a_i^{k)}$ résultant du regroupement de $a_i^{(k-1)}$ et $a_j^{(k-1)}$, alors le code de $a_i^{(k-1)}$ sera $\underline{C} 0$ et le code de $a_j^{(k-1)}$ sera $\underline{C} 1$.\\ -\paragraph{Propriétés} -On peut montrer que la longueur moyenne $\overline{l}$ d'un code de Huffmann associé à une source satisfait \[ H(x) \leq \overline{l} \leq H(X) +1 \] +\begin{prop} + +On montre que la longueur moyenne $\overline{l}$ d'un code de Huffmann associé à une source satisfait \[ H(x) \leq \overline{l} \leq H(X) +1 \] On peut obtenir des codes plus performants en codant des paires de symboles, des triplets... des N-uplets de symboles. Avec ce type de technique, la longueur moyenne $\overline{l}$ par symbole de la source initiale satisfait : \[H(X) \leq \overline{l} \leq H(X)+1 \] L'inconvénient est la taille de la table de Huffmann à gérer. - +\end{prop} \newpage \subsection{Codage arithmétique} diff --git a/455-Codage_Sources/Cours/main.tex b/455-Codage_Sources/Cours/main.tex index 4baaf93..3f6cabf 100644 --- a/455-Codage_Sources/Cours/main.tex +++ b/455-Codage_Sources/Cours/main.tex @@ -1,6 +1,8 @@ \documentclass{../../cours} \usepackage{../../raccourcis} % Mise en page + +\renewcommand{\vec}{\mathbf} \title{Notes de Cours} \author{Pierre-Antoine Comby} \teacher{Michel Kieffer} @@ -27,7 +29,7 @@ } \maketitle \tableofcontents -\chapter{Rappel de probabilité} +\chapter*{Rappel de probabilité} \subfile{chap0_MAN.tex} \chapter{Introduction - Motivation} \subfile{chap0.tex}