Codes convolutifs, graphes factoriels et turbo-codes. Jean-Marc Brossier Janvier 6
Chapitre Codes convolutifs Sommaire. Rappel sur les codes en bloc linéaire.......................... Matrice génératrice d un code convolutif....................... Equation de convolution................................. Mise en œuvre par registre à décalage et représentation polynomiale......5 Le codeur est un automate fini.............................6 Diagramme en treillis...................................6. Chemin dans le treillis...................................7 Algorithme de Viterbi..................................7. Détection optimale et modèle de canal..........................7. Mise en œuvre efficace.................................. Figures. Exemple de code convolutif mis en œuvre à l aide de registres à décalage. Paramètres : k =, n =, K = M =. G = [], G = [], G = [], G = []. Polynômes : P (D) = D D D et Q(D) = D D........................ Représentation alternative à celle de la figure (.). Exemple de code convolutif mis en œuvre à l aide de registres à décalage. Paramètres : k =, n =, K = M =. G = [], G = [], G = [], G = []. Polynômes : P (D) = D D D et Q(D) = D D......................................... Réalisation d un code convolutif de rendement /....................... Code convolutif de rendement / (k =, n = ).........................5 Evolution de l état q j du registre à décalage sous l action de l entrée e j........... 5.6 Le nouvel état q j et la nouvelle sortie C j sont calculés en fonction de l état présent q j et de la valeur entrante I j..................................... 5.7 Machine à état fini associée au code convolutif de la figure (.)............... 5.8 Couches j et j du treillis associé au code de la figure (.)................ 5.9 Treillis du code de la figure (.) pour une séquence d entrée débutant en finissant en l état neutre s =........................................... 7. Illustration du fonctionnement de l algorithme de Viterbi................... Tables. Codage par la machine à état fini................................ 6
. Matrice génératrice d un code convolutif. Décodage par l algorithme de Viterbi. Les branches de transition sont indexées par des couples (entrée,sortie). Les métriques des branches sont encerclées, les métriques des chemins sont placées sur les branches, le label d un nœud correspond à la plus petite métrique de chemin jusqu à ce nœud. Chaque colonne décrit les phases de l algorithme pour l entrée d une donnée. Les lignes correspondent au message reçu : ( )......................... 9. Décodage par l algorithme de Viterbi. Suite............................. Rappel sur les codes en bloc linéaire Un code bloc linéaire transforme des paquets de k < n bits informatifs en paquets de n bits codés. L ensemble des mots du code forme un sous espace vectoriel de dimension k dans l espace de dimension n. La répartition des mots du code dans cet espace de dimension n, et plus particulièrement la distribution des distances entre mots (le spectre des distances) conditionnent les performances du code. La distance minimale entre les mots (distance minimale du code) est particulièrement importante.. Matrice génératrice d un code convolutif La matrice génératrice G d un code convolutif est infinie : G G G M k n k n G G M G M............ G =. k n G G..... G...... k n... Elle dépend de K = M matrices k n notées {G i } i=..m. K est appelé la longueur de contrainte du code. Notons I j = (I j I jk ) le jème paquet de k bits informatifs et C j = (C j C jn ) un paquet de n bits codés. L opération de codage d une suite infinie de bits informatifs I = (I I ) s écrit C = IG. Elle produit une suite infinie de bits codés C = (C C ). D après la forme matricielle C = IG : C = I G C = I G I G. C M = I G M I G M I M G. C j = I j M G M I j G pour j M.
. Equation de convolution 5. Equation de convolution Avec la convention I i = pour i <, il devient clair que la relation d encodage C = IG est une convolution : M C j = I j l G l. (.) l= Pour un bloc I de bits informatifs de taille finie, seuls L < paquets de k bits sont non nuls : I = (I I L ) et C = (C C L M ). Cette séquence codée tronquée est générée par un code en bloc linéaire dont la matrice génératrice est la sous matrice kl n(l M) des éléments situés en haut à gauche de G.. Mise en œuvre par registre à décalage et représentation polynomiale Notons g (l) αβ l élément générique de la matrice G l. En explicitant les n composantes C j,, C jn de C j dans la relation C j = M l= I j lg l, nous pouvons écrire : [ M ] k k C j = [C j,, C jn ] = l= α= I j l,α g (l) α,, M l= α= I j l,α g (l) αn Le bit codé C jβ = k M α= l= I j l,αg (l) αβ ne dépend que de l entrée présente I j et des M valeurs passées de l entrée I j,, I j M. Ainsi, le calcul des bits codés C jβ peut être réalisé pratiquement en mémorisant M valeurs passées de l entrée dans des registres à décalage (un registre α k par bit du mot de longueur k présent en entrée). Pour le registre α d une telle construction, seules sont connectées à l additioneur β n les cases mémoire pour lesquelles g (l) αβ =. Exemple.. La figure (.) illustre la mise en œuvre d un code convolutif simple à l aide de registres à décalage. Pour cet exemple, le rendement du code vaut / (k =, n = ). La relation de convolution vectorielle (.) peut-être décomposée en convolutions scalaires ; chacune d elle correspond à un filtre linéaire à réponse impulsionnelle finie qui peut être représenté par sa fonction de transfert polynomiale. Les polynômes du code présent valent P (D) = D D D et Q(D) = D D. La figure (.) indique une autre manière de représenter le codeur, cette représentation sera utilisée dans la suite de ce document. Exemple.. La figure (.) représente l implantation d un code convolutif de rendement / avec k =, n =, K = et : ( ) G = ( ) G = Nous illustrerons la suite de l exposé à l aide du code représenté figure (.). Ce code de rendement / (k =, n = ) est défini par G = ( ), G = ( ) et G = ( ). Bien que cette troncature réduise le rendement à r = r L LM, le rendement est pratiquement très voisin de r = k n du fait que L est grand devant M. Nous appelerons toujours rendement le rapport r = k n.
6.6 Diagramme en treillis C j D D D entrée I j k = D D D G G G G D D sorties C j,c j n = C j Fig.. Exemple de code convolutif mis en œuvre à l aide de registres à décalage. Paramètres : k =, n =, K = M =. G = [], G = [], G = [], G = []. Polynômes : P (D) = D D D et Q(D) = D D..5 Le codeur est un automate fini L état du codeur est défini par le contenu des registres à décalage. La figure (.5) présente un exemple d évolution de l état des registres à décalage : à chaque étape, les valeurs sont décalées d une case vers la droite, le contenu de la case la plus à droite est perdue (mémoire finie de taille M) tandis qu une nouvelle entrée I j est affectée à la case la plus à gauche. La figure (.6) schématise l évolution de l automate. Ainsi, le codeur peut être représenté par une machine à état fini pilotée par les bits à encoder. L état peut prendre km valeurs distinctes. Sous l action de l une des k entrées I j possibles, chaque état à l instant j peut évoluer vers k nouvelles positions possibles à l instant j. Les flèches des transitions entre les états seront indexées par le couple (I j, C j = g(i j, q j )). Exemple.5. La figure (.7) représente le diagramme de transition de la machine à état fini associée au code de paramètre G = [G, G, G ] = [], k =, n =, K = de la figure (.). L état q j peut prendre un nombre fini de valeurs (Ici km = = valeurs)..6 Diagramme en treillis Le temps n apparaît pas dans le diagramme de transition. Le diagramme en treillis est une variante du diagramme de transition constituée d une infinité de répliques d un module de base représentant les valeurs possibles de l état à un instant donné, les transitions possibles entre un instant et le suivant ainsi que les nouvelles valeurs possibles de l état à l instant suivant. Exemple.6. La figure (.8) donne le module de base du treillis associé au code de la figure (.).
.6 Diagramme en treillis 7 C j I j I j, I j, I j, I j, C j Fig.. Représentation alternative à celle de la figure (.). Exemple de code convolutif mis en œuvre à l aide de registres à décalage. Paramètres : k =, n =, K = M =. G = [], G = [], G = [], G = []. Polynômes : P (D) = D D D et Q(D) = D D. C j I j = I j, I j C j C j G = G = Fig.. Réalisation d un code convolutif de rendement / Remarque.6. Bien qu il soit également possible d associer un treillis à un code en bloc, cette approche est beaucoup moins utilisée que pour les codes convolutifs du fait que le treillis associé n est pas régulier..6. Chemin dans le treillis A chaque séquence en entrée du codeur correspond un chemin unique dans le treillis (et inversement). Ainsi, estimer la séquence d entrée revient à estimer un chemin dans le diagramme en treillis. Par exemple, pour le code de la figure (.), à condition que l état initial du codeur soit, la séquence d entrée [ ] engendre la séquence codée [ ]. Le parcours du treillis associé à cette entrée est représenté sur la figure (.9). Notons que M = zéros sont ajoutés à la séquence à encoder afin de ramener l état du codeur à sa position neutre () initiale. Plus généralement, l automate part d un état neutre s, parcourt ensuite le treillis en étant piloté par la séquence à encoder avant d être finalement ramené à l état neutre.
8.7 Algorithme de Viterbi C j I j I j, I j, I j, C j Fig.. Code convolutif de rendement / (k =, n = )..7 Algorithme de Viterbi.7. Détection optimale et modèle de canal Etant donnée une observation (y) de la sortie (C) du codeur entachée d erreurs, comment est-il possible d estimer le message transmis en commettant aussi peu d erreurs de décision que possible? L mots de k bits étant transmis, la sortie du codeur se compose de LM mots de n bits. En supposant le canal sans mémoire, le décodeur observe L M paquets y j de n valeurs. Notons cette observation y = (y,, y LM ) avec y j = (y j,, y jn ). Le critère du maximum de vraisemblance est celui qui minimise la probabilité d erreur lors de la détection : la séquence C optimale est celle qui maximise P (y C) ou de façon équivalente log P (y C) puisque la fonction log est monotone. Précisons maintenant la nature du lien statistique qui rattache y à C. Deux cas particuliers sont fréquemment considérés : Observations continues. Ce cas correspond typiquement au canal à bruit blanc additif gaussien pour lequel les valeurs y jl s écrivent y jl = C jl n jl où les n jl sont des v.a. gaussiennes indépendantes de même loi. Observations discrètes, à valeurs dans un ensemble fini. Deux exemples classiques : Canal Binaire Symétrique. Si deux valeurs sont possibles pour chaque variable y jl, le canal est dit binaire. On considère fréquement le canal binaire symétrique pour lequel y jl = C jl avec probabilité p et y jl C jl avec probabilité d erreur p. Canal à effacement. Lorsque plus de deux valeurs sont observables, un surcroît d information est disponible. C est le cas des codes à effacement ( valeurs)..7. Mise en œuvre efficace par l algorithme de Viterbi L algorithme de Viterbi fournit un moyen efficace d estimer la séquence présente en entrée selon le critère du maximum de vraisemblance. Etant donnée la bijection entre mots de code et chemin dans le treillis, la log-vraisemblance en sortie
.7 Algorithme de Viterbi 9 Instant j Instant j q j q j q j = f(i j, q j ) Registres à décalage I j X Etat q j I j I j Etat q j Registres à décalage I j I j Etat q j q j = f(i j, q j ) C j C j = g(i j, q j ) Fig..5 Evolution de l état q j du registre à décalage sous l action de l entrée e j. Fig..6 Le nouvel état q j et la nouvelle sortie C j sont calculés en fonction de l état présent q j et de la valeur entrante I j. (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) j Temps j Fig..7 Machine à état fini associée au code convolutif de la figure (.). Fig..8 Couches j et j du treillis associé au code de la figure (.).
.7 Algorithme de Viterbi (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) Séquence transmise : Séquence codée : Fig..9 Treillis du code de la figure (.) pour une séquence d entrée débutant en finissant en l état neutre s =. d un canal sans mémoire factorise : log P (y C) = LM j= log P ( LM ) y j C C j = j= log P ( y j s j s j ) où s j s j désigne la branche du treillis (entre l état s j au temps j et l état s j au temps j ) associée au mot C j. La quantité l j (s j, s j ) = log P ( y j s j s j ) est appelée métrique de branche. Exemple.7. A titre d exercice : Canal binaire symétrique. Montrer que la métrique de branche est la distance de Hamming entre le mot reçu y j et la sortie du codeur C rs associée à la branche r s. Canal gaussien. Quelle est la métrique de branche? D après ce qui précède, la vraisemblance est fonction du chemin suivi dans le treillis. Pour trouver le chemin qui maximise la vraisemblance, l algorithme de Viterbi procède de la façon suivante. Pour chaque état s de la couche j du treillis, l algorithme calcule un chemin p j (s, s) débutant en s et finissant en s à la couche j qui extrêmise la métrique cumulée (aussi appelée métrique de chemin) w j (s) = j l= l(s l, s l ). Le passage d une couche à la suivante suivante (j j ) s effectue selon : w j (s) = max r E(s) [w j(r) l j (r, s)] avec E(s) l ensemble des antécédents de s. En pratique la séquence est estimée avec un retard fixé (en général plusieurs fois la longueur de contrainte du code)..7. Illustration du fonctionnement de Viterbi sur un exemple A titre d exemple, illustrons maintenant le fonctionnement de l algorithme de Viterbi pour le codeur de la figure (.) dont le diagramme d état est donné en figure (.7)). Le codeur est initialement à l état neutre. Soit la séquence informative. Théoriquement, il faudrait remonter jusqu au point du passé où les chemins optimaux fusionnent
.7 Algorithme de Viterbi Tab.. Codage par la machine à état fini. (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,)
.7 Algorithme de Viterbi Codage par la machine à état fini. La table. illustre le processus de codage par la machine à état fini. La première valeur qui entre dans le codeur est I =. D après le diagramme de la figure (.7), cette entrée active la transition indexée par le couple (, ) : l entrée engendre la sortie C = (). Cette transition fait passer de l état à l état. De même, l entrée suivante (I = ) active la transition (, ) qui génère la sortie C = () et place à nouveau le système dans l état. Le dernier bit informatif active la transition (, ), génère la sortie C = () et place le système dans l état. Deux zéros sont alors introduits en entrée pour ramener le codeur à l état neutre dans lequel il se trouvait initialement : Le premier zéro active la transition (, ), génère la sortie C = () et place à nouveau le système dans l état. Le dernier zéro active la transition (, ), génère la sortie C = () et place à nouveau le système dans l état. En résumé la séquence informative est codée en une séquence : [C, C, C, C, C ] = [,,,, ] Transmission Supposons que la séquence codée soit transmise sur un canal binaire symétrique et qu elle soit affectée par deux erreurs de transmission, de telle sorte que la séquence reçue soit : [y, y, y, y, y ] = [,,,, ] Décodage par l algorithme de Viterbi Illustrons maintenant le fonctionnement de l algorithme de Viterbi pour cette séquence reçue. Le schéma global du fonctionnement de l algorithme est celui de la figure (.). Détaillons les différentes étapes de ce fonctionnement. Le détail du fonctionnement de l algorithme est donnée par la table.. Entrée y =. Le codeur est initialement dans son état neutre. Pour la première transition, l entrée de l algorithme de Viterbi est constituée des deux premières valeurs de la séquence reçue. Deux branches sont possibles (cf. tab.. ligne, colonne ) à partir de l état. L effet de chacune des deux entrées possibles est le suivant : active la transition (, ), la sortie correspondante diffère en un emplacement de la séquence reçue. active la transition (, ), la sortie correspondante diffère en un emplacement de la séquence reçue. La métrique de branche vaut donc pour chacune des branches (cf. tab.. ligne, colonne ). Etant donné, qu une seule branche aboutie à chacun des nœuds et, leurs labels sont égaux aux métriques de chemin, elles-mêmes égales à la métrique de branche (cf. tab.. ligne, colonne ). Entrée y =. Le codeur peut maintenant partir de l état ou de l état. Deux branches partent de chacun de ces états (cf. tab.. ligne, colonne ), pour chaque branche l algorithme compare l entrée et la deuxième partie du couple qui indexe la branche et porte la métrique de branche sur le graphe (cf. tab.. ligne, colonne ). La métrique de chemin est égale à la somme de cette métrique de branche avec la métrique de chemin jusqu au nœud précédent (cf. tab.. ligne, colonne ).
.7 Algorithme de Viterbi Entrée y =. Quatre nœuds de départ sont possibles, deux branches partent de chaque nœud (cf. tab.. ligne, colonne ). Ainsi, contrairement aux cas particuliers des deux entrées précédentes, les nœuds de la couche suivante sont atteints par plusieurs branches. L algorithme de Viterbi calcul la métrique de tous les chemins (cf. tab.. ligne, colonne ) et, pour chaque nœud de la couche suivante, ne conserve que les chemins de poids minimal (cf. tab.. ligne, colonne ). Entrées suivantes. L algorithme procède de la même manière jusqu à la fin de la séquence reçue (cf. tab..) pour finalement sélectionner le chemin de métrique minimale. La lecture de message décodé est alors réalisée en suivant l un des chemins optimaux. Ici, les index du chemin optimal sont (,), (,), (,), (,), (,). Les bits informatifs sont donnés par la première partie des couples, d où le message décidé par l algorithme de Viterbi : : les erreurs de transmissions ont été corrigées.
.7 Algorithme de Viterbi Tab.. Décodage par l algorithme de Viterbi. Les branches de transition sont indexées par des couples (entrée,sortie). Les métriques des branches sont encerclées, les métriques des chemins sont placées sur les branches, le label d un nœud correspond à la plus petite métrique de chemin jusqu à ce nœud. Chaque colonne décrit les phases de l algorithme pour l entrée d une donnée. Les lignes correspondent au message reçu : ( ) Transitions possibles Métriques de branche Métriques de chemin (, ) (, ) (, ) (,) (,) (,) (, ) (, ) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (,) (, ) (, ) (, ) (, ) (,) (,) (,) (, ) (, ) (, ) (,) (, ) (,) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (,) (,) (,) (,) (,) (, ) (,) (,) (,) (,) (,) (,) (, ) (,) (,) (,) (,) (,)
.7 Algorithme de Viterbi 5 Tab.. Décodage par l algorithme de Viterbi. Suite... Transitions possibles Métriques de branche Métriques de chemin (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (,) (,) 5 (, ) (, ) (,) (, ) (, ) (,) (, ) (, ) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (,) (, ) (, ) (, ) (, ) (,) 5 (,) 5 (,) 5 (, ) (, ) (,) (, ) (, ) (,) (, ) (, ) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,) (,)
6.7 Algorithme de Viterbi (, ) (, ) (, ) (, ) (, ) (,) (, ) (,) (, ) (, ) (,) 5 (, ) (, ) (,) (,) (,) (,) (,) (,) Légende q Arête indexée par le couple (entrée,sortie) Etat précédent Le chemin optimal associé est de poids q. (e,s) b qb Métrique cumulée (de chemin) = q b Métrique de branche q'b' p Etat (e',s') Poids p et état s du chemin optimal associé à ce noeud p = min(qb,q'b') Branche concurrente éliminée si q'b' > qb Fig.. Illustration du fonctionnement de l algorithme de Viterbi.