Article de reference

Code de correction d'erreur

En informatique , télécommunications , théorie de l'information et théorie du codage , la correction d'erreurs directes ( FEC ) ou codage de canal est une technique utilisée pou...

informatique , télécommunications , théorie de l'information et théorie du codage , la correction d'erreurs directes ( FEC ) ou codage de canal est une technique utilisée pour contrôler les erreurs dans la transmission de données sur des canaux de communication peu fiables ou bruyants .

L'idée centrale est que l'émetteur encode le message de manière redondante , le plus souvent à l'aide d'un code correcteur d'erreurs ( ECC ). Cette redondance permet au récepteur non seulement de détecter les erreurs pouvant survenir n'importe où dans le message, mais aussi, souvent, d'en corriger un nombre limité. Par conséquent, un canal de retour pour demander une retransmission peut s'avérer inutile. Le coût est une augmentation de la bande passante fixe du canal de transmission.

Le mathématicien américain Richard Hamming a été un pionnier dans ce domaine dans les années 1940 et a inventé le premier code correcteur d'erreurs en 1950 : le code Hamming (7,4) .

La FEC peut être appliquée dans des situations où les retransmissions sont coûteuses ou impossibles, comme dans le cas de liaisons de communication unidirectionnelles ou lors de la transmission à plusieurs récepteurs en multidiffusion .

Les connexions à longue latence en bénéficient également ; dans le cas des satellites en orbite autour de planètes lointaines, les retransmissions dues aux erreurs engendreraient un délai de plusieurs heures. La correction d'erreurs sans voie de retour (FEC) est aussi largement utilisée dans les modems et les réseaux cellulaires .

Le traitement FEC dans un récepteur peut être appliqué à un flux binaire numérique ou à la démodulation d'une porteuse modulée numériquement. Dans ce dernier cas, le FEC fait partie intégrante de la conversion analogique-numérique initiale au niveau du récepteur. Le décodeur Viterbi met en œuvre un algorithme de décision souple pour démoduler les données numériques à partir d'un signal analogique perturbé par du bruit. De nombreux décodeurs FEC peuvent également générer un signal de taux d'erreur binaire (TEB) qui peut servir de retour d'information pour optimiser l'électronique de réception analogique.

Les informations FEC sont ajoutées aux dispositifs de stockage de masse (magnétiques, optiques et à semi-conducteurs/flash) pour permettre la récupération de données corrompues et sont utilisées comme mémoire informatique ECC sur les systèmes qui nécessitent des dispositions spéciales en matière de fiabilité.

La proportion maximale d'erreurs ou de bits manquants corrigibles est déterminée par la conception du code de correction d'erreurs (ECC). Différents codes de correction d'erreurs sans voie de retour (FEC) conviennent donc à différentes conditions. En général, un code plus robuste induit une plus grande redondance, nécessitant une transmission sur la bande passante disponible. Ceci réduit le débit binaire effectif tout en améliorant le rapport signal sur bruit effectif reçu . Le théorème de codage sur canal bruité de Claude Shannon permet de calculer la bande passante de communication maximale atteignable pour une probabilité d'erreur maximale acceptable donnée. Ce théorème établit des limites au débit d'information maximal théorique d'un canal présentant un niveau de bruit de base donné. Cependant, la démonstration n'est pas constructive et n'apporte donc aucune indication sur la manière de construire un code atteignant la capacité théorique. Après des années de recherche, certains systèmes FEC avancés, comme le code polaire se rapprochent considérablement du maximum théorique (limite de Shannon) donné par la capacité du canal de Shannon, sous l'hypothèse d'une trame de longueur infinie.

de la redondance à l'information transmise à l'aide d'un algorithme. Un bit redondant peut être une fonction complexe de plusieurs bits d'information d'origine. L'information d'origine peut apparaître ou non littéralement dans la sortie codée ; les codes qui incluent l'entrée non modifiée dans la sortie sont systématiques , tandis que ceux qui ne l'incluent pas sont non systématiques .

Un exemple simple de codage ECC consiste à transmettre chaque bit de données trois fois, ce que l'on appelle un code de répétition (3,1) . Sur un canal bruité, un récepteur peut recevoir huit versions du signal ; voir le tableau ci-dessous.

Triplet reçuInterprété comme
0000 (sans erreur)
0010
0100
1000
1111 (sans erreur)
1101
1011
0111

Cela permet de corriger une erreur dans l'un des trois échantillons par « vote majoritaire » ou « vote démocratique ». La capacité de correction de ce code ECC est la suivante :

  • jusqu'à un bit de triplet erroné, ou
  • jusqu'à deux bits du triplet omis (cas non indiqués dans le tableau).

Bien que simple à mettre en œuvre et largement utilisée, cette redondance modulaire triple est une ECC relativement inefficace. Les meilleurs codes ECC examinent généralement les dernières dizaines, voire les dernières centaines de bits reçus précédemment afin de déterminer comment décoder le petit nombre de bits actuels (généralement par groupes de deux à huit bits).

formalisme simplifié

Formellement, un code correcteur d'erreurs est donné par sa fonction d'encodage ( injective ) qui attribue à chaque mot d'un alphabet fini un mot unique (une concaténation de lettres) de l' alphabet .

Le plus souvent, est un homomorphisme au sens où si est la concaténation de et , alors on a : Ceci implique qu'il suffit de définir pour les mots d'une seule lettre . L' image de la fonction est l'ensemble des mots de code. Les capacités du code à détecter et corriger les erreurs peuvent alors être comprises à partir de la distance du code, qui est la distance de Hamming minimale séparant deux mots de code distincts. Un code avec une distance peut détecter les erreurs sur les bits tant que , et parmi ces erreurs détectées, le code peut corriger les erreurs sur les bits dès que .

Moyennage du bruit pour réduire les erreurs

On pourrait dire que l'ECC fonctionne en « faisant la moyenne du bruit » ; puisque chaque bit de données affecte de nombreux symboles transmis, la corruption de certains symboles par le bruit permet généralement d'extraire les données utilisateur originales des autres symboles reçus non corrompus qui dépendent également des mêmes données utilisateur.

  • Grâce à cet effet de « mutualisation des risques », les systèmes de communication numérique utilisant la correction d'erreurs (ECC) fonctionnent généralement bien au-dessus d'un certain rapport signal/bruit minimal , et pas du tout en dessous.
  • Cette tendance au tout ou rien – l’ effet de falaise – devient plus prononcée lorsque l’on utilise des codes plus robustes qui se rapprochent davantage de la limite théorique de Shannon .
  • L'entrelacement des données codées ECC permet d'atténuer le caractère binaire des codes ECC transmis lorsque les erreurs de canal surviennent par rafales. Toutefois, cette méthode présente des limites ; elle est particulièrement adaptée aux données à bande étroite.

La plupart des systèmes de télécommunications utilisent un codage de canal fixe conçu pour tolérer le taux d'erreur binaire maximal attendu , et deviennent totalement inopérants si ce taux est supérieur. Cependant, certains systèmes s'adaptent aux conditions d'erreur du canal : certains systèmes hybrides à requête automatique de répétition (ARQ) utilisent une méthode de correction d'erreurs (ECC) fixe tant que celle-ci peut gérer le taux d'erreur, puis basculent vers l'ARQ lorsque ce dernier devient trop élevé ; la modulation et le codage adaptatifs utilisent différents taux d'ECC, en ajoutant des bits de correction d'erreurs par paquet lorsque le taux d'erreur est élevé, ou en les supprimant lorsqu'ils ne sont pas nécessaires.

Types

Un code par blocs (plus précisément un code de Hamming ) où des bits redondants sont ajoutés en bloc à la fin du message initial
Un code convolutif continu où des bits redondants sont ajoutés en continu à la structure du mot de code

Les deux principales catégories de codes ECC sont les codes en blocs et les codes convolutifs .

  • Les codes par blocs fonctionnent par blocs (paquets) de taille fixe, composés de bits ou de symboles de taille prédéterminée. En pratique, le décodage des codes par blocs s'effectue généralement en temps polynomial jusqu'à la longueur de leur bloc.
  • Les codes convolutifs fonctionnent avec des flux de bits ou de symboles de longueur arbitraire. Leur décodage souple est le plus souvent réalisé à l'aide de l' algorithme de Viterbi , bien que d'autres algorithmes soient parfois utilisés. Le décodage de Viterbi offre une efficacité de décodage asymptotiquement optimale lorsque la longueur de contrainte du code convolutif augmente, mais au prix d' une complexité exponentiellement croissante. Un code convolutif terminé est également un « code par blocs » car il code un bloc de données d'entrée. Cependant, la taille des blocs d'un code convolutif est généralement arbitraire, tandis que celle des codes par blocs est fixe et déterminée par leurs caractéristiques algébriques. Parmi les types de terminaison pour les codes convolutifs, on trouve la terminaison par « tail-biting » et la terminaison par « bit-flushing ».

Les codes en blocs classiques sont généralement décodés à l'aide d'algorithmes à décision binaire , ce qui signifie que pour chaque signal d'entrée et de sortie, une décision binaire est prise quant à sa correspondance avec un bit 1 ou 0. En revanche, les codes convolutifs sont généralement décodés à l'aide d'algorithmes à décision souple , tels que les algorithmes de Viterbi, MAP ou BCJR , qui traitent des signaux analogiques (discrétisés) et permettent des performances de correction d'erreurs bien supérieures à celles du décodage à décision binaire.

Presque tous les codes par blocs classiques exploitent les propriétés algébriques des corps finis . C'est pourquoi on les appelle souvent codes algébriques.

Codes de blocage

Il existe de nombreux types de codes par blocs ; le codage Reed-Solomon est notamment connu pour son utilisation répandue dans les disques compacts , les DVD et les disques durs . Parmi les autres exemples de codes par blocs classiques, on peut citer les codes de Golay , BCH , de parité multidimensionnelle et de Hamming .

Le code Hamming ECC est couramment utilisé pour corriger les erreurs de mémoire ECC et les erreurs initiales des mémoires flash NAND SLC . Il assure la correction des erreurs sur un bit et la détection des erreurs sur deux bits. Les codes Hamming conviennent uniquement aux mémoires NAND SLC ( Single-Level Cell ), plus fiables. Les mémoires NAND MLC ( Multi-Level Cell ), plus denses, peuvent utiliser des codes ECC multibits tels que BCH , Reed-Solomon ou LDPC . Les mémoires flash NOR n'utilisent généralement aucune correction d'erreurs.

Codes souples

Contrôle de parité à faible densité (LDPC)

Les codes LDPC ( Low-Density Parity-Check ) sont une classe de codes de bloc linéaires très efficaces, composés de nombreux codes SPC (Single Parity-Check). Ils peuvent atteindre des performances très proches de la capacité du canal (le maximum théorique) grâce à une approche de décodage itérative à décision souple, avec une complexité temporelle linéaire par rapport à la longueur de leur bloc. Les implémentations pratiques reposent largement sur le décodage parallèle des codes SPC constitutifs.

Les codes LDPC ont été introduits pour la première fois par Robert G. Gallager dans sa thèse de doctorat en 1960, mais en raison de l'effort de calcul nécessaire à la mise en œuvre de l'encodeur et du décodeur et de l'introduction des codes Reed-Solomon , ils ont été largement ignorés jusqu'aux années 1990.

Les codes LDPC sont désormais utilisés dans de nombreuses normes de communication haut débit récentes, telles que DVB-S2 (diffusion vidéo numérique par satellite de deuxième génération), WiMAX ( norme IEEE 802.16e pour les communications par micro-ondes), les réseaux locaux sans fil haut débit ( IEEE 802.11n ), Ethernet 10GBase-T (802.3an) et G.hn/G.9960 (norme UIT-T pour la mise en réseau via les lignes électriques, les lignes téléphoniques et les câbles coaxiaux). D'autres codes LDPC sont normalisés pour les normes de communication sans fil au sein du 3GPP MBMS (voir les codes fontaine ).

Code turbo

Le turbo-codage est une méthode de décodage souple itérative qui combine deux codes convolutionnels relativement simples ou plus et un entrelaceur pour produire un code par blocs dont les performances sont proches de la limite de Shannon , à une fraction de décibel près . Antérieur aux codes LDPC en termes d'application pratique, il offre désormais des performances similaires.

L'une des premières applications commerciales du turbocodage fut la technologie cellulaire numérique CDMA2000 1x (TIA IS-2000), développée par Qualcomm et commercialisée par Verizon Wireless , Sprint et d'autres opérateurs. Ce procédé est également utilisé pour l'évolution du CDMA2000 1x dédiée à l'accès Internet, appelée 1xEV-DO (TIA IS-856). Tout comme le 1x, l'EV-DO a été développé par Qualcomm et est commercialisé par Verizon Wireless , Sprint et d'autres opérateurs (Verizon la commercialise sous le nom de Broadband Access , tandis que Sprint la nomme Power Vision pour les particuliers et Mobile Broadband pour les entreprises).

Description des performances d'un ECC

Contrairement aux codes de blocs classiques qui spécifient souvent une capacité de détection ou de correction d'erreurs, de nombreux codes de blocs modernes, tels que les codes LDPC, ne présentent pas de telles garanties. Ces codes modernes sont plutôt évalués en fonction de leur taux d'erreur binaire.

La plupart des codes de correction d'erreurs sans voie de retour (FEC) corrigent uniquement les inversions de bits, et non les insertions ou suppressions de bits. Dans ce contexte, la distance de Hamming est la méthode appropriée pour mesurer le taux d'erreur binaire . Quelques codes FEC sont conçus pour corriger les insertions et suppressions de bits, tels que les codes de marquage et les codes de filigrane. La distance de Levenshtein est une méthode plus appropriée pour mesurer le taux d'erreur binaire lors de l'utilisation de tels codes.

Débit de codage et compromis entre fiabilité et débit de données

théorie de la complexité algorithmique , notamment pour la conception de preuves probabilistes vérifiables .

Les codes localement décodables sont des codes correcteurs d'erreurs pour lesquels il est possible de récupérer, de manière probabiliste, des bits individuels du message en examinant seulement un petit nombre (par exemple constant) de positions d'un mot de code, même après que ce dernier a été corrompu sur une fraction constante de ses positions. Les codes localement testables sont des codes correcteurs d'erreurs pour lesquels il est possible de vérifier, de manière probabiliste, si un signal est proche d'un mot de code en examinant seulement un petit nombre de positions de ce signal.

Tous les codes localement décodables (LDC) ne sont pas des codes localement testables (LTC) ni des codes localement corrigibles (LCC), les LCC q-query sont bornés exponentiellement tandis que les LDC peuvent avoir des longueurs sous-exponentielles .

Améliorer les performances

Concaténation (combinaison)

Voyager 2 a utilisé cette technique lors de son survol d' Uranus en 1986. La sonde Galileo a eu recours à un codage par concaténation itératif pour compenser le taux d'erreur très élevé dû à une antenne défaillante.

entrelacement

Une brève illustration de l'idée d'entrelacement

L'entrelacement est fréquemment utilisé dans les systèmes de communication et de stockage numériques pour améliorer les performances des codes correcteurs d'erreurs sans voie de retour. De nombreux canaux de communication ne sont pas sans mémoire : les erreurs surviennent généralement par rafales plutôt qu'indéterminées. Si le nombre d'erreurs dans un mot de code dépasse la capacité du code correcteur d'erreurs, ce dernier ne parvient pas à reconstituer le mot de code original. L'entrelacement atténue ce problème en répartissant aléatoirement les symboles sources sur plusieurs mots de code, créant ainsi une distribution plus uniforme des erreurs. Par conséquent, l'entrelacement est largement utilisé pour la correction d'erreurs par rafales .

L'analyse des codes itérés modernes, tels que les turbocodes et les codes LDPC , suppose généralement une distribution indépendante des erreurs. Les systèmes utilisant des codes LDPC emploient donc généralement un entrelacement supplémentaire entre les symboles à l'intérieur d'un mot de code.

Pour les turbocodes, l'entrelaceur est un composant essentiel et sa conception appropriée est cruciale pour de bonnes performances. L'algorithme de décodage itératif fonctionne de manière optimale lorsqu'il n'y a pas de cycles courts dans le graphe de facteurs qui représente le décodeur ; l'entrelaceur est choisi pour éviter les cycles courts.

Les modèles d'entrelacement comprennent :

  • entrelaceurs rectangulaires (ou uniformes) (similaires à la méthode utilisant des facteurs de saut décrite ci-dessus)
  • entrelaceurs convolutifs
  • entrelaceurs aléatoires (où l'entrelaceur est une permutation aléatoire connue)
  • Entrelaceur aléatoire S (où l'entrelaceur est une permutation aléatoire connue avec la contrainte qu'aucun symbole d'entrée à une distance S n'apparaît à une distance S dans la sortie).
  • un polynôme de permutation quadratique sans conflit (QPP). Un exemple d'utilisation se trouve dans la norme de télécommunications mobiles 3GPP Long Term Evolution .

Dans les systèmes de communication multiporteuses , l'entrelacement des porteuses peut être utilisé pour fournir une diversité de fréquence , par exemple pour atténuer l'évanouissement sélectif en fréquence ou les interférences à bande étroite.

Exemple d'entrelacement

Transmission sans entrelacement :

Message sans erreur : décodé incorrectement .

Avec entrelacement :

Mots de code sans erreur : de réseaux de neurones  .

Logiciel pour les codes de correction d'erreurs

La simulation du comportement des codes correcteurs d'erreurs (ECC) par logiciel est une pratique courante pour concevoir, valider et améliorer ces codes. La future norme sans fil 5G ouvre la voie à de nouvelles applications pour les ECC logiciels : les réseaux d'accès radio cloud (C-RAN) dans un contexte de radio logicielle (SDR) . L'objectif est d'utiliser directement les ECC logiciels dans les communications. Par exemple, en 5G, les ECC logiciels pourraient être hébergés dans le cloud et les antennes connectées à ces ressources de calcul, améliorant ainsi la flexibilité du réseau de communication et, à terme, l'efficacité énergétique du système.

Dans ce contexte, divers logiciels libres sont disponibles et sont listés ci-dessous (liste non exhaustive).

  • AFF3CT (A Fast Forward Error Correction Toolbox) : une chaîne de communication complète en C++ (de nombreux codes pris en charge comme Turbo, LDPC, codes polaires, etc.), très rapide et spécialisée dans le codage de canal (peut être utilisée comme programme pour les simulations ou comme bibliothèque pour le SDR).
  • IT++ : une bibliothèque C++ de classes et de fonctions pour l'algèbre linéaire, l'optimisation numérique, le traitement du signal, les communications et les statistiques.
  • OpenAir : implémentation (en C) des spécifications 3GPP concernant les réseaux Evolved Packet Core.

Liste des codes correcteurs d'erreurs

Codes durs
CodeDistanceErreurs détectables (bits)Erreurs corrigibles (bits)
Parité (estimation nécessaire en cas d'erreur)210
Triple redondance modulaire321
Hamming parfait tel que Hamming(7,4)321
SECDED : Hamming étendu tel que (39,32), (72,64)431
DÉTECTÉ : Code Nordstrom-Robinson652
Code de Golay binaire parfait763
TECFED : Code Golay binaire étendu873

Dans le tableau ci-dessus, pour un code correcteur d'erreurs de distance de Hamming minimale , le nombre maximal d'erreurs que le code peut détecter est donné par tandis que le nombre maximal d'erreurs qu'il peut corriger est donné par .