Notes sur le cours concernant les codes correcteurs - 2° partie, Notes de Applications informatiques
Francine88
Francine8813 January 2014

Notes sur le cours concernant les codes correcteurs - 2° partie, Notes de Applications informatiques

PDF (182.7 KB)
7 pages
308Numéro de visites
Description
Notes d’informatique sur le cours concernant les codes correcteurs - 2° partie. Les principaux thèmes abordés sont les suivants: le rendement de C, le code systématique.
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document
Aperçu3 pages / 7
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document

Ainsi, selon la définition ci-dessus, un code en bloc C est une application bijective qui associe à

chaque vecteur formé de k symboles q-aires (k symboles d'information), un vecteur image de

longueur n avec des composantes dans le même alphabet (n symboles codés). Le code ajoute

au débit initial n-k symboles supplémentaires. La quantité :

(Eq.27)

est appelé le "rendement de C", ou encore "taux de codage". L'opération de codage en blocs est

"sans mémoire", in extenso les blocs sont codés de manière indépendant sans aucune

corrélation entre deux blocs consécutifs.

Maintenant il convient de revenir un peu sur les algèbres de Boole (cf. chapitre de Systèmes

Logiques). Aux cinq axiomes qui définissent une algèbre de Boole ajoutons en un sixième qui

lui confère une structure de corps :

A6. L'algèbre de Boole (extension d'un anneau unitaire par un axiome) muni de la loi * ( ) est

un groupe.

Rappel (théorie des ensembles) : un corps est un anneau non nul dans lequel tout élément non

nul est inversible.

Si nous prenons l'algèbre de Boole formée des éléments {0,1} formant un ensemble

binaire, nous avons effectivement 1 qui est inversible puisqu'il existe x tel que qui est

1 lui-même.

Ce corps est noté . Dans les codes correcteurs, nous travaillons souvent

dans (unique corps à deux éléments) où pour rappel l'addition est définie par :

0+0=0, 1+1=0 (donc 1=-1), 1+0=1 (Eq.28)

La multiplication étant définie par:

(Eq.29)

Pour en revenir à notre théorie des codes : l'ensembles des messages peut être muni

d'une structure d'espace vectoriel de dimension k sur (cf. chapitre de Théorie Des

Ensembles). Effectivement, il suffisait pour cela que (E,+) soit un groupe abélien et * une loi

externe définie par . Si nous décidons de n'utiliser que des encodeurs qui sont

(des applications) linéaires, le code devient un sous-espace vectoriel de (car

même si l'application est bijective, comme les corps des messages est fini, nous avons

nécessairement un sous-espace vectoriel de l'espace vectoriel de tous les messages codés

possibles).

Définition: Un "code linéaire" de dimension k et de "longueur" n est un sous-espace vectoriel de

dimension k de (c'est ainsi que cela se dit...). Si la distance minimale de C est d, nous disons

que C est une "code [n, k, d]" ou simplement "code [n,k]".

Remarque: Les codes linéaires sont donc un cas particulier des codes en blocs comme le montre

le schéma hiérarchique au début de ce chapitre.

L'ajout de la contrainte de linéarité pourrait nuire à la qualité du code recherché, mais

heureusement l'étude des performances montre que les codes linéaires sont très proches des

meilleurs codes en blocs. Ainsi, la linéarité facilite l'étude des codes en blocs et permet

l'utilisation des outils algébriques très puissants, sans réduire la classe des blocs linéaires à une

classe inefficace.

Notons G la matrice de l'application linéaire . G est du type et tout

mot c de C s'obtient à partir de tout

mot x de E par où et sont des vecteurs

lignes avec toujours . Ainsi, .

Remarque: Les bases de sont les bases canoniques courantes (celles dont nous avons

souvent fais usage dans le chapitre de calcul vectoriel).

Définition: soit C un code linéaire [n,k] et soit la base de C. Une "matrice

génératrice" de C est donc une matrice dont les colonnes sont formées par les

vecteurs de la base.

Soit le mot d'information, in extenso le vecteur contenant les k symboles

d'information. Alors, nous pouvons écrire la relation matricielle liant le mot de code c et le mot

d'information u :

(Eq.30)

Définition: Soit C un code en blocs [n,k]. Ce code est dit "code systématique", si tous les mots

de code contiennent les k symboles d'informations non modifiés. Les n-k symboles restant sont

appelés "symboles de parité".

Remarque: Le "code de Hamming" est un tel code. Par ailleurs, les codes systématiques sont des

cas particuliers des codes en blocs et nous reviendrons leur étude plus loin.

Définition: Soit H une matrice à éléments dans , qui vérifie pour tout

mot c d'un code linéaire C (en d'autres termes : dont le noyau est C). Alors, H est dite "matrice

de contrôle" du code C. Réciproquement, c appartient au Code si et seulement si . Sinon

quoi il y a une erreur !

Remarque: Il est facile de trouver H car celle-ci est "orthogonale" à G puisque la définition ci-

dessus implique donc (évidemment il ne faut pas prendre H=0...).

Voyons un exemple de tout cela avec le code de Hamming qui est un code en blocs

systématique (attention !! il existerait plusieurs définition d'un "code de Hamming!) :

Cette méthode consiste à doubler l'information, en envoyant autant de bits de parité que de

bits de données. Ainsi, à l'aide de matrices, il est possible de détecter et corriger les erreurs qui

figurent dans les quartets. Une première matrice est :

(Eq.31)

Celle-ci est la matrice de codage G. Elle est de dimension , où n est le nombre de bits

reçus par paquet, et k le nombre de bits par paquets contenant l'information (ici et

). Elle permet de générer automatiquement les bits de parité propres à un message. Par

exemple pour envoyer le message 1101, il faut, pour respecter la règle de multiplication des

matrices, considérer ce quartet comme un vecteur colonne :

(Eq.32)

Donc en multipliant nous obtenons :

(Eq.33)

Nous enverrons donc l'octet 11010110, dont les quatre premiers bits forment le message et les

quatre derniers les bits de parité, qui servent à vérifier la véracité/intégrité du message.

La matrice de contrôle correspondante H est :

(Eq.34)

Ainsi lorsque le destinataire reçoit l'octet 11000110 au lieu de 11010110, le décodage donne

comme "syndrome" :

(Eq.35)

Le vecteur colonne obtenu n'est donc pas nul. Il y a donc une erreur. Avec la matrice de

contrôle, la théorie permet d'affirmer que comme le vecteur obtenu est le même que celui en

quatrième position dans la matrice de décodage, l'erreur est due au quatrième bit. Comme nous

sommes en base 2, il suffit de changer le 0 en 1. Ce codage de l'information est coûteux car il

occupe deux fois plus de bande passante. Cependant c'est l'un des moyens les plus efficaces

pour sécuriser l'information.

Pour montrer que le syndrôme d'un code de Hamming correspond à une des colonnes de la

matrice de contrôle, notons les vecteurs colonne de la base canonique sur

, avec 1 à la i-ème place. Soit x un mot de code. Nous avons donc par

définition de H, . Supposons que le mot reçu, que nous noterons , soit entaché d'une

seule erreur et que cette erreur soit sur le j-ème bit. Nous avons donc :

et (Eq.36)

ainsi il vient que , mais est le j-ème vecteur colonne de la matrice H.

Ceci nous montre bien que lorsque nous recevons et que nous calculons nous obtenons

le vecteur colonne de la matrice H situé exactement à l'emplacement de l'erreur (en

l'occurrence j).

Remarque: Un syndrome nul ne signifie pas l'absence d'erreur(s). Il existe donc des

configurations d'erreurs indétectables.

Notons maintenant :

et (Eq.37)

alors nous remarquerons que G et H sont formées par les blocs I et A de la manière

suivante et . Ainsi :

(Eq.38)

car 1+1=0 dans .

De façon générale, si nous travaillons avec l'alphabet et si où A est une

matrice alors est aussi une matrice de contrôle car de nouveau :

(Eq.39)

Remarque: Dans , car 1=-1, c'est pour ça que nous avions écrit dans

l'exemple précédant.

CODES SYSTÉMATIQUES

Un code systématique consiste à adjoindre à chaque mot du message n-

k symboles dépendent linéairement des pour obtenir le mode de code .

Les symboles sont appelées "bits de contrôle" et (nous verrons un exemple juste plus bas) :

(Eq.40)

où désigne la matrice obtenue en écrivant l'une en-dessous de l'autre, la matrice

identité de taille k et une matrice quelconque A. Nous dirons qu'un code C est systématique

s'il possède une matrice génératrice de la forme

Exemple:

Nous nous proposons de construire un code linéaire systématique avec n=k=3. Nous

notons les bits d'information. Les bits de contrôle seront définis par :

(Eq.41)

La matrice génératrice G est telle que sa partie supérieure est la matrice identité de dimension 3

(nous avions la même chose pour le code de Hamming). La première ligne (110) de la

matrice A correspond à l'expression du bit de contrôle :

(Eq.42)

etc... pour chaque bit de contrôle.

La matrice génératrice G s'écrit alors :

(Eq.43)

En multipliant cette matrice par les vecteurs possibles (les mots constitués de trois bits

d'information), nous obtenons les mots code :

a1 a2 a3 a4 a5 a6

0 0 0 0 0 0

0 0 1 0 1 1

0 1 0 1 1 0

0 1 1 1 0 1

1 0 0 1 0 1

1 0 1 1 1 0

1 1 0 0 1 1

1 1 1 0 0 0

Tableau: 1 - Exemples de mots code

Nous constatons donc que le poids minimum des mots code est 3. Donc le code détecte 3-1=2

d'erreurs et peut en corriger .

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome