From 5a16b7c99a099aa0fbedde7d05e79f0d1cf3b5c2 Mon Sep 17 00:00:00 2001 From: Mysaa Date: Thu, 27 May 2021 18:16:16 +0200 Subject: [PATCH] =?UTF-8?q?=C3=89criture=20de=20la=20premi=C3=A8re=20parti?= =?UTF-8?q?e=20du=20compte-rendu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CompteRendu/.gitignore | 1 + CompteRendu/CompteRendu.tex | 124 ++++++++++++++++++++++++++++++++++-- 2 files changed, 121 insertions(+), 4 deletions(-) diff --git a/CompteRendu/.gitignore b/CompteRendu/.gitignore index 90ee7eb..cd039b8 100644 --- a/CompteRendu/.gitignore +++ b/CompteRendu/.gitignore @@ -4,3 +4,4 @@ *.sh *.synctex.gz *.toc +*.thm diff --git a/CompteRendu/CompteRendu.tex b/CompteRendu/CompteRendu.tex index 14f50af..9471d68 100644 --- a/CompteRendu/CompteRendu.tex +++ b/CompteRendu/CompteRendu.tex @@ -1,14 +1,18 @@ % !TeX encoding = UTF-8 \documentclass[10pt,a4paper]{article} \usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} \usepackage[margin=0.5in]{geometry} \usepackage[french]{babel} \usepackage{tabularx} \usepackage{theorem} \usepackage{amsmath} \usepackage{amssymb} +\let\theoremstyle\relax +\usepackage{amsthm} \usepackage{calrsfs} \usepackage{setspace} +\usepackage{stmaryrd} \usepackage{bashful} @@ -20,11 +24,27 @@ \renewcommand\part{\clearpage\oldpart} % Un peu plus d'interligne, c'est plus lisible -\doublespacing +\onehalfspacing % Fait une jolie barre horizontale \newcommand{\hsep}{\centerline{\rule{0.8\linewidth}{.05pt}}} +% Racourcis +\newcommand{\FD}{\mathbb{F}_2\hspace{-.2em}} + +\newtheoremstyle{break} + {\topsep}{\topsep}% + {}{}% + {\bfseries}{}% + {\newline}{}% +\theoremstyle{break} +\newtheorem{definition}{Définition}[section] +\newtheorem{theoreme}{Théorème}[section] +\theoremstyle{remark} +\newtheorem*{remarque}{Remarque} + +% Compter les mots + \author{Samy AVRILLON, Victor BELLOT, Dylan THEVENET} \title{Études des codes cycliques} \begin{document} @@ -37,12 +57,108 @@ \pagebreak - \part{Mathématique} + \part{Contexte mathématique} + + \section{Codes} + \begin{definition}[Code, Codage] + On définit un code de paramètres $(n,k)$ comme une partie de $\FD^n$ associée à $\FD^k$. Un codage est une application de $\FD^k$ vers $\FD^n$ injective. + + Un codage est dit systématique lorsque les $k$ premiers bits de l'image d'un élément sont égaux à cet élément. + \end{definition} + \begin{definition}[Distance de Hamming, Poids d'un mot] + La distance de Hamming entre deux mots $v$ et $w$ de $\FD^n$ est le nombre de coordonnées différentes des deux mots. + $$d(v,w) = \operatorname{card}(i\in \llbracket1,n\rrbracket,v_i \neq w_i)$$ + + Le poids d'un mot est son nombre de coordonnées non nulles, égal à sa distance au vecteur nul. + \end{definition} + \begin{definition}[Capacités d'un code]\label{thMinDist} + Étant donné un code $C$, on appelle capacité de détection $e_d$ et capacité de correction $e_c$ le plus grand nombre de bits erronés que l'on puisse détecter, respectivement corriger dans le code. + La distance minimale d'un code est la plus grande distance entre deux mots du code. + + $$d_C = \min_{x,y\in C\times C}\left(d(x,y)\right)$$ + \end{definition} - \part{Algorithmie} - \section{Structures de données crées} + \begin{theoreme} + On peut alors exprimer $e_d$ et $e_c$ en fonction de $d_C$ : + + $$ e_c = d_C - 1 \qquad e_d = \left\lfloor\frac{d_C - 1}{2}\right\rfloor$$ + \end{theoreme} + + \begin{definition}[Code Parfait] + Un code parfait est un code tel que pour tout mot $w$ de $\FD^n$, il existe un \underline{unique} mot de $C$ étant à une distance minimale de $w$. Autrement dit, il n'y a jamais d'ambigüité sur la façon de décoder un mot erroné. + \end{definition} + + \begin{remarque} + Il n'existe que trois types de codes parfaits: + \begin{itemize} + \item Les codes de Hamming + \item Les codes de répétition pure + \item Le code de Golay binaire de longueur 23 + \end{itemize} + \end{remarque} + + \section{Codes linéaires} + + On dit qu'un code est linéaire lorsqu'il a une structure naturelle de sous-espace vectoriel de $\FD^n$. Les codages linéaires associés sont des applications linéaires. + + \begin{definition}[Matrice génératrice] + On appelle \textbf{matrice génératrice} d'un codage linéaire $\phi$ la matrice de $\mathcal{M}_{n,k}(\FD)$ associée à $\phi$. + \end{definition} + + \begin{definition}[Matrice de contrôle] + On appelle \textbf{matrice de contrôle} n'importe quelle matrice de $\mathcal{M}_{n-k,k}(\FD)$ ayant $C$ pour noyau. + + Tout code a au moins une matrice de contrôle. + \end{definition} + + \begin{theoreme}[Calcul de distances] + La structure d'espace vectoriel ainsi que la définition \ref{thMinDist} nous permettent de dire que la distance minimale d'un code linéaire est le plus petit poids non nul de ses vecteurs. + + On peux aussi utiliser la borne de Singleton qui assure: + + $$d_C \leqslant n+1-k$$ + + \end{theoreme} + + Voici ici quelques concepts qui seront utiles au décodage. + + + \begin{definition}[Erreur et syndrome] + Si l'on souhaite envoyer un mot $X \in \FD^k$ qui est donc codé en $Y\in C$. Le mot réceptionné est $Z \in \FD^n$. + + On appelle alors \textbf{mot erreur} le mot $E = Z - Y$. + On appelle \text{syndrome} le mot $S = H \cdot Z$. + + On remarque que $E$ et $Z$ on le même syndrome. On peut plus généralement définir une relation d'équivalence «avoir le même syndrome». Les classes d'équivalence de cette relation sont appelées \textbf{classes latérales} + \end{definition} + + \section{Codes cycliques} + + \begin{definition}[Code cyclique] + Un code linéaire est dit cyclique si il est stable par décalage binaire cyclique. C'est à dire que si $w_1w_2w_2\ldots w_n$ est dans $C$ alors $w_2w_3w_4\ldots w_{n-1}w_nw_1$ appartient aussi à $C$. + + On peut aussi définir le \textbf{code cyclique engendrée} par un mot $w$, qui est le plus petit espace vectoriel stable par décalage cyclique qui contienne $w$. + \end{definition} + + \begin{definition} + On définit le mot binaire associé au polynôme $P=\displaystyle\sum_{i=0}^{n-1}{a_i\cdotp X^i}$ comme étant le mot $a_0a_1\cdots a_{n-1}$. Le polynôme réciproquement associé à un mot binaire par ce procédé est appelé \textbf{représentation polynomiale} du mot. + \end{definition} + + \begin{definition}[Polynôme générateur] + Un polynôme $P$ de $\FD\,[X]$ de degré $n-k$ est dit \textbf{générateur du code cyclique $C$ de paramètre $(k,n)$} lorsque $P | X^n + 1$ et que $(\sigma^i(w))_{i\in \llbracket 0,k-1\rrbracket}$ est une base de $C$ avec $\sigma$ l'opérateur de décalage binaire cyclique est $w$ le mot associé à $P$ + \end{definition} + \begin{theoreme}[Théorème fondamental des codes cycliques] + Tout code cyclique admet un et un seul polynôme générateur. + \end{theoreme} + + \begin{remarque} + Un codage naturel pour un code cyclique apparaît avec le polynôme générateur. Le codage appliqué à un mot $w$ est le mot associé au produit du polynôme générateur et du polynôme associé à $w$. + \end{remarque} + + \part{Algorithmes} + \section{Des structures de données} \section{Liste des fonctions}