Ajout de la jolie tête de gauss et d'une introduction ^^
This commit is contained in:
parent
6aed4a4c0d
commit
465d4fb179
@ -53,7 +53,7 @@
|
||||
% 2: Samy
|
||||
% 3: Victor
|
||||
\newcounter{cqd}
|
||||
\setcounter{cqd}{2}
|
||||
\setcounter{cqd}{3}
|
||||
|
||||
\newcommand\lequel[3]{
|
||||
|
||||
@ -76,7 +76,18 @@
|
||||
|
||||
\section*{Introduction}
|
||||
|
||||
Ce document est le compte rendu de mon TIPE fait pour l'année 2021. L'objectif premier est de créer un ensemble de modules OCaml permettant de manipuler et d'utiliser les codes correcteurs d'erreurs. Une première partie va donc s'intéresser aux différents concepts mathématiques derrière la théorie des codes correcteurs, ainsi qu'aux théorèmes qui permettront d'obtenir des algorithmes efficaces. La seconde partie va décrire les algorithmes et structures de données crées et décrire succinctement leur fonctionnement.
|
||||
\lequel{
|
||||
Ce document est le compte rendu de mon TIPE fait pour l'année 2021.
|
||||
Dans une société où de plus en plus d'échanges se font informatiquement, il est préférable d'avoir des algorithmes de transmission qui soient robustes aux erreurs, afin que l'information reçue soit la plus conforme possible à l'information envoyée.
|
||||
Dans ce TIPE nous allons donc nous attacher à présenter quelques codes correcteurs d'erreurs, en particulier les codes cycliques, et nous développerons en particulier les outils mathématiques et les théorèmes qui nous assurent que ces codes sont efficaces.
|
||||
|
||||
}{
|
||||
Puisque des erreurs de communication peuvent avoir des conséquences désastreuses, nous devons nous assurer que les nombreux échanges informatiques effectues chaque seconde se fassent sans dégradation de l'information. C'est pourquoi j'ai étudié pour mon TIPE les codes correcteurs d'erreurs, palliant en partie la défaillance naturelle des canaux de transmission (Exemple figure~\ref{gaussEx}). L'objectif premier est de créer un ensemble de modules OCaml permettant de manipuler et d'utiliser ces codes. Une première partie va donc s'intéresser aux différents concepts mathématiques derrière la théorie des codes correcteurs, ainsi qu'aux théorèmes qui permettront d'obtenir des algorithmes efficaces. La seconde partie va décrire les algorithmes et structures de données crées et décrire succinctement leur fonctionnement.
|
||||
}{
|
||||
|
||||
Deutsches Ipsum Dolor sit Herr Doktor consectetur Nackenheim elit, danke do Guten Tag tempor Herr Doktor ut Hochzeit et Reise magna Gemeinsamkeit Ut Deutsche Mark ad Entschuldigung veniam, Danke nostrud Lukas Podolski ullamco Gesundheit nisi Die unendliche Geschichte aliquip Angela Merkel ea danke consequat. Grimms Märchen aute Entschuldigung dolor Schnaps reprehenderit Knappwurst voluptate Gesundheit esse Entschuldigung dolore Herr Doktor fugiat Kartoffelkopf pariatur. Joachim Löw sint Flughafen cupidatat Weltschmerz proident, Audi in Bezirksschornsteinfegermeister qui Stuttgart deserunt Die Ärzte anim Deutsche Mark est Aufschnitt
|
||||
|
||||
}
|
||||
|
||||
\ifnum\value{cqd}=1\else % Dylan n'a pas besoin de première partie
|
||||
\part{Contexte mathématique}
|
||||
@ -136,7 +147,7 @@
|
||||
\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.
|
||||
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:
|
||||
|
||||
@ -238,7 +249,7 @@
|
||||
\end{theoreme}
|
||||
|
||||
\else
|
||||
\part{Algorithmes}
|
||||
\part{Réalisation informatique}
|
||||
\section{Des structures de données}
|
||||
|
||||
La première étape était de créer des structures de données adéquates, c'est à dire permettant d'effectuer les calculs nécessaire à l'utilisation des codes cycliques à moindre coût (temporel).
|
||||
@ -254,8 +265,8 @@
|
||||
\begin{itemize}
|
||||
\fsign{produit}{matrice \into vecteur \into vecteur}{k} Renvoie simplement le vecteur produit $Y = M \cdot X$
|
||||
\fsign{identite}{int \into matrice}{n} Renvoie la matrice identité de $\mathcal{M}_n(\FD)$
|
||||
\fsign{print\_matrice}{int \into matrice \into unit}{nk} Affiche la matrice dans le terminal. Il faut spécifier la dimension verticale (des vecteurs). Un exemple de valeur de sortie est donnée figure \ref{print_matriceExemple}
|
||||
\fsign{print\_vecteur}{int \into vecteur \into unit}{n} Affiche le vecteur dans le terminal, vu comme une matrice de $\mathcal{M}_{n,1}(\FD)$ (Exemple figure \ref{print_matriceExemple})
|
||||
\fsign{print\_matrice}{int \into matrice \into unit}{nk} Affiche la matrice dans le terminal. Il faut spécifier la dimension verticale (des vecteurs). Un exemple de valeur de sortie est donnée figure~\ref{print_matriceExemple}
|
||||
\fsign{print\_vecteur}{int \into vecteur \into unit}{n} Affiche le vecteur dans le terminal, vu comme une matrice de $\mathcal{M}_{n,1}(\FD)$ (Exemple figure~\ref{print_matriceExemple})
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Polynômes}
|
||||
@ -268,7 +279,7 @@
|
||||
\fsign{polmul}{polynome \into polynome \into polynome}{\min(p,q)} Effectue le produit de deux polynômes dans l'algèbre $\FD[X]$
|
||||
\fsign{poldiveuc}{polynome \into polynome \into polynome $\times$ polynome}{p^2} Effectue la division euclidienne de $P$ par $Q$.
|
||||
|
||||
\fsign{print\_polynome}{polynome \into unit}{p}(Exemple figure \ref{print_matriceExemple})
|
||||
\fsign{print\_polynome}{polynome \into unit}{p}(Exemple figure~\ref{print_matriceExemple})
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Codes}
|
||||
@ -293,23 +304,40 @@
|
||||
Encode le vecteur de $\FD^k$ suivant le code linéaire spécifié, il s'agit alors d'un simple produit avec la matrice génératrice.
|
||||
\fsign{appartenir}{code\_lineaire -> vecteur -> bool}{n}
|
||||
Renvoie \textit{vrai} si et seulement si le vecteur appartient au code, c'est à dire, si et seulement si $HX=0$ avec $H$ la matrice de contrôle et $X$ le vecteur de $\FD^n$ en question.
|
||||
\fsign{distance\_minimale}{code\_lineaire -> int}{non}
|
||||
Renvoie la distance minimale du code, utilisée pour calculer les capacités de détection et de correction du code (voir \ref{thCapacité}). Le calcul s'effectue en recherchant le plus petit mot (au sens du poids) qui soit dans le code.
|
||||
\fsign{distance\_minimale}{code\_lineaire -> int}{n2^{d_C}}
|
||||
Renvoie la distance minimale du code, utilisée pour calculer les capacités de détection et de correction du code (voir théorème~\ref{thCapacité}). Le calcul s'effectue en recherchant le plus petit mot (au sens du poids) qui soit dans le code.
|
||||
\fsignz{decoder}{code\_lineaire \into vecteur \into Math.vecteur}
|
||||
Décode le mot de $\FD^n$ donné. L'algorithme recherche le mot le plus proche du mot reçu qui soit dans le code et à une distance inférieure à la distance de correction. Si il est impossible de décoder, renvoie une exception du type \verb|IndecodableException|.
|
||||
|
||||
\fsign{genererClasses}{code\_lineaire \into classes\_latérales}{well ...}Génère les classes latérales associées au code spécifié. Parcours les vecteurs par poids croissant (d'abord ceux de poids 1, puis 2, etc…) et référence leur syndrome dans \verb|classes.rpz : vecteur -> vecteur| qui à un syndrome associe le représentant de la classe latérale de poids le plus faible.
|
||||
\fsign{genererClasses}{code\_lineaire \into classes\_latérales}{n\cdot2^k}Génère les classes latérales associées au code spécifié. Parcours les vecteurs par poids croissant (d'abord ceux de poids 1, puis 2, etc…) et référence leur syndrome dans \verb|classes.rpz : vecteur -> vecteur| qui à un syndrome associe le représentant de la classe latérale de poids le plus faible. Cette fonction est enregistrée comme un arbre binaire de recherche vis à vis de l'ordre lexicographique sur $\FD^n$, permettant un stockage et une recherche en $\mathcal{O}(n)$
|
||||
|
||||
\fsign{decoder2}{classes\_latérales \into vecteur \into vecteur}{n\cdot \ln(n)} Décode le mot $Z$ de $\FD^n$ donné. L'algorithme calcule le syndrome du mot, obtient le représentant de la classe latérale associée à ce vecteur $E$. Dans l'hypothèse où le mot reçu est effectivement décodable, alors, son «erreur» $E = Z-Y$, avec $Y$ le mot du code initialement envoyé, a la même classe latérale que $Z$. Donc $Y = Z+E$, on obtient un mot du code que l'on peut décoder.
|
||||
\fsign{decoder2}{classes\_latérales \into vecteur \into vecteur}{n} Décode le mot $Z$ de $\FD^n$ donné. L'algorithme calcule le syndrome du mot, obtient le représentant de la classe latérale associée à ce vecteur $E$. Dans l'hypothèse où le mot reçu est effectivement décodable, alors, son «erreur» $E = Z-Y$, avec $Y$ le mot du code initialement envoyé, a la même classe latérale que $Z$. Donc $Y = Z+E$, on obtient un mot du code que l'on peut décoder.
|
||||
\end{itemize}
|
||||
|
||||
\pagebreak
|
||||
\part*{Annexes}
|
||||
\begin{figure}[h]
|
||||
\begin{center}
|
||||
\label{print_matriceExemple}
|
||||
\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
|
||||
Le codage utilisé est un codage d'Hamming (4,7).
|
||||
|
||||
Les images à gauche des paires correspondent à une transmission sans aucune correction.
|
||||
\end{center}
|
||||
\caption{Exemple d'application de codes correcteurs}
|
||||
\label{gaussEx}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h]
|
||||
\begin{center}
|
||||
\includesvg[scale=.3]{print_output_path.svg}
|
||||
\caption{Exemple d'affichage de vecteur,matrice et polynômes}
|
||||
\label{print_matriceExemple}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
\fi
|
||||
|
||||
19
CompteRendu/Makefile
Normal file
19
CompteRendu/Makefile
Normal file
@ -0,0 +1,19 @@
|
||||
all:
|
||||
$(MAKE) dylan
|
||||
cp CompteRendu.pdf CompteRendu-dylan.pdf
|
||||
$(MAKE) samy
|
||||
cp CompteRendu.pdf CompteRendu-samy.pdf
|
||||
$(MAKE) victor
|
||||
cp CompteRendu.pdf CompteRendu-victor.pdf
|
||||
|
||||
dylan:
|
||||
sed 's/\\setcounter{cqd}{[0-9]}/\\setcounter{cqd}{1}/' -i CompteRendu.tex
|
||||
$(MAKE) build
|
||||
samy:
|
||||
sed 's/\\setcounter{cqd}{[0-9]}/\\setcounter{cqd}{2}/' -i CompteRendu.tex
|
||||
$(MAKE) build
|
||||
victor:
|
||||
sed 's/\\setcounter{cqd}{[0-9]}/\\setcounter{cqd}{3}/' -i CompteRendu.tex
|
||||
$(MAKE) build
|
||||
build:
|
||||
pdflatex -synctex=1 -shell-escape -interaction=nonstopmode "CompteRendu".tex
|
||||
BIN
CompteRendu/gaussV0-llow.png
Normal file
BIN
CompteRendu/gaussV0-llow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
CompteRendu/gaussV0-low.png
Normal file
BIN
CompteRendu/gaussV0-low.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 251 KiB |
BIN
CompteRendu/gaussVH-llow.png
Normal file
BIN
CompteRendu/gaussVH-llow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
CompteRendu/gaussVH-low.png
Normal file
BIN
CompteRendu/gaussVH-low.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 233 KiB |
Loading…
x
Reference in New Issue
Block a user