Vous êtes sur la page 1sur 36

Polycopié du Cours et Travaux Dirigés

Université de Maroua
École Nationale Supérieure Polytechnique de Maroua
Département Informatique et Télécommunications
Enseignant: LAOUKOURA CHARLES
UE 539 : Codes Correcteurs 2 (IC5)
Année académique : 2023-2024

I.0 Rappels sur les codes cycliques


I.0.1 Codes BCH

Les codes BCH permettent de construire de manière systématique des codes


cycliques corrigeant au moins t erreurs dans un bloc de n symboles.

Pour construire un code BCH, on se fixe t ou de manière équivalente d, appelée


distance construite du code et on détermine son polynôme générateur g(x). Le code
obtenu possède une distance minimale d min qui est toujours supérieure ou égale à la
distance construite.

I.0.1.1 Code BCH primitif

Le polynôme générateur g(x) d’un code BCH primitif construit sur un corps de
Galois GFq avec q2m éléments, de distance construite d (d= 2t+2 ou 2t+1),
possède (d−1) racines. Le code BCH est dit primitif car les racines de son polynôme
générateur sont des puissances de α, élément primitif du corps de Galois GFq.

 Code BCH primitif avec d  2t 1


Le polynôme générateur g(x) d’un code BCH primitif de distance construite d  2t 1
est égal à :

est le polynôme minimal à coefficients dans le corps GF 2  associé à j et P.P.C.M.


désigne le Plus Petit Commun Multiple.

1
Les paramètres d’un code BCH primitif de distance construite d = 2t + 1 sont les
suivants :

Exemple
Soit un code BCH primitif de distance construit d  2t 1 avec m  4 et t  2.
1) Déterminer la valeur de N et le corps de Galois utilisé.
2) Déterminer le polynôme générateur.
3) Déterminer les paramètres de ce code.

Solution :

Le P.P.C.M des polynômes max  et ma3 x est évidemment égal au produit de ces
deux polynômes puisqu’ils sont irréductibles et ainsi, le polynôme générateur est égal
à:

En développant on obtient :

2
Finalement les paramètres de ce code BCH sont :
m  4; N 15; N  K  8; K  7; t  2

I.0.2 Codes de Reed-Solomon

Les codes de Reed-Solomon sont les codes à symboles non binaire les plus connus et
surtout les plus utilisés. Pour les codes à symboles non-binaires les plus connus et
surtout les plus utilisé.

Pour les codes à symboles non-binaires les coefficients j c des mots de code et d j des
blocs de donnée prennent leur valeur dans un corps de Galois GFq à q  2 m élément.
Ainsi, chaque symbole des codes peut être code sur m symboles binaires.

Les codes de Reed-Solomon étant des codes cycliques, ils sont engendrés par un
polynôme générateur gx diviseur de xn1 dont les coefficients gj j  0,1,..., NK1
prennent également leur valeur dans le corps de Galois GFq.

Le polynôme générateur d’un code de Reed-Solomon, de distance construit d possède


d 1 racines

Il a donc pour expression :

est le polynôme minimal associé à l’élément , , i+j du corps GFq.

Le polynôme générateur d’un code de Reed-Solomon est donc de la forme :

3
En général, le paramètre l est fixé à 0 ou à 1.

Le polynôme générateur d’un code de Reed-Solomon, de degré N  K  possède d


1 racines soit N  K  d 1.

Sa distance construite est donc égale à : d  N  K 1

La distance minimale min d d’un code de Reed-Solomon est égale à sa distance


construite.

Un code dont la distance minimale est égale à N  K 1 est appelé un code à distance
maximale.

Les paramètres d’un code de Reed-Solomon corrigeant t erreurs dans un bloc de n


symboles q-aires sont donc :

Exemple

Déterminer le polynôme générateur d’un code de Reed-Solomon construit à partir


d’un corps de Galois à 16 éléments, ayant un pouvoir de correction de t  2 erreurs.

La distance minimale de ce code est donc de dmin  5 .

En prenant par exemple l 1, le polynôme générateur de ce code est donc de la


forme : d allant de 1 à 5.

En développant l’expression précédente, on obtient :

4
En utilisant les représentations binaires des éléments du corps GF 16 

I.0.3 Codes de Golay

Le code de Golay, comme le code de Hamming est un code matriciel généré à partir
d’un polynôme générateur.

5
Ce code a néanmoins quelques particularités par rapport aux codes de Hamming sur
lesquels il est basé. Tout d’abord, il s’agit d’un code correcteur dit cyclique, c’est-à-
dire que toute permutation circulaire d’un mot de code reste un mot de code (un mot
de code correspond à des données encodées par la matrice génératrice). Les codes
cycliques ont aussi une particularité concernant leur polynôme générateur : ils
divisent le polynôme 𝑧 𝑛 + 1 (ou 𝑧 𝑛 − 1).

Le polynôme générateur du code correcteur binaire étendu de Golay (23,12,7) est:

𝐻 (𝑧) = 𝑧 11 + 𝑧 10 + 𝑧 6 + 𝑧 5 + 𝑧 4 + 𝑧 2 + 1

En appliquant les divisions euclidiennes (pour connaître dans les détails ce type de
génération, voir le principe de fonctionnement du code de Hamming).

Pour obtenir le code de Golay (24,12,8) à partir du code de Golay (23,12,7), il suffit
de rajouter un bit de parité à la fin de la matrice génératrice obtenue. Pour obtenir ce
bit de parité, il suffit de faire la somme de tous les bits de la ligne considérée. Si cette
somme est égale à 0, alors le bit de parité ajouté sera 1. Si cette somme est égale à 1,
ce bit sera égal à 0.

LES CODES CONVOLUTIFS

I.1 Définition des codes convolutifs

Pour les codes convolutifs, chaque bloc de ns symboles binaires en sortie, dépend non
seulement des ne symboles binaires présents en entrée mais aussi des v blocs de ne
symboles binaires précédents. Par conséquent, ces codes introduisent un effet de
mémoire d’ordre v.
Chaque code convolutif est défini par les paramètres suivants :
 Rendement du code : R  ne /ns ;
 Longueur de contrainte : K  v 1
La figure I.1 donne un exemple d’un code convolutif de rendement R=1/2 et de
longueur du contrainte K =3.

6
Figure I.1- Exemple d’un code convolutif ( ne 1, ns  2, R 1/ 2, v  2, K  3 )

Un code convolutif est un circuit logique comprenant un registre à décalage formé de


K cellules, ns additionneurs modulo 2 (portes ou-exclusif), un ensemble de
connexions entre les additionneurs et les cellules du registre à décalage et du
commutateur à ns positions.

I.2 Principe de codage


Pendant un cycle d’horloge, la sortie du codeur va comporter la sortie de
l’additionneur supérieur suivi de celle de l’additionneur inférieur, ces sorties sont
données par la relation suivante :

(I.1)

où est la réponse du code définissant aussi les codes convolutifs, et


celle-ci est déterminée par :

 Les séquences génératrices représentent l'ensemble des connexions entre les


additionneurs modulo 2 et les cellules du registre à décalage. Les séquences
génératrices peuvent être données par :

(I.2)

 Les polynômes générateurs exprimés en fonction de la variable D (Delay)


équivalente à la variable Z-1 de la transformée en Z :
(I.3)

I.3 Représentation des codes convolutifs

D’une façon générale, un code convolutif fonctionne de la manière suivante : l’état


du code (le contenu de registre à décalage) à l’instant k est représenté par l’état
dk1 ,dk2 ,...,dkv . A chaque arrivée d’un symbole binaire dk , le contenu de registre
à décalage devient égal à dk ,dk1 ,...,dkv) , une sortie est donc générée. Ensuite, le
registre fait le décalage et le code passe à l’état suivant qui est d k ,dk1 ,...,dkv1 .
Avant que le processus de codage ne débute, l’état du code est initialisé à zéro.
Ce fonctionnement est représenté par trois diagrammes équivalents mais différents :
l’arbre du code, le treillis du code et le diagramme d’états. Ce dernier représente les

7
transitions entre les états tandis que le diagramme en arbre et celui en treillis
représentent l’évolution au cours du temps de ces états.

I.3.1 Diagramme en treillis


Sur la figure I.2 on va représenter le treillis du code convolutif de la figure I.1.

Figure I.2- Diagramme en treillis associé au code convolutif de la figure I.1

Le treillis est formé de nœuds reliés par des branches : les nœuds représentent les
différents états ( 2n ev états) possibles du code, les branches représentent les différentes
transitions ( 2v transitions) possibles d’un nœud à un autre (ou d’un état du code au
suivant) lors de l’arrivée d’un symbole d’entrée (transition en trait pointillé (resp. en
trait plein) pour l’arrivée d’un 0 (resp. d’un 1)).

La longueur du treillis représente la profondeur dans la séquence des bits


d'information (notion du temps) et sa largeur équivaut au nombre d'états du code. Les
états sont identifiés sur la colonne de gauche. La sortie du code est mentionnée sur
chaque branche.

Après K décalages, quelque soit l’état initial du code, le motif du treillis se répète.

Le fonctionnement temporel du code se traduit donc par le tracé d’une succession


d’états connectés par des branches. Cette suite connectée de branche est dite
"chemin" à laquelle correspond les suites des symboles d’information et des
symboles codés.

8
Les chemins doivent être suffisamment distants les uns des autres pour avoir des
meilleures performances. Cette distinction est caractérisée par un paramètre
important qui caractérise les performances du code en terme de probabilité d’erreur,
appelé distance libre.

I.3.2 Diagramme en arbre

Sur la figure I.3 on va représenter l’arbre du code convolutif de la figure I.1.

Figure I.3- Diagramme en arbre associé au code convolutif de la figure I.1

Lorsque l’élément binaire à l’entrée du codeur est égal à « 0 » (respectivement à « 1


»), le couple binaire en sortie du codeur est porté par une branche montante
(respectivement descendante) du diagramme en arbre. Ces branches se séparent en un
point est appelé nœud.

I.3.3 Diagramme d’état

Pour le diagramme d’état la notion du temps a disparu, et on ne représente que les


transitions qui existent entre les états. Ce diagramme est déduit du diagramme en
arbre.
Sur la figure I.4 on va représenter le diagramme d’état du code convolutif de la figure
I.1.

9
Figure I.4- Diagramme d’état associé au code convolutif de la figure I.1

I.4 Décodage des codes convolutifs

Dans les communications numériques actuelles, il existe deux méthodes de décodage


pour les codes convolutifs :
 La 1ère méthode recherche le message le plus probable (décodage à entrée ferme
ou pondérée et à sortie ferme) ;
 La 2ème méthode estime les symboles d'informations les plus probables (décodage
à sortie pondérée).
Dans ce qui suit, on va décrire deux algorithmes de décodage à entrée et à sortie
ferme : algorithme de Viterbi et algorithme séquentiel.

I.4.1 Algorithme de Viterbi

L'algorithme de Viterbi a été présenté en 1967 par A. J. Viterbi. Le principe de cet


algorithme consiste à estimer les transitions, qui se sont produites dans la mémoire du
code convolutif pendant le codage. L'estimation se base sur le maximum de
vraisemblance (Maximum Likelihood). Le maximum de vraisemblance permet
d'identifier la séquence la plus probable par la comparaison des séquences transmises
possibles pour une séquence reçue.

10
L’algorithme de Viterbi utilise le treillis comme structure de données. Il est représenté
sur la figure 1.6. Supposons que la séquence reçue soit 11 00 11 11.

Figure I.6- Algorithme de Viterbi

Il fonctionne comme suit :


A chaque transition et pour chacun des nœuds, on va faire une séquence d'opération
appelée Addition-Comparaison-Selection (ACS) :

1. Calcul de la métrique : à chaque instant, on calcule la métrique de branche


associée à chaque chemin dans le treillis : c’est-à-dire la distance entre le couple de
bits reçus et les couples de bits codés correspondant au branches. Plusieurs métriques
sont à notre disposition pour calculer cette distance. Les trois suivantes sont le plus
souvent citées avec l'algorithme de Viterbi :
 La métrique de corrélation ;
 La métrique euclidienne ;
 La métrique de Hamming. C’est celle qui est utilisée ici.
Ces distances apparaissent entre parenthèse sur chaque branche concernée.

11
2. Addition : pour chaque nœud on calcule les métriques cumulées des chemins
aboutissant à ce nœud. Elles sont calculées par l’addition des métriques de branche et
des anciennes métriques cumulées correspond au même chemin.
Ces métriques apparaissent entre parenthèse sur chaque noeud concerné.

3. Comparaison-Selection : chaque noeud doit alors comparer les deux métriques


ainsi calculées pour choisir le chemin le plus probable : la plus petite pour la métrique
de Hamming ou la métrique euclidienne, la plus grande pour la métrique de
corrélation. Ce chemin est appelé le chemin survivant, l’autre est le chemin
concurrent.
Si deux chemins sont aussi vraisemblables, un seul chemin est toutefois conservé et
le choix peut être arbitraire.
A la fin de l'opération de décodage, le chemin de métrique totale minimale
correspond alors à la séquence transmise la plus probable (représenté en gras sur la
figure).
Il est évident que le décodeur de Viterbi est un décodeur à maximum de
vraisemblance car à chaque étape, il ne rejette que des chemins ne pouvant être
meilleurs que les chemins choisis.
Aucune modification de l’algorithme de Viterbi à entrée pondérée n’est nécessaire.
Une simple adaptation de la métrique de branche permet une prise en compte
naturelle des entrées pondérées.

L’algorithme de Viterbi est une méthode optimale de décodage pour réduire au


minimum la probabilité d'erreur par séquence. Malheureusement, l’algorithme de
Viterbi ne peut pas calculer la décision pondérée pour chaque symbole décodé. Cet
algorithme a été modifié pour faire utiliser l’algorithme SOVA.

I.4.2 Décodage séquentiel

La première méthode utilisée pour le décodage des séquences protégées par des codes
convolutifs, a été l’algorithme séquentiel proposé par ozencraft en 1957.
Cette méthode a été repris e et modifiée par Fano. La stratégie adoptée par Fano
consiste en la recherche du chemin le plus probable à l'intérieur du diagramme en
arbre, en examinant une transition de mémoire à la fois. Ce type de recherche
appartient au genre de recherche depth-first. La recherche du chemin le plus
prometteur est conduite à l'aide d'une fonction de métrique PM adaptée à ce genre de
recherche.

I.5 Performances des codes convolutifs

La distance libre, est définie comme la plus petite distance de Hamming existant
entre deux chemins qui divergent puis convergent de nouveau.

12
Rappelons que la distance de Hamming entre deux chemins est égale au nombre de
symboles binaires codés différents entre les séquences associées à chacun des deux
chemins.

La recherche de la distance libre bénéficie de la propriété de linéarité des codes


convolutifs, qui permet de se concentrer uniquement sur les distances entre les
messages potentiels et le message zéro. Le message "zéro" est le message codé
contenant une séquence infinie de zéros, générée par le codage d'une série infinie de
bits d'informations 'zéro' (chemin de poids nul).

De ce fait, la distance libre est aussi égale au poids minimal des chemins qui
divergent puis convergent vers le chemin de poids nul. Le poids d’une séquence est le
nombre de bit égal à 1.

Reprenons le treillis de la figure 1.2 et portons sur chaque branche le poids


correspondant. On obtiendra la figure 1.5.

Figure I.5- Détermination de la distance libre du code de la figure I.1

La distance libre de notre exemple de treillis est égale à 5. Elle correspond au chemin
(00-10-01-00) représenté en gras sur la figure I.5.

13
I.6 Quelques exemples des codes

I.6.1 Codes catastrophiques

Il existe des codes pour lesquels un nombre fini d'erreurs de transmission risque de
produire un nombre infinie d'erreurs en sortie du décodeur. Ces codes sont appelés
catastrophiques (figure I.6). Un code convolutif est catastrophique, s'il existe dans le
diagramme d'états un chemin fermé dont toutes les branches sont de poids nul.

Figure I.6- Exemple d’un code convolutif catastrophique


I.6.2 Codes convolutifs poinçonnés

Plus le rendement est faible, plus le code est performant. Mais, plus le rendement est
faible, plus la largeur de bande nécessaire à la transmission doit être importante.

On cherche donc à construire des codes ayant un rendement le plus élevé possible
(pour des raisons de temps et de coût) et permettant une fiabilité arbitrairement
grande.

Pour fabriquer des codes convolutifs de rendement supérieur, on utilise l’opérateur de


poinçonnage, placé à la sortie du code, permettant d’effacer, c’est-à-dire de ne pas
transmettre, certains symboles codés. En réception, un dispositif vient insérer un zéro
analogique en entrée du décodeur aux places correspondantes.

La figure I.7 donne un exemple d’un code de rendement R=1/2 dont on supprime un
bit de sortie sur 4. Il devient un code de rendement R=2/3.

14
Figure I.7- Exemple de poinçonnage d’un code convolutif de rendement R=1/2

Sur la figure I.7, le masque de poinçonnage indique la position des symboles à


effacer.

La technique de poinçonnage permet d'augmenter le rendement d'un code sans pour


autant augmenter la complexité du décodeur. Cette technique permet d’obtenir des
codes ayant des performances très voisines de celles obtenues avec des codes non-
poinçonnés de même rendement, tout en présentant l’avantage d’avoir une réduction
de la complexité de décodage.

A l’aide de la technique de poinçonnage, le codeur et le décodeur sont identiques


pour l’ensemble des rendements de codage. Seule la fonction de poinçonnage est
paramétrable en fonction de rendement.

La technique de poinçonnage est placée à la sortie du codeur. Elle permet d’effacer,


c’est-à-dire de ne pas transmettre, certains symboles codés. En réception, un
dispositif, nommé dépoinçonnage, insère des zéros analogiques en entrée du
décodeur aux places correspondantes.

La figure I.9 représente le schéma de principe d’un système de transmission utilisant


la technique de poinçonnage.

Figure I.9- Schéma d’un système de transmission numérique utilisant le poinçonnage

15
La technique de poinçonnage permet d’augmenter le rendement d’un code sans
augmenter la complexité de décodage.

La technique de poinçonnage permet d’augmenter le rendement d’un code sans


augmenter la complexité de décodage.

BIBLIOGRAPHIE

[1] Y. Jiang, “A Practical Guide to Error-Control Coding using MATLAB”, Artech


House, 2010.
[2] Y. S. Cho, J. Kim, W. Y. Yang and C. G. Kang, “MIMO-OFDM Wireless
Communications with Matlab”, John Wiley & Sons (Asia) Pte Ltd, 2010.
[3] T. S. Rappaport, “Wireless Communications: Principles and Practice”, Second
Edition, 2002.
[4] J. G. Proakis, “Digital Communications”, Fourth Edition, 2001.
[5] M. Weeks, “Digital Signal Processing using MATLAB”, Infinity Science Press
LLC, 2006. [6] Marco Baldi, “QC-LDPC Code-Based Cryptography”, Springer,
2014.
[7] J. C. Moreira and P. G. Farrell, “Essentials of Error-Control Coding”, John Wiley
& Sons Ltd, 2006.
[8] C. Berrou, “Codes et Turbo-Codes”, Springer, 2007.
[9] T. K. Moon, “Error Correction Coding Mathematical Methods and Algorithms”, A
John Wiley & Sons, Inc, 2005.
[10] MOSTARI LATIFA, “Polycopié de Cours & Travaux Dirigés Codage de Canal ”,
Université Hasiba Ben Bouali Chlef, Faculté de Technologie, Département
d’éléectronique, 2017.

16
ANNEXES (COMPLÉMENT COURS)

17
18
19
20
21
22
23
24
25
26
27
TRAVAUX DIRIGES
TD1 :

Voici un décodeur pour un code convolutif. Les métriques de branche (distances


locales) sont indiquées pour chaque transition, et représentent la distance de
Hamming entre le mot de code reçu et le mot de code valide pour la transition.

A. Quelle est la sortie du décodeur, c.-à-d. la séquence de cinq bits de données?

B. Est-ce qu’il y a eu des erreurs pendant la transmission? Si oui, combien?

TD2 :

Voici le tableau standard et la table des syndromes pour un code en bloc.

28
A. Combien de vecteurs d’erreur peuvent être corrigés par ce code?
B. Combien de bits peuvent être corrigés par ce code?
C. Est-ce que le code est systématique?
D. Est-ce que le code est linéaire? E. Quelle est la distance minimale du code?
F. Quel est le taux de code?
G. Si la séquence reçue est 010011, est-ce qu’il y a eu une erreur de transmission?
H. Avec l’information fournie, est-ce que vous pouvez donner une esquisse de
l’encodeur?
I. Avec l’information fournie est-ce que vous pouvez corriger les erreurs?
a. Si oui, comment?
b. Si non, quelle information additionnelle est requise?

TD3 :

Voici le diagramme de l’état d’un code convolutif avec longueur de contrainte quatre.
Les mots de codes sont indiqués à côté de chaque transition possible. L’état initial est
« a », l’état où tous les registres contiennent zéro. Donnez la séquence encodée quand
les données sont 1 1 1 0 1 0 0 0

29
TD4 :

Considérons le treillis d’encodage suivant pour un code convolutif.

La séquence suivante est reçue. 111 001 110 110 101 010

Trouvez la sortie de l’algorithme de Viterbi, c.-à-d. l’estimé le plus vraisemblable de


la séquence transmise. SVP utilisez le feuilles de treillis de décodage fournie. Mettez
ces feuilles dans votre cahier bleu.

30
31
32
TD5 :

Considérons le treillis d’encodage suivant pour un code convolutif.

A. Quel est le taux de codage? Quel est la longueur de contrainte?

B. Trouvez la distance libre df du code convolutif en supposant que les décisions


sont fermes. Combien de chemins y a-t-il à cette distance minimale?

TD6 :

Voici le diagramme d’état d’un code convolutif. Les mots de codes sont indiqués à
côté de chaque transition possible. L’état initial est « a », l’état où tous les registres
contiennent zéro.

33
A. Quelle est la longueur de contrainte? Quel est le taux de code?
B. Complétez la feuille fournie (dernière page de l’examen) et mettez la feuille dans
votre cahier bleu. Pour chaque état, indiquez l’état des registres dans les boites
fournies. Pour chaque transition dans le treillis, indiquez le mot de code dans la boite
fournie.
C. Quelle est la distance de Hamming pour le chemin indiqué ici-bas? En autres
mots, quelle est la distance entre le chemin indiqué et le chemin composé uniquement
des états « a »?

Indications :

34
TD7 :

Considérons le décodeur de Viterbi suivant. Les métriques de chemin au temps 4 sont


indiquées entre parenthèses pour chacun des quatre états. Les métriques de branche
pour le temps 5 sont écrites à côté de chacune de huit transitions valides.

Quelle est la sortie du décodeur, c.-à-d. la séquence de cinq bits de données les plus
probables? Est-ce qu’il y a eu des erreurs pendant la transmission? Si oui, combien?

TD8 :

Voici la matrice de contrôle pour un code en bloc:

35
A. Quelle est l’implémentation en registres à décalage de l’encodeur?
B. Donnez la table des syndromes.

TD9 :

Voici l’implémentation d’un code convolutif avec registres à décalage

A. Donnez le diagramme d’état pour ce code.


B. Donnez le treillis d’encodage pour ce code.
C. Trouvez la distance minimale pour le code convolutif donné dans ce graphique en
utilisant la distance de Hamming.

36

Vous aimerez peut-être aussi