En mathématiques et en informatique, un code cyclique est un code correcteur linéaire. Ce type de code possède non seulement la capacité de détecter les erreurs, mais aussi de les corriger sous réserve d'altérations modérées. Les mathématiques sous-jacentes se fondent sur la théorie des corps finis, et en particulier les extensions de Galois ainsi que les polynômes. Les codes cycliques, encore appelés contrôles de redondance cyclique (CRC), correspondent à une large famille de codes, on peut citer par exemple le code de Hamming, les codes BCH ou le code de Reed-Solomon.

Contexte Généralités

L'objectif du code cyclique est la correction automatique de certaines altérations de message. La technique utilisée consiste à plonger le message dans un espace plus vaste pour disposer d'une redondance.

La figure de droite illustre cette approche. Le code de la partie gauche ne dispose pas de redondance (un mot de code est un message codé, c'est une chaîne de lettre d'un alphabet ici égal aux éléments d'un corps fini. Un code est l'ensemble des mots de code n'ayant pas subi d'altération durant la transmission. La longueur du code, une constante, est le nombre de lettres contenu dans un mot de code.) Le code de la figure correspond aux intersections du quadrillage, le mot de code à transmettre est symbolisé par le point vert. Une altération pendant la transmission déplace le message vers un autre mot de code en rouge. Pour le récepteur, le code reçu est licite, il n'existe aucune information permettant de corriger l'erreur.

Si un code correcteur est utilisé, la figure de droite illustre le mécanisme. L'émetteur plonge son message dans un espace plus vaste, le mot de code correspond à un point vert. L'espace dispose maintenant du quadrillage supplémentaire orange. Si la transmission engendre une unique erreur, alors le message reçu devient un point rouge, si l'altération n'est pas plus grande que le déplacement sur un segment du quadrillage. Le récepteur reçoit alors un message rouge, qui n'est pas un mot de code (car le code correspond aux points verts). Sachant qu'un mot de code a été envoyé et sachant que la transmission ne produit qu'une erreur (c’est-à-dire un unique déplacement sur le quadrillage) il existe un moyen de corriger la transmission.

La mesure de la gravité de l'altération est donnée par la distance de Hamming. Elle correspond au nombre de lettres ayant été modifiées. Les points noirs correspondent aux redondances inutiles. Le code de la figure est capable de corriger les altérations uniques. Un point noir, à une distance de deux du code entre dans la zone non interprétable assurément, il représente une redondance inutile. L'objectif d'un bon code correcteur est d'emplir l'espace avec des boules de même rayon qui ne s'intersectent jamais, ici illustrées par les losanges verts. Si une telle configuration est atteinte, le code est dit parfait.

Code linéaire

Un code linéaire dispose d'une structure algébrique plus riche que celle du cadre général des codes correcteurs.

Les alphabets A et A sont identifiés et munis d'une structure de corps fini. Le cas le plus fréquent consiste à choisir le corps F2 ou l'une de ses extensions finies, on parle alors d'alphabet binaire.

Les ensembles E et F sont naturellement munis d'une structure d'espace vectoriel de dimension respectives k et n. Si Fd désigne le corps fini (cf l'article corps fini) de cardinal d où d est une puissance d'un nombre premier p, alors l'espace vectoriel F est généralement identifié à Fdn.

F est muni d'une distance qui dérive du poids de Hamming. La distance entre deux points de F correspond au nombre de coordonnées non nulles de la différence entre les deux points, dans la base canonique. Un code se décrit par trois paramètres, noté [n, k, δ], n est la dimension du code, k la longueur du code et δ la distance minimale entre deux mots du code. Ces notations sont utilisées dans le reste de l'article.

Enfin, l'application d'encodage φ est choisie linéaire, le code est donc un sous-espace vectoriel.

Corps fini

Si la théorie des codes linéaires apporte une solution élégante avec des exemples parfaits, on peut néanmoins remarquer deux manques. D'une part, elle ne propose pas de méthode pour trouver des codes optimaux, et d'autre part, elle propose un cadre algorithmique faible. Il existe bien une addition naturelle. En revanche le produit externe est souvent pauvre. Le corps le plus usité est F2 ne contenant que deux éléments, 0 qui annule tous les vecteurs et 1 qui les laisse à l'identique. Il ne reste donc que le calcul matriciel.

L'enrichissement algébrique le plus naturel associe à Fd, le corps de l'espace vectoriel, l'extension de dimension m. Ce corps de cardinal d m est une extension de Galois, donc disposant de tout l'arsenal de théorèmes de la théorie associée. Une autre structure naturelle est Fd[X] l'ensemble des polynômes à coefficients dans Fd. Cet anneau est de dimension infinie, en revanche, tout élément non nul de l'extension est racine du polynôme suivant :

Une division euclidienne d'un polynôme quelconque par P[X] possède donc pour reste un polynôme de degré strictement inférieur à d m - 1 et ayant même image pour tout élément de l'extension. Sous réserve de choisir comme longueur du code une puissance du cardinal du corps, la structure Fd[X]/P[X], quotient de l'anneau commutatif des polynômes par l'idéal engendré par P[X], hérite donc de toutes propriétés nécessaires à l'application de la théorie de Galois.

Dans l'anneau Fd[X]/P[X], la multiplication possède une implémentation logicielle d'exécution particulièrement rapide. Elle correspond à la multiplication des entiers, mais sans retenue et avec la règle Xn-1.X = 1. L'univers algébrique utilisé pour les codes cycliques est celui-là.

Les sous-structures compatibles avec les anneaux sont les idéaux. Ce sont, dans le cas de Fd[X]/P[X], des sous-espaces vectoriels. Pour bénéficier de la structure, il est intéressant de se focaliser sur ces idéaux. Ils correspondent aux sous-espaces vectoriels stables par multiplication par le monôme unitaire X. Un idéal I de l'anneau vérifie donc la propriété:

Remarque: par souci de simplicité, X est identifié avec sa classe dans le quotient Fd[X]/P[X]. Cette identification est utilisée dans tout l'article.

Si une notation plus classique est utilisée, Q[X] est noté x comme un mot de code avec les coordonnées (xi) et I est noté C pour code, la propriété devient:

Le terme code cyclique provient de cette condition nécessaire et suffisante pour qu'un espace vectoriel soit un idéal.

Un résultat de la théorie des anneaux affirme que, dans ce contexte, les idéaux sont engendrés par les diviseurs du polynôme P[X]. Or, la théorie des corps finis montre que les diviseurs de P[X] sont exactement la liste des polynômes irréductibles avec un ordre de multiplicité 1 et possédant toutes ses racines dans l'extension de dimension m (à l'exception du polynôme X non représenté). Un idéal est donc engendré par un produit de polynômes irréductibles, scindés dans l'extension, tous différents entre eux et différents de X.

Définition Un code linéaire sur Fd et de paramètres [n, k, δ] est dit cyclique si l'espace vectoriel est muni de la structure d'anneau commutatif Fd[X]/P[X], avec P(X) = Xn - 1, et si le code C est un idéal de dimension k de distance minimale δ.

Dire que le code est un idéal revient à dire qu'il est cyclique, c’est-à-dire qu'il vérifie la propriété suivante :

Dans ce cas, la longueur du code est toujours une puissance du cardinal du corps de base moins un. Dans la pratique, la longueur du code est une puissance du cardinal du corps, souvent égale à deux et le dernier bit est un bit de parité.

On suppose dorénavant que C est un code cyclique de paramètres [n, k, δ] sur le corps Fd et qu'il existe m tel que d m - 1 est égal à n, α désigne une racine primitive de l'extension Fn + 1 de Fd.

Code cyclique et code parfait

Distance minimale et code binaire

Dans le cas des codes binaires, les polynômes cyclotomiques d'indice n à coefficients dans F2 engendrent des codes cycliques parfaits, de distance minimale égale à trois. Ce type de code est adapté pour les petites perturbations relativement fréquentes. Chaque mot peut comporter une unique erreur, elle sera corrigée. Un code de cette nature est, par exemple utilisé pour le minitelP. Arnoult Minitel, codage de l'information et corps finis Pour la science N°125 mars 1988, c'est un code BCH sur 17 octets.

La théorie de Galois assure que l'extension Fn de F2 possède un élément primitif α, et donc Fn est égal à F2[α]. L'élément α est générateur du groupe multiplicatif, son polynôme minimal est donc un diviseur du polynôme cyclotomique Φn d'indice n sur Fd. Son degré est égal à m car α est un élément primitif.

Ce polynôme remplit les conditions d'optimalité. L'idéal C engendré par Φn[X] est un code cyclique.

De plus : L'idéal C engendré par Φn[X] possède les paramètres suivant [2m - 1, 2m - m - 1, 3]. Le code associé est donc un code binaire de Hamming. Ce résultat est vrai uniquement parce que le code est binaire. Considérons par exemple F27 = F3[α] où α est un générateur primitif de l'extension. L'ordre de α est égal à 26, donc α13 est une racine carrée de l'unité, différente de 1. α13 est donc égal à -1. Le polynôme X13 - 1 admet α pour racine, c'est donc un multiple de son polynôme cyclotomique et il est élément du code. Pourtant son poids est égal à deux.

Ce sont donc les spécificités de la caractéristique 2 qui assurent la véracité de la proposition.

L'idéal C engendré par Φn[X] est un code parfait.

Dans le cas général, la borne de Singleton n'est pas atteinte. Considérons en effet le cas où m est égal à 7. La longueur n du code est égale à 127, la dimension k du code à 120 et la distance minimale δ à trois. On en déduit:

Code BCH

Si le contexte précédent possède de nombreuses applications industrielles, il présente néanmoins des limitations justifiant l'utilisation d'autres méthodes.

La solution précédente s'appuie sur les propriétés de la caractéristique 2. Il peut être utile d'utiliser d'autres corps finis que ceux multiple de deux. Cette contrainte est d'importance relativement faible dans l'industrie, les codes binaires sont en effet largement répandus.

En revanche, une telle approche ne permet que la résolution d'une unique erreur dans un mot. Cette limitation n'est pas compatible avec, par exemple, le cahier des charges des disques compacts. Un disque compact peut subir des rayures ou être localement recouvert d'une poussière. Une suite de lettres erronées peut posséder une longueur égale à 4.096.

La théorie des corps finis permet néanmoins de proposer une solution MSD c’est-à-dire qui atteint la borne de Singleton. Elle se fonde sur un calcul réalisé la première fois par le mathématicien Vandermonde (1735 - 1796) pour résoudre l'équation cyclotomiqueVandermonde Mémoire sur la résolution des équations (1771) dans le cas de la caractéristique zéro. Ce calcul reste d'actualité pour les corps finis.

Dans la suite du paragraphe Δ désigne un entier tel que 1 < Δ < n + 1 et β désigne un élément de Fn+1 tel que ses Δ premières puissances soit toutes distinctes

Un polynôme à coefficients dans Fd dont Δ puissances successives et distinctes de β sont racines et sans racine multiple, engendre un code cyclique C dont la distance minimale δ est supérieure ou égale à Δ + 1.

Remarque :La propriété du paragraphe précédent est une conséquence de cette proposition. En effet, les propriétés de l'automorphisme de Frobenius démontrent que si α est racine du polynôme cyclotomique, alors α2 l'est aussi dans le cas des corps binaires.

Cette proposition est à la base d'une famille de codes dits code BCH (pour Bose, Ray-Chaudhuri, Hocquenghem)