moins qu'un certain seuil
Dans sa thèse de doctorat , Dave Forney a démontré que les codes concaténés pouvaient être utilisés pour obtenir des probabilités d'erreur décroissantes de manière exponentielle à tous les débits de données inférieurs à la capacité, avec une complexité de décodage qui n'augmente que polynomialement avec la longueur du bloc de code.
Description


Soit C un code [ n , k , d ], c'est-à-dire un code par blocs de longueur n , de dimension k , de distance de Hamming minimale d , et de taux r = k / n , sur un alphabet A :
Soit C out un code [ N , K , D ] sur un alphabet B avec | B | = | A | k symboles :
Le code interne C <sub>in</sub> prend une entrée parmi | A <sub> k</sub> | = | B | possibles, l'encode en un n -uplet sur A , la transmet et la décode en une sortie parmi | B | possibles. On considère ce canal comme un (super)canal capable de transmettre un symbole de l'alphabet B. Ce canal est utilisé N fois pour transmettre chacun des N symboles d'un mot de code C <sub>out</sub> . La concaténation de C <sub>out</sub> (code externe) avec C <sub>in</sub> (code interne) est notée C <sub>out</sub>.
Il mappe chaque message d'entrée m = ( m 1 , m 2 , ..., m K ) à un mot de code ( C in ( m 1 ), C in ( m 2 ), ..., C in ( m N )), où ( m 1 , m 2 , ..., m N ) = C out ( m 1 , m 2 , ..., m K ).
L' idée clé de cette approche est que si C <sub>in</sub> est décodé par une méthode du maximum de vraisemblance (présentant ainsi une probabilité d'erreur décroissante exponentiellement avec la longueur), et que C <sub>out</sub> est un code de longueur N = 2<sup> nr </sup> décodable en temps polynomial de N , alors le code concaténé peut être décodé en temps polynomial de sa longueur combinée n<sub> 2 </sub> = O ( N ⋅ log( N )) et présente une probabilité d'erreur décroissante exponentiellement, même si C<sub> in </sub> a une complexité de décodage exponentielle. Ce point est abordé plus en détail dans la section Décodage des codes concaténés .
Dans une généralisation de la concaténation ci-dessus, il existe N codes internes possibles C<sub> in , i</sub> et le i -ème symbole d'un mot de code C <sub> out</sub> est transmis sur le canal interne en utilisant le i -ème code interne. Les codes de Justesen sont des exemples de codes concaténés généralisés, où le code externe est un code de Reed-Solomon .
Propriétés
1. La distance du code concaténé C out
Démonstration : Considérons deux messages différents m₁ ≠ m₂ ∈ BK . Soit Δ la distance entre les deux mots de code . Alors
Il existe donc au moins D positions où la séquence des N symboles des mots de code C <sub>out</sub> ( m <sub>1</sub> ) et C <sub>out</sub> ( m <sub>2</sub> ) diffère. Pour ces positions, notées i , nous avons
Par conséquent, il existe au moins d ⋅ D positions dans la séquence de n ⋅ N symboles tirés de l'alphabet A où les deux mots de code diffèrent, et donc
2. Si C out et C in sont des codes de bloc linéaires , alors C out
Cette propriété peut être facilement démontrée en se basant sur l'idée de définir une matrice génératrice pour le code concaténé en fonction des matrices génératrices de C out et C in .
Décodage de codes concaténés
Une approche naturelle pour un algorithme de décodage de codes concaténés consiste à décoder d'abord le code interne, puis le code externe. Pour être pratique, cet algorithme doit avoir une complexité polynomiale par rapport à la longueur du bloc final. Supposons qu'il existe un algorithme de décodage unique en temps polynomial pour le code externe. Il nous faut maintenant trouver un algorithme de décodage en temps polynomial pour le code interne. On entend ici par complexité polynomiale que le temps d'exécution est polynomial par rapport à la longueur du bloc final. L'idée principale est que si la longueur du bloc interne est logarithmique par rapport à la taille du code externe, alors l'algorithme de décodage du code interne peut s'exécuter en temps exponentiel par rapport à la longueur du bloc interne. On peut ainsi utiliser un décodeur à maximum de vraisemblance (MLD) optimal en temps exponentiel pour le code interne.
Plus précisément, soit l'entrée du décodeur le vecteur y = ( y 1 , ..., y N ) ∈ ( A n ) N . L'algorithme de décodage se déroule alors en deux étapes :
- Utilisez le MLD du code interne C in pour reconstruire un ensemble de mots de code internes y = ( y 1 , ..., y N ), avec y i = MLD C in ( y i ), 1 ≤ i ≤ N .
- Exécutez l'algorithme de décodage unique pour C sur y .
La complexité temporelle de la première étape est O ( N ⋅ exp( n )), où n = O (log( N )) est la longueur du bloc interne. Autrement dit, elle est de l' ordre de N<sub> O </sub>(1) (c'est-à-dire polynomiale) par rapport à la longueur du bloc externe N. Comme l'algorithme de décodage externe de la deuxième étape est supposé s'exécuter en temps polynomial, la complexité de l'algorithme de décodage global est également polynomiale.
Remarques
décodage décrit ci-dessus permet de corriger toutes les erreurs jusqu'à un nombre inférieur à dD /4. Grâce au décodage par distance minimale , le décodeur externe peut corriger toutes les entrées y comportant moins de D /2 symboles y'i erronés . De même, le code interne peut corriger de manière fiable une entrée yi si moins de d /2 symboles internes sont erronés. Ainsi, pour qu'un symbole externe y'i , au moins d /2 symboles internes doivent être erronés, et pour que le code externe échoue, cela doit se produire pour au moins D / 2 symboles externes. Par conséquent, le nombre total de symboles internes incorrects qui doivent être reçus pour que le code concaténé échoue doit être d'au moins d /2 × D /2 = dD /4.
L'algorithme fonctionne également si les codes internes sont différents, par exemple pour les codes de Justesen . L' algorithme de distance minimale généralisé , développé par Forney, permet de corriger jusqu'à dD /2 erreurs. Il utilise les informations d'effacement du code interne pour améliorer les performances du code externe et a été le premier exemple d'algorithme utilisant le décodage à décision souple .
Applications
Bien qu'un schéma de concaténation simple ait déjà été mis en œuvre pour la mission Mariner de 1971 vers Mars les codes concaténés ont commencé à être régulièrement utilisés pour les communications spatiales lointaines avec le programme Voyager , qui a lancé deux sondes spatiales en 1977 Depuis lors, les codes concaténés sont devenus la méthode de codage correcteur d'erreurs efficace par excellence, et le sont restés au moins jusqu'à l'invention des turbocodes et des codes LDPC .
En général, le code interne n'est pas un code par blocs, mais un code convolutif à décision souple , décodé par Viterbi, avec une longueur de contrainte courte. Pour le code externe, on utilise un code par blocs à décision dure plus long, souvent un code de Reed-Solomon avec des symboles de huit bits. La taille de symbole plus importante rend le code externe plus robuste aux pics d'erreurs pouvant survenir en raison des imperfections du canal, et également parce que la sortie erronée du code convolutif lui-même est irrégulière. Une couche d'entrelacement est généralement ajoutée entre les deux codes afin de répartir les pics d'erreurs sur une plage plus large.
La combinaison d'un code convolutif de Viterbi interne avec un code de Reed-Solomon externe (connue sous le nom de code RSV) a été utilisée pour la première fois dans Voyager 2 [ est devenue une construction populaire tant dans le secteur spatial qu'en dehors. Elle est encore utilisée aujourd'hui notamment pour les communications par satellite , comme la norme de diffusion de télévision numérique DVB-S .
Au sens large, toute combinaison (sérieuse) de deux codes ou plus peut être qualifiée de code concaténé. Par exemple, dans la norme DVB-S2 , un code LDPC très efficace est combiné à un code externe algébrique afin d'éliminer les erreurs résiduelles du code LDPC interne dues à son plancher d'erreur inhérent .
Un schéma de concaténation simple est également utilisé sur le disque compact (CD), où une couche d'entrelacement entre deux codes Reed-Solomon de tailles différentes répartit les erreurs sur différents blocs.
Turbo codes : une approche de concaténation parallèle
La description ci-dessus concerne ce que l'on appelle aujourd'hui un code à concaténation sérielle. Les turbocodes , décrits pour la première fois en 1993, implémentent une concaténation parallèle de deux codes convolutifs, avec un entrelaceur entre les deux codes et un décodeur itératif qui assure la transmission d'informations entre eux. Cette conception offre des performances supérieures à celles de tous les codes à concaténation conçus précédemment.
Cependant, un aspect essentiel des turbocodes réside dans leur approche de décodage itératif. Ce décodage est désormais également appliqué aux concaténations en série afin d'obtenir des gains de codage plus élevés, notamment dans les codes convolutifs à concaténation en série (SCCC). Une forme primitive de décodage itératif a été implémentée avec deux à cinq itérations dans le « code Galileo » de la sonde spatiale Galileo .