% !TeX encoding = UTF-8 \documentclass[10pt,a4paper]{beamer} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{csquotes} \usepackage[french]{babel} \usepackage{tabularx} \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsthm} \usepackage{calrsfs} \usepackage{setspace} \usepackage{stmaryrd} \usepackage{svg} \usepackage{bashful} \usepackage{pdfpages} \uselanguage{French} \languagepath{French} \lstset{ numbers=left, breaklines=true, tabsize=2, basicstyle=\ttfamily, } % Racourcis \newcommand{\FD}{\mathbb{F}_2} \newcommand\fsign[3]{\item \textbf{#1} : \textit{#2} \hfill Complexité~en~$\mathcal{O}(#3)$\\} \newcommand\fsignz[2]{\item \textbf{#1} : \textit{#2}\\} \newcommand{\into}{\textrightarrow\:} %\newtheorem{definition}{Définition}[section] %\newtheorem{theoreme}{Théorème}[section] %\theoremstyle{remark} \newtheorem*{remarque}{Remarque} \renewcommand\unskip\relax \usetheme{Madrid} %\hypersetup{pdfpagemode=FullScreen} % Transition en fade-in par défaut %\addtobeamertemplate{background canvas}{\transfade[duration=0.4]}{} \author{Samy AVRILLON} \title{Étude des codes correcteur d'erreurs} \begin{document} \begin{frame} \maketitle \end{frame} \section*{Introduction} \begin{frame} \frametitle{Introduction} \pause \begin{figure}[h] \begin{center} \includegraphics[width=.2\linewidth]{gaussV0-llow.png} \includegraphics[width=.2\linewidth]{gaussVH-llow.png} \hspace{.1\linewidth} \includegraphics[width=.2\linewidth]{gaussV0-low.png} \includegraphics[width=.2\linewidth]{gaussVH-low.png} \small \end{center} \caption{Exemple d'application de codes correcteurs} \label{gaussEx} \end{figure} \end{frame} \section*{Sommaire} \begin{frame} \frametitle{Sommaire} \pause \tableofcontents[pausesections] \end{frame} \addcontentsline{toc}{section}{Principe} \begin{frame} \frametitle{Transmission simple} \includesvg[width=0.98\textwidth]{diagramme_transmission_simplet_path.svg} \end{frame} \begin{frame} \frametitle{Transmission avec code correcteur} \includesvg[width=0.98\textwidth]{diagramme_transmission_corrige_path.svg} \end{frame} \begin{frame} \centering\Huge Contexte mathématique \end{frame} \section{Contexte mathématique} \subsection{Codes} \begin{frame} \frametitle{Codes sur $\FD$} \begin{definition}[Code, Codage] \pause Code $(n,k)$: partie de $\FD^n$ \pause Codage: application $\FD^k \rightarrow \FD^n$ injective. \pause Codage systématique \end{definition} \pause \begin{definition}[Distance de Hamming, Poids d'un mot] $$ d(v,w) = \operatorname{card}(i\in \llbracket1,n\rrbracket,v_i \neq w_i)$$ \pause $$ w(v) = d(v,0) = \operatorname{card}(i\in \llbracket1,n\rrbracket,v_i = 0)$$ \end{definition} \end{frame} \begin{frame} \[ \scalebox{1.7}{ $ \begin{bmatrix} 1\\0\\0\\1\\1\\0\\1\\1\\0\\0\\1 \end{bmatrix} \begin{bmatrix} 0\\1\\0\\1\\0\\0\\1\\1\\1\\1\\1 \end{bmatrix} $ }\] \end{frame} \begin{frame} \[ \scalebox{1.7}{ $ \begin{bmatrix} \color{blue}1\\\color{blue}0\\0\\1\\\color{blue}1\\0\\1\\1\\\color{blue}0\\\color{blue}0\\1 \end{bmatrix} \begin{bmatrix} \color{blue}0\\\color{blue}1\\0\\1\\\color{blue}0\\0\\1\\1\\\color{blue}1\\\color{blue}1\\1 \end{bmatrix} $ }\] \end{frame} \begin{frame} \[ \scalebox{1.7}{ $ \begin{bmatrix} \color{red}1\\0\\0\\\color{red}1\\\color{red}1\\0\\\color{red}1\\\color{red}1\\0\\0\\\color{red}1 \end{bmatrix} \begin{bmatrix} 0\\\color{red}1\\0\\\color{red}1\\0\\0\\\color{red}1\\\color{red}1\\\color{red}1\\\color{red}1\\\color{red}1 \end{bmatrix} $ }\] \end{frame} \begin{frame} \frametitle{Propriétés des codes} \begin{definition} \pause Capacité de détection $e_d$ et capacité de correction $e_c$. \pause La distance minimale. $$d_C = \min_{x,y\in C\times C,x\neq y}\left(d(x,y)\right)$$ \end{definition} \end{frame} \begin{frame} \frametitle{Distance minimale} \begin{theorem}[Distance minimale] \pause $$ e_d = d_C - 1 \qquad\pause e_c = \left\lfloor\frac{d_C - 1}{2}\right\rfloor$$ \end{theorem} \end{frame} \begin{frame} \frametitle{Code parfait} \begin{definition}[Code Parfait] \pause Jamais d'ambigüité sur la façon de décoder un mot érroné. \end{definition} \pause \textit{Exemple: Code de répétition (n,1)} $$C = \left\{\begin{bmatrix} 0\\\vdots\\0 \end{bmatrix}, \begin{bmatrix} 1\\\vdots\\1 \end{bmatrix}\right\}$$ \pause $$d_C = n\pause,e_d = n-1\pause,e_c = \left\lfloor \frac{n-1}{2} \right\rfloor$$ \pause\centering parfait \underline{si et seulement si} $n$ impair \end{frame} \subsection{Codes linéaires} \begin{frame} \frametitle{Codes linéaire} \begin{definition} \pause $C$ sous-espace vectoriel de $\FD^n$ \pause Codage linéaire \end{definition} \end{frame} \begin{frame} \frametitle{Matrices du code linéaire} \begin{definition}[Matrice génératrice] \pause $$G \in \mathcal{M}_{n,k}(\FD)$$ $$Im(G) = C$$ \end{definition} \pause \begin{definition}[Matrice de contrôle] $$H \in \mathcal{M}_{n-k,n}(\FD)$$ $$H\cdot X = 0 \quad\text{\underline{ssi}}\quad X \in C$$ \end{definition} \end{frame} \begin{frame} \frametitle{Calcul de distances} \begin{theorem}[Calcul de distances] \pause $$d_C = \min_{X\in C, X\neq 0}(w(X))$$ \pause Borne de Singleton: $$d_C \leqslant n+1-k$$ \end{theorem} \pause \begin{definition}[Erreur et syndrome] \pause $$E = Z' - Y'$$ \pause $$S(Z) = H \cdot Z$$ \pause $$S(E) = S(Z)$$ \end{definition} \end{frame} \subsection{Codes cycliques} \begin{frame} \frametitle{Codes cycliques} \begin{definition}[Code cyclique] \pause $w_1w_2w_3\ldots w_n \in C \implies w_2w_3w_4\ldots w_{n-1}w_nw_1 \in C$. \end{definition} \pause \begin{definition}[Mot binaire associé à un polynôme] \pause \[ \begin{bmatrix} 1\\0\\0\\1\\1\\0\\1\\1\\0\\0\\1 \end{bmatrix}\mapsto 1 + X^3+X^4+X^6 + X^7 + X^{10} \] \end{definition} \end{frame} \begin{frame} \frametitle{Des polynômes bien utiles} \begin{theorem}[Théorème fondamental des codes cycliques] \pause \underline{Unique} polynôme $g$ tel que le mot associé à $g$ engendre $C$ et $g|X^n-1$. \vspace{0.4cm} $g$ de degré $n-k$ \vspace{0.4cm} $(\sigma^i(w))_{i\in \llbracket 0,k-1\rrbracket}$ base de $C$ \vspace{0.4cm} \pause Codage naturel associé au polynôme. \end{theorem} \end{frame} \section{Réalisation informatique} \begin{frame} \centering\Huge Réalisation Informatique \end{frame} \subsection{Des structures de données} \begin{frame} \frametitle{Créer les structures} \pause Temps constant : \begin{itemize} \item\texttt{lor,land,lxor,lsl,lsr,=,<,>} \item\texttt{if, for, match, \&\&} \end{itemize} \end{frame} \subsubsection{Matrices et vecteurs} \begin{frame} \frametitle{Matrices et vecteurs} \pause \centering\texttt{type vecteur = int} \centering\texttt{type matrice = int list} \pause \begin{itemize} \item Calculs binaires rapides \pause \item Limitation par l'architecture \pause \item Possibilité de dépasser virtuellement. \end{itemize} \pause \underline{Fonctions dévelopées: } \pause \begin{itemize} \fsign{produit}{matrice \into vecteur \into vecteur}{k} \pause \fsign{identite}{int \into matrice}{n} \pause \fsign{print\_matrice}{int \into matrice \into unit}{nk} \fsign{print\_vecteur}{int \into vecteur \into unit}{n} \end{itemize} \end{frame} \subsubsection{Polynômes} \begin{frame} \frametitle{Polynômes} \pause \centering\texttt{type polynome = int} \pause \vspace{0.4cm} Mêmes remarques. \pause \vspace{0.5cm} \underline{Fonctions dévelopées: } \pause \begin{itemize} \fsign{degre}{polynome \into int}{p} \pause \fsign{polmul}{polynome \into polynome \into polynome}{\min(p,q)} \pause \fsign{poldiveuc}{polynome \into polynome \into polynome $\times$ polynome}{p^2} \pause \fsign{print\_polynome}{polynome \into unit}{p} \end{itemize} \end{frame} \begin{frame} \frametitle{Fonctions d'affichages} \begin{figure}[h] \begin{center} \includesvg[scale=.3]{print_output_path.svg} \caption{Exemple d'affichage de vecteur,matrice et polynômes} \end{center} \end{figure} \end{frame} \subsubsection{Codes} \begin{frame} \frametitle{Structures des codes} \pause \texttt{type code\_lineaire = \{\\\hspace{0.4cm} k : int;\\\hspace{0.4cm} n : int;\\\hspace{0.4cm} g : Math.matrice;\\\hspace{0.4cm} h : Math.matrice; \\\} } \pause \vspace{0.4cm} \texttt{type code\_cyclique = \{\\\hspace{0.4cm} k : int;\\\hspace{0.4cm} n : int;\\\hspace{0.4cm} pol : Math.polynome;\\ \} } \pause \vspace{0.4cm} \begin{itemize} \fsign{systematiqueFromRedondance}{int \into int \into matrice \into code\_lineaire}{k} \end{itemize} \end{frame} \subsection{Liste des fonctions} \begin{frame} \frametitle{Fonctions de codage/décodage} \pause \begin{itemize} \fsign{encoder}{code\_lineaire \into vecteur \into vecteur}{k} \pause \fsign{appartenir}{code\_lineaire -> vecteur -> bool}{n} \pause \fsign{distance\_minimale}{code\_lineaire -> int}{n2^{d_C}} \pause \fsignz{decoder}{code\_lineaire \into vecteur \into Math.vecteur} \pause \fsign{genererClasses}{code\_lineaire \into classes\_latérales}{n\cdot2^k} \pause \fsign{decoder2}{classes\_latérales \into vecteur \into vecteur}{n} \end{itemize} \end{frame} \begin{frame} \end{frame} \begin{frame} \frametitle{Annexes} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,language=Caml,frame=single,linerange={1-26}]{../Math.mli} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,language=Caml,frame=single,linerange={29-34}]{../Math.mli} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,language=Caml,frame=single,linerange={1-27}]{../Code.mli} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,language=Caml,frame=single,linerange={29-39}]{../Code.mli} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,linerange={48-59},language=Caml,frame=single]{../Math.ml} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,linerange={105-128},language=Caml,frame=single]{../Math.ml} \end{frame} \begin{frame} \lstinputlisting[basicstyle=\scriptsize,breaklines=true,linerange={140-166},language=Caml,frame=single]{../Code.ml} \end{frame} \end{document}