Réseaux et Protocoles - Université de Strasbourg

publicité
Université de Strasbourg
UFR Mathématique et Informatique
Licence 3 Informatique
Année 2010/2011
Réseaux et Protocoles
TD05 : Codes correcteurs et détecteurs
Exercice 1
On considère un code C de répétition c’est-à-dire un code (mk, k) où chaque groupe de k bits est répété m
fois.
1. Quelle est la distance minimale entre deux mots de code ?
2. Pour qu’un code soit 2-correcteur, quelle doit être la valeur minimale de m ? On considère dans la
suite un tel code.
3. Quel est son rendement ?
4. Combien d’erreurs peuvent être détectées ? Ecrire en pseudo-code l’algorithme de décodage pour
détecter un nombre maximal d’erreurs mais n’en corriger aucune. Le résultat sera un booléen ayant
pour valeur vrai si aucune erreur n’a été détectée. L’entrée de l’algorithme est un code c donné sous
la forme d’un tableau de n = mk entiers.
5. Combien d’erreurs peuvent être corrigées ? Ecrire en pseudo-code l’algorithme de décodage pour
corriger un nombre maximal d’erreur. Le résultat sera le mot λ trouvé après correction.
Exercice 2
Un numéro de sécurité sociale comporte 15 chiffres. Il est d’abord composé d’un entier K de 13 chiffres :
1 chiffre indiquant le sexe (1 ou 2), 2 chiffres pour l’année de naissance, 2 autres chiffres pour le mois de
naissance, 2 chiffres pour le numéro de département, 3 chiffres pour l’identifiant de la commune et les 3
derniers pour le rang de naissance dans le mois. Cet entier est suivi d’une clef C à 2 chiffres servant à une
vérification informatique et correspondant au complément à 97 du reste modulo 97 de l’entier de 13 chiffres.
Ainsi l’entier K + C est un multiple de 97.
1. Calculer la clef du numéro 2850567482101 (482 correspond à Strasbourg).
2. Quel est le rendement de ce code ?
3. Combien d’erreurs de chiffres la clef peut-elle permettre de détecter ?
Exercice 3
On considère le code linéaire dont la matrice génératrice est :


1 0 0 1 1 0
G= 0 1 0 0 1 1 
0 0 1 1 0 1
1
1. Par combien de bits d’information et de contrôle est constitué ce code ?
2. Avec ce code, comment est encodée la suite de bits 011001010101110001 ?
3. Calculer la matrice de parité H de ce code.
4. Quelles sont les images par H des mots 100000, 010000, 001000, 000100, 000010, 000001. Que
pouvez-vous déduire sur le pouvoir de correction de ce code ?
Exercice 4
On considère le code Hamming (7, 4).
1. Calculez les matrices génératrice et de parité de ce code.
2. Encodez la suite de bits 100101001010
3. Décodez la suite de bits 1110110011010101110001100111
(on suppose qu’il y a au plus une erreur sur 7 bits consécutifs).
Exercice 5
On considère le code polynomial généré par le polynôme X 8 + X 4 + X 3 + X 2 + 1.
1. On suppose que la longueur du code est 16 bits. Encodez la suite de bits 1010001000111101.
2. Y a-t-il une erreur dans la suite de bits 1010101001010101 ?
Exercice 6
On considère un code polynomial (8, 5) généré par le polynôme G(X) = X 3 + X + 1. Un mot à encoder
peut se présenter sous la forme P (X) = a4 X 4 + a3 X 3 + ... + a0 X 0 .
1. Exprimez la valeur des bits de contrôle en fonction des ai .
2. En déduire les matrices génératrice et de parité de ce code.
3. Les codes polynomiaux sont des codes linéaires dont l’encodage et le décodage peuvent être réalisés
sans multiplication de matrices mais en utilisant un circuit séquentiel contenant un registre à décalage.
Dessinez un tel circuit pour G(X).
4. Dans un tableau indiquez les valeurs contenues dans les bascules à chaque étape pour le décodage de
11010111.
Exercice 7
On considère le code constitué de 7 bits d’information et un bit de contrôle de parité paire.
1. Ce code est-il un code linéaire ? Si oui donner sa matrice génératrice, son poids minimal et en déduire
ses capacités de détection et de correction d’erreur.
2. Même question pour le code à contrôle de parité impaire.
3. Montrer qu’un polynôme p(X) à coefficients dans Z2 est divisible par 1 + X si et seulement si la
somme des coefficients vaut 0 modulo 2.
2
4. Le code à parité paire est-il polynomial ? Si oui donner son polynôme générateur.
5. Même question pour le code à parité impaire.
Exercice 8
1. Montrer qu’une condition nécessaire et suffisante pour qu’un code polynomial détecte toute erreur
portant sur un unique bit est que son polynôme générateur admette au moins deux monômes.
2. Montrer que si la somme des coefficients du polynôme générateur d’un code est nulle, alors toute
erreur portant sur un nombre impair de bits est détectée.
3. Montrer que si le polynôme générateur d’un code admet au moins 2 monômes ainsi qu’un facteur
irréductible de degré d, alors il détecte tout paquet d’erreurs (c’est-à-dire des erreurs consécutives)
portant sur au plus d − 1 bits.
Exercice 9
Pour leur pouvoir détecteur d’erreur et leur rapidité de décodage, les codes polynomiaux sont souvent employés dans les réseaux locaux (taux d’erreur généralement très faible). En cas d’erreur, l’émetteur procède
à une retransmission. Dans les réseaux sans fil, le bruit est plus important et les temps de transmission plus
long. Aussi, des codes correcteurs sont utilisés bien qu’ils nécessitent un plus grand débit car de nombreuses
informations de contrôle doivent être combinées à l’information utile.
F IGURE 1 – Diagramme de codage et décodage
source : wireless communications and network, W. Stallings, Prentice Hall
Dans ce type de transmission, on trouve principalement des codes convolutifs. Un code convolutif est défini
par un triplet (n, k, K) où k est le nombre de bits utiles traités, n le nombre de bits d’un mot du code, et K la
3
longueur de contrainte, elle correspond aux nombres de bits intervenant dans la génération des mots du code.
Considérons un code (2, 1, 3) défini par vn1 = un ⊕ un−1 ⊕ un−2 et vn2 = un ⊕ un−2 . On remarque
qu’il ne s’agit pas d’un code systématique (les bits d’informations ne sont pas présents en sortie du codeur).
Pour coder la suite 01101, on ajoute deux 0 au début pour correspondre aux un−1 et un−2 du 1er bit de la
suite. Chaque bit d’information intervient dans le calcul de son code mais aussi dans celui des codes suivants, ce bit information est donc contenu dans plusieurs codes, c’est cela qui donne le pouvoir correcteur
de ce code. Pour que le dernier bit intervienne également dans plusieurs codes, deux 0 fictifs sont ajoutés
à la suite (ils seront à supprimer au décodage). Ainsi, la suite (00)01101(00) est codée 00 11 01 01 00 10 11.
Le diagramme de la figure 1a correspond au codage précédent. La figure 1b représente la machine à états
finis de ce code.
Pour comprendre le décodage, la machine à états finis est généralement déployée en un diagramme appelé
treillis (cf. figure 2). Le code de l’exemple précédent suit le chemin : a-a-b-d-c-b-c-a.
F IGURE 2 – Treillis de décodage
source : wireless communications and network, W. Stallings, Prentice Hall
Un code reçu doit correspondre à un chemin dans le treillis. Si aucun chemin ne convient, les différents
chemins possibles sont envisagés, ne sont conservés que ceux qui possèdent une distance de Hamming minimale. La figure montre le décodage d’un mot selon l’algorithme de Viterbi qui procède en b + 1 étapes où
b est une taille de fenêtre choisie au préalable. On voit sur ce schéma que le chemin aboutit à une correction
du premier code, 10, en 11.
4
F IGURE 3 – Décodage selon l’algorithme de Viterbi
source : wireless communications and network, W. Stallings, Prentice Hall
Algorithme de Viterbi :
Etape 0 : désigné par 0
Etape i + 1 : pour chaque état e au temps i + 1, tous les chemins actifs conduisant à e sont déterminés. Si
plusieurs chemins conduisent sur e, ceux qui minimisent la distance de Hamming sont conservés.
Etape b : si un état est étiquetté par une distance minimale et que le chemin pour y parvenir est unique, le
code est corrigé selon ce chemin.
1. Le schéma de la figure 4 représente un codeur convolutif (3, 1, 3).
Représentez le diagramme de ce codeur.
2. Représentez le treillis de ce codeur. Quel sera le trajet suivi par le mot 01011 ? En déduire le code
produit en sortie .
F IGURE 4 – Code convolutif
5
3. Calculez la distance minimale du code, c’est-à-dire la plus petite distance de Hamming entre 2 mots
du code. Pour cela, déterminer le plus court chemin qui s’écarte de l’état (00) du codeur avant d’y
revenir. En déduire la capacité de correction d’erreur du code.
4. A l’aide de l’algorithme de Viterbi, décoder la séquence 101001000111010010000.
6
Téléchargement