Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
ENCODING AND DECODING LINEAR CODE FROM LATTICES
Document Type and Number:
WIPO Patent Application WO/2015/107315
Kind Code:
A1
Abstract:
The invention relates to an encoding and decoding method using a linear error-correcting code (n,k), which comprises a computation phase with a plurality of stages and, for each stage, a computation step implementing a butterfly operator: in order to determine T i ⊗T j products of separate elementary lattices, each elementary lattice being obtained from one of the k lines of the generator matrix or one of the n-k lines of the parity check matrix; in order to compute, on a T i ⊗T j product lattice, a posteriori probabilities of the states of the T i ⊗T j product, knowing the probabilities of the states of the elementary lattices; and in order to calculate a posteriori probabilities of the states of each of the two lattices T /. and T. knowing the a posteriori probabilities of the states of the T i ⊗T j product lattice, the method comprising a phase of determining a posteriori probabilities associated with the symbols decoded from the a posteriori probabilities of the states of the k or n-k elementary lattices of the last stage.

Inventors:
CARLACH JEAN-CLAUDE (FR)
MOHAMED-MAHMOUD SENAD (FR)
Application Number:
PCT/FR2015/050130
Publication Date:
July 23, 2015
Filing Date:
January 19, 2015
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
ORANGE (FR)
International Classes:
H03M13/39
Foreign References:
EP2214322A12010-08-04
Other References:
CALDERBANK A R ET AL: "Minimal Tail-Biting Trellises: The Golay Code and More", IEEE TRANSACTIONS ON INFORMATION THEORY, IEEE PRESS, USA, vol. 45, no. 5, July 1999 (1999-07-01), XP011027374, ISSN: 0018-9448
CARLACH J C ET AL: "A new scheme for building good self-dual block codes", INTERNATIONAL SYMPOSIUM ON INFORMATION THEORY, IEEE, PISCATAWAY, NJ, USA, 25 June 2000 (2000-06-25) - 30 June 2000 (2000-06-30), pages 476 - 476, XP010510349, ISBN: 978-0-7803-5857-7
KOTTER R ET AL: "Construction of minimal tail-biting trellises", INFORMATION THEORY WORKSHOP, 1998 KILLARNEY, IRELAND 22-26 JUNE 1998, NEW YORK, NY, USA,IEEE, US, 22 June 1998 (1998-06-22), pages 72 - 74, XP010297326, ISBN: 978-0-7803-4408-2, DOI: 10.1109/ITW.1998.706441
LI YANPING ET AL: "New implementation for the scalable LDPC-decoders", PROCEEDINGS / 2004 IEEE 59TH VEHICULAR TECHNOLOGY CONFERENCE, VTC 2004-SPRING : TOWARDS A GLOBAL WIRELESS WORLD ; 17 - 19 MAY 2004, MILAN, ITALY, IEEE OPERATIONS CENTER, PISCATAWAY, NJ, vol. 1, 17 May 2004 (2004-05-17), pages 343 - 346Vol.1, XP010764816, ISBN: 978-0-7803-8255-8
YE LIU ET AL: "MAP Algorithms for Decoding Linear Block Codes Based on Sectionalized Trellis Diagrams", IEEE TRANSACTIONS ON COMMUNICATIONS, IEEE SERVICE CENTER, PISCATAWAY, NJ. USA, vol. 48, no. 4, April 2000 (2000-04-01), pages 577 - 587, XP011010820, ISSN: 0090-6778, DOI: 10.1109/26.843125
A.R. CALDERBANK; G.D. JR. FORNEY; A. VARDY: "Minimal Tailbiting Trellises: the Golay Code and More", IEEE TRANSACTIONS ON INFORMATION THEORY, vol. IT.45, no. 5, July 1999 (1999-07-01), pages 1435 - 1455
R.G. GALLAGER: "Low-Density Parity-Check Codes", IEEE TRANSACTIONS ON INFORMATION THEORY, vol. 8, January 1962 (1962-01-01), pages 21 - 28
G.D. FORNEY: "The Viterbi Algorithm", PROCEEDINGS OF THE IEEE, vol. 61, no. 3, March 1973 (1973-03-01), pages 268 - 278
L.R. BAHL; J. COCKE; F. JELINEK; R. RAVIV: "Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate", IEEE TRANSACTIONS ON INFORMATION THEORY, vol. IT-20, March 1974 (1974-03-01), pages 284 - 287
C. BERROU; A. GLAVIEUX; P. THITIMAJSHIMA: "Near Shannon Limit Error-Correcting Coding and Decoding: Turbo-Codes", PROCEEDINGS OF THE IEEE INT. CONF. ON COMMUNICATIONS (ICC'93, May 1993 (1993-05-01), pages 1064 - 1070
N. WIBERG: "Codes and Decoding on General Graphs", PH.D. THESIS, 1996
R.M. TANNER: "Minimum-distance bounds by graph analysis", IEEE TRANSACTIONS ON INFORMATION THEORY, vol. 47, February 2001 (2001-02-01)
TERRENCE L. FINE: "Probability and probabilistic reasoning for electrical engineering", PEARSON EDUCATION INTERNATIONAL, pages: 324 - 325
Download PDF:
Claims:
REVENDICATIONS

Procédé (1) de décodage d'une séquence d'échantillons reçus y par un décodeur correspondant, après transmission, à une séquence c codée de symboles cj, j = 0,1, · - , [n— l) , obtenue en appliquant au codage un code correcteur d'erreurs linéaires à des symboles source (x) mettant en œuvre une matrice à n colonnes et k lignes de symboles, les symboles appartenant à un alphabet donné, caractérisé en ce que ledit procédé comprend :

une phase de calcul à plusieurs étages, utilisant des treillis élémentaires Tj déterminés à partir des k lignes de la matrice, chaque treillis Ί\ étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états ({Pr(s )}, i = 0, 1, · · ·,(η— k— 1) ) comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon :

pour déterminer des produits ( Tt ®Tj ) de treillis élémentaires distincts, ( Tt , T.

. i≠j),

pour calculer sur un treillis produit (Tj ®Tj ) des probabilités a posteriori des états du produit de treillis ( 7 ®2) connaissant les probabilités des états

( des treillis élémentaires (Tt , T. ) du produit de treillis et pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis ( Tj Tj ) connaissant les probabilités a posteriori des états du treillis produit ( Tj ®T- ),

une phase de détermination de probabilités a posteriori associées aux symboles décodés à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage.

Procédé (1) de décodage selon la revendication 1 dans lequel l'étape de calcul met en œuvre au moins une itération de calcul des probabilités a posteriori des états du treillis produit ( Tj ®Tj ) connaissant les probabilités des états ({Pr(s )}, {Pr(sJ)}) des treillis élémentaires (7^, - - ) du produit et de calcul des probabilités a posteriori des états de chacun des treillis ( Tt , Tj ) du produit connaissant les probabilités a posteriori des états du treillis produit ( ®7 ). Procédé (1) de décodage selon la revendication 1 comprenant en outre une phase d'initialisation au cours de laquelle pour le 1er étage les probabilités des états des treillis élémentaires sont initialisées avec les probabilités a priori des symboles reçus et pour les étages suivants les probabilités d'états des treillis élémentaires sont initialisées à ½.

Procédé (1) de décodage selon la revendication 1 dans lequel le calcul des probabilités a posteriori des états du treillis produit ( t ®Tj ) comprend :

- une phase de propagation avant, consistant à propager des probabilités d'état le long des branches du treillis produit et

- une phase de propagation arrière, consistant à propager des probabilités d'état le long des branches du treillis produit.

Procédé (1) de décodage selon la revendication 1 dans lequel le calcul des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis (Ts et Γ. ) est effectué par marginalisation à partir des probabilités a posteriori des états du treillis produit (T. ®T. ).

Procédé (1) de décodage selon la revendication 1, dans lequel un treillis élémentaire correspond à au moins une ligne de la matrice.

Procédé (1) de décodage selon la revendication 1 dans lequel un treillis élémentaire correspond à une ligne de la matrice et dans lequel le nombre d'étages est l'arrondi par valeur supérieure de Log(2,k).

8. Procédé ( 1) de décodage selon la revendication 1 dans lequel l' alphabet est binaire.

9, Procédé (1) de décodage selon la revendication précédente, dans lequel la cellule de base cello associée à un bit de la matrice égal à zéro est la suivante :

et la cellule de base cellj associée à un bit de la matrice égal à un est la suivante :

10. Procédé (1) de décodage selon la revendication précédente dans lequel le produit de treillis élémentaires est défini à partir des produit des cellules de base : cell0 ® cell0 , cell0 ® cell , cell ® cell0 et cell{ ® respectivement égaux à :

11. Utilisation d'un procédé de décodage selon l'une des revendications 1 à 10 combinée à la revendication 8 pour décoder un code de Hamming (8,4,4) telle que le nombre d'étages est de deux et l'ensemble des indices des treillis des couples de treillis forme les permutations suivantes :

12. Décodeur d'une séquence d'échantillons reçus y correspondant, après transmission, à une séquence c codée de symboles cj, j = 0,1,· ·, {η— 1) , obtenue en appliquant au codage un code correcteur d'erreurs linéaires à des symboles source (x) mettant en œuvre une matrice à n colonnes et k lignes de symboles, les symboles appartenant à un alphabet donné, caractérisé en ce que le décodeur comprend :

un moyen de calcul adapté pour effectuer un calcul à plusieurs étages, utilisant des treillis élémentaires déterminés à partir des k lignes de la matrice, chaque treillis T, étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon pour déterminer des produits ( Tj ®T- ) de treillis élémentaires distincts (T T. avec i≠ y ), pour calculer sur un treillis produit ( Tj ®Tj ) des probabilités a posteriori des états du produit de treillis T: ®Tj ) connaissant les probabilités des états des treillis élémentaires (T: , Tj ) et pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis {Tt , -Γ- ) connaissant les probabilités a posteriori des états du treillis produit ( Ti ®T. ),

un moyen de calcul adapté pour déterminer des probabilités a posteriori associées aux symboles décodés à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage.

13. Procédé de codage de k symboles source (x) délivrant une séquence c codée de symboles Cj, J = 0, 1, · -, (iî— l) , obtenue en appliquant un code correcteur d'erreurs linéaires mettant en œuvre une matrice à n colonnes et k lignes de symboles, les symboles appartenant à un alphabet donné, caractérisé en ce que le procédé comprend :

une phase de calcul à plusieurs étages, utilisant des treillis élémentaires T déterminés à partir des k lignes de la matrice, chaque treillis T; étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états ({i (st(r£))}), comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon :

pour déterminer des produits ( T,- ®Tj ) de treillis élémentaires distincts (Ti t T- ,

- pour calculer sur un treillis produit ( Tj ®Tj) des probabilités a posteriori des états du produit de treillis (Tf ®Tj ) connaissant les probabilités des états ({Pr(st( £))}) des treillis élémentaires (7T, T. ) du produit de treillis et pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis (T Γ- ) connaissant les probabilités a posteriori des états du treillis produit ( Tj ®Tj ),

une phase de détermination de probabilités a posteriori associées aux symboles codés Cj à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage,

une phase d'initialisation au cours de laquelle pour le 1er étage les probabilités des états des treillis élémentaires sont initialisées avec les k symboles source et avec n-k probabilités égales à ½ représentant les symboles de redondance.

14. Codeur de k symboles source (x) délivrant une séquence c codée de symboles cj, j— 0,1, · · ·, («— 1) , obtenue en appliquant un code correcteur d'erreurs linéaires mettant en œuvre une matrice à n colonnes et k lignes de symboles, les symboles appartenant à un alphabet donné, caractérisé en ce que le codeur comprend :

un moyen de calcul adapté pour effectuer un calcul à plusieurs étages, utilisant des treillis élémentaires T, déterminés à partir des k lignes de la matrice, chaque treillis T; étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états ({Pr(st(Ti))}), comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon :

pour déterminer des produits ( Tt- ®Tj ) de treillis élémentaires distincts (!7J, T- , i≠j ),

pour calculer sur un treillis produit ( Tj ®Tj ) des probabilités a posteriori des états du produit de treillis { T} ®Tj ) connaissant les probabilités des états des treillis élémentaires {T; , Tj ) du produit de treillis et pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis ( 7^, Γ- ) connaissant les probabilités posteriori des états du treillis produit ®7j ),

un moyen de calcul adapté pour déterminer des probabilités a posteriori associées aux symboles codés q à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage,

un moyen de calcul adapté pour initialiser les probabilités des états des treillis élémentaires du 1er étage de calcul avec les k symboles source et avec n-k probabilités égales à ½ représentant les symboles de redondance.

Description:
CODAGE ET DÉCODAGE DE CODE LINÉAIRE À PARTIR DE TREILLIS

Domaine de l'invention

Le domaine de l'invention est celui du codage et du décodage de symboles, mettant en oeuvre un code correcteur d'erreurs.

L'invention se rapporte plus particulièrement aux techniques de codage de symboles source, délivrant des paquets de symboles codés ou un flux de symboles codés comprenant les symboles source et des symboles de redondance, destiné(s) à être transmis sur un canal de transmission (par exemple aérien ou filaire de type hertzien, optique ou électrique), ou stocké(s) dans un support matériel. L'invention se rapporte également aux techniques de décodage correspondantes, permettant notamment de corriger les erreurs de transmission inhérentes au canal de transmission.

L' invention trouve notamment des applications dans les domaines suivants :

la transmission d'information par télécommunications filaires électriques, comme dans les normes ADSL, ou optiques, sur fibres optiques ou en espace libre ;

la transmission d'information dans les communications radios spatiales et terrestres sans fil (« wireless » en anglais), comme dans les systèmes de télévision numérique TNT, de radio numérique DAB, de téléphonie GSM ou UMTS, de réseau radio WiFi, et aussi dans les futurs systèmes de télécommunications, comme les futures normes pour des applications de télévision, de diffusion radio, de voix, de vidéo et de données (DVB, LTE, 4G, 5G,etc), « Internet du futur », ou entre véhicules, objets ou machines communicants ... ;

la compression et la décompression de source d'informations ;

la génération et la détection de séquences dites d'embrouillage (« scrambling » en anglais) dans les systèmes CDMA ;

le stockage d'informations dans des mémoires de masse magnétiques, optiques, mécaniques ou électriques pour constituer des disques durs, ou des mémoires vives d'ordinateurs, ou des clés mémoire à interface de type USB... ;

la correction d'informations lors des calculs dans un circuit intégré d'un microprocesseur ou dans un ordinateur ;

la reconnaissance de formes : images, sons, etc

la robotique commandée par une intelligence artificielle à base de réseaux de neurone. Art antérieur

De nombreuses techniques de codage permettent la correction d'erreurs de transmission au décodage en générant des symboles de redondance à partir de symboles source.

Ainsi, un code correcteur d'erreur est classiquement défini par :

une longueur n, correspondant aux symboles en sortie du codeur (mot de code de longueur n formé de k symboles source et de (n - k) symboles de redondance),

un nombre de bits ou de symboles d'information utiles k, correspondant aux symboles en entrée du codeur, encore appelées symboles source, et

une distance minimale d^.

La distance minimale d'un code d m i n correspond au minimum de distance entre deux mots de code. Elle permet de déterminer le nombre maximum d'erreurs que le code peut corriger dans un mot de code.

Ainsi, plus la distance minimale dmin est grande, meilleur est le code correcteur d'erreurs, puisqu'il permet de détecter (d m i n - l) symboles erronés et d'en corriger [(ίίηύη ^J ° u l'opérateur désigne la partie entière).

Calderbank-Forney-Vardyfl] ont décrit la construction de treillis élémentaires. Les treillis élémentaires sont construits à l'aide des lignes soit d'une matrice génératrice G, soit d'une matrice de contrôle de parité H du code en bloc.

Un code en bloc C(n,k) est défini par une matrice génératrice G de dimensions k x n composée de k lignes et de n colonnes telle que pour tout bloc d'information x = χ 0 ,Χχ, ...

le mot de code c = (c 0 , c lt ... , c n--1 ), obtenu par codage c'est-à-dire le produit vecteur-matrice de x et G est donné par :

c = x. G (mod 2)

où la matrice G est telle que :

Les lignes g t de la matrice G sont appelées générateurs et le mot de code c est donc obtenu en faisant la somme pondérée des g; par les bits d'informations utiles Xj :

fc-l

c = ^ x t 9i

£=0

Chaque ligne g t génère un sous-code de C noté C g Soit Ti le treillis correspondant au code C gi alors le treillis global T représentant le code C est obtenu par le produit de tous les k treillis élémentaires :

Les treillis T { sont des treillis élémentaires à deux états. Chaque treillis représente deux mots de code : le mot de code zéro correspondant au bit d'information x t = 0 et le mot de code g j correspondant au bit d'information x t = 1. Chaque treillis élémentaire est donc composé de deux chemins représentant ces deux mots de code. Dans le cas d'une matrice G génératrice du code, la construction d'un treillis élémentaire et le produit de deux treillis sont décrits à partir de l'exemple du code de Hamming (n= 7, k=4, d m j n = 3) dont une matrice génératrice G 4x7 est donnée par :

Ό 1 1 0 1 0 0>

1 0 1 1 0 0 0

¾X7— 1 0 1 0 1 1 0

α ο ο ο ι ο

Un treillis élémentaire T j représente la ième ligne dans la matrice génératrice G du code. La figure 1 représente le treillis élémentaire 7^ correspondant au générateur gi dans le cas d'une matrice génératrice. Pour le code de Hamming (7,4,3) précédent, les deux treillis élémentaires associés aux deux premières lignes de sa matrice génératrice ci-dessus sont représentés aux figure 2 et 3. La figure 2 représente le treillis élémentaire T Q qui correspond au générateur g 0 = 0110100. La figure 3 représente le treillis élémentaire 7 qui correspond au générateur g = 1011000.

Soient deux treillis élémentaires Tj et T, (i≠ j) définis tels que:

T, = {(sie Î sr 1 )}.

Tj = ίΟί Γ )}·

Le produit de ces deux treillis élémentaires noté T;®Tjest défini par:

W^ KC s f.sfJ. CefeeO. Cs S sH)}-

Le produit de deux treillis effectue donc le produit cartésien de leurs états et la somme les étiquettes de branches de transition entre ces états. Le treillis-produit T Q ®^ résultant du produit des deux treillis élémentaires T 0 et T j représentés respectivement sur les Figures 2 et 3 est représenté par la figure 4. La figure 4 représente le produit T Q ®^ des deux treillis T 0 et T-L précédents dans le cas d'une matrice génératrice.

Les treillis élémentaires peuvent tout aussi bien être construits à partir de la matrice de contrôle de parité du code. Une matrice de contrôle H d'un code en bloc C(n,k) est une matrice de taille (n— k) x n. H est définie telle que pour tout mot de code c de C, elle vérifie :

0 (mod 2).

A chaque ligne de H est associé un treillis élémentaire à deux états 7j. Le treillis global T représentant le code C est obtenu par le produit cartésien de tous les (n-k) treillis élémentaires :

Dans le cas d'une matrice de contrôle H du code, la construction d'un treillis élémentaire et le produit de deux treillis sont décrits à partir de l'exemple du code de Hamming n= 8,k=4, d-min— 4) dont une matrice de contrôle ¾ x8 est donnée par : Un treillis élémentaire Tj représente la ième ligne de la matrice de contrôle H du code. Chaque treillis élémentaire est constitué par une suite des sections « section 0 » et « section 1 » selon les valeurs de bits d'une ligne ou générateur de la matrice H définit par les figures 5a et 5b. Les figures 5 a et 5b représentent respectivement les sections associées aux deux valeurs de bit (bit= 0 et bit =1) d'une ligne de la matrice de contrôle H du code. Pour l'exemple du code de Hamming(8,4,4) précédent, les deux treillis élémentaires associés aux deux premières lignes de sa matrice de contrôle sont représentés respectivement par les figures 6a et 6b. La figure 6a représente le treillis élémentaire T 0 correspondant au générateur 10000111. La figure 6b représente le treillis élémentaire T correspondant au générateur 01001011.

Le produit de deux treillis élémentaires associés à deux lignes d'une matrice de contrôle est défini ci-après. Soient deux treillis élémentaires Tj et T j (i≠ j) définis tels que:

T i = {(si, ef jS )} et Ti = {(sf, ef,s )}.

Le produit de ces deux treillis élémentaires d'une matrice de contrôle noté Tj®T j est défini par :

Τ,βΓΓ, = {((sf, sj), (ef, e[), ef .

Le produit de deux treillis effectue donc le produit cartésien de chacune des trois composantes des triplet-branches mais en supprimant les branches si e[≠ ef. Le treillis-produit T 0 ®T 1 résultant du produit des deux treillis élémentaires T 0 et Tj représentés respectivement sur les figures 6a et 6b est représenté par la figure 7.

La première méthode de décodage rigoureusement optimale connue consiste à trouver de façon exhaustive parmi tous les mots c, appartenant au code C, celui qui est le plus proche du mot reçu. Cette méthode donne en sortie des valeurs discrètes de symboles après décision, 0 ou 1 si l'alphabet est binaire, elle est dite à décision "dure" (hard). Cette méthode de décodage exhaustive est de complexité exponentielle en 2^ , où k est la dimension du code, et donc très coûteuse et difficile à réaliser. Et donc elle ne permet pas de décoder actuellement en temps réel les codes de dimensions supérieures à environ k>24.

Parmi les méthodes de décodage des codes correcteurs linéaires utilisant des informations douces, il est connu l'algorithme de Viterbi [3], Cet algorithme est utilisé pour le décodage en temps réel des codes convolutifs et plus généralement pour le décodage de tous les codes décrits par un treillis. L'algorithme de Viterbi consiste à chercher le plus court chemin dans un arbre élaboré à partir du treillis du codeur. Ce chemin correspond donc à la séquence la plus probable c'est-à-dire qui est à la distance minimale de la séquence reçue. Cette séquence reçue qui correspond au mot reçu à décoder, est par exemple une séquence de n données binaires (décision dure). La séquence reçue peut être différente de la séquence codée issue du codeur compte tenu d'erreurs introduites lors de la transmission entre le codeur utilisé à l'émission et le décodeur utilisé à la réception.

L'arbre utilisé au décodage dans le cas d'un codeur convolutif a une dimension « verticale » égale au nombre d'états possibles du codeur, soit 2 m , m étant la longueur de contrainte du code, c'est-à-dire le nombre d'éléments mémoires utilisés lors du codage, et une dimension « horizontale » appelée profondeur. A chaque nouvelle entrée d'un groupe de données binaires de la séquence reçue, l'algorithme construit selon une phase dite avant (« forward ») une nouvelle section de l'arbre à partir de chaque nœud d'arrivée de la section précédente pris comme nœud de départ et jusqu'aux nœuds d'arrivée de la nouvelle section. Pour chaque nœud courant pris parmi les nœuds de départ de la nouvelle section de l'arbre, l'algorithme examine toutes les branches possibles du treillis et pour chaque branche il détermine une métrique de transition qui est la distance entre l'étiquette de la branche et le groupe de données binaires reçu par le décodeur. A chaque nœud d'arrivée, s'il y a plusieurs branches qui y arrivent, l'algorithme ne garde que la branche qui donne la distance minimum ; l'algorithme élimine systématiquement un chemin parmi deux chemins possibles atteignant chaque nœud d'arrivée. L'algorithme attribue au nœud d'arrivée, à l'extrémité du chemin constitué d'une succession de branches, une métrique cumulée égale à la somme de la métrique cumulée précédente et de la métrique de transition de la branche retenue. Quand la séquence de n données binaires reçue a été parcourue entièrement, l'algorithme ne retient que le nœud d'arrivée auquel est attribuée la métrique cumulée la plus faible. En remontant l'arbre à partir de ce nœud au cours d'une phase de remontée dite «des survivants», l'algorithme détermine le meilleur chemin en effectuant une lecture à rebours des décisions prises. Le principe de base de l'algorithme de Viterbi est en effet de ne considérer en chaque nœud de l'arbre que le chemin le plus probable de façon à permettre de remonter aisément le treillis et donc de déterminer a posteriori une estimation de la valeur reçue plusieurs instants de réception auparavant.

Cet algorithme de Viterbi utilise en entrée des informations dures (i.e des symboles) ou des informations douces (i.e. les valeurs échantillonnées du signal reçu) mais ne délivre en sortie que des informations dures (i.e des symboles) : on dit que c'est un algorithme de décodage "Soft-In- Hard-Out".

Dans le cas d'un codeur convolutif binaire non-récursif, le treillis est formé de nœuds reliés par des branches. Les nœuds représentent les différents états possibles du codeur ; il y a 2 m états si le vecteur d'état, c'est-à-dire la longueur de la mémoire du codeur, est de dimension m. Les branches représentent les différentes transitions possibles d'un nœud à un autre (c'est-à-dire d'un état du codeur à l'état suivant du codeur) lors de l'arrivée d'un bit d'entrée. De chaque nœud, il part deux branches associées respectivement à l'arrivée d'un « 0 » ou d'un « 1 » en entrée du codeur.

L'état du codeur à l'instant t est représenté par le vecteur d'état ^ sj, ... , S j 771- l' '). A chaque arrivée d'un élément binaire x t en entrée du codeur, le codeur génère en sortie un mot de code

(cç , c , ... , Cf 771-1 '' l'étiquette affectée à la branche se compose de l'élément binaire d'entrée x t et du mot de code ( ° , c , ... , c 1 J J. Juste après le codeur passe dans l'état suivant représenté par le vecteur d'état (s t+l' S t+l> '" ' S t+1 La figure 8 représente un exemple d'un codeur convolutif avec m égal à deux. La figure 9 représente une section de treillis du codeur convolutif de la figure 8. Le treillis d'un codeur convolutif ayant 2 m états, selon l'exemple le treillis a quatre états compte tenu que m égal deux, et la machine d'état étant invariante dans le temps toutes les sections sont identiques. Les états sont indiqués pour l'état initial et l'état final, les valeurs des entrées x t et des sorties codées (c°, c ) sont notées en étiquettes sur les branches transitant entre deux états.

Ainsi, chaque mot de code est représenté par un chemin différent dans le treillis. La composition du mot de code est la concaténation des étiquettes des branches qui constituent le chemin trouvé, c'est-à-dire le plus court chemin. La figure 10 représente un treillis formé en aboutant trois sections identiques à la section représentée à la figure 9. La succession des traits en gras représente un exemple de chemin (100, 010, 001), c'est-à-dire que pour la séquence d'entrée (100) le mot codé obtenu est (001001) en partant de l'état initial (10) et en arrivant à l'état final (00).

Une variante de cet algorithme de Viterbi a été publiée en 1974, elle est dite "BCJR" [4]

(acronyme du nom de ses inventeurs: Bahl, Cocke, Jelinek et Raviv). Cette variante utilise en entrée des informations douces (probabilités a priori) mais délivre en sortie des informations douces ou probabilités a posteriori pour chacun des bits : on dit que c'est un algorithme de décodage "Soft-In-Soft-Out" ou "SISO". Dans ce cas, il y a deux phases de parcours du treillis : une phase « forward » (respectivement une phase « backward ») qui accumulent les probabilités des états dans le sens des indices croissants t=0,l,..., n-1 des sections (respectivement dans le sens des indices décroissants t=n-l,n-2, 1,0) et une phase finale qui fusionne les probabilités d'état des phases forward et backward avec la probabilité a priori de chaque bit pour calculer la probabilité a posteriori de chaque bit.

Les algorithmes de Viterbi et BCJR présentent une complexité trop grande due à la trop grande complexité des treillis et notamment de leurs trop grands nombres d' états et ce, même pour des codes ayant de modestes capacités de correction d'erreurs. Par exemple, un code (n=96,k=48,dmin=16) aurait un treillis tail-biting minimal de 2 12 =4096 états. Dans l'algorithme BCJR les probabilités d'état « forward » sont notées a t (m) et calculées telles que ci-dessous, et les probabilités a priori de branche notées Yt( n, m ) pour une transition de l'état m vers l'état m' dans la section d'indice t : a t (m) =∑ m '£r t _ 1 (m')y t: (m J m'). De même les probabilités d'état « backward » sont notées ?t(m) et calculées telles que : =∑ m t+1 (m')7 i (7 i m').

Finalement, les probabilités a posteriori des bits sont calculées telles que :

Pr ap p (bit t = v) =∑ (in m -| i)££=v) œ t (m)r t (m, m ' )^ t (m') Parmi les techniques de décodage connues à décision douce permettant la correction d'erreurs de transmission, on distingue celle de Claude Berrou et Alain Glavieux de 1991 qui est une méthode de décodage itératif à décision douce des "Turbo codes" [5] dite SOVA et celle associée au décodage des codes LDPC. La base du décodage à décision douce des Turbo codes et des codes LDPC est l'algorithme à propagation de probabilités ou "BP" (Belief Propagation) [2] inventé par Robert Gallager en 1961. Cet algorithme BP propage des probabilités le long des branches d'un graphe du code et les agrège sur les nœuds de ce même graphe. Ce graphe associé au code est appelé graphe de Tanner [6] du code, il représente toutes les contraintes algébriques que doivent satisfaire les symboles d'un mot de code.

Les turbo-codes et les codes LDPC (en anglais « Low-Density Parity Check ») présentent de très bonnes performances en termes de correction d'erreurs pour des codes de grande longueur n, avec n de l'ordre de quelques milliers de bits au moins (n > 1000).

En revanche, les turbo-codes et les codes LDPC présentent des performances plus faibles pour des codes de plus petite longueur n (n < 1000) dits codes courts.

Ceci est en partie dû au fait que l'algorithme de propagation de probabilités BP utilisé au décodage ou ses variantes, devient sous-optimal au fur et à mesure que la longueur minimale des cycles diminue. On rappelle qu'un cycle correspond à un chemin fermé dans un graphe de Tanner représentant les contraintes que doivent remplir les symboles d'un mot pour être un mot du code. La notion de graphe de Tanner est bien connue, et notamment décrite dans l'article [7]. En effet, cet algorithme BP est optimal uniquement sur un graphe ayant la topologie d'un arbre ou d'une forêt d'arbres, la présence de cycles courts dégrade fortement les performances de l'algorithme BP de décodage itératif à décision douce.

Un tel algorithme de propagation de probabilités n'est donc pas efficace pour des codes ayant des matrices génératrices très denses (i.e. ayant beaucoup de bits à 1) et donc pour des codes ayant d'excellentes distances de Hamming minimum relatives δ = d m[n I n .

De plus, pour un usage industriel, l'optimisation des codes correcteurs d'erreurs comprend la minimisation des complexités de codage et de décodage en termes de coûts de matériel et d'énergie consommée. Or ces problèmes d'optimisation du décodage des codes correcteurs d'erreurs sont encore plus difficiles à résoudre quand les longueurs des codes sont petites à moyennes, c'est-à-dire de l'ordre de n < 1000.

II existe donc un besoin pour une nouvelle technique de décodage des bons codes correcteurs d'erreurs notamment, c'est-à-dire des codes correcteurs d'erreurs présentant une distance minimale la plus grande possible, et présentant notamment des cycles très courts.

Exposé de l'invention

L'invention propose un procédé de décodage à décision douce de symboles codés, comprenant des symboles source et des symboles de redondance. Ces symboles de redondance sont obtenus en appliquant, au codage, un code correcteur d'erreurs (n, k) aux symboles source, mettant en œuvre une matrice génératrice G de taille k.n ou une matrice de contrôle de parité H de taille (n- k).n.

Selon l'invention, le procédé comprend :

une phase de calcul à plusieurs étages, utilisant des treillis élémentaires Tj déterminés à partir des lignes de la matrice, chaque treillis Tj étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon :

- pour déterminer des produits de treillis élémentaires distincts, pour calculer sur un treillis produit des probabilités a posteriori des états du produit de treillis connaissant les probabilités des états des treillis élémentaires du produit de treillis et

pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis connaissant les probabilités a posteriori des états du treillis produit,

une phase de détermination de probabilités posteriori associées aux symboles décodés à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage.

L'invention propose ainsi une nouvelle technique de décodage de symboles codés à l'aide d'un code correcteur d'erreurs fournissant des décisions douces a posteriori par bit tout en ayant une complexité qui augmente de façon polynomiale ou quadratique car fonction de k 2 et qui, par conséquent n'explose pas de façon exponentielle, c'est-à-dire en 2 k , avec la dimension k du code contrairement aux méthodes connues.

En effet, le procédé selon l'invention n'effectue pas le produit de k treillis élémentaires entre eux pour obtenir un treillis produit global à 2 k états comme décrit par exemple par [1].

En fonction du mode de réalisation, chaque treillis élémentaire correspond à une ligne de la matrice ou résulte du produit d'au moins deux lignes avec pour contrainte que la phase de calcul a au moins deux étages donc k≥ 8 si un treillis élémentaire est le produit de deux lignes. Dans un alphabet binaire, un treillis élémentaire a donc 2 m états avec m le nombre de lignes participant au produit pour obtenir le treillis élémentaire.

Selon l'invention, le procédé effectue pour un étage donné des produits portant uniquement sur au moins deux treillis élémentaires distincts. L'opérateur papillon est un opérateur de calcul qui par un calcul de probabilité a posteriori des états sur le produit d'au moins deux treillis assure une interaction entre ces treillis élémentaires distincts. En outre, de manière particulièrement notable le procédé n'utilise pas en interne des probabilités extrinsèques sur les bits des mots de code mais détermine des probabilités a posteriori d'états. Cette caractéristique fondamentale permet d'obtenir des estimations optimales de probabilités de bits uniquement à la fin de l'algorithme et permet ainsi de s'affranchir du problème des cycles courts dans un graphe de Tanner du code mis en œuvre dans les méthodes connues de décodage de type « Belief-Propagation » telles qu'utilisées pour les Turbo codes et les codes LDPC et permet donc de décoder en temps réel des codes de petites longueurs (n<1000).

La propagation de probabilité d'états est fondamentalement différente de la propagation de probabilité de bits existant dans un algorithme classique de type « Belief Propagation », et permet un décodage facilité des codes quelle que soit leur longueur.

En outre, l'invention permet de diminuer le nombre d'itérations mises en œuvre au décodage en particulier comparativement à un algorithme de type propagation de probabilités (« Belief Propagation »).

Du fait de cette structure en treillis élémentaires qui permet d'effectuer une estimation des probabilités a posteriori d'états de ces treillis élémentaires, l'estimation récursive des probabilités d'états de ces treillis élémentaires est insensible aux cycles dans le réseau d'opérateurs-papillon.

Selon un mode de réalisation, l'étape de calcul met en œuvre au moins une itération de calcul des probabilités a posteriori des états du treillis produit connaissant les probabilités des états des treillis élémentaires du produit et de calcul des probabilités a posteriori des états de chacun des treillis du produit connaissant les probabilités a posteriori des états du treillis produit.

Selon ce mode de réalisation, l'étape de calcul de probabilités a posteriori se déroule de manière itérative. Ainsi, le procédé peut effectuer un premier calcul des probabilités a posteriori et peut itérer une ou plusieurs fois ce calcul. Selon un mode de réalisation simple, les probabilités des échantillons reçus y prises comme probabilités a priori ne sont prises en compte comme valeurs d'initialisation que lors des calculs du 1 er étage de la première itération. Selon un autre mode de réalisation, les probabilités des échantillons reçus y prises comme probabilités a priori sont injectées en totalité ou partiellement dans les autres étages. Les résultats de simulation mettent en avant un gain d'itération pour certaines conditions de mise en œuvre. Plus particulièrement, en prenant en compte un canal à effacements qui modélise typiquement les pertes de paquet pour des applications Internet et en considérant un code avec une distance minimale dmin, le nombre maximum théorique d'effacements est égal à (dmin-1). Cette capacité de correction maximale est obtenue avec deux itérations des calculs de probabilité a posteriori.

Selon un mode de réalisation, le procédé de décodage comprend en outre une phase d'initialisation au cours de laquelle pour le 1 er étage les probabilités des états des treillis élémentaires sont initialisées avec les probabilités a priori des symboles reçus et pour les étages suivants les probabilités d'états des treillis élémentaires sont initialisées à ½.

Ces valeurs d'initialisation permettent d'obtenir de bonnes estimées en n'utilisant qu'une seule fois les valeurs y reçues. L'algorithme effectuant ensuite de façon récursive ces calculs sur les probabilités d'états des k treillis, il effectue de façon virtuelle une propagation et un « moyennage » de ces probabilités d'états sur le treillis produit global de tous les treillis élémentaires.

Selon un mode de réalisation, le calcul des probabilités a posteriori des états du treillis produit comprend :

- une phase de propagation avant, consistant à propager des probabilités d'état le long des branches du treillis produit et

- une phase de propagation arrière, consistant à propager des probabilités d'état le long des branches du treillis produit.

En d'autres termes, le calcul des probabilités a posteriori des états du produit de treillis élémentaires comprend une première phase de propagation avant des probabilités d'état dans tous les arbres élémentaires, et une deuxième phase de propagation retour des probabilités d'état dans tous les arbres élémentaires, chaque phase pouvant se dérouler en parallèle, le procédé combine en final les probabilités d'état avant et arrière pour une même section du treillis produit et pour un même état.

Selon un mode de réalisation, le calcul des probabilités a posteriori des états sur le produit de treillis est effectué selon un algorithme de type BCJR ou de type Viterbi-SOVA.

Selon un mode de réalisation, le calcul des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis est effectué par marginalisation à partir des probabilités a posteriori des états du treillis produit. La marginalisation est une technique connue de l'homme du métier [8].

Selon un mode de réalisation, un treillis élémentaire correspond à au moins une ligne de la matrice génératrice ou de la matrice de contrôle de parité.

Selon un mode de réalisation, les produits de treillis interviennent sur des ensembles d'au moins deux treillis élémentaires. Le nombre d'étages et les ensembles d'au moins deux treillis élémentaires intervenant dans les produits de treillis sont déterminés en appliquant les règles ci- dessous :

par étage, l'ensemble des indices des treillis des ensembles d'au moins deux treillis élémentaires forme une permutation de l'ensemble {0, 1, · · -, k— l] ,

tout ensemble d'au moins deux treillis élémentaires n'apparaît qu'une seule fois dans l'ensemble des étages de calcul,

- il existe au moins un chemin entre tout opérateur papillon du 1 er étage et tout opérateur papillon du dernier étage.

L'existence du chemin assure que tout treillis élémentaire influence tout autre treillis élémentaire. L'ensemble des règles précédentes permet de faire interférer un nombre de fois minimum les treillis élémentaires deux par deux (directement ou indirectement) mais suffisant pour obtenir une bonne estimation finale.

Selon un mode de réalisation, les produits de treillis interviennent sur des couples de treillis élémentaires et les couples de treillis intervenant dans les produits de treillis sont déterminés pour le 1 er étage :

en effectuant une partition par couples à partir d'une permutation identité d'ordre k qui permet d'obtenir une matrice de k/2 lignes et deux colonnes,

en transposant la matrice obtenue pour obtenir une matrice à deux lignes et k/2 colonnes et mettant à plat cette matrice pour obtenir une liste de couples, et pour un étage suivant :

en répétant les opérations précédentes en partant de la liste des couples de l'étage précédent pour obtenir des permutations successives.

Selon ce dernier mode de réalisation, si k n'est pas une puissance de deux, la dernière permutation est calculée en considérant une permutation affine : i-> 5*i+l (mod k).

Selon un mode de réalisation l'alphabet est binaire.

Selon un mode de réalisation le nombre d'étages est l'arrondi par valeur supérieure de Log(2,k).

Selon un mode de réalisation la cellule de base cello associée à un bit de la matrice égal à zéro est représentée à la figure 5a et la cellule de base cell } associée à un bit de la matrice égal à un est représentée à la figure 5b.

Selon ce dernier mode de réalisation, le produit de treillis élémentaires est défini à partir des produit des cellules de base : cell 0 ® cell 0 , cell 0 ® cell v , cel ® cell 0 et cel ® cell } res ectivement égaux à :

Un procédé de décodage selon l'invention peut être utilisé pour décoder en particulier un code de Hamming (8,4,4). Le nombre d'étages est de deux et l'ensemble des indices des treillis des couples de treillis forme les permutations suivantes :

Un procédé de décodage selon l'invention peut être utilisé pour décoder en particulier un code de Golay (24,12,8). Le nombre d'étages est de quatre et l'ensemble des indices des treillis des couples de treillis forme les permutations suivantes :

Un procédé de décodage selon l'invention peut être utilisé pour décoder en particulier un code QR (48,24,12). Le nombre d'étages est de cinq et l'ensemble des indices des treillis des couples de treillis forme les permutations suivantes :

LL''iinnvveennttiioonn aa eenn oouuttrree ppoouurr oobbjjeett uunn ddééccooddeeuurr dd''uunnee ssééqquueennccee dd''éécchhaannttiilllloonnss rreeççuuss yy ccoorrrreessppoonnddaanntt,, aapprrèèss ttrraannssmmiissssiioonn,, àà uunnee ssééqquueennccee cc ccooddééee ddee ssyymmbboolleess CC jj ,, yy == 00,,11,, obtenue en appliquant au codage un code correcteur d'erreurs linéaires de paramètres (n, k) à k symboles source mettant en œuvre une matrice génératrice de dimension k.n ou une matrice de contrôle de parité de dimension (n-k).ndes symboles codés, les symboles appartenant à un alphabet donné. Le décodeur comprend :

un moyen de calcul adapté pour effectuer un calcul à plusieurs étages, utilisant des treillis élémentaires Tj déterminés à partir des lignes de la matrice, chaque treillis T; étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon, pour déterminer des produits de treillis élémentaires distincts, pour calculer sur un treillis produit des probabilités a posteriori des états du produit de treillis connaissant les probabilités des états des treillis élémentaires et pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis connaissant les probabilités a posteriori des états du treillis produit,

un moyen de calcul adapté pour déterminer des probabilités a posteriori associées aux symboles décodés à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage.

Un tel dispositif de décodage est notamment adapté à mettre en œuvre le procédé de décodage décrit précédemment.

Un tel décodeur peut bien sûr comporter les différentes caractéristiques relatives au procédé de décodage selon l'invention, qui peuvent être combinées ou prises isolément. Ainsi, les caractéristiques et avantages de ce décodeur sont les mêmes que ceux du procédé de décodage, et ne sont donc pas détaillés plus amplement.

On note qu'un tel décodeur peut être implémenté sous la forme d'un circuit intégré numérique ou analogique, ou dans un composant électronique de type microprocesseur. Ainsi, l'algorithme de décodage selon l'invention peut être mis en œuvre de diverses manières, notamment sous forme câblée ou sous forme logicielle.

En particulier, il est possible d'utiliser un décodeur tel que décrit ci-dessus soit pour décoder des symboles codés, soit pour coder des symboles source.

Dans ce dernier cas, les probabilités a priori des symboles reçus sont initialisées avec les valeurs des symboles à coder dans le cas de symboles binaires et les symboles de redondance sont forcés avec une probabilité de 1/2 afin de pouvoir utiliser le décodeur comme un codeur. Dans le cas de symboles appartenant à un alphabet non binaire, les symboles non-binaires sont considérés comme des vecteurs. Par exemple Z4={ 0,1, 2,3 } est noté { {0,0}, {0,1 }, { 1,1 }, { 1,0} } et la probabilité d'un symbole non-binaire est alors un vecteur de quatre probabilités {ρθθ,ρθΐ,ρΐ ΐ,ρΐθ} dont la somme est un. Si un symbole est inconnu alors son vecteur de probabilités est { 1/4 ,1/4, 1/4,1/4}.

L'invention a donc en outre pour objet un procédé de codage de symboles source, délivrant des symboles codés comprenant les symboles source et des symboles de redondance.

Selon l'invention, un tel procédé de codage de k symboles source délivre une séquence c codée de symboles Cj, j = 0, 1, ■■ ·, (¾— l) , obtenue en appliquant un code correcteur d'erreurs linéaires de paramètres (n, k) mettant en œuvre une matrice génératrice à k lignes ou une matrice de contrôle de parité à (n-k) lignes des symboles codés, les symboles appartenant à un alphabet donné. Le procédé comprend : une phase de calcul à plusieurs étages, utilisant des treillis élémentaires Tj déterminés à partir des lignes de la matrice, chaque treillis Ti étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états, comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon :

pour déterminer des produits de treillis élémentaires distincts, pour calculer sur un treillis produit des probabilités posteriori des états du produit de treillis connaissant les probabilités des états des treillis élémentaires du produit de treillis et

pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis connaissant les probabilités a posteriori des états du treillis produit,

une phase de détermination de probabilités a posteriori associées aux symboles codés ¾ à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage,

une phase d'initialisation au cours de laquelle pour le 1 er étage les probabilités des états des treillis élémentaires sont initialisées avec les k symboles source et avec n-k probabilités égales à ½ représentant les symboles de redondance.

L'invention propose ainsi une nouvelle technique de codage de symboles source.

Il est ainsi possible d'obtenir simplement de nouveaux codes ou de reconstruire des codes existants, présentant une longueur quelconque, facilement décodables par le procédé de décodage selon l'invention.

Un tel procédé de codage peut bien sûr comporter les différentes caractéristiques relatives au procédé de décodage selon l'invention.

L'invention a en outre pour objet un codeur correspondant. Un tel codeur de k symboles source délivre une séquence c codée de symboles Cj, J ' =0,1, · · ·, («— l) , obtenue en appliquant un code correcteur d'erreurs linéaires de paramètres (n, k) mettant en œuvre une matrice génératrice à k lignes ou une matrice de contrôle de parité à (n-k) lignes des symboles codés, les symboles appartenant à un alphabet donné. Le codeur comprend :

un moyen de calcul adapté pour effectuer un calcul à plusieurs étages, utilisant des treillis élémentaires Tj déterminés à partir des lignes de la matrice, chaque treillis Tj étant décrit par une structure de n sections construites à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet et étant décrit par l'ensemble des probabilités de ses états, comprenant par étage une étape de calcul mettant en œuvre un opérateur papillon : pour déterminer des produits de treillis élémentaires distincts, pour calculer sur un treillis produit des probabilités a posteriori des états du produit de treillis connaissant les probabilités des états des treillis élémentaires du produit de treillis et

pour calculer des probabilités a posteriori des états de chacun des treillis élémentaires du produit de treillis connaissant les probabilités a posteriori des états du treillis produit,

un moyen de calcul adapté pour déterminer des probabilités a posteriori associées aux. symboles codés Cj à partir des probabilités a posteriori des états de tous les treillis élémentaires du dernier étage,

un moyen de calcul adapté pour initialiser les probabilités des états des treillis élémentaires du 1 er étage de calcul avec les k symboles source et avec n-k probabilités égales à ½ représentant les symboles de redondance.

Un tel codeur est notamment adapté à mettre en œuvre le procédé de codage décrit précédemment.

Un tel codeur peut bien sûr comporter les différentes caractéristiques relatives au procédé de codage selon l'invention, qui peuvent être combinées ou prises isolément. Ainsi, les caractéristiques et avantages de ce codeur sont les mêmes que ceux du procédé de codage, et ne sont donc pas détaillés plus amplement.

A nouveau, un tel codeur peut être implémenté sous la forme d'un circuit intégré numérique ou analogique, ou dans un composant électronique de type microprocesseur. Ainsi, l'algorithme de codage selon l'invention peut être mis en œuvre de diverses manières, notamment sous forme câblée ou sous forme logicielle.

L'invention concerne encore un dispositif comprenant un codeur et un décodeur de symboles précédemment décrits.

Un tel dispositif, encore appelé codée pour codeur/décodeur, peut être implémenté sous la forme d'un circuit intégré numérique ou analogique, ou dans un composant électronique de type microprocesseur. En particulier, l'utilisation d'un codée permet de mutualiser les ressources matérielles utilisées au codage et au décodage. Par exemple, un tel codée peut recevoir en entrée des symboles source, et délivrer en sortie des symboles codés, ou recevoir en entrée des symboles codés, et délivrer en sortie une estimation des symboles source.

Dans encore un autre mode de réalisation, l'invention concerne un ou plusieurs programmes d'ordinateur comportant des instructions pour la mise en œuvre d'un procédé de décodage ou d'un procédé de codage tels que décrits précédemment, lorsque le ou les programmes sont exécutés par un processeur. De tels programmes peuvent être stockés sur un support d'information.

Liste des figures D'autres caractéristiques et avantages de l'invention apparaîtront plus clairement à la lecture de la description suivante de modes de réalisation particuliers, donnés à titre de simples exemples illustratifs et non limitatifs, et des dessins annexés, parmi lesquels :

la figure 1 représente le treillis élémentaire T t correspondant au générateur g t dans le cas d'une matrice génératrice,

la figure 2 représente le treillis élémentaire T 0 qui correspond au générateur g Q — 0110100 pour l'exemple du code de Hamming (7,4,3),

la figure 3 représente le treillis élémentaire 7 qui correspond au générateur g x = 1011000 pour l'exemple du code de Hamming (7,4,3),

la figure 4 représente le produit T Q ®^ des deux treillis 7 0 et 7 précédents dans le cas d'une matrice génératrice,

les figures 5a et 5b représentent respectivement les sections associées aux deux valeurs de bit (bit= 0 et bit =1) d'une ligne de la matrice de contrôle H du code,

la figure 6a représente le treillis élémentaire T 0 correspondant au générateur 10000111 pour l'exemple du code de Hamming (8,4,4),

la figure 6b représente le treillis élémentaire T x correspondant au générateur 01001011 pour l'exemple du code de Hamming (8,4,4),

la figure 7 représente le treillis-produit T Q ®^ résultant du produit des deux treillis élémentaires T 0 et T x représentés respectivement sur les figures 6a et 6b,

la figure 8 est un schéma d'un exemple de codeur convolutif de longueur de mémoire m égale à deux,

la figure 9 représente une section de treillis du codeur convolutif de la figure 8, la figure 10 représente un exemple de treillis à trois sections à quatre états du codeur convolutif de la figure 8,

la figure 11 représente schématiquement un codeur COD et un décodeur DECOD, les figures 12a et 12b représentent les deux treillis élémentaires T 0 et ΤΊ correspondant respectivement aux deux premières lignes d'une matrice génératrice G du code de Hamming (n=8, k=4, d min =4),

la figure 13 représente les principales étapes mises en œuvre par un codeur/déc odeur selon l'invention,

la figure 14 représente le produit de treillis pour l'exemple du code de Hamming (n=8, k=4, la figure 15 représente un réseau d'opérateur-papillons pour codeur/décodeur d'un code défini par une matrice comportant 4 lignes selon l'invention,

la figure 16 représente le schéma d'un codeur/décodeur complet selon l'invention pour un code défini par une matrice comportant 4 lignes selon l'invention (exemple le code de Hamming(8,4,4), la figure 17 représente le schéma d'un codeur/décodeur complet selon l'invention pour d'un code défini par une matrice comportant 12 lignes selon l'invention (exemple le code de Golay(24,12,8),

la figure 18 représente le schéma d'un codeur/décodeur complet selon l'invention pour d'un code défini par une matrice comportant 24 lignes selon l'invention (exemple le code de QR(48,24,12),

les figures 19a et 19b sont des schémas des structures simplifiées d'un codeur et d'un décodeur selon un mode de réalisation de l'invention, notamment pour le cas de treillis élémentaires à 2 états et des opérateurs papillons traitant des ensembles de 2 (i.e. couples) treillis élémentaires.

Description de modes de réalisation de l'invention

L'invention effectue pour un étage donné de calcul des produits portant uniquement sur des ensembles d'au moins deux treillis élémentaires distincts et n'effectue pas de multiplication des k (respectivement (n-k)) treillis élémentaires entre eux pour obtenir un treillis produit global à 2 k (respectivement 2 (n"!;) ) états. L'invention fait interagir les treillis élémentaires entre eux au moyen d'un opérateur papillon. La propagation des interactions est faite de manière extrêmement avantageuse sur des probabilités d'états et non pas sur des probabilités de bits ce qui la rend insensible aux cycles de la structure du réseau d'opérateur-papillons.

A titre d'exemple, l'invention offre une technique de décodage présentant de meilleures performances que les techniques de l'art antérieur vis-à-vis des bons codes correcteurs d'erreurs tels que : les codes algébriques classiques comme le code de Golay (24,12,8), le code QR (48,24,12) ; les turbo-codes ; les codes LDPC, etc.

L'invention code ou décode des symboles appartenant à un alphabet déterminé. Celui-ci peut être l'alphabet binaire. La description qui suit est basée sur un alphabet binaire sachant que l'alphabet peut tout aussi bien ne pas être binaire.

Les principales étapes mises en œuvre par un codeur et/ou un décodeur binaire selon l'invention sont décrites en relation avec la figure 11.

Π s'agit ici d'un simple exemple, dans lequel on utilise l'invention à la fois pour le codage et pour le décodage des symboles. Bien entendu, il est possible d'utiliser l'algorithme de décodage proposé avec un algorithme de codage correcteur d'erreurs linéaires classique de paramètres (n, k) mettant en œuvre une matrice génératrice G ou de contrôle de parité H à n colonnes et respectivement k lignes ou (n-k) lignes de symboles.

Ainsi, selon le mode de réalisation illustré en figure 11, un codeur COD selon l'invention prend en entrée k données source x et délivre en sortie une séquence c codée de données Cj, j— 0,1, · · ·,(«— l) comprenant les données source x et des données de redondance r. Le code correcteur d'erreurs linéaires de paramètres (n, k) met en œuvre une matrice de données binaires, cette matrice étant soit génératrice G de dimension kxn soit de contrôle de parité H de dimension (n-k)xn.

Si le codage est systématique, la matrice génératrice G est alors dite sous forme systématique, le mot de code c comprend les bits source x = (x 0 , x lt ...,χ^)) correspondant à l'information utile placés généralement à gauche et les bits de redondance r = (r 0 , r ïr ... , r( n _ k--1 ) placés à la suite ou vice versa : c = (x 0 , x lr ... , a^-i), r 0 , r x , ... , r( n _ ¾--1 ) ). Un mot de code c est tel que : c = xG ou cH tr = 0.

La séquence codée c peut être véhiculée dans un canal Ch de transmission ou stockée sur un support, puis décodée par un décodeur DEC selon l'invention. Un tel décodeur reçoit en entrée une séquence y d'échantillons comprenant les données source x et des données de redondance r éventuellement entachées d'erreur et délivre une estimation x des données source.

Selon un mode de réalisation des treillis élémentaires, chaque générateur élémentaire ou ligne de la matrice G respectivement H est associé à un treillis élémentaire à deux états compte tenu que les symboles sont pris dans l'alphabet binaire {0, 1 } à deux symboles. Pour généraliser à tout type d'alphabet, chaque treillis élémentaire comporte donc autant d'états que l'alphabet contient de symboles.

L'invention conserve les k (respectivement (n-k)) treillis élémentaires Ti à au moins deux états qui correspondent aux k (respectivement (n-k)) lignes L; de la matrice G (respectivement H) et effectue des produits sur des ensembles d'au moins deux (i.e. des couples) treillis élémentaires distincts. Chaque treillis élémentaire est décrit par une structure de n sections d'indice t, une section étant constituée de branches représentées chacune par un triplet (état de départ, étiquette de branche, état d'arrivée) et par l'ensemble des probabilités de ses états : {f î"(sf )}.

Un procédé selon l'invention utilise les k (respectivement (n-k)) treillis élémentaires T La structure du treillis T ; élémentaire est construite selon l'invention à partir de différentes cellules de base associées respectivement aux différents symboles de l'alphabet assurant un nombre minimal d'états au treillis.

Selon un mode de réalisation, la cellule de base cello associée à un bit de la matrice égal à zéro est la suivante :

<D

et la cellule de base cell; associée à un bit de la matrice égal à un est la suivante :

Dans cello et ce¾, les états notés 0 et 1 sont les états d'entrée et de sortie d'une section dans la direction horizontale.

Un treillis est constitué par la mise bout à bout de sections composées elles-mêmes de branches. Une branche d'une section de treillis est un triplet (état de départ, étiquette de branche, état d'arrivée). Un treillis peut donc être vu comme un ensemble de branches :

L'invention est illustrée avec l'exemple du code de Hamming (n=8, k=4, d min =4). Une matrice génératrice G de ce code de Hamming est la suivante :

Le code de Hamming (n=8, k=4, d min =4), et de manière générale tout code peut être décrit de manière complète et non ambiguë de manière équivalente par une matrice de contrôle H ou par un ensemble d'équations modulo deux, qui est le suivant pour le code Hamming :

r 0 + Xl + x 2 + x 3

Chaque équation est associée à un treillis élémentaire à deux états. Le treillis élémentaire T 0 associé au générateur 10000111 qui correspond à la première ligne L 0 de la matrice G et donc à l'équation booléenne r o + x ] + x 2 - x î —0 est donc illustré par la figure 12a,

Le treillis élémentaire T[ associé au générateur 01001011 qui correspond à la deuxième ligne Li de la matrice G et à l'équation booléenne + x 0 + x 2 + x î = 0 est donc illustré par la figure 12b.

Par souci de simplification, k est considéré être le nombre de lignes de la matrice.

Un procédé 1 selon l'invention dont les principales étapes sont illustrées par la figure 13 comprend une phase 2 de calcul à plusieurs étages 3 qui utilise les k treillis élémentaires Ti. Par étage 3, le procédé comprend une étape 4, 5, 6 de calcul qui met en œuvre un opérateur papillon.

Lors de l'étape de calcul, l'opérateur papillon détermine 4 des produits fêT. de treillis élémentaires distincts, T t et T j avec i≠ j . Le produit 2^ ®7j de deux treillis de même nombre n de secti ns d'indice t G {0,1, ... , n— 1} est, d'après Calderbank-Forney-Vardy[l], tel que :

T j ®T j - ë } . Ainsi, le produit de deux

treillis est le produit cartésien de chacune des composantes des triplets des branches prises deux par deux avec la suppression des couples de branches telles que e j ' . Selon l'invention le produit de treillis élémentaires est défini à partir des produit des cellules de base : cell 0 ® cell 0 , cell Q ® cell x , cell ® cell 0 et cel ® cell x respectivement égaux à :

En reprenant l'exemple du code de Hamming (n=8, k=4, d min =4), le produit T Q ®7 est illustré par la figure 14.

Selon un autre mode de réalisation des treillis élémentaires, en considérant k le nombre de lignes de la matrice, un treillis élémentaire est associé à un nombre m>l de lignes de la matrice définissant le code, son nombre d'états par section est alors 2 m . Si un treillis élémentaire Ti est associé à (g0,gl,...,gm-l) lignes de la matrice alors il est équivalent lui-même au produit des m treillis Ti associés chacun à une ligne gi, i=0,...,m-l. Ceci ne change rien aux principes de l'algorithme mais modifie en particulier le nombre d 'opérateur-papillons par étage qui est q = ^^2m s i 2 x m divise k et diminue le nombre d'étages puisque les interactions se font entre treillis élémentaires plus complexes associés à plus de lignes de la matrice. Si 2 X m ne divise pas k alors k = q x 2 x m + r avec 0 < r < 2m. Chaque étage comprend q opérateur-papillons faisant interagir deux treillis élémentaires à 2 m états associés chacun à m lignes de la matrice et un opérateur-papillon. Si r = m + rr ce dernier opérateur-papillon fait interagir un treillis élémentaires à 2 m états et un treillis élémentaire à 2 π états associé à rr lignes de la matrice, si r < m ce dernier opérateur-papillon fait interagir deux treillis associés aux m lignes restantes. Les cas les plus intéressants à part le cas m=l qui correspond à un mode de réalisation particulier des treillis élémentaires, sont les cas m=2, m=3 et m=4 pour garder une complexité de calculs raisonnable et de bonnes performances de convergence vers l'estimation optimale des probabilités a posteriori des états des treillis.

Lors de l'étape de calcul, le procédé fait interagir les treillis au moins deux par deux

(directement ou indirectement) au moyen de l'opérateur papillon un nombre de fois minimum mais suffisant pour obtenir une bonne estimation finale et de manière à ce que tout treillis élémentaire influence tout autre treillis élémentaire. En particulier, les interactions sont déterminées telles que :

- tout opérateur papillon n'effectue des interactions qu'entre des ensembles d'au moins deux (ici des couples de) treillis Ti et Tj distincts, i≠ j , - l'ensemble des opérateurs papillon d'un même étage couvre de façon bijective l'ensemble des treillis : i.e. les indices des treillis d'un étage forment une permutation de {0, 1, . . . , k - 1 },

- globalement, tout ensemble (dans le cas le plus simple : tout couple) de treillis élémentaires n'apparaît qu'une seule fois et une seule,

- il existe au moins un chemin entre tout opérateur papillon du dernier étage et tout opérateur papillon du premier étage.

Les interactions peuvent se représenter sous la forme d'une matrice d'ensemble d'au moins deux (selon un mode de réalisation : des couples d') indices de treillis élémentaires qui interagissent au moyen d'un opérateur papillon. Les ensemble d'au moins deux (selon un mode de réalisation : des couples de) treillis intervenant dans les produits de treillis sont déterminés pour le 1 er étage :

- en effectuant une partition d'ensembles d'au moins deux indices (selon un mode de réalisation : en couples) à partir d'une permutation identité d'ordre k qui permet d'obtenir une matrice de k/2 lignes et deux colonnes,

- en transposant la matrice obtenue pour obtenir une matrice à deux lignes et k/2 colonnes et en mettant à plat cette matrice pour obtenir une liste d'ensembles d'au moins deux indices (selon un mode de réalisation : des couples),

et pour un étage suivant :

- en répétant les opérations précédentes en partant de la liste des ensembles d'au moins deux indices (selon un mode de réalisation : des couples) de l'étage précédent pour obtenir des permutations successives.

Le procédé détermine donc un ensemble de nEtage = \Log(l, k i\ permutations de l'ensemble des indices {0, 1, . . . , k - 1 } où l'opérateur \. ] est l'arrondi par valeur supérieure.

En reprenant l'exemple du code de Hamming (n=8, k=4, d min =4), nEtage = 2 puisque k=4 et l'ensemble des permutations est décrit par une matrice de deux lignes et deux colonnes de couples d'indices :

Pour le code de Hamming (n=8, k=4, d mi -=4), la phase de calcul a deux étages, le correspond à la l re colonne et le 2 nd et dernier étage correspond à la seconde colonne. Dit autrement, dans l'exemple du code de Hamming (n=8, k=4, d min =4) le procédé fait interagir lors du Γ étage de la phase de calcul les couples ( T Q , Tj et ( T 2 , T 3 ) et lors du 2 nd étage les couples (T 0 , T 2 ) et T T 3 ) c& qui peut être représenté par le schéma de la figure 15.

Selon l'invention, l'opérateur papillon effectue en outre un calcul 5 des probabilités a posteriori des états sur le produit ®T j de deux treillis T { et 7\ avec i≠ j puis un calcul 6 des probabilités a posteriori des états de chacun des deux treillis T t et T- .

Selon un mode de réalisation, Γ opérateur-papillon effectue le calcul des probabilités a posteriori des états sur le produit des deux treillis T t - et T } en utilisant un algorithme BCJR[4] adapté de manière à obtenir comme résultat de sortie le vecteur des probabilités des états du treillis produit alors que l'algorithme classique BCJR[4] fourni le vecteur des probabilités a posteriori des bits.

Selon un mode de réalisation, P opérateur-papillon effectue le calcul des probabilités a posteriori des états de chacun des deux treillis T { et T- par marginalisation.

Selon un mode de réalisation, un procédé de décodage selon l'invention comprend une phase d'initialisation. Selon un mode de réalisation simple de l'initialisation, les probabilités des états {Pr(s )} des treillis élémentaires T; i = 0, 1, · · ·, (τΐ— k— 1) sont initialisées uniquement pour le 1 er étage avec les probabilités a priori des bits reçus y. Pour les étages suivants, les probabilités des états { r(sf)} des treillis élémentaires T; i = 0, 1, · · ·, (η— k— l) sont initialisées à ½. Les valeurs des bits reçus y ne sont donc injectées qu'une fois dans le procédé de décodage. Selon un mode de réalisation de l'initialisation, les valeurs des bits reçus y sont injectées en totalité ou partiellement comme probabilités a priori reçues dans les autres étages.

Compte tenu qu'un opérateur papillon a en données d'entrée les vecteurs de probabilité d'états {Pr(s')} et {Pr(sJ)} des treillis élémentaires T ; et T j avec i≠j , ces vecteurs correspondent aux vecteurs de probabilités a posteriori des états de chacun des deux treillis T t et T j déterminés à l'étage précédent, pour chacun des étages suivants le premier étage.

Le procédé de décodage selon l'invention comprend en outre une phase de détermination de probabilités a posteriori associées aux symboles décodés à partir des probabilités a posteriori des états des k treillis élémentaires du dernier étage. Cette détermination revient à fusionner toutes les informations disponibles sur chaque symbole décodé entre les k treillis élémentaires du dernier étage :

&-1

Prtc j = 1 j y) oc JJ Pr(c j = 1 j " XL y)

i=0 avec « l'opérateur d'égalité avec normalisation (division par la somme des probabilités des deux cas « 0 » et « 1 ».

Selon un mode de réalisation, cette fusion correspond à la multiplication de toutes les probabilités finales d'un même bit de code de chacun des treillis élémentaires T s - avec i = 0, 1, - · ·, (η - &— 1) à partir des probabilités a posteriori des états des k treillis élémentaires de l'étage final.

Selon un mode de réalisation, cette fusion correspond à l'addition de toutes les métriques finales d'un même bit de code de chacun des treillis élémentaires 7^ avec î =0,1,- ·,(«— k— l) à partir des probabilités a posteriori des états des k treillis élémentaires de l'étage final.

Ainsi, en reprenant l'exemple du code de Hamming (n=8, k=4, le procédé de décodage peut être illustré par le schéma de la figure 16. La fusion fournit les probabilités des bits décodés : {Pi~(Xi \y)} connaissant les bits reçus y. La structure représentée à la figure 16 est valable pour tous les codes définis par k=4 treillis élémentaires quelle que soit sa longueur n.

L'invention est illustrée avec l'exemple du code de Golay (n=24, Selon le procédé de décodage précédemment décrit, le nombre d'étages est nEtage = 4 puisque k=12. L'ensemble des permutations est décrit par une matrice de six lignes et quatre colonnes de couples d'indices :

La structure de l'algorithme de décodage est représentée à la figure 17. Les lettres Ai, Bi, Ci et Di référencent les différents opérateurs papillons.

L'invention est illustrée avec l'exemple du code QR (n=48, k=24, d min =12). Selon le procédé de décodage précédemment décrit, le nombre d'étages est nEtage = 5 puisque k=24. L'ensemble des permutations est décrit par une matrice de douze lignes et cinq colonnes de couples d'indices :

La structure de l'algorithme de décodage est représentée à la figure 18. Les lettres Ai, Bi, Ci, Di et Ei référencent les différents opérateurs papillons.

La description de l'invention a été faite en considérant des probabilités. L'invention peut tout aussi bien considérer des métriques. Dans ce cas selon un mode de réalisation, un opérateur- papillon effectue le calcul des métriques a posteriori des états sur le produit des deux treillis Ti et Tj selon un algorithme de type Viterbi-SOVA[5].

Les figures 1 a et 19b représentent schématiquement les structures simplifiées d'un codeur COD et d'un décodeur DEC selon un mode de réalisation de l'invention.

Le codeur comprend une mémoire 10 comprenant une mémoire tampon, une unité de traitement 11, équipée par exemple d'un microprocesseur μΡ, et pilotée par le programme d'ordinateur 12, mettant en uvre le procédé de codage selon un mode de réalisation de l'invention.

A initialisation, les instructions de code du programme d'ordinateur 12 sont par exemple chargées dans une mémoire RAM avant d'être exécutées par le processeur de l'unité de traitement 11. L'unité de traitement 11 reçoit en entrée des données source x et délivre des données codées c comprenant les données source et de données de redondance. Le microprocesseur de l'unité de traitement 11 met en œuvre les étapes du procédé de codage décrit précédemment, selon les instructions du programme d'ordinateur 12, pour coder les données source. Pour cela, le codeur comprend, outre la mémoire tampon 10, un module de codage pour déterminer des produits T j ®Tj de treillis élémentaires distincts, T t et Γ- avec i≠ j , pour calculer par treillis produit T t ®T j des probabilités a posteriori des états du produit ®T j connaissant les probabilités des états ÎPÎ * S')} des treillis élémentaires T ( et T j et pour calculer des probabilités a posteriori des états de chacun des deux treillis T t et T j connaissant les probabilités a posteriori des états du treillis produit et pour déterminer des probabilités a posteriori associées aux symboles codés Cj. Ce module est piloté par le microprocesseur de l'unité de traitement 11.

Le décodeur DEC comprend une mémoire 20 comprenant une mémoire tampon, une unité de traitement 21, équipée par exemple d'un microprocesseur μΡ, et pilotée par le programme d'ordinateur 22, mettant en œuvre le procédé de décodage selon un mode de réalisation de l'invention.

A l'initialisation, les instructions de code du programme d'ordinateur 22 sont par exemple chargées dans une mémoire RAM avant d'être exécutées par le processeur de l'unité de traitement 21. L'unité de traitement 21 reçoit en entrée des données codées y comprenant des données source et des données de redondance, et délivre une estimation je des données source. Le microprocesseur de l'unité de traitement 21 met en œuvre les étapes du procédé de décodage décrit précédemment, selon les instructions du programme d'ordinateur 22, pour décoder les données codées. Pour cela, le décodeur comprend, outre la mémoire tampon 20, un module de décodage pour déterminer des produits j ®T j de treillis élémentaires distincts, T ; et Γ- avec i≠ j , pour calculer par treillis produit T j ®T j des probabilités a posteriori des états du produit ®T j connaissant les probabilités des états {Pr(s )} des treillis élémentaires T t et T. et pour calculer des probabilités a posteriori des états de chacun des deux treillis T t et T. connaissant les probabilités a posteriori des états du treillis produit T t ®T- , et pour déterminer des probabilités a posteriori associées aux symboles décodés. Ce module est piloté par le microprocesseur de l'unité de traitement 21.

Références :

[1] A.R. Calderbank and G.D. Jr. Forney and A. Vardy, "Minimal Tailbiting Trellises: the Golay Code and More", IEEE Transactions on Information Theory, Vol. ΓΓ.45, no.5, pp.1435-1455, July 1999.

[2] R.G. Gallager, "Low-Density Parity-Check Codes ", IEEE Transactions on Information Theory, Vol.8, pp. 21-28, January 1962.

[3] G.D. Forney, "The Viterbi Algorithm", Proceedings of the IEEE, Vol.61, no.3,pp.268- 278,March 1973. [4] L.R. Bahl and J. Cocke and F. Jelinek and R. Raviv, "Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate ", ΓΕΕΕ Transactions on Information Theory, Vol. IT-20, pp.284- 287, March 1974.

[5] C. Berrou, A. Glavieux, and P. Thitimajshima, "Near Shannon Limit Error-Correcting Coding and Decoding: Turbo-Codes", in Proceedings of the IEEE Int. Conf. on Communications (ICC 93), Geneva, Switzerland, pp.1064-1070, May 1993.

[6] N. Wiberg, "Codes and Decoding on General Graphs", Ph.D. Thesis, Link ' oping University, Sweden 1996.

[7] « Minimum-distance bounds by graph analysis » de R.M. Tanner, « IEEE Transactions on information theory », vol. 47, février 2001.

[8] "Probability and probabilistic reasoning for electrical engineering" de Terrence L. Fine, Pearson Education International, ISBN- 10 : 0130205915, chapitre 11.2.3, pages 324-325.