Vous êtes sur la page 1sur 5

Les codes FEC (Forward Error Correction) et

leur utilisation en transmission


Damien Regnault
May 24, 2004

1 Introduction
Lors de la transmission d’informations dans un réseau, les données peuvent être
altérées. Les FEC ont été développés pour pouvoir pallier à ces inconvénients:
on rajoute aux messages envoyés des bits de contrôles pour détecter et corriger
de telles erreurs.
Les réseaux numériques ne présentent guère de problèmes de ce point de
vue. Mais les réseaux analogiques nettement moins sûrs et les réseaux sans fil
qui sont en train de se développer montrent la nécessité de ces techniques.
Les erreurs peuvent être isolées ou générées en rafale. Les codes correcteurs
peuvent soit servir à détecter les erreurs et à demander un renvoie des infor-
mations, soit servir à corriger directement les informations et ainsi éviter de
renvoyer le message. Les contraintes des réseaux influencent grandement les
choix faits sur les techniques sélectionnées.
Par exemple, un réseau sûr préférera renvoyer les données. Tandis qu’un
canal avec un bruit important préférera les corriger car il y a de grandes chances
que les données soit corrompues à nouveau lors de leur retransmission.
L’une des premières questions qui s’est donc posée était: que peut-on atten-
dre de ces codes correcteurs?

2 Comment mesurer l’efficacité d’un code?


Dans les années 40, Shannon a publié des articles répondant aux questions:
Quelles sont les rendements optimaux que l’on peut obtenir ? Comment mesurer
l’efficacité de tels codes ? Quels sont les influences du réseaux sur le rendement?
On dispose de plusieurs outils théoriques pour analyser l’efficacité des codes
correcteurs :
-la distance de hamming qui mesure la distance minimale entre deux mots
qui représentent une transmission sans erreur du code sélectionné.
-le no man’s land qui représente les mots que l’on ne peut pas décoder
-le rendement qui correspond au nombre de bits utiles sur le nombre de bits
envoyés.

1
-le fait que le nombre d’erreurs détectées sur un code est égale à d-1 et que
le nombre d’erreurs qui peuvent être corrigées est égale à (d − 1)/2 (où d est la
distance de Hamming du code).
Cela a permis de facilement analyser les capacités théoriques des codes cor-
recteurs. Malgrès cela, il reste parfois des écarts entre la théorie et la réalisation
pratique, dû aux caractéristiques techniques du réseau.
L’un des théorèmes importants de Shannon est le fait qu’il existe un C
(dependant du bruit dans le canal) tel que si un code FEC à un rendement
supérieur à C, alors la probabilité d’avoir des bits erronés reste strictement
positive et que si le rendement est inférieur à C, alors on peut trouver un code
dont la probabilité d’erreur est aussi proche de 0 que l’on veut.

3 différents codes correcteurs et leur utilisation


De nombres codes correcteurs ont été inventés durant ces 50 dernières années.
On présente ici les grandes familles de codes qui ont eut une importance. Cette
liste n’est pas exhaustive, il existe de nombreux autres codes correcteurs qui ont
été développés (codes de Golay, code de Reed-Muller ...).

3.1 les codes de Hamming


Les codes de Hamming sont une généralisation du bit de parité (un bit de
contrôle pour fixer la parité du nombre de 1 dans le mot). On insère dans le
code des bits de contrôle. Les bits de contrôle vérifient la parité des bits dont
ils apparaissent dans leur décomposition en base 2.
exemple: Prenons le code de Hamming 7-4 : 4 bits de données, 3 bits
de contrôle. Envoyons le message abcd, on génére le premier bit de contrôle
x qui est la somme des bits 0, 1, 3 qui occuperont respectivement la place
3(2+1), 5(4+1), 7(2+4+1) dans le message finale donc x=a+b+d, de même
y=a(2+1)+c(4+2)+d(4+2+1) et z=b(4+1)+c(4+2)+d(4+2+1) et le message
envoyé est xyazbcd. Par exemple, 1010 se codera: x=1+0+0=1 , y=1+1+0=0,
z=0+1+0=1, le message envoyé est 1011010.
Le codage et le décodage correspond à un simple produit de matrice. Différentes
implémentations de ces codes existent pour les rendre plus efficace dans certains
cas (rafale d’erreurs, ...) ou certaines circonstances.

3.2 CRC (codes à redondance cyclique)


Les codes CRC sont générés à partir de polynômes.
A partir d’un polynôme générateur de degré r, on associe r bits de contrôle
à un message. Les bits de contrôle correspondant au reste de la division du
polynome associé au message par le polynome générateur.
exemple: prenons le polynôme générateur G(x) = x4 + x + 1 et codons le
message 1101011011. On rajoute trois bits de contrôle à la trame qui devient
11010110110000. On lui associe le polynôme x13 + x12 + x10 + x8 + x7 + x5 + x4 .

2
On fait la division de ce polynôme par G(x) et on obtient x3 + x2 + x. Donc,
on enverra le message 11010110111110.
Ainsi lors du décodage, il suffit de faire la division du polynôme correspon-
dant au message transmis par le polynôme générateur et si la division est nulle,
le message est transmis sans erreur.
Les avantages de ces codes sont qu’ils sont faciles à implémenter et qu’ils
donnent de bons résultats avec des polynômes bien choisis.
Ainsi différents polynômes ont été sélectionnés pour différents protocole:
CRC-32 (Ethernet) = X 32 + X 26 + X 23 + X 22 + X 16 + X 12 + X 11 + X 10 +
X + X7 + X5 + X4 + X2 + X + 1
8

CRC CCITT V41 (HDLC)= X 16 + X 12 + X 5 + 1

3.3 le code Reed-Solomon


Le code Reed-Solomon est un dérivé des codes CRC.
Il a été découvert par Irving S. Reed et Gustave Solomon qui ont publiés
leurs recherches en 1960.
A l’époque, les besoins d’un code correcteur puissant n’étaient pas encore
nécessaires. C’est seulement quelques années plus tard que ce code s’est révélé
utile.
Ce code est particulièrement efficace lorsqu’il s’agit de corriger des rafales
d’erreurs importantes.
Egalement, il permet de reconstituer des messages alors que des paquets
entiers d’informations sont perdus.
Après un article de Elwyn R. Berlekamp publié en 1968, ce code a été choisi
pour être installé sur voyager II. Les transmissions à travers l’espace provoquent
un bruit important et un code correcteur très efficace était nécessaire dans ce
projet.
Depuis, ils ont été utilisés pour l’encodage des données sur CD: les éraflures
sur les CD provoquent des rafales d’erreurs très importantes et ce code pouvait
résoudre ce problème.
A la différence des autres codes, celui-ci code des paquets de bits:
Par exemple, prenons un code Reed-Solomon pour 3 ∗ 8 bits de données, on
transmet 2 paquets supplémentaires contenant les bits de contrôle.
Ainsi pour le message 03 10 15, on génére les mots de contrôle 03 + 10 + 15 =
28 et 03 ∗ 1 + 10 ∗ 2 + 15 ∗ 3 = 68 ainsi le message envoyé est 03 15 18 28 68.
Pour le décodage supposons que l’on reçoive le message erroné 03 12 15 28 68
alors en calculant les bits de contrôle 03+12+15 = 30, 03∗1+12∗2+18∗3 = 72,
on détecte une erreur qui est corrigeable en faisant la différence des premiers
mots de contrôle (30 − 28) = −2 qui donne la valeur de l’erreur et la différence
des deuxième mots pondéré par l’erreur donne le mot erroné ((72 − 28)/2) = 2.

3.4 les turbo-codes


Les turbo-codes ont été développés très récemment à l’ENST de Bretagne. Ils
ont été présentés pour la première fois par C. Berrou et A. Glavieux lors de l’

3
ICC 93 (international conference on communication).
Ces codes sont particulièrement intéressants car, ils sont très proches de la
limite théorique définie par Shanon.
Tous les codes présentés précédemment font partis d’une famille de code
appelée les codes algébriques. Les turbo-codes sont inspirés de deux autres
grandes familles de codes découvertes plus récemment (années 60). Il s’agit des
codes convolutifs et des codes “graphiques”. Les codes graphiques inventés par
Gallager en 1963 n’avait pas remporté de succés faute d’expérimentation. Ces
codes font intervenir les probabilités en générant des contraintes au hasard. Ils
sont appelés ainsi car leur fonctionnement rappelle des notions dans le domaine
du traitement du signal et de l’image.
Depuis un symposium, spécialement dédié à ces codes, verra sa quatrième
édition à Munich en 2006.
De nombreux articles sont parus depuis sur les turbo-codes et ils commencent
à s’imposer dans plusieurs domaines:
-la NASA a décidé d’utiliser un turbo-code pour ses futures missions dans
l’espace.
-la troisième génération de téléphone portable utilise un turbo-code pour les
débits supérieur à 64 kbits/s.
-Certaines normes de liaison par satellites pour internet ou la television
numérique utilisent les turbo-codes.
-Ils devraient être utilsés dans les réseaux locaux sans fils (WLAN) et dans
la nouvelle génération ADSL.
-Il est en projet de les utiliser dans les protocoles de diffusion dans la fibre
optique et la conception de disques ou CD-ROM.

4 Conclusion
Après de nombreux codes développés dans les années 60, les codes de type CRC
et leur dérivés ont joués un rôle important dans le domaine des codes correcteurs.
Mais les turbo-codes ont ouvert de nouvelles perspectives: tous les autres
codes s’appuyaient à peu près sur la même théorie tandis que les turbo-codes font
intervenir de nouvelles notions. Naturellement, les recherches se dirigent plus
vers eux dorénavant et ils ont encore de nombreux facteurs inconnus. Un très
grand nombre d’articles sont parus sur ce sujet récemment et le fonctionnement
des turbo-codes étant beaucoup plus complexe que celui des CRC et faisant
intervenir beaucoup plus de notions, ils existent de nombreux points encore
obscurs qui peuvent être améliorés sur ce sujet.
URL :

http://www-turbo.enst-bretagne.fr/
site consacré aux conférences sur les turbocodes.

http://www-math.cudenver.edu/∼rrosterm/crypt proj/crypt proj.html

4
site explicant le fonctionnement des codes BCH.

http://www.traitdunioncm.com/ENST/Medaille.html
commuciqué de presse faisant l’historique des turbocodes

http://www.bretagne.ens-cachan.fr/DIT/People/Claude.Jard/sem 15 10 2002 fabre trans.pdf


(lien parfois défectueux)
transparent d’un seminaire sur les turbo-codes

http://www.inria.fr/rapportsactivite/RA2002/sigma2/module16.html
rapport présentant des travaux sur les turbo-codes

Vous aimerez peut-être aussi