FR 2782425 A1 20000218 FR 9816788 A 19981231 Procédé et dispositif de codage correcteur d'erreurs et procédé et dispositif de décodage correspondant. 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, aux codages de données source organisés en blocs de données, indépendants les uns des autres, et devant donc être codés, et décodés, unitairement, ainsi qu'au codage de flux de données (codages convolutifs). De nombreuses techniques de codage permettant la correction d'erreurs de transmission sont déjà connues. On peut notamment se référer aux documents F.J. McWilliams et N. J.A. Sloane [1], S.B.Wicker [2], et V.Pless et al [3] (toutes les références citées dans la présente demande ont été regroupées, pour simplifier la lecture, en annexe). Les codes correcteurs d'erreurs permettent de corriger les erreurs de transmission inhérentes à tout canal de communication. Ainsi, ils sont abondamment utilisés en télécommunications, en télédiffusion et en stockage d'informations, par exemple dans les disques laser et les disques magnétiques... Ces erreurs 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 (par exemple dans le cadre de systèmes de radiotéléphonie tel que le GSM, de radiodiffusion numérique tel que le DAB ou de télévision numérique tel que DVB) ou dans un réseau d'énergie électrique (par exemple pour les télécommunications sur le réseau électrique)... Les premières études sur les codes correcteurs d'erreurs datent des années 1940. Dans ses articles de 1948, Claude Shannon [4] a fondé la théorie de l'information suivant laquelle sont conçus encore actuellement (et pour toujours ?) les systèmes de communications numériques. L'un des résultats de Shannon est son théorème concernant la limite de la capacité d'un canal de communication dont la fameuse formule est : où la capacité C du canal est un débit d'information s'exprimant en bit/s, B la bande passante du canal en Hz, et S/N le rapport des puissances du signal et du bruit dans la bande passante. Ce théorème peut s'énoncer de la façon suivante : "A tout canal est associé une capacité C de transmission (en bit/s). H existe des codes correcteurs d'erreurs tels que l'information peut être transmise à travers un canal à un débit inférieur à sa capacité C avec un taux d'erreurs binaires arbitrairement petit en prenant un code correcteur d'erreurs de longueur suffisamment grande". Le théorème de Shannon est malheureusement seulement une preuve d'existence. Sa publication a donné le coup d'envoi de la recherche sur les "bons" codes qui dure maintenant depuis 50 ans. Les principaux codes qui ont retenus l'attention de la communauté des télécommunications ont d'abord été les codes en bloc pour transmettre des paquets de bits : les codes de Hamming, les codes de Golay, les codes de Reed-Muller, les codes BCH, les codes de Reed-Solomon,... Le principe des codes correcteurs d'erreurs en bloc a été inventé par R.W. Hamming en 1950 : à partir de k bits d'information utile, on calcule (n-k) bits de redondance au moyen d'additions modulo 2 des k bits d'information. la longueur totale de chaque bloc, appelé aussi mot de code, est donc de n bits. A la réception, si des erreurs sont présentes dans le mot de n bits reçus, la présence de (n-k) bits de redondance au côté des k bits d'informations utiles permettra de corriger certaines des erreurs présentes. Si le rapport des puissances signal/bruit est supérieur à une certaine valeur, alors le coût du débit d'information occupé par les bits de redondance du codage est plus que compensé par la réduction, voire la quasi annulation, du taux d'erreurs binaires (TEB) après décodage. Ce gain en performance est appelé gain de codage, pour un TEB fixé, et est donné en décibels (dB). Un gain de codage de 3dB signifie que l'on peut diviser par 2 la puissance du signal émis avec codage pour obtenir le même TEB que sans codage (3 dB = 10.Log10(2)). Une autre grande famille de codages, plus récente, est celle des codes convolutifs introduite par P.Elias [5] en 1955. Ces codages transforment une suite infinie de symboles d'information en plusieurs autres suites infinies de symboles d'information. Ces codes ont été inventé pour transmettre des flux continus d'information. A. J.Viterbi [6] (en 1967) et G.D.Forney [7] (en 1973) ont démontré les possibilités de décoder les petits codes convolutifs de façon efficace avec l'algorithme dit de Viterbi (un algorithme issu de la théorie de la programmation dynamique (Cf. Bellmann [8] (1957)). Les codes (correcteurs d'erreurs) en bloc et les codes convolutifs peuvent être traités avec les mêmes outils théoriques et les mêmes méthodes de décodage. On peut représenter les codes en bloc et les codes convolutifs par des graphes un peu particulier appelés "treillis" à partir desquels on peut calculer leurs distributions des poids et effectuer un décodage selon l'algorithme de Viterbi (Cf. Fomey [7] et McEliece [9]). Chaque mot de code est représenté par un chemin différent dans le treillis et un décodage selon l'algorithme de Viterbi permet de trouver le meilleur chemin c'est-à-dire le mot de code le plus proche du mot reçu. Mais, pour un code en bloc comme pour un code convolutif, la complexité de décodage "explose" de façon exponentielle en 2(n-k) pour un code en bloc, et en 2v pour un code convolutif (v est la taille de la mémoire du codeur convolutif). Le dilemme est que plus un code est long et puissant, plus il corrige d'erreurs, mais plus il est coûteux en temps ou en matériel à décoder. Récemment, en 1993, C. Berrou et A. Glavieux [10] ont présenté un nouveau schéma de codage couramment appelé "turbo-code". On peut souligner quatre idées présentes dans les turbo-codes : 1) Utiliser un codage convolutif récursif, c'est-à-dire ayant une réponse impulsionnelle infinie (et non pas une réponse impulsionnelle finie comme classiquement). 2) Coder une fois les bits d'information utile dans leur ordre initial, puis coder une 2ème fois ces mêmes données utiles mais dans un ordre différent, c'est-à-dire permutées. On n'émet qu'une seule fois les bits utiles, et les codeurs n'émettent que leurs redondances. La permutation, appelée aussi entrelacement, est "magique", car plus sa taille est grande plus le code peut corriger d'erreurs. En effet, l'entrelacement permet de décoréler les erreurs dues au canal de transmission. 3) Utiliser les techniques de décodage à décision douce (en anglais : "soft-decoding") introduite par Bahl et al.(algorithme BCJR) [11], G. Battail [12], ou Hagenauer (algorithme SOVA ("Soft-Output Viterbi Algorithm")) [13] ... 4) Poser par définition que la sortie A, (de chaque décodeur i à décision douce élémentaire, recevant "l'information" #j(0) à l'itération i) est la somme de "l'information" initiale #0 reçue et d'une information extraite ou extrinsèque W. telle que : #i=#0+Wi A l'itération suivante (i+1), on ne réinjecte qu'une partie de l'information extrinsèque telle que : #1+1(0)=#0+[alpha]i+1Wi, avec les coefficients a. variant de 0 à la 1ère itération et pouvant atteindre 1,0 pour la dernière. Ces coefficients a. sont optimisés pour minimiser le TEB à partir d'un certain rapport signal/bruit. En toute rigueur, les quantités A et W sont des logarithmes de rapport de vraisemblance et non pas des quantités d'information. Les premiers turbo-codes de Berrou et Glavieux étaient des codes convolutifs basés sur une matrice de permutation de grande taille (256 x 256 = 65536) donnant des performances proches de la limite de Shannon, pour de faibles rapports signal à bruit. Mais, certains des plus récents systèmes de télécommunications et télédiffusion nécessitent de transmettre de petits paquets d'information (ex : rétrodiffusion hertzienne, téléphone mobile, ATM sans-fil, Internet...). De plus, l'inconvénient d'une permutation de grande taille est un retard de traitement incompressible qui peut être très gênant, dans un service temps réel, comme par exemple dans une conversation téléphonique. C'est pourquoi des recherches ont été menées pour trouver de bons "turbo-codes" en bloc. En particulier, R. Pyndiah et al. [14] ont adapté le concept du décodage itératif aux codes produits d'Elias [5] pour de petits codes en bloc (n Les codes en bloc présentés par Berrou et Pyndiah sont parmi les meilleurs codes connus dans leurs catégories de taille et de rendement (0.5 Pour une longueur n de bloc donnée et pour une capacité de correction : t=# (d-1) / 2# donnée (d est la distance de Hamming minimale entre deux mots du code), il existe des bornes supérieures (plus ou moins sévères) des performances que l'on peut espérer atteindre. La meilleure des bornes supérieures connue est la borne de McEliece et al.[1,2], représentée (11) en trait plein sur la figure 1. On a fait également apparaître, en pointillés, la borne 12 de Gilbert-Varshamov. Pour une distance relative d/n fixée, on ne peut trouver un code ayant un rendement k/n supérieur à la borne de McEliece. De plus, on dit qu'une famille de code est bonne si : lim (d / n)#0 Par exemple, pour un rendement de k/n = 0,5, la borne de McEliece sur la distance minimale relative est d/n Actuellement, les, "turbo-codes" sont les codes correcteurs les plus efficaces, pour un TEB de l'ordre de 10-4. Lorsque ce TEB est très faible, par exemple de l'ordre de 10-10, le gain par rapport aux autres techniques est moins important. Par ailleurs, les rendements obtenus (classiquement 1/2) ne semblent pas optimaux. L'invention a notamment pour objectif de pallier ces différents inconvénients de l'état de l'art. Plus précisément, un objectif de l'invention est de fournir un procédé de codage correcteur d'erreurs offrant des performances meilleures que les codes connus. Notamment, un objectif de l'invention est de fournir un tel procédé, permettant de se rapprocher fortement de la borne de McEliece. Un autre objectif de l'invention est de fournir un tel procédé de codage, qui permette un gain très important en particulier lorsque les taux d'erreurs sont très faibles, de l'ordre de 10-10. L'invention a également pour objectif de fournir un tel procédé, qui permette un gain de rendement, pour un taux d'erreur donné, par rapport aux techniques de codage connues (par exemple, un passage d'un rendement de 1/2 à 1/4 ou 1/8). Un autre objectif de l'invention est de fournir un tel procédé de codage, qui soit adapté au codage de blocs de données de longueur n moyenne, par exemple comprise entre 128 et 2048 bits. Encore un autre objectif de l'invention est de fournir un tel procédé de codage, qui puisse être facilement implanté en VLSI. L'invention a également pour objectif de fournir un procédé de décodage correspondant, qui soit de complexité raisonnable, et notamment qui offre un rapport ou performance/complexité compétitif par rapport aux meilleurs codes connus. Ces objectifs ainsi que d'autres qui apparaitront par la suite sont atteints selon l'invention à l'aide d'un procédé de codage correcteur d'erreurs, du type associant à une série de données source un bloc de données codées, destiné à être transmis vers au moins un récepteur, comprenant : au moins deux étapes de codage comprenant chacun au moins deux modules de codage de base, chacune desdits étapes de codage recevant une série de données à traiter, réparties entre lesdits modules de codage de base, et délivrant une série de données traitées, issues desdits modules de codage de base ; et au moins une étape de brassage, ladite étape de brassage étant insérée entre deux étapes de codage successives, une première étape de codage et un second étage de codage, et répartissant les données traitées issues de chaque module de codage de base de ladite première étape de codage entre au moins deux modules de codage de base de ladite seconde étape. Un tel procédé de codage permet d'obtenir, pour un rendement donné, une distance minimale importante. Un tel code (192,96) de rendement 1/2, construit sur la base de l'exemple décrit par la suite, présente ainsi une distance minimale proche de 30. De plus, la distribution des poids est proche de l'optimale. Chaque étape correspond avantageusement à un étage de la structure d'un dispositif de codage correspondant. Cette structure permet une compréhension plus aisée de l'invention. Cependant, le dispositif peut mettre en oeuvre le procédé de l'invention sous tout autre forme adéquate, et notamment sous une forme essentiellement logicielle, un (ou plusieurs) processeurs effectuant le traitement correspondant. Comme cela apparaîtra par la suite, ce procédé peut aisément être implanté sous la forme d'une machine pipe-line, notamment dans un VLSI. De façon avantageuse, le code mis en oeuvre est systématique, ou pseudo- systématique. Ainsi, ledit bloc de données codées à transmettre comprend avantageusement au moins certaines desdites données source et au moins certaines des données traitées issues du dernier étage de codage, et préférentiellement l'ensemble desdites données source. Selon un mode de réalisation avantageux de l'invention, ledit bloc de données codées comprend des données traitées issues d'au moins deux étapes de codage. Par exemples, on peut prendre en compte les données calculées par la dernière étape, ainsi que d'au moins une étape précédente. On choisira le compromis adéquat, en fonction des besoins, entre la qualité du décodage (prise en compte du plus grand nombre d'informations possible) et le rendement. Dans un mode de réalisation particulier, au moins une desditse étapes de brassage met en oeuvre au moins une matrice de permutation. On peut également prévoir qu'au moins une desdites étapes de brassage distribue des données traitées vers au moins deux étapes de codage distinctes. Les deux aspects peuvent bien sûr être réunis dans un même dispositif. De même, au moins une desdites données source et/ou au moins une desdites données traitées peut être dupliquée au moins une fois, de façon à former au moins deux données à traiter. On peut encore prévoir qu'au moins une desdites données source alimente directement une autre étape de codage que le premier étape de codage. Ces différents aspects sont bien sûr cumulables, et choisis préférentiellement de façon à obtenir le meilleur codage, avec un décodage restant suffisamment simple et efficace. Selon un mode de réalisation particulier de l'invention, le procédé de codage comprend au moins deux unités de codage comprenant chacun au moins deux desdites étapes de codage et au moins une étape de brassage insérée entre deux étapes de codage successives, lesdites données source alimentant chacune desdites unités de codage, dans des ordres d'alimentation différents. Il peut notamment comprendre au moins une unité de brassage, assurant une modification de l'ordre d'alimentation desdites données source dans l'une desdites unités de codage. On obtient ainsi deux (ou plus) jeux distincts de données de redondance. Selon un mode de réalisation avantageux, le procédé de codage met en oeuvre un poinçonnage, sur au moins certaines desdites données à traiter et/ou sur au moins certaines desdites traitées. Avantageusement, lesdits modules de codage mettent en oeuvre un code de redondance de longueur n-k inférieure ou égale à 12. Comme déjà mentionné, l'invention s'applique notamment au codage de blocs de données de taille relativement limitée. Selon un premier mode de réalisation, particulièrement aisé à mettre en oeuvre, tous lesdits modules de codage sont identiques. Lesdits modules de codage peuvent par exemple mettre en oeuvre un code de Reed-Müller. Un autre code avantageux, du fait de sa grande simplicité, est un code (4,2) associant par exemple au couple (xO, xl) les valeurs (xO, xl, xO, xO+xl). Le code trivial, associant systématiquement xO à xO peut également être utilisé, en combinaison avec d'autres codes de base, tel que celui mentionné ci-dessus. De tels codes permettent des réalisations très simples, par exemple à base de tables de valeurs, du fait du petit nombre d'états possibles. Selon un second mode de réalisation, au moins deux desdits modules de codage sont différents. De façon avantageuse, ledit procédé comprend une étape de contrôle et/ou de réglage d'au moins un des éléments suivants : type et/ou caractéristique du codage mis en oeuvre par au moins un des modules de codage de base ; brassage mis en oeuvre par au moins une desdites étapes de brassage ; poinçonnage mis en oeuvre sur au moins certaines desdites données à traiter et/ou au moins certaines desdites données traitées ; nombre d'étapes de codage. Ledit contrôle et/ou ledit réglage peuvent agir systématiquement, sur une période donnée, et/ou en fonction d'au moins une information représentative d'au moins un des aspects appartenant au groupe comprenant : au moins une caractéristique du canal de transmission ; au moins une caractéristique du récepteur ; au moins une caractéristique du signal source. L'invention concerne également les dispositifs de codage correcteur d'erreurs mettant en oeuvre le procédé décrit ci-dessus. Dans ce dispositif, on associe à une série de données source un bloc de données codées, destiné à être transmis vers au moins un récepteur, à l'aide de : au moins deux étages de codage mettant en oeuvre chacune au moins deux codages de base, chacun desdits étages de codage recevant une série de données à traiter, réparties entre lesdits codages de base, et délivrant une série de données traitées, correspondant auxdits codage de base ; et au moins un étage de brassage, ledit étage de brassage étant inséré entre deux étages de codage successives, un premier étage de codage et un second étage de codage, et répartissant les données traitées correspondant à chaque codage de base dudit premier étage de codage entre au moins deux codages de base dudit second étage. Comme indiqué plus haut, chacun desdits étages peut correspondre réellement à un composant (ou un ensemble de composants), ou être mis en oeuvre par un ou plusieurs processeurs pilotés par un programme correspondant. L'invention concerne également les procédés et les dispositifs de décodage correspondants. Avantageusement, un tel procédé de décodage est itératif. De façon préférentielle, ledit procédé de décodage met en oeuvre au moins une des techniques appartenant au groupe comprenant : décodage à l'aide d'une structure symétrique de celle mise en oeuvre lors du codage ; décodage exhaustif, selon lequel on considère tous les mots de code possibles et on sélectionne le meilleur selon un critère de sélection prédéterminé ; décodage de type Viterbi, mettant en oeuvre un treillis de décodage ; décodage de Chase. Avantageusement, un tel procédé de décodage met en oeuvre au moins deux étapes de décodage, comprenant au moins deux modules de décodage, et au moins une étape de permutation insérée entre deux étapes de décodage consécutives, lesdites étapes étant symétriques de celles du codage correspondant, chacun desdits modules de décodage comprenant deux fois plus d'entrées et de sorties que le module de codage correspondant, de façon à assurer la propagation de valeurs de vraisemblance d'une part de l'amont vers l'aval du décodeur, et d'autre part de l'aval vers l'amont dudit décodeur. On obtient ainsi, progressivement, une convergence des données décodées dans les deux sens de décodage. De même que dans le cas du codage, la notion d'étape est à rapprocher de la notion d'étage du dispositif correspondant, tel que décrit par la suite. De façon avantageuse, le procédé de décodage selon l'invention met en oeuvre au moins une itération des opérations suivantes : propagation complète dans le sens amont dudit récepteur desdites valeurs de vraisemblance, délivrant un premier jeu de valeurs estimées ; propagation complète dans le sens aval dudit récepteur desdites valeurs de vraisemblance, délivrant un second jeu de valeurs estimées. De façon préférentielle, ledit décodage détermine des vraisemblances de chemin. Ainsi, chacun desdits décodages élémentaires peut calculer, à chaque itération, une vraisemblance d'état, pour chacun des états possibles du codage correspondant, et sélectionner l'état présentant la vraisemblance la plus élevée. Avantageusement, ladite vraisemblance d'état correspond à la somme d'une première valeur de vraisemblance obtenue à partir des bits d'information et d'une seconde valeur de vraisemblance obtenue à partir des bits de redondance. Préférentiellement, lesdites vraisemblances sont déterminées à partir de lois de probabilité. Notamment, ladite première (respectivement seconde) vraisemblance associée à une sortie donnée d'un desdits décodages élémentaires peut être obtenue en déterminant le logarithme de la somme des exponentielles des vraisemblances des états connectés à ladite sortie, auquel on retranche le logarithme de la somme des exponentielles des vraisemblances reçues en entrée en tant que bits d'information (respectivement bits de redondance) des états connectés à ladite sortie. En d'autres termes, on détermine ainsi des vraisemblances de chemin extrinsèques. Selon un mode de réalisation particulier de l'invention, le procédé de décodage comprend les étapes suivantes : calcul des vraisemblances d'états : " avant " : Fi, basées sur les bits d'information ; " arrière " : Bi, basées sur les bits de redondance ; - calcul des vraisemblances d'états globales : E1 = F, + Gi ; - détection de la vraisemblance d'état Ei maximum ; - calcul des valeurs de vraisemblance suivantes : (valeurs propagées vers l'arrière, d'où proviennent les bits d'information xj) (valeurs propagées vers l'avant, d'où proviennent les bits de redondance rj) où (Ei/xj->Ei) représente la vraisemblance de l'état Ei connecté à la sortie xj. délivrance desdites valeurs au décodage élémentaire suivant. Cette étape de calcul des valeurs de vraisemblance peut éventuellement être simplifiée, en ne prenant en compte dans chacune des sommes des exponentielles que l'état présentant la plus grande vraisemblance. Cette simplification ne modifie pas fortement l'efficacité du décodage. De façon préférentielle, lorsque le décodage a atteint un critère de convergence prédéterminé, éventuellement indépendamment pour chaque module de décodage, on associe à chaque bit une vraisemblance a posteriori après équilibre : Selon une caractéristique avantageuse de l'invention, le procédé de décodage peut être utilisé en tant que procédé de codage, les entrées de redondances étant forcées à 0 et les entrées d'information correspondant aux données à coder. Dans ce cas, il peut être utilisé alternativement d'une part pour le codage et d'autre part pour le décodage de données, par exemple pour des applications de type duplex. Qu'il s'agisse du codage et/ou du décodage selon l'invention, au moins un desdits codages élémentaires et/ou au moins un desdits décodages élémentaires et/ou au moins une desdites permutations est avantageusement programmable. Les éléments programmables du décodage peuvent par exemple se programmer selon au moins un des modes opératoires suivants : en fonction d'une commande prédéterminée, produite par le codage ; en fonction d'une séquence de référence codée par le codage ; par apprentissage en aveugle, à partir des données reçues. On notera que l'efficacité du décodage permet d'effectuer un décodage sans connaissance a priori du codage précis utilisé (apprentissage en aveugle). Selon un mode de réalisation avantageux de l'invention, ledit codage assure un codage source et un codage canal combinés, et ledit décodage assure également un décodage canal et un décodage source combinés. Avantageusement, ledit décodage assure également, au moins partiellement, l'égalisation des effets du canal de transmission. Selon l'invention, il est possible qu'au moins certains desdits calculs sont effectués à l'aide de tables pré-programmées (du fait de la simplicité de chaque module de codage et/ou décodage). Selon un mode de réalisation avantageux de l'invention, au moins certains desdits calculs sont implantés à l'aide de composants analogiques. En effet, l'algorithme est stable par construction, et donc bien adapté aux calculs analogiques. Cela peut notamment être le cas pour les calculs d'exponentielles et de logarithmes, pour lesquels de tels composants sont bien adaptés. Bien sûr, ces calculs peuvent également être effectués de façon numérique. L'invention concerne encore les dispositifs de décodage mettant en #uvre le procédé de décodage décrit ci-dessus. L'invention trouve des applications dans de très nombreux domaines, et peut notamment être utilisée dans le cadre des techniques appartenant au groupe comprenant : la transmission et/ou la diffusion de signaux numériques (par exemple pour les applications regroupées dans le projet ITU "IMT 2000"); la reconnaissance et/ou le traitement de la parole. D'autres caractéristiques apparaitront plus clairement à la lecture de la description suivante d'un mode de réalisation préférentiel, donné à titre de simple exemple illustratif et non limitatif, et des dessins annexés, parmi lesquels : la figure 1 illustre les bornes de McEliece et de Gilbert -Varshamov ; - la figure 2 illustre le principe général d'un dispositif de codage selon l'invention ; la figure 3 est un exemple particulier de dispositif de codage selon la figure 2 ; - la figure 4 illustre d'autres aspects pouvant être mis en oeuvre dans un dispositif de codage selon l'invention ; la figure 5A illustre un module de codage mettant un oeuvre un codage de Reed-Müller (8,4,4), et La figure 5B illustre un module de décodage correspondant ; la figure 6 présente le graphe interne du module de décodage de la figure 5B. La technique de l'invention permet donc la construction de codes quasioptimaux (désignés par l'expression "Codes cortex"), auxquels une méthode de décodage spécifique à décision douce est avantageusement associée. Les résultats obtenus sont de meilleure qualité que ceux des "turbo-codes". En effet, la distance minimum d des turbo-codes actuels est relativement petite. En effet, par exemple un turbo-code en bloc de Pyndiah qui est un code produit (32,26,4)x(32,26,4)=(1024,676,16) , est donc un code de longueur n=1024 pour k=676 bits utiles et une distance minimale d=16. Avec ce code en bloc, on ne peut donc corriger au plus t=[(d-l)/2j=7 erreurs en décision dure. Autre exemple, un turbo-code en bloc de Berrou de longueur 192 bits (Cf. Jung et al. [19] ) et de rendement 1/3, a une distance minimale estimée de 8 avec un entrelaceur optimisé. Un code "cortex" (192,96) de rendement 1/2 a en revanche une distance minimale proche de 30. La distribution des poids des codes "cortex" semblent aussi tendre vers la distribution binômiale qui est celle du codage aléatoire optimal (Cf. G. Battail [16]). Le principe général de l'invention repose sur la mise en oeuvre de plusieurs modules de codage, organisés selon le schéma de principe de la figure 2. Ces modules de codage sont regroupés en au moins deux étages 211 à 21n. Chaque étage de codage 21comprend au moins deux modules de codage 22j, j fonctionnant indépendamment. Entre chaque étage de codage 21; et 21i est inséré un étage de brassage 231 à 23n Les données sortant de chaque module de codage de l'étage 22i sont ainsi réparties entre plusieurs modules de codage de l'étage 22i+1. Cette répartition est effectuée de préférence de façon à répartir au mieux les bits reçus d'un même module de codage. Dans le mode de réalisation décrit, le code mis en oeuvre est un code en blocs systématiques. Le paquet de bits transmis comprend donc les bits utiles 24, ou bits source, et les bits de redondance 25 issus du codeur. Bien sûr, un poinçonnage peut être mis en oeuvre. Selon un mode de réalisation particulier de l'invention, illustré par la figure 3, les modules de codage 22i,j sont tous identiques, et mettent en oeuvre un code de Reed-Müller (8, 4, 4). On obtient ainsi un code "cortex" (48, 24). La matrice génératrice du code de Reed-Müller utilisé est la suivante : '1 0 0 0 0 1 1 1 0 1 0 0 1 0 1 G= 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 Si les quatre bits utiles entrant sont (x0, x1, x2, x3), les quatre bits de redondance sont (x4, x5, x6, x7) tels que : x4=x+xz+xa X4 = Xo + X2 2 X4 = Xo + XI + X3 X4 = Xo + XI + X2 Chaque étage de codage 211,212 et 213comprend six modules de codage de base (8, 4, 4) 221,1 à 223,6. Les bits de redondance du premier étage de codage 211 sont soumis à une permutation #1 (231). Cette permutation peut être considérée comme une "jungle de fils" qui permet d'obtenir une bonne capacité de correction, si elle est choisie de façon adéquate (par exemple par essais successifs et simulation). Le deuxième étage de codage 212 effectue un nouveau calcul de 24 nouveaux bits de redondance intermédiaires, qui sont à nouveau permutés par l'étage de brassage #2 (232). Le processus peut mettre en oeuvre de cette façon plusieurs étages de codage. Un autre code de base pouvant être utilisé, encore plus simple mais donnant de bons résultats, est un code (4, 2) associant par exemple à (xO, xl) les données (cO, cl, c2, c3) = (xO, xl, xO, xO+xl). Un tel code de base rend possible et aisée l'implémentation des cellules de décodage sous la forme de tables précalculées, stockées par exemple dans des mémoires ROM. On peut bien sûr transmettre tous les bits calculés avec les bits utiles. Cependant, le code obtenu a alors un rendement faible. On pourra préférer ne transmettre que les bits utiles de départ 24 et les bits de redondance 25 du dernier étage. On a constaté que ces codes ont des distances minimales très bonnes, et des distributions de poids ayant des "queues de distribution binômiales", c'est-àdire un très petit nombre de voisins après cette distance minimale. De nombreuses variantes et adaptations de ce principe peuvent être envisagées. la figure 4 illustre schématiquement et fictivement (c'est-à-dire de façon simplifiée dans un but illustratif) certaines d'entre elles. Elles peuvent bien sûr être mises en oeuvre indépendamment, ou selon toute combinaison adéquate. Sur cette figure 4, on a représenté un premier étage de codage 41 comprenant plusieurs codeurs identiques CI 411. Ces codeurs sont alimentés par les données source 42. Ils peuvent également prendre en compte des données intermédiaires 43 "réinjectés" depuis un emplacement quelconque de la chaîne de traitement. Les données codées par ces modules de codage 411alimentent une matrice de permutation 44, qui répartit les données entre une pluralité de codeurs d'un deuxième étage de codage 45. Contrairement au premier étage de codage 41, ce second étage de codage 45 met en oeuvre plusieurs codeurs distincts C2, C3, C4 452 à 454. Ces différents codes peuvent être de tous types adéquats. Ils seront par exemple choisis en raison de leur efficacité de codage et/ou de la facilité du décodage correspondant. L'étage de permutation suivant est constitué de plusieurs modules de brassage 461, 462, dans lesquels la répartition des données intermédiaires reçues de l'étage de codage 45 sont distribués de façon variable vers les différents modules de codage 471 de l'étage de codage suivant 47. Ce brassage 461,462 peut être régulier, aléatoire ou contrôlé en fonction d'une information 481. La chaîne de transmission peut encore comprendre un ou plusieurs codages C6 49 (assurant un codage et/ou un cryptage, par exemple), qui agit sur l'ensemble des données qu'il reçoit des modules de codage précédent. Un poinçonnage 410 peut être effectué en différents points de la chaîne et sur différentes données. Dans l'exemple illustré, le poinçonnage 410 est effectué sur un ensemble de données comprenant : - les données source 42 ; les données issues du dernier étage de codage 491 ; - au moins certaines des données intermédiaires 4101. Plus généralement, les données, qu'il s'agisse des données source 42 ou des dominées intermédiaires 4101, peuvent être réparties de façon très variée à l'intérieur de la chaîne de traitement. A titre d'exemple, on a illustré les cas suivants : une donnée intermédiaires 51est dirigée vers deux étages de codage distincts 45 et 47 simultanément ; une donnée source 52 subit le même "découplage" entre un module de codage du premier l'étage de de codage 41 et de l'étage de codage 45 ; - une donnée 53 alimente simultanément deux (ou plus) modules de codage 453 et 454 d'un même étage de codage 45 ; - une donnée 54 issue de l'étage de permutation 44 alimente directement l'étage de codage 47 (et non l'étage le plus proche 45) ; une donnée 55 est sélectivement dirigée vers un premier module de codage 452 ou un second module de codage 453 ; une donnée 56 reçue par un module de codage 454 correspond sélectivement à deux (ou plusieurs) données intermédiaires ; des données source 57 sont introduites dans un étage de codage 45 autre que le premier étage de codage 41 de la chaîne. On peut également prévoir que tout ou partie des données source alimentent d'une part, en direct, une première unité de codage, formée d'au moins deux étages de codage et d'au moins un étage de brassage intercalé, et d'autre part, après brassage (par exemple une permutation), une seconde unité de codage, formé également d'au moins deux étages de codage et d'au moins un étage de brassage intercalé. On obtient ainsi deux jeux de données de redondance (sur lesquels un poinçonnage est bien sûr possible). Il ne s'agit ici bien sûr que d'exemples qui peuvent être adaptés et généralisés. Par ailleurs, de nombreux aspects du traitement peuvent être variables ou contrôlés en fonction d'informations variées telles que, par exemple : - des informations sur le canal de transmission (niveau de bruit, types de bruits, ...) ; - informations sur le décodeur (capacité de traitement, capacité de mémorisation, ...) ; une information sur le type de données transmises (structure et/ou caractéristiques des blocs de données, type d'informations (images, sons, données, ...), qualité de codage requis,...) ; une instruction donnée par un utilisateur ; Ainsi le module 48 de contrôle peut piloter : les permutations ou brassage effectués (481) ; les codages mis en oeuvre (type de codes et/ou caractéristiques du code)(482); le poinçonnage (483). Le choix des codes mis en oeuvre dans les modules de codage tient notamment compte de l'efficacité et de la facilité de décodage. Classiquement , on choisira un code de base tel que la valeur n - k soit petite. Le choix des permutations (ou des brassages) est de préférence effectué de façon à assurer une grande diversité entre les fonctions booléennes de chaque sortie. Plus précisément, on fait en sorte que, finalement, la fonction booléenne de chaque bit de sortie de redondance soit composée d'un ensemble de bits d'information le plus différent possible de ceux des autres bits de sorite de redondance. On peut par exemple chercher des matrices et des codes de base permettant de recréer un code connu tel que par exemple le code de Golay (24, 12, 8). Dans ce but notamment, l'utilisation d'un code de base trivial (associant xO à xO) est envisageable, associé par exemple au code de base déjà cité. L'invention concerne également le procédé et le dispositif de décodage des données produites par le procédé de codage décrit ci-dessus. ce décodage est relativement simple et peu coûteux à mettre en oeuvre. Il est avantageusement itératif, ce qui le rend aisément implémentable et adaptable. La plupart des techniques de décodage classiques peuvent être mises en oeuvre. Ainsi, on peut mettre en oeuvre un décodage exhaustif, selon lequel on considère tous les mots de code possibles et on sélectionne le meilleur selon un critère de sélection prédéterminé. On peut également utilisé un décodage de type Viterbi, mettant en oeuvre un treillis de décodage (par exemple selon les algorithmes SOVA ou BJCR). Une autre technique envisageable est la mise en oeuvre d'un décodage s'appuyant sur l'algorithme de Chase. Avantageusement, on met en oeuvre un décodage dont la structure est calquée sur la structure du codeur décrite précédemment. En d'autres termes, le décodeur comprend plusieurs étages de décodage comprenant chacun plusieurs modules de décodage, et séparés par des étages de permutation. Cette structure s'implante aisément sous la forme d'une machine pipeline, en VLSI. La figure 5B illustre un module de décodage, correspondant au module de codage illustré à la figure 5A (mettant un oeuvre un codage de Reed-Müller (8,4,4). Ce module de décodage est un décodeur à entrées pondérées et à sorties pondérées, réalisé par exemple à partir de techniques connues, telle que la méthode SOVA. # met en oeuvre des additions et des soustractions. Chaque fil (entrée ou sortie) du module de codage de la figure 5A, correspondant à un bit du codeur, est dédoublé en deux fils dans le module de décodage de la figure 5B. Ces fils permettent de communiquer, ou de propager, les valeurs de vraisemblance de l'amont vers l'aval du décodeur, ou de l'aval vers l'amont. Les calculs dans le décodeur peuvent s'effectuer suivant un séquencement particulier afin de minimiser ces derniers. On commence par introduire les valeurs reçues sur les fils d'entrée de vraisemblance des données et des bits de redondance. La valeur de vraisemblance est égale au rapport log(probabilité (bit=0)/probabilité (bit=l)), qui est, dans le cas d'un canal gaussien, proportionnelle à la valeur reçue, dans le cas d'une modulation à 2 états, (0, 1) associant (+1, -1). Les valeurs non définies à l'initialisation du réseau sont par défaut fixée à une valeur prédéterminée, avantageusement zéro. En se référant à la structure du codeur de la figure 2, qui est similaire à celle du décodeur, le décodage s'effectue de la façon suivante : on introduit les valeurs de vraisemblance reçues à traiter dans les étages de décodage d'extrémité (premier et dernier étages) ; les nouvelles valeurs de vraisemblance calculées alimentent les étages voisins, et ainsi de suite jusqu'à l'étage central (si le nombre d'étages de décodage est impair) ou les étages centraux (si le nombre d'étages de décodage est pair) ; ensuite, le processus suit le trajet inverse, des étages centraux vers 5 10 15 20 25 30 les étages d'extrémité, jusqu'au premier et dernier étages. Ces étapes correspondent à une itération du traitement. Elles sont répétées soit jusqu'à un nombre d'itérations donné, soit avec un arrêt des itérations en fonction d'un critère de minimisation de la somme des valeurs absolues ou la racine carrée des carrés des variations d'une itération à une autre des vraisemblances entrantes et sortantes pour chaque fil, pour au moins un étage. L'arrêt des itérations peut se faire séparément au niveau de chaque cellule, afin de minimiser la quantité de calcul. On vérifie en effet que l'on tend au fur et à mesure des itérations vers une stabilité des vraisemblances entrant et sortant d'un même bit dans un module de décodage. Un mode de mise en oeuvre préférentiel du décodage, toujours basé sur une structure similaire à celle du codeur de la figure 2, consiste à faire effectuer aux données une propagation complète des vraisemblances de chemin calculées par chaque cellule (ou module) dans le sens amont du codeur (du début à la fin, étage après étage), puis dans le sens aval, selon un principe du type "forwardbackward" ("en avant-en arrière"). De façon avantageuse, le décodage repose donc sur des vraisemblances de chemin. On présente ci-après un exemple de décodage reposant sur cette approche. On considère un "code cortex" construit avec un unique code de base, le le code de Hamming étendu (8,4,4) déjà mentionné. Les mots de code correspondants c peuvent s'écrire : [c0 cl c2 c3 c4 c5 c6 c7] Ils sont calculés à partir des bits d'information x : [x0 xl x2 x3] à transmettre, par le produit vecteur-matrice : c = x.G . Le code de base est donc composé de 16 mots qui peuvent être considérés comme des états. Le décodeur repose en partie sur le graphe de ce codeur de base et de ses états, illustré en figure 6. Les états EO à E15 représentent les mots du code (xO,xl,x2,x3,rO,rl,r2,r3) tels que : EO = 0000 0000, E15=1111 1111, El=0001 1110, E14= 1110 0001, E2 = 0010 1101, E13 = 1101 0010, E3 = 0011 0011, E12= 1100 1100, E4 = 0100 1011, E11= 1011 0100 E5 = 0101 0101, E10 = 1010 1010 E6 = 0110 0110, E9 = 1001 1001 E7 = 01111000, E8 = 1000 0111 Une règle simple à retenir pour ce code de base est : si le nombre de bits d'information est impair, alors le mot de redondance est égal au complément du mot d'information, sinon il lui est égal. On considère que le codeur mis en oeuvre est le codeur de la figure 3, comprenant trois étages de codage comprenant chacun six modules de codage. Pour ce code de base Hamming(8,4), chaque étage comporte donc 6 cellules de codeur/décodeur de base. Entre chaque étage de codage/décodage est présente une matrice de permutation notée #. La description graphique du décodeur est calquée sur celle du codeur, à la différence près que les fils sont dédoublés (voir figures 5A et 5B) pour propager les vraisemblances des chemins passant par les états internes et les états des bits d'information et de redondance qui constituent les entrées et sorties des décodeurs de base. Le processus de décodage commence par l'initialisation des vecteurs des valeurs de vraisemblances des bits d'information X=(x0,...,x23) et de redondance reçues R=(r0,rl,...,r23) (24 entrées et 24 sorties par étage) sur les étages de début et de fin (étages 1 et 3 dans l'exemple discuté). Chaque décodeur élémentaire calcule des vraisemblances Fi "avant" (en anglais : "Forward") et Bi "arrière" (en anglais : "Backward"), puis la vraisemblance Ei=Fi+Bi pour chacun des états ( ici i = 0, 1,..., 15). Les vraisemblances Fi sont calculées avec les vraisemblances des bits d'informations, et les vraisemblances Bi avec les vraisemblances des bits de redondance. Par exemple pour l'état 0 = 0000 0000, la vraisemblance "avant" FO est égal aux vraisemblances des chemins venant des bits d'information le constituant : FO = V(x0=0) + V(xl=0) + V (x2=0) V(x3=0) De même, on détermine la vraisemblance "arrière" : BO = V(r0=0) + V(rl=O) + V(r2=0) + V(r3=0) puis la somme : EO = FO + BO Pour simplifier les notations, on confond l'état Ei avec sa vraisemblance. L'algorithme de décodage met donc en oeuvre des interactions (contraintes de codage), en fonction des entrées V (xi) de chemin "avant") et V (ri) (vraisemblances de chemin "arrière"), pour délivrer les sorties V'(xi) et V'(ri) correspondantes. Les chemins provenant de l'avant et ceux provenant de l'arrière se rencontrent (interagissent) sur certains états d'une cellule de décodage de base. Cette interaction produit de l'information qui se traduit par une valeur de vraisemblance a posteriori des chemins passant par ces noeuds de la cellule de décodage. Mais on ne propage pas vers l'arrière (respectivement vers l'avant) la partie de la vraisemblance de chemin provenant du même côté, ici l'arrière (respectivement l'avant). Cette vraisemblance que l'on propage en arrière (respectivement en avant) de ce noeud est la vraisemblance a posteriori de la partie du chemin en avant (respectivement en arrière) de ce noeud. Les valeurs de vraisemblances de sorties de redondance (respectivement d'information) sont calculées en retranchant au double du logarithme de la somme des exponentielles des vraisemblances des états Ei connectés à la sortie xj, le logarithme de la somme Ei+Bi des exponentielles des vraisemblances des états et de leurs vraisemblances "arrière" (respectivement "avant" Ei+Fi) des états connectés à cette même sortie xj. De façon plus synthétique, on détermine les vraisemblances de chemin propagées vers l'avant (forward) : ce qui peut se simplifier en : De façon symétrique, les vraisemblances de chemin propagées vers l'arrière (backward) s'écrivent : où : Ei xj - Ei représente la vraisemblance de l'état Ei connecté au noeud de sortie xj. Par exemple, pour les noeuds (x0=0) et (r0=0) de la figure 6, on a : V' (x0)=2Log[eE0+eE1+eE2+eE3+eE4+eE5+eE6+eE7] - Lü ge [ EO+FO+ e EI+Fl+ e E2+F2+ e EhF3+ e E4+F4+ e E5+F5+ e E6+F6+ e E7+F7J car le noeud (x0=0) est relié aux états internes du codeur portant les numéros {0,1,2,3,4,5,6,7}, et V' (r0)=2Log[eE0+eE1+eE2+eE3+eE4+eE5+eE6+eE7] -Log [eE0+B0+eE1+B1+eE2+B2+eE3+B3+eE4+B4+eE5+B5+eE6+B6+eE7+B7] car le noeud (r0=0) est relié aux états internes du codeur numéros {0,3,5,6,8,11,13,14}. Il est possible de simplifier les calculs ci-dessus en prenant l'approximation suivante, si Ek Ei pour ik : V(xj) = (Ek = Max(Ei/xj-Ei)-Fk V(rj)= (Ek = Max(Ei/rj-Ei)-Bk On pourra réaliser ces calculs de façon numérique avec un microprocesseur, ou de façon analogique, par exemple avec des transistors bipolaires ou CMOS qui réalisent par construction les fonctions Logarithme et Exponentielle (voir par exemple les références [20] et [21]). On prend ensuite ces valeurs calculées V' comme les nouvelles entrées des cellules (ou modules) de décodage des étages adjacents, et on recommence les calculs pour toutes les cellules en gardant inchangées les vraisemblances des bits reçus. Quel que soit l'ordonnancement (en anglais : "scheduling") des calculs, on constate le réseau de cellules du décodeur converge toujours rapidement vers un équilibre global. De cet équilibre, on peut extraire les vraisemblances a posteriori V" de chaque bit en effectuant à partir des vraisemblances des états d'équilibre des cellules des étages 1 et 3, après réalisation de cet équilibre, le calcul : ce qui peut se simplifier en utilisant l'approximation ci-dessus : V ' (xj) = (EkO = Max(Ei/ (xj = 0) - Ei)) - EkO = Max(Ei / (xj = 1 ) - Ei)) La complexité des calculs de l'algorithme est d'ordre O(NLog(N)) et la convergence est rapide à cause des propriétés de mélange du graphe. Le décodeur de l'invention assure une très bonne correction des erreurs (du fait notamment de la dispersion due aux matrices de permutation) et une très bonne convergence (vitesse de décodage). De nombreuses variantes de l'invention peuvent être envisagées, ainsi que des applications variées, en particulier dans le domaine des transmissions (transmission de signaux multimédia, de télévision numérique, de radiotéléphonie, etc...), par exemple dans le cadre du projet ITU intitulé "IMT 2000", ou encore pour la reconnaissance, le codage ou la compréhension de la parole (par exemple dans le cadre de la manipulation de champs de Markov). Lorsque l'invention est utilisée pour la transmission, ou la diffusion, de signaux, on notera que le codeur peut avantageusement effectuer en une seule opération le codage source et le codage canal. De même, dans ce cas, le décodeur effectue un décodage canal et un décodage source simultanés. Avantageusement, le décodeur effectue également (au moins en partie) l'égalisation du canal de transmission. La structure spécifique du codeur et du décodeur offre une grande souplesse, et il est notamment possible de modifier le "code cortex" utilisé, en modifiant les codes de base et/ou les permutations mises en oeuvre. On peut prévoir que le décodeur s'adapte au code mis en oeuvre en fonction d'une information spécifique qui lui est transmise, ou par un apprentissage effectué sur une séquence de référence, qu'il connait a priori, ou encore par un apprentissage en aveugle, effectué directement sur les données reçues. Cette souplesse du décodeur offre par ailleurs une tolérance aux pannes : par exemple, la défaillance d'un module de décodage n'empêche pas la convergence du décodage. Par ailleurs, un décodeur peut être utilisé également pour effectuer un codage, les entrées de redondances étant alors forcées à 0 et les entrées d'information correspondant aux données à coder. On recherche alors l'équilibre, de même que dans le cadre du décodage. Dans ce cas, il peut être utilisé alternativement d'une part pour le codage et d'autre part pour le décodage de données, par exemple pour des applications de type duplex. Un seul équipement est alors suffisant pour assurer les deux fonctions de codage et de décodage. ANNEXE [1] F.J. MacWilliams, N.J.A. Sloane, " The Theory of Error-Correcting Codes North-Holland, 3rd edition, 1981. [2] S. B. Wicker, "Error Control Systems for Digital Communication and Storage", Prentice Hall, 1995. [3] V. Pless et al. " The Handbook of Coding Theory ", Elsevier, 1998. [4] C.E. Shannon, " A Mathematical Theory of Communication ", Bell System Technical Journal, pp. 379-423 et 623-656, no 27, 1948. [5] P. Elias, " Coding for Noisy Channels ", IRE Conv. Record, Part 4, pp. 37-47,1955. [6] A.J. Viterbi, " Error bounds for convolutional codes and an asymtotically optimum decoding algorithm ", IEEE, IT13, pp. 260-269,1967. [7] G.D. Forney Jr. ,"The Viterbi algorithm ", Proceedings of the IEEE , Vo1.61, pp. 268-276, March 1969. [8] R.E. Bellman, " Dynamic programming ", Princeton University Press, 1965. [9] R.J. McEliece, " On the BCJR Trellis for linear block codes ", IEEE, IT Vol.42, pp. 1072-1092, July 1996. [10] C. Berrou, A. Glavieux, P. Thitimajshima, " Near Shannon Limit Error-Correcting Coding and Decoding: Turbo-Codes ", Proceedings of the ICC'93,Geneva,Switzerland,May 1993, pp.1064-1070. [11]L.R. Bahl, J. Cocke, F. Jelinek , J. Raviv : " Optimal decoding of linear codes for minimizing symbol error rate ", IEEE, Vol. IT20, pp.284-287, March 1974. [12] G. Battail, " Pondération des symboles décodés par l'algorithme de Viterbi ", Annales des télécommunications, Vol. 31, no 1-2, pp. 31-38, Janvier-Février 1987. [13] J. Hagenauer, P. Robertson, L. Papke, " Itérative turbo decoding of systematic convolutional codes with the MAP and the SOVA algorithms ", in Proc. ITG'94, 1994. [14] R. Pyndiah, A. Glavieux, A.Picart, S. Jacq, " Near optimum decoding of products codes ", Proc. GLOBECOM'94, San Francisco, CA, Dec. 94, pp. 339-343. [15] C. Berrou, A. Glavieux, " Near Optimum Error Correcting Coding and Decoding : turbo-Codes ", IEEE, Vol. IT44, no. 10, October 1996, pp. 1261-1271. [16] G. Battail, " A conceptual framework for understanding turbo-codes ", International Symposium on turbo-codes, ENST-Brest, Septembre 1997, pp. 55-62. [17] C. Berrou, M. Jézéquel, " Frame-oriented convolutional turbo-codes ", Electronics letters, 18th July 1996, Vol.32, no. 15, pp. 1362-1364. [18] P. Adde, R. Pyndiah, C. Berrou, " Performance of hybrid turbo codes ", Electronics letters, 21th November 1996, Vol.32, no. 24, pp. 2209-2210. [19] P. Jung, M. NaBan " Performance evaluation of turbo codes for short frame transmission systems", Electronics letters, 20th January 1994, Vo1.30, no 2, pp. 111-113. [20] Hagenauer, M. Winklhofer " the analog décoder ", ISIT'98, page 145, 21 août 1998, Cambridge, MA, USA. [21] H.A. Loeliger, F. Lustenberger, M. Helfenstein, F. Tarkoy "Probability propagation and decoding in analog VLSI", ISIT'98, page 146,21 août 1998, Cambridge, MA ; USA.REVENDICATIONS 1. Procédé de codage correcteur d'erreurs, du type associant à une série de données source un bloc de données codées, destiné à être transmis vers au moins un récepteur, caractérisé en ce qu'il comprend : au moins deux étapes de codage(21,) comprenant chacun au moins deux modules (22i, j) de codage de base, chacunes desdites étapes de codage recevant une série de données à traiter, réparties entre lesdits modules de codage de base, et délivrant une série de données traitées, issues desdits modules de codage de base ; - et au moins une étape de brassage (23j), ladite étape de brassage étant insérée entre deux étapes de codage successives, une première étape de codage et une seconde étape de codage, et répartissant les données traitées issues de chaque module de codage de base de ladite première étape de codage entre au moins deux modules de codage de base de ladite seconde étape. 2 . Procédé de codage selon la revendication 1, caractérisé en ce que ledit bloc de données codées à transmettre comprend au moins certaines desdites données source et au moins certaines des données traitées issues de la dernière étape de codage. 3 . Procédé de codage selon la revendication 2, caractérisé en ce que ledit bloc de données codées à transmettre comprend l'ensemble desdites données source. 4. Procédé de codage selon l'une quelconque des revendications 1 à 3, caractérisé en ce ledit bloc de données codées comprend des données traitées issues d'au moins deux étapes de codage. 5. Procédé de codage selon l'une quelconque des revendications 1 à 4, caractérisé en ce qu'au moins une desdites étapes de brassage met en oeuvre au moins une matrice de permutation. 6. Procédé de codage selon l'une quelconque des revendications 1 à 5, caractérisé en ce qu'au moins une desdites étapes de brassage distribue des données traitées vers au moins deux étapes de codage distinctes. 7. Procédé de codage selon l'une quelconque des revendications 1 à 6, caractérisé en ce qu'au moins une desdites données source et/ou au moins une desdites données traitées est dupliquée (51) au moins une fois, de façon à former au moins deux données à traiter. 8. Procédé de codage selon l'une quelconque des revendications 1 à 7, caractérisé en ce qu'au moins une desdites données source alimente directement (52, 57) une autre étape de codage que le premier étape de codage. 9. Procédé de codage selon l'une quelconque des revendications 1 à 8, caractérisé en ce qu'il met en oeuvre au moins deux unités de codage comprenant chacun au moins deux desdites étapes de codage et au moins une étape de brassage insérée entre deux étapes de codage successives, et en ce que lesdites données source alimentent chacune desdites unités de codage, dans des ordres d'alimentation différents. 10. Procédé de codage selon la revendication 9, caractérisé en ce qu'il met en oeuvre au moins une unité de brassage, assurant une modification de l'ordre d'alimentation desdites données source dans l'une desdites unités de codage. 11. Procédé de codage selon l'une quelconque des revendications 1 à 10, caractérisé en ce qu'il comprend des moyens de poinçonnage, mis en oeuvre sur au moins certaines desdites données à traiter et/ou sur au moins certaines desdites traitées. 12. Procédé de codage selon l'une quelconque des revendications 1 à 11, caractérisé en ce que lesdits modules de codage (22 j, j) mettent en oeuvre un code de redondance de longueur n-k inférieure ou égale à 12. 13. Procédé de codage selon l'une quelconque des revendications 1 à 12, caractérisé en ce que tous lesdits modules de codage sont identiques (22 i,j). 14 . Procédé de codage selon la revendication 13, caractérisé en ce que lesdits modules de codage (22 i, j) mettent en oeuvre un code de Reed-Müller. 15. Procédé de codage selon l'une quelconque des revendications 1 à 12, caractérisé en ce qu'au moins deux desdits modules de codage (411,452, 453, 454, 471) sont différents. 16. Procédé de codage selon l'une quelconque des revendications 1 à 15, caractérisé en ce qu'au moins certains desdits modules de codage (22 i,j) mettent en oeuvre au moins un code appartenant au groupe comprenant : un code (4,2) associant par exemple au couple (xO, xl) les valeurs (x0,x1,x0,x0+x1); un code trivial associant xO à xO. 17. Procédé de codage selon l'une quelconque des revendications 1 à 16, caractérisé en ce qu'il comprend une étape (48) de contrôle et/ou de réglage d'au moins un des éléments suivants : type et/ou caractéristique du codage mis en oeuvre par au moins un des modules de codage de base ; - brassage mis en oeuvre par au moins une desdites étapes de brassage ; - poinçonnage mis en oeuvre sur au moins certaines desdites données à traiter et/ou au moins certaines desdites données traitées ; - nombre d'étapes de codage. 18. Procédé de codage selon la revendication 17, caractérisé en ce que ledit contrôle et/ou ledit réglage agit systématiquement, sur une période donnée, et/ou en fonction d'au moins une information représentative d'au moins un des aspects appartenant au groupe comprenant : - au moins une caractéristique du canal de transmission ; - au moins une caractéristique du récepteur ; - au moins une caractéristique du signal source. 19. Dispositif de codage correcteur d'erreurs, du type associant à une série de données source un bloc de données codées, destiné à être transmis vers au moins un récepteur, caractérisé en ce qu'il comprend : au moins deux étages de codage mettant en oeuvre chacun au moins deux codages de base, chacun desdits étages de codage recevant une série de données à traiter, réparties entre lesdits codages de base, et délivrant une série de données traitées, correspondant auxdits codage de base ; et au moins un étage de brassage, ledit étage de brassage étant insérée entre deux étages de codage successives, un première étage de codage et un second étage de codage, et répartissant les données traitées correspondant à chaque codage de base dudit premier étage de codage entre au moins deux codages de base dudit second étage. 20. Procédé de décodage d'un bloc de données codées par un procédé de codage selon l'une quelconque des revendications 1 à 18. 21. Procédé de décodage selon la revendication 20, caractérisé en ce qu'il est itératif. 22. Procédé de décodage selon l'une quelconque des revendications 20 et 21, caractérisé en ce qu'il met en oeuvre au moins une des techniques appartenant au groupe comprenant : décodage à l'aide d'une structure symétrique de celle mise en oeuvre lors du codage ; décodage exhaustif, selon lequel on considère tous les mots de code possibles et on sélectionne le meilleur selon un critère de sélection prédéterminé ; - décodage de type Viterbi, mettant en oeuvre un treillis de décodage ; - décodage de type Chase. 23. Procédé de décodage selon la revendication 22, caractérisé en ce qu'il met en oeuvre au moins deux étapes de décodage, comprenant au moins deux modules de décodage, et au moins une étape de permutation insérée entre deux étapes de décodage consécutives, lesdites étapes étant symétriques à celles du codage correspondant, et en ce que chacun desdits modules de décodage comprend deux fois plus d'entrées et de sorties que le module de codage correspondant, de façon à assurer la propagation de valeurs de vraisemblance d'une part de l'amont vers l'aval du décodeur, et d'autre part de l'aval vers l'amont dudit décodeur. 24. Procédé de décodage selon l'une quelconque des revendications 22 à 23, caractérisé en ce qu'il met en oeuvre au moins une itération des opérations suivantes : propagation complète dans le sens amont du décodeur desdites valeurs de vraisemblance, délivrant un premier jeu de valeurs estimées ; propagation complète dans le sens aval du décodeur desdites valeurs de vraisemblance, délivrant un second jeu de valeurs estimées. 25. Procédé de décodage selon la revendication 24, caractérisé en ce qu'il effectue la sommation des valeurs estimées de chacun desdits jeux de valeurs estimées, l'itération suivante étant effectuée sur les résultats de ladite sommation. 26. Procédé de décodage selon la revendication 25, caractérisé en ce qu'il tient compte, pour chaque sortie d'un desdits modules de décodage, d'une fonction booléenne impliquant au moins deux entrées dudit module de codage correspondant, et en ce qu'une contrainte de décodage impose qu'une sortie aval d'un étage de décodage donné soit égal à la sortie amont correspondante de l'étage de décodage suivant. 2 7 . Procédé de décodage selon l'une quelconque des revendications 20 à 26, caractérisé en ce qu'il détermine des vraisemblances de chemin. 28. Procédé de décodage selon la revendication 27, caractérisé en ce que chacun desdits décodages élémentaires calcule, à chaque itération, une vraisemblance d'état, pour chacun des états possibles du codage correspondant, et sélectionne l'état présentant la vraisemblance la plus élevée. 2 9 . Procédé de décodage selon la revendication 28, caractérisé en ce que ladite vraisemblance d'état correspond à la somme d'une première valeur de vraisemblance obtenue à partir des bits d'information et d'une seconde valeur de vraisemblance obtenue à partir des bits de redondance. 3 0 . Procédé de décodage selon l'une quelconque des revendications 27 à 29, caractérisé en ce que lesdites vraisemblances sont déterminées à partir de lois de probabilité. 31. Procédé de décodage selon les revendications 29 et 30, caractérisé en ce que ladite première (respectivement seconde) vraisemblance associée à une sortie donnée d'un desdits décodages élémentaires est obtenue en déterminant le logarithme de la somme des exponentielles des vraisemblances des états connectés à ladite sortie, auquel on retranche le logarithme de la somme des exponentielles des vraisemblances reçues en entrée en tant que bits d'information (respectivement bits de redondance) des états connectés à ladite sortie. 32. Procédé de décodage selon la revendication 31, caractérisé en ce qu'il comprend les étapes suivantes : calcul des vraisemblances d'états : " avant " : Fi, basées sur les bits d'information ; " arrière " : Bi, basées sur les bits de redondance ; calcul des vraisemblances d'états globales : Ei = Fi + B, ; détection de la vraisemblance d'état Ei maximum ; calcul des valeurs de vraisemblance suivantes : (valeurs propagées vers l'arrière, d'où proviennent les bits d'information xj) (valeurs propagées vers l'avant, d'où proviennent les bits de redondance rj) où (Ei/xj->Ei) représente la vraisemblance de l'état Ei connecté à la sortie xj. 33. Procédé de décodage selon la revendication 32, caractérisé en ce que ladite étape de calcul des valeurs de vraisemblance est simplifiée, en ne prenant en compte dans chacune des sommes des exponentielles que l'état présentant la plus grande vraisemblance. 34. Procédé de décodage selon l'une quelconque des revendications 31 à 33, caractérisé en ce que, lorsque le décodage a atteint un critère de convergence prédéterminé, éventuellement indépendamment pour chaque module de codage, on associe à chaque bit une vraisemblance a posteriori : 3 6 . Procédé de décodage selon l'une quelconque des revendications 20 à 34, caractérisé en ce qu'il est utilisé en tant que procédé de codage, les entrées de redondances étant forcées à 0 et les entrées d'information correspondant aux données à coder. 37. Procédé de décodage selon la revendication 36, caractérisé en ce qu'il est utilisé alternativement d'une part pour le codage et d'autre part pour le décodage de données. 38. Procédé de codage et/ou de décodage selon l'une quelconque des revendications 1 à 18 et 20 à 37, caractérisé en ce qu'au moins un desdits codages élémentaires et/ou au moins un desdits décodages élémentaires et/ou au moins une desdites permutations est programmable. 39. Procédé selon la revendication 28, caractérisé en ce que les éléments programmables du décodage se programmant selon au moins un des modes opératoires suivants : en fonction d'une commande prédéterminée, produite par le codage ; en fonction d'une séquence de référence codée par le codage ; par apprentissage en aveugle, à partir des données reçues. 40. Procédé de codage et/ou de décodage selon l'une quelconque des revendications 1 à 18 et 20 à 39, caractérisé en ce que ledit codage assure un codage source et un codage canal combinés, et en ce que ledit décodage assure un décodage canal et un décodage source combinés. 41. Procédé selon la revendication 40, caractérisé en ce que ledit décodage assure également, au moins partiellement, l'égalisation des effets du canal de transmission. 42. Procédé de codage et/ou de décodage selon l'une quelconque des revendications 1 à 18 et 20 à 41, caractérisé en ce qu'au moins certains desdits calculs sont effectués à l'aide de tables pré-programmées. 43. Procédé de codage et/ou de décodage selon l'une quelconque des revendications 1 à 18 et 20 à 42, caractérisé en ce qu'au moins certains desdits calculs sont implantés à l'aide de composants analogiques. 4 4 . Dispositif de décodage mettant en #uvre le procédé de décodage selon l'une quelconque des revendications 20 à 43. 45. Application du procédé de codage et/ou de décodage selon l'une quelconque des revendications 1 à 18 et 20 à 44 à au moins une des techniques appartenant au groupe comprenant : la transmission et/ou la diffusion de signaux numériques ; la reconnaissance et/ou le traitement de la parole.