Académique Documents
Professionnel Documents
Culture Documents
Dans un système de communication, le canal est une entité qui relie l’émetteur et le
récepteur. Il peut être représenté par une fonction qui prend un vecteur 𝑥𝑥 en entrée et lui associé un
vecteur 𝑦𝑦 en sortie. C’est la version bruitée du vecteur 𝑥𝑥 selon la probabilité du canal 𝑝𝑝(𝑦𝑦/𝑥𝑥). Les
ensembles d’entrée et de sortie peuvent être finis ou continus selon l’application considérée.
Le codage de canal a pour objet de protéger les données sources contre les erreurs du canal
lors de la transmission. Les techniques du codage de canal permettent la réduction du taux d’erreur
pour avoir une distorsion faible entre 𝑥𝑥 et 𝑦𝑦. Elles se basent sur des structures qui permettent la
détection et/ou la correction des erreurs du canal. Une des méthodes traditionnelles est le codage du
canal redondant, où l'on ajoute des bits supplémentaires au message transmis afin de pouvoir
détecter et/ou corriger les erreurs. La séquence utile à transmettre sera alors représentée par une
autre séquence plus grande. Par conséquence le débit de transmission est plus grand.
La figure suivante (3.2), présente le schéma bloc du codage de canal où 𝑖𝑖(𝑘𝑘) est le message
utile à transmettre de taille 𝑘𝑘 et 𝑥𝑥(𝑛𝑛) est le message codé à transmettre via le canal, il est de taille 𝑛𝑛
( 𝑛𝑛 > 𝑘𝑘) . Après la transmission, le message 𝑥𝑥(𝑛𝑛) devient 𝑦𝑦(𝑛𝑛) à cause du bruit du canal. Le
décodeur du canal enlève la redondance et détecte et/ou corrige l’erreur produite. Par conséquent, il
produit un message 𝑖𝑖̀(𝑘𝑘) identique ou pas à 𝑖𝑖(𝑘𝑘) selon sa capacité de correction.
Bruit
Dans la conception de codes de canal efficaces, la théorie des corps finis, initiées par Galois,
intervient de façon essentielle. En effet, c’est à l’aide d’une algèbre élaborée qu’ont été construits
des codes correcteurs d’erreurs très puissants. Les codeurs de canal redondants sont classés en deux
grandes catégories : les codes en bloc et les codes convolutifs.
Les codes en blocs les plus utilisés sont de type linéaires systématiques, en ce que les 𝑘𝑘
premiers bits sont directement positionnés par l’utilisateur (bits d'information utile) et que les
𝑟𝑟 = 𝑛𝑛 − 𝑘𝑘 bits ajoutés sont calculés par le codeur. Les bits de redondance étant soigneusement
choisis à la fois pour garantir une détection et une correction optimales.
Le code linéaire 𝐶𝐶(𝑛𝑛, 𝑘𝑘) est considéré systématique, donc les 𝑘𝑘 premiers bits du mot-code sont le
message d’information utile.
Les 𝑛𝑛 − 𝑘𝑘 bits restants (bits de redondance) sont générés par des combinaisons linéaires des 𝑘𝑘 bits
utiles selon certaines règles prédéterminés, telles que:
Les coefficients 𝑔𝑔𝑖𝑖𝑖𝑖 dans l’équation précédente appartiennent à l’ensemble {0, 1} et l’opération
d’addition "+" est une addition binaire modulo 2 (sans retenue).
Le système d’équation (4) peut s’écrire sous forme matérielle, comme suit :
La matrice 𝐺𝐺 est appelée la matrice génératrice. Le code 𝐶𝐶(𝑛𝑛, 𝑘𝑘) est entièrement défini par la
matrice génératrice 𝐺𝐺.
Pour le décodage, une autre matrice déduite de 𝐺𝐺 est utilisée. Il s’agit de la matrice de
contrôle définie par :
Il a été démontré qu’un message 𝐶𝐶 n’est un mot-code du code linéaire 𝐶𝐶(𝑛𝑛, 𝑘𝑘) que si et seulement
si:
𝐶𝐶. 𝐻𝐻 𝑇𝑇 = 0 (8)
𝑈𝑈 = 𝐶𝐶 + 𝐸𝐸 (9)
Avec 𝐸𝐸 = (𝑒𝑒1 , 𝑒𝑒2 , … , 𝑒𝑒𝑛𝑛 ), où 𝑒𝑒𝑖𝑖 = 1 correspond à la position 𝑖𝑖 avec un bit erroné. Le décodeur ne
connait ni 𝐶𝐶 ni 𝐸𝐸, sa fonction est de retrouver 𝐶𝐶 à partir de 𝑈𝑈 et par conséquent décoder le message
d’information utile 𝑋𝑋. Le fait d’estimer le vecteur d’erreur 𝐸𝐸, permettra au décodeur de trouver le
mot-code 𝐶𝐶 en utilisant les propriétés de l’addition modulo 2 :
…………
𝐸𝐸2𝑛𝑛 −𝑘𝑘 𝐶𝐶2 + 𝐸𝐸2𝑛𝑛 −𝑘𝑘 𝐶𝐶3 + 𝐸𝐸2𝑛𝑛 −𝑘𝑘 ………… 𝐶𝐶2𝑘𝑘 + 𝐸𝐸2𝑛𝑛 −𝑘𝑘
La règle du décodage est très simple. Il suffit de localiser le vecteur reçu 𝑈𝑈 dans le tableau
standard. Si, par exemple, 𝑈𝑈 appartient à la 𝑖𝑖 é𝑚𝑚𝑚𝑚 colonne du tableau standard, alors il sera décodé
par le mot-code 𝐶𝐶𝑖𝑖 .
On définit la distance minimale 𝑑𝑑𝑚𝑚𝑚𝑚𝑚𝑚 d’un code en bloc linéaire comme étant le poids
minimal des mots-code non nuls appartenant au code 𝐶𝐶(𝑛𝑛, 𝑘𝑘). La capacité de correction du code
𝐶𝐶(𝑛𝑛, 𝑘𝑘) est égale à (𝑑𝑑𝑚𝑚𝑚𝑚𝑚𝑚 − 1)/2 erreurs sur le message reçu. Aussi il peut détecter 𝑑𝑑𝑚𝑚𝑚𝑚𝑚𝑚 − 1
erreurs. Il est donc évident que pour 𝑛𝑛 et 𝑘𝑘 donnés, on souhaite avoir 𝑑𝑑𝑚𝑚𝑚𝑚𝑚𝑚 aussi grande que
possible.
Donnons un petit exemple d’encodage de messages par un code en bloc 𝐶𝐶(6, 3) dont la
matrice génératrice est donnée par :
1 0 0 1 1 0
𝐺𝐺 = �0 1 0 0 1 1� (11)
0 0 1 1 0 1
Pour des messages bloc de longueurs 𝑘𝑘 = 3, il existe donc 8 messages utiles. Les mots-code du
code 𝐶𝐶(6, 3) et leurs poids sont donnés dans le tableau 2.
Ce code donc peut détecter deux erreurs et corriger une erreur simple. Une conception du
tableau standard est montrée dans le tableau 3.
Supposons que le mot code 𝐶𝐶4 = 011 110 a été transmis et que lors de la transmission ce
mot code a été perturbé par l’erreur 𝐸𝐸3 = 001 000. Donc, le récepteur reçoit le mot erroné 𝑈𝑈 =
010 110. Le décodeur cherche alors la position du mot 𝑈𝑈 reçu dans le tableau standard (𝑈𝑈 ∈ 𝑀𝑀4 ).
Donc, il le décode par le mot code 𝐶𝐶4 . Le décodage est correct car ce code 𝐶𝐶(6, 3) peut corriger
toutes les erreurs simples avec une erreur double (1ére colonne du tableau standard).
Supposons maintenant que le mot code 𝐶𝐶4 a été perturbé par une erreur de poids double
𝐸𝐸 = 010 010. Le décodeur reçoit alors le mot 𝑈𝑈 = 001 100 qui appartient à 𝑀𝑀2 et par conséquente
le décode par 𝐶𝐶2 = 001 101 . Le décodage est donc incorrect puisque l’erreur est de poids double.