FR 2941828 A1 20100806 FR 0950628 A 20090130 Procédé et dispositif de codage correcteur d'erreurs flexible et performant et programme d'ordinateur correspondant. 1. Domaine de l'invention Le domaine de l'invention est celui du codage de données numériques. Plus précisément, l'invention concerne les codes correcteurs d'erreurs. L'invention s'applique notamment, mais non exclusivement, au codage de données source organisées en blocs de données indépendants les uns des autres, et devant donc être codés et décodés bloc par bloc, ainsi qu'au codage de flux de données (codage convolutif). 2. Art antérieur De nombreuses techniques de codage permettant la correction d'erreurs de transmission sont déjà connues. Ces codes correcteurs d'erreurs permettent de corriger les erreurs de transmission inhérentes à tout canal de communication. Ainsi, ils sont abondamment utilisés 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 dites "sans-fils" (� 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 tous les futurs systèmes de communications, comme les futures normes DVB, 4G, LTE, � 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 USB... ; - la correction d'informations lors des calculs dans un circuit intégré d'un microprocesseur ou dans un ordinateur ; - etc. Ces erreurs de transmission sont causées, par exemple, par le bruit thermique des composants électroniques du récepteur, des brouillages électromagnétiques (intentionnels ou non), des échos ou des propagations multiples dans le cas de la propagation hertzienne ou dans un réseau d'énergie électrique ... Pour pouvoir corriger ces erreurs de transmission, les codes correcteurs d'erreur permettent de générer des données de redondance à partir de données source. Ainsi, un code correcteur d'erreur est classiquement défini par : - une longueur n, correspondant aux données en sortie du codeur (mot de code de longueur n formé de k données source et de (n - k) données de redondance), - un nombre de bits ou de symboles d'information utiles k, correspondant aux données en entrée du codeur (encore appelées données source), et - une distance minimale dmin• La distance minimale d'un code dm~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. Le rendement du code est défini par R = k / n . Par exemple, un code de Hamming (8, 4, 4) est un code de longueur n = 8, prenant en entrée k = 4 symboles d'information utiles, de distance minimale dm~n = 4, et de rendement 1/2. Les premières études sur les codes correcteurs d'erreurs datent des années 1940. Plus récemment, dans le brevet européen EP 1 101 288, J.C. Carlach et C. Vervoux ont présenté un nouveau schéma de codage appelé � code Cortex �. Ces codes sont bien connus de l'homme du métier, et sont basés sur la construction d'un code présentant de bonnes propriétés de correction à partir de petits codes de base simples, mis en parallèle dans un certain nombre d'étages séparés par des permutations. De manière générale, un inconvénient des codes correcteurs d'erreur de longueur n contenant k symboles d'information utiles réside dans le fait que la distance minimale dm~n n'est pas optimale pour ces longueurs n et k, c'est-à-dire que la distance minimale n'est pas la plus proche possible d'une borne supérieure pour laquelle le code permet de détecter le nombre maximum d'erreurs. Or, le fait d'avoir une distance minimale dm~n la plus grande possible permet de détecter (dmin - 1) symboles erronés et d'en corriger L(dmin - 1) / 2i (où l'opérateur L.] désigne la partie entière). De plus, pour un usage industriel, l'optimisation des codes correcteurs 15 d'erreurs comprend également la minimisation des complexités de codage et de décodage en termes de coûts de matériel et d'énergie consommée. Paradoxalement, ces problèmes d'optimisation des codes correcteurs d'erreurs sont plus difficiles à traiter quand les longueurs n des codes sont petites à moyennes, c'est-à-dire de l'ordre de n L'utilisation de permutations c-cycliques permet notamment de minimiser le nombre d'opérations d'accès mémoire (lecture/écriture), et d'éviter les problèmes de conflit d'accès mémoire. En effet, la mémoire peut être partitionnée en c blocs, dans chacun desquels on peut stocker une donnée à une page mémoire ou un sous-bloc b d'adresse � modulo c �. Par exemple, pour une permutation 4- cyclique, on peut stocker les données a0 , a4 , ag dans un premier bloc, les données al, a5 , a9 dans un deuxième bloc, les données a2 , a6 , a10 dans un troisième bloc, et les données a3 , a7 , al 1 dans un quatrième bloc. En particulier, lesdits codes de base appartiennent au groupe comprenant : - un code de Hamming de matrice de transfert P ; - un demi-code de Hamming de matrice de transfert P+ ou P- , résultant d'un découpage en deux d'un code de Hamming de matrice de transfert P, tel que P = P+ x P- = P- x P+ ; - un demi-code à gauche tel que : - pour les indices pairs (2i) avec 0 Selon une caractéristique particulière de l'invention, le dispositif de codage comprend au moins un étage de brassage postérieur, inséré entre deux étages de codage successifs, un étage de brassage postérieur comprenant deux sous-étages de brassage successifs, dits premier et deuxième sous-étages de brassage postérieur, mettant en oeuvre des brassages de type différent, ledit premier sous-étage de brassage postérieur comprend au moins deux modules de brassage distincts, chaque module de brassage recevant des données traitées issues d'au moins un ensemble de trois modules de codage d'un même étage de codage intermédiaire et délivrant des données brassées, prises en entrée dudit deuxième sous-étage de brassage postérieur, chaque module de brassage mettant en oeuvre des brassages de type différent, et le ledit dispositif comprend au moins un étage de brassage antérieur, inséré entre deux étages de codage successifs, un étage de brassage antérieur comprenant au moins un sous-étage de brassage antérieur mettant en oeuvre un brassage identique à un deuxième sous-étage de brassage postérieur d'un desdits étages de brassage postérieur. Ainsi, le dispositif de codage correcteur d'erreurs selon l'invention permet, en ajoutant des étages de brassage avant et à la suite des étages imbriqués de permutations et de codage, d'obtenir des codes de longueur supérieure, qui conservent la propriété de distance minimale dmin la plus grande possible. Par brassage, on entend ici tout type de distribution, permutation, rotation... Selon un aspect particulier de l'invention, ledit étage de brassage antérieur comprend au moins deux sous-étages de brassage successifs, dits premier et deuxième sous-étages de brassage antérieur, mettant en oeuvre des brassages de type différent, et ledit deuxième sous-étage de brassage antérieur comprend au moins deux modules de brassage distincts, chaque module de brassage recevant des données brassées dudit premier sous-étage de brassage antérieur, et fournissant des données re-brassées à au moins un ensemble de trois modules de codage d'un même étage de codage intermédiaire, haque module de brassage mettant en oeuvre des brassages de type différent. Ainsi, le choix des différents modules de brassage permet d'obtenir un code optimal de complexité réduite, à la fois au codage et au décodage. L'utilisation de sous-modules de brassage superposés et de type différent permet d'obtenir une grande diversité de codes de base. En effet, les permutations en entrée et/ou en sortie des codes de base permettent d'obtenir des codes avec des combinaisons de symboles différentes. L'augmentation de la diversité des codes de base permet d'augmenter la distance minimale entre deux mots du code global résultant. En particulier, lesdits modules de brassage ou sous-étages de brassage mettent en oeuvre un brassage appartenant au groupe comprenant : - un brassage identité tel que : Vi = 0, 1, ..., (k-1) lrk(i) = i ; - un brassage tel que : TcA,k(i) = A0 + i(modk) si i = 0 (modc) JA,k(i) = Al + i(modk) si i ° 1(modc) Vi = 0, 1, ..., (k-1 7dA,k(i) = Ac-1 + i(modk) si i = (c -1) (modc) - un brassage tel que : 7Bk(i) = p + c * (i mod p) Vi = 0, 1, ..., (k-1), avec p =[ k ù] , c avec 4 = { 00 , AI, • • •, Acù1 } un ensemble de paramètres entiers et k la longueur de 5 permutation. Selon une caractéristique particulière de l'invention, tous lesdits modules de codage de base mettent en oeuvre un code de base identique. Ainsi, le dispositif de codage correcteur d'erreurs selon l'invention est simplifié par l'utilisation de modules de codage de base mettant en oeuvre des 10 codes de base identiques. En effet, l'implémentation technique des modules de codage se trouve simplifiée par la possibilité de réutiliser successivement des modules de codage mettant en oeuvre des codes identiques. En particulier, ledit code de base identique est un code de Hamming de longueur n égale à huit, comprenant k égal à quatre symboles d'information utiles 15 et de distance minimale dm~n égale à quatre. Selon un aspect particulier de l'invention, c est un entier pair. Selon une caractéristique particulière de l'invention, lesdits étages de permutation répartissent deux données traitées issues d'un module de codage de base d'un étage de codage précédent vers au moins deux modules de codage de 20 base d'un étage de codage suivant. Selon un aspect particulier de l'invention, ledit dispositif comprend un module de forçage à zéro, mettant à la valeur nulle au moins une desdites données source et/ou au moins une desdites données de redondance. Ce � forçage � à zéro de certaines données en entrée et/ou en sortie des 25 modules de codage de base permet notamment d'obtenir, de façon très flexible, des codes de rendement différent de ~h et dont les distances minimales restent bonnes, même lorsque le rendement tend vers 1. De même, on peut construire des codes quasi-optimaux avec des rendements tendant vers zéro. En effet, les données forcées à zéro au moment du codage représentent à la réception des informations nulles parfaites non-bruitées. L'invention concerne également un procédé de codage correcteur d'erreurs, du type associant des données de redondance (r0 à ri 1) à des données source (x0 à x11), mettant en oeuvre : - au moins trois étapes de codage dont une première étape de codage, une dernière étape de codage et au moins une étape de codage intermédiaire, mettant chacune en oeuvre au moins un ensemble de trois modules de codage de base, chaque module de codage mettant un oeuvre un code de base, chaque étape de codage recevant des données à traiter réparties entre les différents modules de codage de base et délivrant des données traitées issues desdits modules de codage de base, ladite première étape de codage recevant lesdites données source et ladite dernière étape de codage délivrant lesdites données de redondance ; et - au moins deux étapes de permutation, lesdites étapes de permutation étant mises en oeuvre entre deux étapes de codage successives, dites étape de codage précédent et étape de codage suivant, et répartissant les données traitées issues de chaque module de codage de base mis en oeuvre dans l'étape de codage précédent entre au moins deux modules de codage de base mis en oeuvre dans l'étape de codage suivant. Selon l'invention, chaque module de codage de base comprend c entrées et c sorties, avec c un entier, et en ce que chaque étape de permutation met en oeuvre une permutation de type c-cyclique. Un tel procédé peut être mis en oeuvre par un dispositif de codage correcteur d'erreurs tel que décrit précédemment. Ce procédé se décline en différents mode de réalisation qui comportent respectivement les différentes caractéristiques relatives aux différents modes de réalisation du dispositif de codage correcteur d'erreurs selon l'invention. Enfin, l'invention concerne également un programme d'ordinateur comportant des instructions pour la mise en oeuvre du procédé de codage correcteur d'erreurs tel que décrit précédemment lorsque ledit programme est exécuté par un processeur. 4. Liste des figures D'autres caractéristiques et avantages de l'invention apparaîtront plus clairement à la lecture de la description suivante d'un mode de réalisation particulier, donné à titre de simple exemple illustratif et non limitatif, et des dessins annexés, parmi lesquels : - la figure la illustre un exemple de module de codage de base selon un mode de réalisation du dispositif de codage correcteur d'erreurs de l'invention, représentant un codeur de Hamming compact C4 ; - la figure lb illustre la matrice de transfert P du codeur de la figure la ; - les figures 2a et 2b illustrent deux exemples de module de codage de base selon un mode de réalisation du dispositif de codage correcteur d'erreurs de l'invention, représentant respectivement un demi-codeur de Hamming à gauche C4+ et un demi-codeur de Hamming à droite C4 ; - les figures 2c, 2d et 2e illustrent trois exemples de module de codage de base selon un mode de réalisation du dispositif de codage correcteur d'erreurs de l'invention, représentant respectivement des demi-codes à 5, 6 et 7 entrées ; - la figure 3a illustre un premier mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant trois étages de codage comprenant chacun trois modules de codage de base mettant en oeuvre un code de Hamming compact C4, et deux étages de permutation it0 ; - la figure 3b présente la matrice de transfert P du codeur de la figure 3a ; - la figure 4a illustre un deuxième mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant trois étages de codage comprenant chacun trois modules de codage de base mettant en oeuvre un code de Hamming compact C4, un demi-code de Hamming à gauche C4+, un demi-code de Hamming à droite C4 ou un code identité de longueur quatre, et deux étages de permutation itO ; - la figure 4b présente la matrice de transfert P du codeur de la figure 4a ; - la figure 5a illustre un troisième mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant trois étages de codage comprenant chacun quatre modules de codage de base mettant en oeuvre un code de Hamming compact C4, et deux étages de permutation it0 ; - la figure 5b présente la matrice de transfert P du codeur de la figure 5a ; - la figure 6a illustre un quatrième mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant cinq étages de codage comprenant chacun six modules de codage de base mettant en oeuvre un code de Hamming compact C4, deux étages de permutation it0, un étage de brassage antérieur 7t-1 et un étage de brassage postérieur 7tl ; - la figure 6b présente la matrice de transfert P du codeur de la figure 6a ; - la figure 7a illustre un cinquième mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant cinq étages de codage comprenant chacun neuf modules de codage de base mettant en oeuvre un code de Hamming compact C4, deux étages de permutation it0, un étage de brassage antérieur 7t-1 et un étage de brassage postérieur 7tl ; - la figure 7b présente la matrice de transfert P du codeur de la figure 7a ; - la figure 8a illustre un sixième mode de réalisation du dispositif de codage correcteur d'erreurs selon l'invention, comprenant sept étages de codage comprenant chacun douze modules de codage de base mettant en oeuvre un code de Hamming compact C4, deux étages de permutation it0, deux étages de brassage antérieur 7t-2 et 7t-1 et deux étages de brassage postérieur 7tl et 7t2 ; - la figure 8b présente la matrice de transfert P du codeur de la figure 8a ; - la figure 9 illustre les principales étapes d'un procédé de codage selon un mode de réalisation de l'invention. 5. Description d'un mode de réalisation de l'invention 5.1 Principe général Le principe général de l'invention repose sur l'association de modules de codage de base et de permutations de type c-cyclique, les modules de codage de base étant choisis de telle manière que, combinés aux permutations de type c-cyclique, le code résultant est optimal et auto-dual. On peut notamment juxtaposer, en série et/ou en parallèle, ces 10 permutations de type c-cyclique, des permutations de graphes bipartis complets et des permutations identité. On rappelle qu'un code est dit � auto-dual � s'il est égal à son dual. En d'autres termes, tout mot u d'un code auto-dual est orthogonal à tout autre mot v du code, y compris lui-même. Ainsi, u.v=0, avec un produit scalaire u.v dans le 15 corps ou l'anneau des symboles du code, c'est-à-dire par exemple modulo2. Pour ce faire, les étages de codage sont au moins au nombre de trois et sont séparés par des permutations spécifiques, choisies pour laisser un maximum de positions invariantes et pour comporter un nombre de cycles minimal. Les codes mis en oeuvre par les modules de codage de base sont également 20 spécifiques, et appartiennent au groupe comprenant les codes de Hamming, les demi-codes de Hamming tels que définis ci-après, ou les codes identité. L'invention propose donc une nouvelle structure de codeur correcteur d'erreurs, permettant d'obtenir, pour un rendement donné, un code dont la distance minimale est la plus grande possible, dont la mise en oeuvre est la plus 25 simple possible, et permettant un décodage de complexité réduite, c'est-à-dire une factorisation des calculs lors du codage et du décodage grâce à une factorisation des matrices P de transfert du code obtenu selon l'invention. Elle permet ainsi de simplifier l'implantation des codeurs Cortex existants, tels que définis dans le brevet européen EP 1 101 288 précité. Cette amélioration 30 des codes Cortex permet notamment de définir de nouveaux codes, comme les codes auto-duaux optimaux (n=48, k=24) et (n=72, k=36), qui peuvent eux-mêmes devenir des codes de base pour construire de nouveaux codes plus longs, selon le principe récursif de l'invention. Un codeur correcteur d'erreurs selon l'invention peut trouver des 5 applications dans un grand nombre de domaines, et notamment dans les domaines listés en relation avec l'art antérieur. 5.2 Définitions 5.2.1 Code de Hamming compact et demi-codes de Hamming à gauche et à droite 10 La figure la illustre une représentation particulière d'un code de Hamming (8, 4, 4), dit code de Hamming compact C4, qui peut être mis en oeuvre dans un module de codage de base selon un mode de réalisation du dispositif de codage correcteur d'erreurs de l'invention. Ce module de codage de base comprend quatre entrées x0, xl, x2 et x3 (ce 15 = 4), correspondant à des données source, et quatre sorties r0, rl, r2 et r3, (cs = 4) correspondant à des données de redondance, calculées de la manière suivante : rO = xO + xl + x3 rl = xO + xl + x2 r2 = xl + x2 + x3 20 r3=xO+x2+x3 La matrice de transfert P de ce code de Hamming compact est illustrée en figure lb, où les ronds blancs correspondent à 0 et les ronds noirs correspondent à 1. Le polynôme énumérateur des poids des lignes de cette matrice de 25 transfert P est égal à Wp(X) = 4X3, avec un poids minimal wmin = 3 et une distance minimale dm~n = 4. Ce code de base est auto-dual. Il permet donc de garantir un rendement de i Du fait de la représentation spécifique adoptée, le code dual de ce code de 30 base peut s'obtenir facilement en remplaçant les opérations d'addition (� + �) par des opérations d'égalité (� = �), et les opérations d'égalité (� = �) par des opérations d'addition (� + �), et en inversant le sens des flèches. Cette représentation est donc avantageuse. Cette représentation spécifique permet également de construire deux nouveaux codes pouvant être utilisés dans les modules de codage de base, en découpant le code de Hamming compact ainsi représenté en deux, en suivant l'axe (AA') de la figure la. On obtient de cette façon deux codes plus petits, appelés demi-code de Hamming à gauche, noté C4+, et demi-code de Hamming à droite, noté C4 . Le demi-code de Hamming à gauche C4+ est associé à une matrice de transfert P+ et le demi-code de Hamming à droite C4 à une matrice de transfert P telles que P = P+ x P- = P- x P+ . Ces deux demi-codes sont illustrés respectivement en figures 2a et 2b. Plus précisément, selon cet exemple, le demi-code à gauche C4+ comporte quatre bits d'entrée (x0, xl, x2, x3) (ce = 4) et quatre bits de sortie (r'0, r' 1, r'2, r'3) (cs = 4). Le demi-code à droite C4 comporte quatre bits d'entrée (r"0, r" 1, r"2, r"3) (ce = 4) et quatre bits en sortie (r0, rl, r2, r3) (cs = 4). Le demi-code à droite C4 est le code dual du demi-code à gauche C4+ 20 (primai), avec (ce) = (cs) = 4. Ces deux demi-codes à gauche C4+ et à droite C4 peuvent être regroupés en connectant directement les sorties (r'0, r'1, r'2, r'3) du demi-code à gauche C4+ aux entrées (r"0, r" 1, r"2, r"3) du demi-code à droite C4 , pour former un code de Hamming compact C4. 25 Selon cet exemple, le demi-code à gauche du code de Hamming C4 est défini par un motif ou � pattern � 2-cyclique tel que : x(2i-1) + x(2i) + x(2i+l) donne r'(i) et x(2i+l) donne r'(2i+1), 30 avec les indices i calculés modulo la longueur (ce), soit quatre pour le code de Hamming C4(8,4,4). Ainsi : - pour i = 0 : r'0=x(-1)+x(0)+x(1)=x3+x0+xl r'l =xl - pour i = 1 : r'2=x(1)+x(2)+x(3)=xl+x2+x3 r'3 = x3. Dans d'autres modes de réalisation, on peut avoir des codes de base présentant un nombre d'entrées (ce) différent du nombre de sorties (cs). De même, cette représentation � compacte � du code de Hamming peut être étendue à un nombre d'entrées ou de sorties différent de quatre. Une formule générale permettant de construire des demi-codes de base à gauche, et à droite, ayant c entrées et sorties, peut s'exprimer de la façon suivante : - pour les indices pairs (2i) avec 0 On respecte donc un même motif de permutation pour chaque bloc de longueur c = 4. Une permutation de type c-cyclique peut s'écrire sous la forme : Tc4,k (i) = O p + i(modk) si i = 0 (modc) J A,k(i)=01+ i(modk)sii=1(modc) Vi = 0, 1, ..., (k-1 Tc4,k(i) = Acù1 + i(modk) si i = (c -1) (modc) avec 4 = { OO Ol Acù1 } un ensemble de paramètres entiers (ajouté ou 10 retranché de l'indice d'un symbole de sortie de la permutation c-cyclique afin de trouver l'indice de ce symbole à l'entrée de la permutation). L'utilisation de cette permutation permet de simplifier la mise en oeuvre du dispositif de codage correcteur d'erreurs, en diminuant le nombre de composants à utiliser. 15 De plus, cette permutation de type c-cyclique permet de limiter les accès en mémoire, pour les bits invariants, qui sont laissés à leur place mémoire. Les calculs d'adresse sont également minimisés, car les adresses des données non utiles sont réutilisées. 5.2.3 Permutation de graphes bipartis complets 7r Bk 20 Ces permutations ont un rôle de mélange ou brassage d'informations, en entrée ou en sortie des modules de codage de base. Une telle permutation peut s'écrire sous la forme : lrBk(i) = + c * (i modp) Vi = 0, 1, ..., (k-1), avec p = p 1 k J c (où l'opérateur L.] désigne la partie entière). 25 5.3 Description d'un premier mode de réalisation On présente maintenant, en relation avec les figures 3a et 3b, un premier mode de réalisation du dispositif de codage selon l'invention. La figure 3a illustre la structure d'un codeur selon l'invention, prenant en entrée des données source (x0, xl, x2 ... x11) et délivrant en sortie des données de redondance (r0, rl, r2 ... rll). Ces données de redondance peuvent ensuite être utilisées, en combinaison avec les données source, pour former un mot de code. Le codeur ainsi réalisé comprend trois étages de codage cA, cB et cC, et deux étages de permutation it0. Chaque étage de codage comprend trois modules de codage de base : (A0, Al, A2) pour le premier étage de codage cA, (B0, B1, B2) pour l'étage de codage intermédiaire cB et (CO, Cl, C2) pour le dernier étage de codage cC. Les nombres indiqués en entrée et en sortie des étages de permutations 7t0 définissent la position des symboles en entrée d'un étage de permutation et leur position correspondante en sortie. Selon ce premier mode de réalisation, chaque module de codage de base correspond au codeur C4 illustré en figure la, mettant en oeuvre un code de Hamming compact comme décrit ci-dessus. De plus, les permutations it0 utilisées sont des permutations de type 4- cyclique, de paramètre A=1 (ce qui permet de limiter les � croisements �), qui sont décrites par un nombre minimum de cycles et donc un nombre maximum de positions invariantes (représentées par les traits horizontaux dans les étages de permutation), ce qui réduit les calculs et les accès mémoire. Ce codeur permet d'obtenir un code de longueur n égale à 24, avec k égal à 12 symboles d'information utiles et une distance minimale drain égale à 8. L'utilisation de code de Hamming C (8, 4, 4) dans l'ensemble des modules de codage de base permet notamment d'obtenir une borne supérieure de la distance minimale pour le code final construit qui atteint la borne minimale Bmin, définit par : drain~Bmin=4L24J+4. Ce code obtenu par une construction Cortex selon l'invention, est appelé par la suite code Cortex-Golay (24, 12, 8) � simplifié �. En d'autres termes, l'invention permet de reconstruire un code de Golay en utilisant une structure simplifiée à base de codes de Hamming.La matrice P de transfert du code final obtenu est illustrée en figure 3b. Le polynôme énumérateur des poids des lignes de cette matrice P est égal à : Wp(X) = 12X7, avec un poids minimal Wmin 7 et une distance minimale dmin La figure 4a illustre un codeur selon l'invention, prenant en entrée les données (x0, xl, x2 ... x11) et délivrant en sortie les données de redondance (r0, rl, r2 ... rll). De nouveau, ces données de redondance peuvent être utilisées en combinaison avec les données source pour former un mot de code. Le codeur ainsi réalisé comprend trois étages de codage cA, cB et cC, et deux étages de permutation it0. Chaque étage de codage comprend trois modules de codage de base : le premier étage de codage cA met en oeuvre trois demi-codes de Hamming à gauche C4+ (A0, Al, A2), l'étage de codage interémdiaire cB met en oeuvre deux codes de Hamming compact C4 (B0, B2) et un code identité Id4, le dernier étage de codage cC met en oeuvre trois demi-codes de Hamming à droite C4 (CO, Cl, C2). Comme dans le mode de réalisation précédemment décrit, les permutations it0 utilisées sont des permutations de type 4-cyclique, de paramètre A=1, qui sont décrites par un nombre minimum de cycles et donc un nombre maximum de positions invariantes (représentées par les traits horizontaux dans les étages de permutation), ce qui réduit les calculs et les accès mémoire. En revanche, dans ce mode de réalisation, les étages de codage ne mettent pas tous en oeuvre des codes de même type. En effet, le premier étage de codage cA comprend trois modules de codage de base (A0, Al, A2) mettant chacun en oeuvre un code de type demi-code de 10 Hamming à gauche C4+, tel que décrit précédemment. Ce demi-code de Hamming à gauche n'est pas auto-dual, aussi, afin de conserver cette propriété au code � global � ou final construit, le dernier étage de codage cC comprend également trois modules de codage de base (CO, Cl, C2) mettant chacun en oeuvre un code de type demi-code de Hamming à droite C4 . 15 L'assemblage de ces deux étages de codage cA et cC comprenant des modules de codage de base mettant en oeuvre des demi-codes de Hamming à gauche et à droite est équivalent à un étage de codage comprenant des modules de codage de base mettant en oeuvre des codes de Hamming compact. L'utilisation de demi-codes de Hamming à gauche et à droite permet une 20 plus grande souplesse dans la construction du code final, et permet en particulier d'obtenir un plus grand nombre de codes. L'étage de codage intermédiaire cB comprend quant à lui deux modules de codage de base (B0, B2) mettant en oeuvre un code de Hamming compact C4, et un module de codage de base mettant en oeuvre un code identité Id4. 25 Cette diversité de codes de base C4+,C4, Id4 et C4-, permet de construire pratiquement tous les codes auto-duaux, optimaux mais aussi ceux qui ne sont pas optimaux. Cependant, le choix est fait en fonction du poids minimal des lignes de leurs matrices de transfert P, qui donne une borne des poids des mots non-nuls du code. 30 Ce codeur met en oeuvre le même motif de permutation it0 de type 4- cyclique que celui décrit dans le mode de réalisation précédent, c'est-à-dire une permutation de type 4-cyclique et de paramètre A=1. La matrice P de transfert de ce code est illustrée en figure 4b. Le polynôme énumérateur des poids des lignes de cette matrice P est égal 5 a: Wp(X) = 2X3+2X5+6X7+2X9, avec un poids minimal wmin = 3 et une distance minimale 4. 5.5 Description d'un troisième mode de réalisation On présente maintenant, en relation avec les figures 5a et 5b, un troisième mode de réalisation du dispositif de codage selon l'invention. 10 La figure 5a illustre un tel codeur selon l'invention, prenant en entrée les données (x0, xl, x2 ... x15) et délivrant en sortie les données de redondance (r0, rl, r2 ... r15). Le codeur ainsi réalisé comprend trois étages de codage cA, cB et cC, comprenant chacun quatre modules de codage de base (A0, Al, A2, A3), (B0, B1, 15 B2, B3) et (CO, Cl, C2, C3) mettant chacun en oeuvre un code de Hamming compact C4, et deux étages de permutation it0. Ce codeur met en oeuvre le même motif de permutation it0 de type 4-cyclique que celui décrit dans le premier mode de réalisation, c'est-à-dire une permutation de type 4-cyclique et de paramètre A=1. 20 La longueur de ce code est égale à 32, soit 4/3 de la longueur du code Cortex-Golay C1(24, 12, 8) � simplifié � décrit ci-dessus, et la distance minimale drain de ce code est identique à celle du code Cortex-Golay C1(24, 12, 8) � simplifié � décrit ci-dessus. L'invention permet donc de dériver, à partir d'un code de construction 25 Cortex, un code Cortex plus long ayant la même distance minimale dmin• La matrice P de transfert de ce code est illustrée en figure 5b. Le polynôme énumérateur des poids des lignes de cette matrice P est égal a: Wp(X) = 16X11, avec un poids minimal wmin = 11 et une distance minimale drain Le polynôme énumérateur des poids des lignes de cette matrice P est égal à : Wp(X) = 12X11 + 8X15 + 4X19, avec un poids minimal wmin = 11 et une distance minimale dmin 12. 5.7 Description d'un cinquième mode de réalisation On présente maintenant, en relation avec les figures 7a et 7b, un cinquième mode de réalisation du dispositif de codage selon l'invention. La figure 7a illustre un codeur selon l'invention, prenant en entrée les données (x0, xl, x2 ... x35) et délivrant en sortie les données de redondance (r0, rl, r2 ... r35). Le codeur ainsi réalisé comprend cinq étages de codage cA, cB, cC, cD et cE, comprenant chacun neuf modules de codage de base (AO...A8), (BO...B8, (CO. (DO...D8), (EO...E8) mettant chacun en oeuvre un code de Hamming compact C4, deux étages de permutation 720, un étage de brassage antérieur 72-1 et un étage de brassage postérieur 721. L'étage de brassage antérieur 72-1 comprend deux sous-étages de brassage antérieur, notés respectivement 729,36 et 72-11. Le deuxième sous-étage de brassage antérieur 72-11 comprend trois modules de brassage, dont deux modules mettant en oeuvre un brassage noté x812 , et un module mettant en oeuvre un brassage identité z=12 . L'étage de brassage postérieur 721 comprend deux sous-étages de brassage postérieur, notés respectivement 7211 et 729,36. Le premier sous-étage de brassage postérieur 7211 comprend trois modules de brassage, dont deux modules mettant en oeuvre un brassage identité 7C=12 et un module mettant en oeuvre un brassage T1 B12 On peut remarquer que ce codeur comporte trois codeurs mettant en oeuvre des codes appelés précédemment code Cortex-Golay C1(24, 12, 8) � simplifié �, identifiés sur la figure 7a respectivement par les modules de codage de base (BO, B1, B2), (CO, Cl, C2), (DO, D1, D2) pour le codeur Cortex-Golay C1(24, 12, 8) du haut, et (B3, B4, B5), (C3, C4, C5), (D3, D4, D5) pour le codeur Cortex-Golay C1(24, 12, 8) du milieu et (B6, B7, B8), (C6, C7, C8), (D6, D7, D8) pour le codeur Cortex-Golay C1(24, 12, 8) du bas, et les permutations it0 (de type 4-cyclique et de paramètre A=1). Les sorties du codeur Cortex-Golay C1(24, 12, 8) du haut entrent sur le premier module de brassage 7C=12 du premier sous-étage de brassage postérieur itl l mettant en oeuvre un brassage identité (ou une absence de brassage). Les sorties du codeur Cortex-Golay C1(24, 12, 8) du milieu entrent sur le deuxième module de brassage 7r B12 du premier sous-étage de brassage postérieur itl l mettant en oeuvre le brassage suivant : k ÏCBk(i) =[-] + 4 * (i modp) Vi = 0, 1, ..., (k-1), avec p 4 P 10 Par exemple, pour k égal à 12, comme illustré en figure 7a, p est égal à 3 et on obtient les positions suivantes en sorties du deuxième module de brassage : TeB12 = {0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11}. Les sorties du codeur Cortex-Golay C1(24, 12, 8) du bas entrent quant à elles sur le troisième module de brassage 7Z=12 du premier sous-étage de brassage 15 postérieur n11 mettant en oeuvre un brassage identité. L'utilisation de ces modules de brassage distincts, dans un même sous-étage de brassage postérieur 7t11 de l'étage de brassage postérieur itl, est fondamentale pour obtenir une grande diversité de codes résultants. Le deuxième sous-étage de brassage n9,36 de l'étage de brassage postérieur 20 7tl met en oeuvre une permutation de type 4-cyclique de paramètre A égal à 9 et de longueur k égale à 36. L'étage de brassage antérieur 7t-1 met également en oeuvre deux sous-étages de brassage antérieur différents n9,36 et 7t-11. Le premier sous-étage de brassage antérieur n9,36 met en oeuvre une 25 permutation de type 4-cyclique de paramètre A égal à 9 et de longueur k égale à 36, identique au sous-étage de brassage postérieur noté TC9,36• Le deuxième sous-étage de brassage antérieur 7t-11 met quant à lui en oeuvre deux types de permutation différents dans ces trois modules de brassage : la permutation 7B12 , mettant en oeuvre un brassage inverse au brassage défini pour Ir12 , et la permutation identité 7c=12 On peut ainsi exprimer les différentes permutations mises en oeuvre dans la construction de ce codeur, noté codeur Cortex C3(72, 36) de la manière suivante : II(C3) = {7C_1,7CO39L0,9L1} , avec : 7c_1 =7c9,36 °(7cB12 * e=12 *7c B112) et z1 = (Z=12 * 7rB12 * Z=12) ° X9,36 ou, avec une notation simplifiée : C3 = (Cl * Cl * Cl, Ol = 9) , avec * l'opérateur superposant des permutations et ° l'opérateur concaténant des permutations. Les permutations it0 sont de type 4-cyclique et de paramètre A=1. La matrice P de transfert de ce code Cortex C3(72, 36) est illustrée en figure 7b. Le polynôme énumérateur des poids des lignes de cette matrice P est égal à : Wp(X) = 12X15 + 2219 + 2X33, avec un poids minimal Wmin = 15 et une distance minimale dmin 16. 5.8 Description d'un sixième mode de réalisation On présente maintenant, en relation avec les figures 8a et 8b, un sixième mode de réalisation du dispositif de codage selon l'invention. La figure 8a illustre un codeur selon l'invention, prenant en entrée les données (x0, xl, x2 ... x47) et délivrant en sortie les données de redondance (r0, rl, r2 ... r47). Le codeur ainsi réalisé comprend sept étages de codage cA, cB, cC, cD, cE, cF et cG, comprenant chacun douze modules de codage de base (AO...All), (BO...B11), (CO. (DO...D11), (EO...El1), (FO...Fl1), (GO...G11) mettant chacun en oeuvre un code de Hamming compact C4, deux étages de permutation it0, deux étages de brassage antérieur 7t-2 et 7t-1 et deux étages de brassage postérieur itl et 7E2. On peut noter que ce codeur, appelé codeur Cortex C4(96, 48, 20), comporte deux codeurs C2(48, 24) (illustré en figure 6a). Le premier étage de brassage antérieur 7t-2 met en oeuvre une permutation TC20,48 de type 4-cyclique de paramètre A égal à 20 et de longueur k égale à 48. Le deuxième étage de brassage antérieur 7t-1 met en oeuvre une superposition de deux permutations 7t9,24 telles que définies en relation avec la figure 6a. Le premier étage de brassage postérieur 7tl comprend deux sous-étages de brassage postérieur : - le premier sous-étage de brassage postérieur itll comprend quatre modules de brassage, dont deux modules mettant en oeuvre un brassage identité 7Z=12 et deux module mettant en oeuvre un brassage 7r B12 tel que décrit en relation avec la figure 6a ; - le deuxième sous-étage de brassage postérieur met en oeuvre un brassage (x9,24 )2 * _ (,r9,24) * (,r9,24) . Le deuxième étage de brassage postérieur 7t2 comporte également deux sous-étages de brassage postérieur it2l et n20,48 - le sous-étage de brassage it2l comprend deux modules de brassage mettant en oeuvre des permutations distinctes, dont un module mettant en oeuvre une permutation 7t824 et un module mettant en oeuvre une permutation identité jr=24 . On peut ainsi exprimer les différentes permutations mises en oeuvre dans la 20 construction de ce codeur Cortex C4(96, 48, 20) de la manière suivante : Teù2 = n20,48 7eù1 = 09,24 )2 * = (TeB12 * x=12)2* ° ("9,24)2* '2 = ('B24 '=24 ) ° '20,48 25 On note de façon simplifiée : C4 = (C2 * C2, A2 = 20) . Les permutations 7E0 sont de type 4-cyclique et de paramètre A=1. La matrice P de transfert de ce code Cortex C4(96, 48, 20) est illustrée en figure 8b. Le polynôme énumérateur des poids des lignes de cette matrice P est égal à : Wp(X) = 7X19 + 17X23 + 19X27+ 4X31 + X35, avec un poids minimal wmin = 19 et une distance minimale dmin 20. 5.9 Description d'autres modes de réalisation Un septième mode de réalisation de l'invention permet d'obtenir un codeur 5 appelé Cortex C8(192, 96, dm~n REVENDICATIONS1. Dispositif de codage correcteur d'erreurs, du type associant des données de redondance (r0 à dl) à des données source (x0 à x11), ledit dispositif comprenant : - au moins trois étages de codage mettant en oeuvre chacun au moins un ensemble de trois modules de codage de base (A0, Al, A2) (B0, B1, B2) (CO, Cl, C2), dont un premier étage de codage (cA), un dernier étage de codage (cC) et au moins un étage de codage intermédiaire (cB), chaque module de codage mettant en oeuvre un code de base, chaque étage de codage recevant des données à traiter réparties entre les différents modules de codage de base et délivrant des données traitées issues desdits modules de codage de base, ledit premier étage de codage recevant lesdites données source et ledit dernier étage de codage délivrant lesdites données de redondance ; et - au moins deux étages de permutation (i0), lesdits étages de permutation étant insérés entre deux étages de codage successifs, dits étage de codage précédent et étage de codage suivant, et répartissant les données traitées issues de chaque module de codage de base de l'étage de codage précédent entre au moins deux modules de codage de base de l'étage de codage suivant ; caractérisé en ce que chaque module de codage de base comprend c entrées et c sorties, avec c un entier, et en ce que chaque étage de permutation met en oeuvre une permutation de type c-cyclique. 2. Dispositif de codage correcteur d'erreurs selon la revendication 1, caractérisé en ce que lesdits codes de base appartiennent au groupe comprenant : - un code de Hamming de matrice de transfert P ; - un demi-code de Hamming de matrice de transfert P+ ou P- , résultant d'un découpage en deux d'un code de Hamming de matrice de transfert P, tel que P=P+xP =P xP+ ;- un demi-code à gauche tel que : - pour les indices pairs (2i) avec 0 3. Dispositif de codage correcteur d'erreurs selon la revendication 1, caractérisé en ce qu'il comprend au moins un étage de brassage postérieur, inséré 20 entre deux étages de codage successifs, un étage de brassage postérieur comprenant deux sous-étages de brassage successifs, dits premier et deuxième sous-étages de brassage postérieur, mettant en oeuvre des brassages de type différent, et en ce que ledit premier sous-étage de brassage postérieur comprend au moins 25 deux modules de brassage distincts, chaque module de brassage recevant des données traitées issues d'au moins un ensemble de trois modules de codage d'un même étage de codage intermédiaire et délivrant des données brassées, prises en entrée dudit deuxième sous-étage de 10 15brassage postérieur, chaque module de brassage mettant en oeuvre des brassages de type différent, et en ce que le ledit dispositif comprend au moins un étage de brassage antérieur, inséré entre deux étages de codage successifs, un étage de brassage antérieur comprenant au moins un sous-étage de brassage antérieur mettant en oeuvre un brassage identique à un deuxième sous-étage de brassage postérieur d'un desdits étages de brassage postérieur. 4. Dispositif de codage correcteur d'erreurs selon la revendication 3, caractérisé en ce que ledit étage de brassage antérieur comprend au moins deux sous-étages de brassage successifs, dits premier et deuxième sous-étages de brassage antérieur, mettant en oeuvre des brassages de type différent, et en ce que ledit deuxième sous-étage de brassage antérieur comprend au moins deux modules de brassage distincts, chaque module de brassage recevant des données brassées dudit premier sous- étage de brassage antérieur, et fournissant des données re-brassées à au moins un ensemble de trois modules de codage d'un même étage de codage intermédiaire, chaque module de brassage mettant en oeuvre des brassages de type différent. 5. Dispositif de codage correcteur d'erreurs selon la revendication 3, caractérisé en ce que lesdits modules de brassage ou sous-étages de brassage mettent en oeuvre un brassage appartenant au groupe comprenant : - un brassage identité tel que : Vi = 0, 1, ..., (k-1) Jrk(i) = i ; - un brassage tel que : 7 A,k(i) = D0 + i(modk) si i ° 0 (modc) J A,k(i) = Ol + i(modk) si i =1(modc) Vi = 0, 1, ..., (k-1 Jr4,k(i) = Oc-1 + i(modk) si i = (c -1) (modc) - un brassage tel que :JrBk(i) =[-] + c * (i mod p) Vi = 0, 1, ..., (k-1), avec p =[ k ù] , P c avec 4 = { D0 , AI, • • •, Acù1 } un ensemble de paramètres entiers et k la longueur de permutation. 6. Dispositif de codage correcteur d'erreurs selon la revendication 1, 5 caractérisé en ce que tous lesdits modules de codage de base mettent en oeuvre un code de base identique. 7. Dispositif de codage correcteur d'erreurs selon la revendication 6, caractérisé en ce que ledit code de base identique est un code de Hamming de longueur n égale à huit, comprenant k égal à quatre symboles d'information utiles 10 et de distance minimale dmin égale à quatre. 8. Dispositif de codage correcteur d'erreurs selon la revendication 1, caractérisé en ce que lesdits étages de permutation répartissent deux données traitées issues d'un module de codage de base d'un étage de codage précédent vers au moins deux modules de codage de base d'un étage de codage suivant. 15 9. Dispositif de codage correcteur d'erreurs selon la revendication 1, caractérisé en ce qu'il comprend un module de forçage à zéro, mettant à la valeur nulle au moins une desdites données source et/ou au moins une desdites données de redondance. 10. Procédé de codage correcteur d'erreurs, du type associant des données de 20 redondance à des données source, ledit procédé mettant en oeuvre : - au moins trois étapes de codage dont une première étape de codage, une dernière étape de codage et au moins une étape de codage intermédiaire, mettant chacune en oeuvre au moins un ensemble de trois modules de 25 codage de base, chaque module de codage mettant un oeuvre un code de base, chaque étape de codage recevant des données à traiter réparties entre les différents modules de codage de base et délivrant des données traitées issues desdits modules de codage de base,ladite première étape de codage recevant lesdites données source et ladite dernière étape de codage délivrant lesdites données de redondance ; et - au moins deux étapes de permutation, lesdites étapes de permutation étant mises en oeuvre entre deux étapes de codage successives, dites étape de codage précédent et étape de codage suivant, et répartissant les données traitées issues de chaque module de codage de base mis en oeuvre dans l'étape de codage précédent entre au moins deux modules de codage de base mis en oeuvre dans l'étape de codage suivant ; caractérisé en ce que chaque module de codage de base comprend c entrées et c 10 sorties, avec c un entier, et en ce que chaque étape de permutation met en oeuvre une permutation de type c-cyclique. 11. Programme d'ordinateur comportant des instructions pour la mise en oeuvre du procédé de codage correcteur d'erreurs selon la revendication 10 lorsque ledit programme est exécuté par un processeur. 15