Brevet FR2838581A1 — publié le 20031017

Procédé de codage et/ou de décodage de codes correcteurs d'erreurs, dispositifs et signalcorrespondants. La présente invention se rapporte au domaine du codage de données numériques destinées à être transmises et/ou mémorisées sur un canal bruité puis décodées de manière à corriger les erreurs de transmission et/ou de lecture. Plus précisément, l'invention concerne le codage correcteur d'erreurs reposant sur la concaténation parallèle de plusieurs codes, et une méthode de décodage permettant des débits élevés. Encore plus précisément, l'invention concerne une amélioration du procédé de codage communément appelé turbo-codes , ainsi que le procédé de décodage associé. Le principe général des turbo-codes (marque déposée) est présenté dans le brevet français n FR-91 05280, ayant pour titre Procédé de codage correcteur d'erreur à au moins deux codages convolutifs systématiques parallèles, procédé de décodage itératif, module de décodage et décodeur correspondant . Ce document décrit un premier type de turbo-codes reposant sur l'utilisation de codes convolutifs récursifs systématiques. Les turbo-codes possèdent les avantages de la simplicité, de la régularité et de la souplesse du choix du rendement pour des performances élevées. L'utilisation des turbo-codes nécessite un décodage itératif dont les performances croissent au cours des itérations. Pour atteindre les performances quasi-optimales, il est nécessaire d'effectuer de l'ordre d'une dizaine d'itérations ce qui pénalise grandement la rapidité de décodage. Ainsi, un inconvénient des turbo-codes de l'art antérieur est qu'ils présentent une latence importante au décodage, due à leur nature. Un autre inconvénient des turbo-codes décrits précédemment est qu'ils ne sont pas adaptés à une architecture parallèle de décodage. On connaît également des codes de parités, notamment : - des codes LDPC décrits par R.G. Gallager dans le document Low- density parity-check codes (ou en français Codes de parité à faible densité ) et paru aux éditions MIT Press en 1963. - des codes à faible densité généralisé (GLD) décrits par R.M. Tanner dans un article intitulé A recursive approach to low complexity codes (ou, en français, une approche récursive des codes à faibles complexité ), paru dans la revue IEEE Transaction On Information Theory, Vol. IT-27 en septembre 1981. Ces codes présentent les mêmes inconvénients que les turbo-codes précédemment décrits. En particulier, ils présentent une forte latence au décodage car ils nécessitent un nombre d'itération très grand. En outre, ils ne sont pas adaptés à un décodage en parallèle de codes élémentaires les constituants car ils sont irréguliers. Ainsi, pour des applications de type temps réel telles que la voix et la vidéo, des trames courtes sont nécessaires afin de diminuer la latence de décodage. La diminution de la taille des trames entraîne une dégradation de la fiabilité des données décodées. En effet, celle-ci croît avec le nombre de symboles pris en compte dans une trame. De plus, les algorithmes utilisés pour décoder une trame sont basés sur un algorithme de type SISO (de l'anglais Soft Input Soft Output ou à Entrées souples et Sorties Souples en français) (par exemple un algorithme MAP (ou Maximum A Posteriori )) dont le degré de parallélisme est réduit et qui, par conséquent, limite le débit maximum possible. On connaît également des turbo-codes produits constitués de plusieurs codes concaténés en bloc suivant au moins deux dimensions d'un tableau représentatif d'un turbo-code produit correspondant. Des turbo-codes produits sont présentés notamment dans le document Near Optimum decoding of product codes (ou Décodage proche de l'optimum des codes produits ) en français) écrit par R. Pyndiah, A. Glavieux, A. Picard et S. Jacq et publié dans le compterendu du colloque Globecom'94 de San Francisco (Etats Unis) en 1994. Ils permettent un degré de parallélisme plus important au décodage que les turbo- codes de premier type décrits ci-dessus, plusieurs codes constituants pouvant être décodés en parallèle. Les codes constituants utilisés sont des codes linéaires algébriques. Néanmoins, le choix d'un entrelaceur régulier n'est pas optimal en termes de performances. On connaît, en outre, des codes permettant d'améliorer la latence au décodage et décrits dans l'article Decoder-first code design (ou élaboration de code d'abord construit sur base d'un décodeur ) écrit par E. Boutillon, J. Castura et F. Kschischang et paru dans le compte-rendu proceedings of the 2nd international Symposium on turbo codes and related topics , pages 459 à 462 (Brest, France) en septembre 2000. Dans cet article, on décrit une structure de décodeur adapté à décoder des codes de parité à faible densité (LDPC). Selon la structure décrite, différents bancs mémoires contenant des données à décoder alimentent en parallèle des décodeurs associés chacun à un code de parité. L'ensemble des données correspondant à un mot de code de parité entrent simultanément dans un décodeur élémentaire. En outre, les décodages élémentaires se font en parallèle. Ainsi, on obtient une faible latence de décodage. Néanmoins, cette technique de l'art antérieur présente l'inconvénient d'être relativement complexe à mettre en oeuvre. En outre, elle nécessite de nombreux bancs mémoires, le nombre de bancs mémoires étant égal au nombre de données entrant simultanément dans les décodeurs élémentaires, soit le produit du nombre de décodeurs par la taille d'un mot de code élémentaire. Aussi, cette technique n'est pas adaptée aux codes LDPC de grande taille. Cette technique présente également l'inconvénient de ne pas offrir une qualité de code suffisante pour de nombreuses applications. L'invention selon ses différents aspects a notamment pour objectif de pallier ces inconvénients de l'art antérieur. Plus précisément, un objectif de l'invention est de fournir un code sous forme de signal et un procédé de codage et/ou de décodage associé ainsi que les dispositifs correspondant, qui combinent les avantages d'un bon taux d'erreur binaire avec une latence de décodage faible et/ou un débit important. Plus précisément, un objectif de l'invention est de fournir un code sous forme de signal et un procédé de codage et/ou de décodage associé ainsi que les dispositifs correspondant, qui combinent les avantages d'un bon taux d'erreur binaire avec une latence de décodage faible et/ou un débit important. Un autre objectif de l'invention est de fournir un code qui possède une distance libre élevée pour une longueur de code, donnée et donc une grande capacité de correction d'erreurs. Encore un autre objectif de l'invention est de fournir un code et un procédé de codage et/ou de décodage associé ainsi que les dispositifs correspondant, qui soient relativement simples à mettre en #uvre. Dans ce but, l'invention propose un procédé de décodage de code correcteur d'erreurs, du type associant un bloc de données décodé à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé au code global, le procédé de décodage étant itératif et produisant à chaque itération un bloc de données extrinsèques, chacune des données extrinsèques se rapportant à une des données codées, le procédé mettant en #uvre une étape de mémorisation d'un bloc de données à décoder comprenant lesdites données codées et les données extrinsèques, le bloc de données à décoder étant réparti dans une pluralité de bancs mémoires disjoints, adressables indépendamment, le procédé étant remarquable en ce : - qu'à chaque itération, il comprend, en outre, une étape d'alimentation en parallèle d'au moins deux décodeurs parmi une pluralité de décodeurs, correspondant chacun respectivement à au moins un desdits sous-codes, par des données à décoder correspondantes du bloc de données à décoder, des données à décoder étant extraites en parallèle d'au moins deux desdits bancs mémoires pour alimenter autant de décodeurs, et chacun des décodeurs étant alimenté séquentiellement par les données à décoder lui correspondant. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins un des sous-codes est un code récursif convolutif circulaire. Selon une caractéristique particulière, le procédé est remarquable en en ce qu'au moins un des sous-codes est un code systématique. Ainsi, l'invention permet une utilisation de codes courts et donc une diminution de la latence de codage. En outre, le procédé de codage permet une amélioration des codes GLD utilisant plusieurs sous-codes constituants. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins deux des sous-codes sont des codes m-binaires, m étant un entier supérieur ou égal à 2 et en ce qu'une permutation intra-symboles est appliquée entre au moins deux des sous-codes m-binaires. Ainsi, l'invention s'applique non seulement aux sous-codes constituants binaires, mais également aux sous-codes constituants duo-binaires ou plus généralement aux sous-codes constituants m-binaires. Selon une caractéristique particulière, le procédé est remarquable en en ce qu'il comprend, en outre, une étape d'aiguillage de chacune des données à décoder vers un des décodeurs, lesdites données étant aiguillées en parallèle et simultanément de sorte que chacune d'entre elles alimente un décodeur lui correspondant en propre. Selon une caractéristique particulière, le procédé est remarquable en ce que ladite étape d'aiguillage comprend elle-même une étape de permutation circulaire d'un ensemble comprenant au moins une partie des données à décoder. Ainsi, l'invention permet d'améliorer l'entrelacement tout en utilisant le maximum de parallélisme liés au décodage en parallèle de plusieurs codes constituants du code global. Selon une caractéristique particulière, le procédé est remarquable en ce que la permutation circulaire est une rotation qui possède un pas déterminé en fonction du rang de lecture des données lues dans les bancs mémoires. Ainsi, l'entrelaceur est mis en #uvre simplement et efficacement. Selon une caractéristique particulière, le procédé est remarquable en ce que l'étape d'aiguillage met en #uvre une étape d'adressage de chacun des bancs mémoires de sorte que des données puissent être lues dans le banc mémoire dans un ordre prédéterminé distinct de l'ordre d'écriture desdites données dans le banc mémoire. Ainsi, on a une grande variété de choix d'entrelaceurs et donc des possibilités d'optimisation du code obtenu, tout en tenant compte au maximum du parallélisme des différentes opérations. Ceci permet d'obtenir un code global ayant de très bonnes performances. Selon une caractéristique particulière, le procédé est remarquable en en ce que - chaque ligne d'une première matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à un premier groupe de sous-codes ; - chaque ligne d'au moins une deuxième matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à au moins un deuxième groupe de sous-codes ; - chaque matrice parmi les deuxièmes matrices de données étant obtenue à partir d'une transformation de ladite première matrice, la transformation comprenant une permutation d'au moins une partie des colonnes de la première matrice. La notion de matrice est relativement théorique et l'homme du métier met en oeuvre une matrice, en pratique, sous différentes formes et notamment en distinguant des sous-blocs dans un bloc de données, chaque sous-bloc correspondant à une ligne de matrice étant codé selon un sous-code du code global. Selon une caractéristique particulière, le procédé est remarquable en ce que la transformation comprend, en outre, une permutation d'au moins une partie des lignes de la première matrice. Ainsi, l'invention permet un grand choix d'entrelaceurs (c'est-à-dire de permutations) tout en conservant une mise en #uvre relativement simple. Selon une caractéristique particulière, le procédé est remarquable en ce que chaque ligne d'une première matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à un premier groupe de sous-codes, une partie des données de la première matrice, dites données non significatives, n'étant pas significative ; - chaque ligne d'un premier sous-ensemble de lignes d'au moins une deuxième matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à au moins un deuxième groupe de sous-codes ; - un deuxième sous-ensemble lignes de la deuxième matrice de données contenant les données non significatives ; - chaque matrice parmi les au moins une deuxième matrice de données étant obtenue à partir d'une transformation de la première matrice, la transformation comprenant une permutation d'au moins une partie des colonnes de la première matrice. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il comprend une étape de test de décodage mettant en #uvre au moins un critère d'arrêt de façon à ce que lorsque le au moins un critère d'arrêt est vérifié pour au moins un des sous-codes, au moins un des décodeurs associés au ou aux sous-codes s'arrête de décoder le ou les sous-codes pour lesquels le ou les critères d'arrêt sont vérifiés. De cette manière, la définition du code global permet l'application d'un critère d'arrêt sur les codes constituants afin de réduire au fil des itérations le nombre de codes constituants traités. Ce critère d'arrêt est, par exemple, basé sur le seuillage des décisions pondérées. Ainsi, l'invention permet d'économiser du temps de calcul du dispositif de décodage et donc de l'énergie, ce qui est particulièrement utile lorsque le procédé de décodage est mis en #uvre au sein de terminaux fonctionnant sur batterie. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il met en #uvre une étape de lecture des données codées à partir d'un support optique et/ou magnétique et/ou de transmission desdites données codées sur un canal à interférences. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins un des sous-codes correspond à des interférences entre des symboles représentatifs du bloc de données décodé lorsque le bloc est stocké sur le support optique et/ou magnétique et/ou lorsque le bloc est transmis dans un canal à interférences. Ainsi, l'invention est particulièrement bien adaptée aux applications de stockage sur un support optique et/ou magnétique, le canal de stockage permettant lui même de coder des données stockées selon un sous-code mettant en #uvre des interférences entre des symboles correspondant aux données stockées et/ou transmises. Un ou plusieurs autres sous-codes peuvent alors être mis en #uvre selon des techniques de codes utilisant, par exemple, des codes récursifs systématiques circulaires. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il met en #uvre une étape de réception des données codées en provenance d'un émetteur. Ainsi, l'invention peut avantageusement être mise en #uvre pour des applications de type transmission sur un canal bruité (par exemple, canal sans fil radio, infra-rouge et/ou acoustique) Selon une caractéristique particulière, le procédé est remarquable en ce que les ensembles de données codées avec chacun des sous-codes sont tous différents deux à deux. Ainsi, le graphe bipartite associé au code global est irrégulier notamment parce que les sous-codes du code global sont tous différents deux à deux. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins deux des sous-codes comprennent au moins deux des données à décoder en commun. Ainsi, le graphe bipartite associé au code global est irrégulier notamment parce que deux sous-codes du code global ont au moins deux données en commun. Selon une caractéristique particulière, le procédé est remarquable en ce que le code global est de type code produit avec un entrelaceur non uniforme. Ainsi, le graphe bipartite associé au code global de type code produit est irrégulier notamment parce que l'entrelaceur associé n'est pas uniforme, c'est-àdire que, si le code global est symbolisé par une matrice à deux dimensions, les sous-codes ne correspondent pas uniquement aux lignes et aux colonnes de la matrice. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il comprend, en outre, une étape de démultiplexage du bloc de données décodé de façon à alimenter au moins deux destinataires distincts par des données appartenant au bloc de données décodé démultiplexé. Ainsi, l'invention peut prend en compte des données en provenance de sources différentes (par exemple, de type multimédia). Ces données sont regroupées pour être codées selon un code de taille plus grande que si les données issues de sources distinctes étaient codées séparément. Elles bénéficient donc d'un pouvoir de correction plus élevé, chaque bloc d'information correspondant à une fraction ou un sous-ensemble des roulettes du code global. Le code global de taille plus grande est donc plus efficace et ses propriétés peuvent donc avantageusement être exploitées par le procédé de décodage. Selon une caractéristique particulière, le procédé est remarquable en ce que le degré des symboles d'information du bloc de données décodé, dans le code global n'est pas uniforme. Le degré d'un symbole d'information dans un code global est, ici, par définition le nombre d'arcs qui sont connectés à ce symbole dans une représentation du code sous forme de graphe bipartite. Ainsi, plus des bits d'information nécessitent un niveau de protection élevé, plus leur degré dans le code global sera élevé. La protection d'un symbole peut, en outre, être améliorée en diminuant le rendement des sous-codes constituants auquel le symbole est associé. L' invention concerne également un procédé de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, le bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, remarquable en ce que le bloc de données codées est destiné à être décodé par le procédé de décodage itératif. L' invention concerne, en outre, un procédé de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, le bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, le bloc de données codées étant destiné à être décodé par un procédé de décodage itératif, remarquable en ce que le procédé comprend, en outre, une étape d' alimentation en parallèle d'au moins deux codeurs parmi une pluralité de codeurs, correspondant chacun respectivement à au moins un des sous-codes, par des données à coder correspondantes dudit bloc de données à coder, des données à coder étant extraites en parallèle d'au moins deux bancs mémoires pour alimenter autant de codeurs. Selon une caractéristique particulière, le procédé est remarquable en ce que chacun des codeurs est alimenté séquentiellement par les données à coder lui correspondant. Selon une caractéristique particulière, le procédé est remarquable en en ce qu'au moins un desdits sous-codes est un code récursif convolutif circulaire. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins un des sous-codes est un code systématique. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins deux des sous-codes sont des codes m-binaires, m étant un entier supérieur ou égal à 2 et en ce qu'une permutation intra-symboles est appliquée entre au moins deux des sous-codes m-binaires. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il comprend, en outre, une étape d'aiguillage de chacune des données à coder vers un des codeurs, les données étant aiguillées en parallèle et simultanément de sorte que chacune d'entre elles alimente un codeur lui correspondant en propre. Selon une caractéristique particulière, le procédé est remarquable en ce que l'étape d'aiguillage comprend elle-même une étape de permutation circulaire d'un ensemble comprenant au moins une partie des données à coder. Selon une caractéristique particulière, le procédé est remarquable en ce que la permutation circulaire est une rotation qui possède un pas déterminé en fonction du rang de lecture des données lues dans les bancs mémoires. Selon une caractéristique particulière, le procédé est remarquable en ce que l'étape d'aiguillage met en #uvre une étape d'adressage de chacun des bancs mémoires de sorte que des données puissent être lues dans le banc mémoire dans un ordre prédéterminé distinct de l'ordre d'écriture des données dans le banc mémoire. Selon une caractéristique particulière, le procédé est remarquable en ce que chaque ligne d'une première matrice de données représentatives desdites données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à un premier groupe de sous-codes ; chaque ligne d'au moins une deuxième matrice de données représentatives desdites données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à au moins un deuxième groupe de sous-codes ; chaque matrice parmi la ou les deuxièmes matrices de données étant obtenue à partir d'une transformation de la première matrice, la transformation comprenant une permutation d'au moins une partie des colonnes de la première matrice. Selon une caractéristique particulière, le procédé est remarquable en ce que la transformation comprend, en outre, une permutation d'au moins une partie des lignes de la première matrice. Selon une caractéristique particulière, le procédé est remarquable en ce que chaque ligne d'une première matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à un premier groupe de sous-codes, une partie des données de la première matrice, dites données non significatives, n'étant pas significative ; chaque ligne d'un premier sous-ensemble de lignes d'au moins une deuxième matrice de données représentatives des données codées selon le code global est représentative de données codées par un sous-code constituant du code global appartenant à au moins un deuxième groupe de sous-codes ; un deuxième sous-ensemble lignes de la deuxième matrice de données contenant les données non significatives ; et chaque matrice parmi la ou les deuxièmes matrices de données étant obtenue à partir d'une transformation de la première matrice, la transformation comprenant une permutation d'au moins une partie des colonnes de la première matrice. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il met en #uvre une étape d'écriture desdites données codées sur un support optique et/ou magnétique et/ou de transmission des données codées sur un canal à interférences. Selon une caractéristique particulière, le procédé est remarquable en qu'au moins un des sous-codes correspond à des interférences entre des symboles représentatifs du bloc de données décodé lorsque le bloc est stocké sur le support optique et/ou magnétique et/ou lorsque le bloc est transmis dans un canal à interférences. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il met en #uvre une étape de réception des données codées en provenance d'un émetteur. Selon une caractéristique particulière, le procédé est remarquable en ce que les ensembles de données codées avec chacun des sous-codes sont tous différents deux à deux. Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins deux des sous-codes comprennent au moins deux données codées en commun. Selon une caractéristique particulière, le procédé est remarquable en ce que le code global est de type code produit avec un entrelaceur non uniforme. Selon une caractéristique particulière, le procédé est remarquable en ce qu'il comprend, en outre, une étape de multiplexage d'au moins deux blocs de données en provenance chacun de deux sources distinctes de façon à former le bloc de données source. Selon une caractéristique particulière, le procédé est remarquable en ce que le degré des symboles d'information dudit bloc de données décodé, dans le code global n'est pas uniforme. L'invention concerne aussi un signal représentatif d'un bloc de données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé au code global, le bloc de données codées étant destiné à être décodé par le procédé de décodage itératif. L'invention concerne, en outre, un dispositif de décodage de code correcteur d'erreurs, du type associant un bloc de données décodé à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, le procédé de décodage associé étant itératif et produisant à chaque itération un bloc de données extrinsèques, chacune des données extrinsèques se rapportant à une des données codées, le dispositif mettant en #uvre des moyens de mémorisation d'un bloc de données à décoder comprenant lesdites données codées et lesdites données extrinsèques, le bloc de données à décoder étant réparti dans une pluralité de bancs mémoires disjoints, adressables indépendamment, le dispositif étant remarquable en ce qu'à chaque itération, il comprend, en outre, des moyens d'alimentation en parallèle d'au moins deux décodeurs parmi une pluralité de décodeurs, correspondant chacun respectivement à au moins un des sous-codes, par des données à décoder correspondantes du bloc de données à décoder, des données à décoder étant extraites en parallèle d'au moins deux desdits bancs mémoires pour alimenter autant de décodeurs, et chacun des décodeurs étant alimenté séquentiellement par les données à décoder lui correspondant. De plus, l'invention concerne un dispositif de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé au code global, le bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, le bloc de données codées étant destiné à être décodé par un dispositif de décodage itératif, le dispositif étant en ce que le dispositif comprend, en outre, des moyens d'alimentation en parallèle d'au moins deux codeurs parmi une pluralité de codeurs, correspondant chacun respectivement à au moins un des sous-codes, par des données à coder correspondantes du bloc de données à coder, des données à coder étant extraites en parallèle d'au moins deux des bancs mémoires pour alimenter autant de codeurs. Les avantages des procédés de codage, du signal, du dispositif de codage et du dispositif de décodage sont les mêmes que ceux du procédé de décodage. Ils ne sont donc pas détaillés plus amplement. 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 préférentiel, donné à titre de simple exemple illustratif et non limitatif, et des dessins annexés, parmi lesquels : - la figure 1 présente un mode particulier de réalisation de l'opération de codage de l'invention qui consiste à utiliser quatre roulettes permettant de former un code (12,8) selon l'invention ; - les figures 2 et 3 illustrent deux modes particuliers de réalisation de l'opération de codage, selon l'invention ; - la figure 4 présente un mode de réalisation d'un codeur permettant de construire des codes irréguliers, conforme à l'invention ; - la figure 5 décrit un codeur dont l'architecture permet de mettre en oeuvre les codes selon les figures 1 à 4 ; - la figure 6 illustre un décodeur adapté à décoder des codes à roulettes décrits en regard des figures 1 à 4 ; et - la figure 7 illustre une application de l'invention aux stockage de données. Le principe général de l'invention repose sur des codes permettant des décodages modulaires associés à différents niveaux de qualité et à différents débits suivant le nombre de modules implémentés dans un décodeur. L' invention s'applique dans tous les cas où il est nécessaire de transmettre et/ou de mémoriser une information numérique avec un certain niveau de fiabilité. Un champ préférentiel d'application de l'invention est celui de la transmission numérique sur un canal bruité. Par exemple, l'invention peut être utilisée pour la transmission et réception de données dont la fiabilité et le débit on une importance vitale telles que les transmissions par satellite, sur fibre optique, sur un canal radiofréquence, sur un câble ou pour le stockage d'information sur un support physique. L'invention s'applique également pour des applications de stockage de données sur des supports par exemple optiques et/ou magnétiques. L'invention permet, en outre, de coder et décoder n'importe quel signal notamment un signal sonore, vidéo, de donnée ou la concaténation de plusieurs signaux hétérogènes. Plus précisément, le principe général de l'invention repose sur un codage d'une séquence de K symboles d'informations, utilisant R codes constituants permettant d'obtenir un mot de code de longueur N supérieure strictement au nombre K. Le code global comprend donc des codes constituants appelés, ici, roulettes par analogie à une réalisation possible utilisant des codes convolutifs récursifs systématiques et circulaires. Pour chaque valeur d'un entier i variant de 1 à R, la ième roulette R, d'un code global est définie, dans le cas général, par l'ensemble ordonné M, des symboles du mot du code constituant (sous-code du code global) considéré. Par définition, m, représente le cardinal de Mi. L'ordre des symboles de M, est donné par la nature du code constituant et/ou par l'ordre induit par l'algorithme de décodage. Le code global est constitué à partir des roulettes par un graphe bipartite. Ce graphe comprend : - une ligne comprenant les N symboles du mot de code global ; - une ligne contenant les R roulettes ; et - un ensemble de M arcs reliant les R roulettes avec les N symboles du mot de code. Selon l'invention, chaque roulette possède mi connexions. Elle est donc connectée à m, symboles du mot de code. Le nombre d'arcs M est donc égal à la somme des mi pouri variant de 1 à R. On rappelle que de nombreux codes peuvent être décrits par un graphe bipartite général et appelés codes de Tanner qui consistent à décrire un code à l'aide d'un graphe bipartite qui associe des contraintes à un groupe de symboles d'information. Lorsque la contrainte est un simple code de parité, on obtient les LDPC décrits par R.G. Gallager dans le document Low-density parity-check codes (ou en français Codes de parité à faible densité ) et paru aux éditions MIT Press en 1963. Si la contrainte est un code en bloc (n, k), alors on obtient un code à faible densité généralisé (GLD) décrits par R.M. Tanner dans un article intitulé A recursive approach to low complexity codes (ou, en français, une approche récursive des codes à faibles complexité ), paru dans la revue IEEE Transaction On Information Theory, Vol. IT-27 en septembre 1981. Un turbo-code (avec deux codes constituants) est généralement décrit par un graphe bipartite qui contient deux contraintes, respectivement associées à un codeur non entrelacé et à un codeur entrelacé. On notera #i(Mi) l'ensemble ordonné des symboles du mot de code global relié à la roulette R,. On notera aussi, par souci de simplicité #i(K), le numéro du symbole du mot de code qui est connecté avec la kième entrée de la roulette Ri. Lors du décodage de la roulette i, #i(k) sera donc le kième symbole utilisé par le décodeur. L'ensemble {#i(k)} représente l'ensemble non ordonné des symboles du mot de code global relié à la roulette Ri. Selon l'invention, le graphe bipartite vérifie les conditions suivantes : - les ensembles #i(Mi) vérifient une contrainte particulière, afin de permettre le décodage des codes constituants avec un degré P de parallélisme ; et - le graphe bipartite est irrégulier. Afin de satisfaire la première des conditions énoncées ci-dessus, les ensembles #i(Mi) sont choisis de façon à permettre d'effectuer une itération de décodage (le traitement des R roulettes) en une ou plusieurs étapes (le nombre d'étapes étant noté T) et les roulettes de chaque étape t (t variant de 1 à T) étant décodées par au moins deux décodeurs en parallèle (le nombre de décodeurs étant noté P, avec P étant égal au rapport R sur 1). La première étape de chaque itération comprend un décodage des P premières roulettes R1, R2 ... RP par P décodeurs en parallèle, chacune des P premières roulettes étant associées à un des P décodeurs. La deuxième étape de chaque itération comprend un décodage des P roulettes suivantes RP+1, ... , R2P. D'une manière générale, la iième étape de chaque itération (pour t variant de 1 à T-1 ) comprend un décodage des roulettes Rt~l jp+1, ... , Rt,p chacune des P roulettes R(t-DP+n ### RtP. étant associées à un des P décodeurs. L'étape T comprend un décodage des dernières roulettes (RR-P+1, ... , RR). Pour chaque étape t des T étapes de chaque itération, on utilise donc P décodeurs en parallèle, associés chacun à un banc mémoire BM1, BM2,.., BMP. Chacun des P bancs mémoires contient les données nécessaires à l'exécution d'un des P décodeurs ainsi que les données produites par un des P décodeurs. A chaque cycle symbole k de l'étape t, les P décodeurs traitant les P symboles (t~l,pT1(k) , (t-1).P+2lk)> ID,.p(k réalisent des accès mémoires en parallèle et indépendants dans P bancs distincts. La contrainte sur les ensembles #i(Mi) est donc la suivante : à chaque cycle symbole k : soit il existe une bijection qui associe, pour toutes les valeurs de t allant de 1 à T et pour toutes les valeurs de k allant de 1 à M, les P symboles (t,.p+1(k) , (t I).P2(k)" D(k) = Ainsi, lorsque l'on utilise P décodeurs en parallèle, on multiplie par un facteur égal à P la surface du circuit dédiée au calcul (partie calculatoire) par rapport à un seul décodeur. En revanche, le temps d'une itération est divisé par P. La latence de décodage est donc divisée par P. Le débit est donc multiplié dans les mêmes proportions. En résumé, pour un accroissement linéaire de la surface, on obtient un accroissement linéaire du débit. Par ailleurs, selon l'invention, le graphe bi-partite est irrégulier. Cette irrégularité permet de générer un code pseudo aléatoire et donc d'obtenir de bonnes performances. Elle se caractérise par les deux propriétés suivantes : - les ensembles {#i(Mi)} sont tous différents deux à deux (soit {t(Mz) { i)} pour tout i différent de j, i et j variants de 1 à R) (alors que cette propriété n'est pas vérifiée pour les turbo-codes classiques tels que décrits dans le brevet français n FR-91 05280) ; et - soit il existe deux ensembles { ,(M,)} et { i)} pour deux valeurs i et j distinctes dont l'intersection contient au moins deux éléments (sous forme mathématique : il existe i différent dey tels que c({ i)}) 2, où card représente la fonction cardinal d'un ensemble) ; - soit le code vérifie la propriété : soitr l'ensemble des couples d'indice de roulette (i,j,k) vérifiant : - {#i(Mi)} n {#j(Mj)} = 0 (où 0 représente l'ensemble vide); - card( { ,(M)} fil {èJ?iMk)}) = 1 ; et - c({0/M,)} n { k(Mk)}) = 1 ; alors : - si {#i(Mi)} # {#k(Mk)} = {#i(h)} (où #i(h) représente un point unique d'indice h pour la roulette Ri; et - si { Bettstetter et S. Riedel et paru dans la revue IEEE transaction on information theory , Vol. 47, N 1 de janvier 2001) Selon un autre aspect de l' invention, pour la mise en #uvre du décodage, afin de limiter la latence de décodage, on applique un critère d'arrêt tel que décrit dans le document Stopping rules for turbo decoders (ou critère d'arrêt pour des turbo-décodeurs en français ) écrit par A. Matache, S. Dolinar et F ; dans le rapport TMO progress Report 42-142 en août 2000 et édité par le JPL (Jet Propulsion Laboratory). Néanmoins, selon des techniques connues, le critère d'arrêt est appliqué à partir d'un découpage d'une trame à décoder en fenêtres de taille égale. Le critère d'arrêt est alors appliqué sur les fenêtres de façon à arrêter le traitement des fenêtres ayant convergé et ainsi, diminuer le nombre de fenêtres traitées lors des itérations suivantes. Un tel dispositif présente deux inconvénients : le découpage en fenêtre est arbitraire et n'est en général, pas adapté à la configuration des erreurs résiduelles dans le processus de décodage ; et le découpage d'un trame continue en fenêtre nécessite une gestion complexe et sous-optimale des effets de bords. Selon l'invention, le code, par construction, permet de pallier ces inconvénients de l'art antérieur en améliorant l' utilisation du critère d'arrêt à seuillage des décisions pondérées qui est appliqué pour chacune des R roulettes. En effet, selon l'invention, la fenêtre sur laquelle est appliqué le critère d'arrêt n'est pas choisie de manière arbitraire mais, au contraire, cette fenêtre correspond exactement à un code constituant. Ce critère d'arrêt peut être utilisé pour des applications à bas débits où l'on n'utilise pas le maximum de parallélisme permis par le code. On note que l'utilisation telle que décrite ci-après n'est pas limitée aux codes mettant en oeuvre un procédé de décodage selon l'invention mais s'applique à tout code comprenant au moins un sous-code de type roulette et un entrelacement des des symboles d'informations qui peut être quelconque. Ainsi, par exemple, on peut choisir d'implémenter un seul décodeur qui décode successivement les R roulettes. Ainsi, au cours du décodage d'une roulette, on applique un critère d'arrêt tel que décrit dans le rapport cité plus haut à chaque roulette (et non pas selon l'état de l'art seulement au code global). Si le critère est vérifié pour au moins une roulette, cette roulette ne sera plus décodée lors de l'itération suivante, permettant ainsi d'économiser de la consommation d'énergie et des ressources. De même, si tous les décodeurs utilisés en parallèle ont convergé, on peut passer directement à l'étape de décodage suivante, ce qui permet un gain de latence de décodage et de consommation. Par ailleurs, si le critère est vérifié pour au moins une roulette, un décodeur associé pourra être utilisé pour décoder un bloc de données et, notamment, pour une autre roulette pour lequel un bloc de données est en attente de décodage. Ainsi, les ressources de décodage peuvent être réparties pour une optimisation en fonction des besoins. Le procédé ainsi défini a donc trois propriétés avantageuses : - le graphe est irrégulier ce qui permet d'émuler efficacement un code aléatoire, et donc d'obtenir de bonnes performances ; une mise en oeuvre simple du procédé de décodage à haut-débit est permise par le décodage simultané de plusieurs roulettes, les données étant prises en compte séquentiellement par chacun des décodeurs associés à une roulette ; et - le procédé permet une utilisation efficace de critère d'arrêt basé sur la structure du code et non sur un découpage arbitraire de la trame en paquets de taille égale. Par ailleurs, les procédés de codage et de décodage possèdent plusieurs variantes, notamment : - sur le graphe bipartite ; et/ou - sur les roulettes. Selon différentes variantes sur le graphe bipartite, le code peut être : systématique ; ou - non systématique (dans ce cas, lorsque les codes constituants sont des codes de parités, on obtient des codes de type code de parité à faible densité (ou LDPC)). Si le code est systématique, les roulettes Ri du code (pour i variant de 1 à R) sont alors définies par les paramètres suivants : - l'ensemble ordonné C, des symboles d'information systématique de la roulette ; par ailleurs, c, représente le nombre de symboles d'information systématique de la roulette R, (ou c, = card(Ci)). Ce nombre est appelé circonférence de la roulette R, ; - l'ensemble ordonné E, des symboles de redondance de la roulette ; le nombre de symbole de redondance de la roulette Ri est noté e, (ou e, = card(E,)); et - la quantité mi égale à la somme de la circonférence c, et du nombre e, définit la taille de la roulette R, (ou m, = c, + e,). Ainsi, un ensemble ordonné M, constitué de la réunion ordonnée des ensembles Ç et E, ( ou M, =(Ci, Ei)) de m, ( égal à la somme de ci et de e,) symboles est un mot du code /?, si le passage, dans l' ordre, des c, symboles C, dans le codeur associé à la roulette R, génère bien les e, symboles de redondance E,. On notera deg(s) le degré du symbole numéro s du mot de code, c' est-à- dire, le nombre d'arcs qui sont connectés à ce symbole. On appelle dimension du code global, le maximum des degrés des symboles du mot de code. Préférentiellement, le nombre d'étapes est supérieur ou égal à la dimension du code global. On notera #i(Ci) l'ensemble ordonné des symboles du mot de code relié à l'information de la roulette Ri. Ainsi, #i(k) représente le numéro du symbole du mot de code qui est connecté à la kième entrée de la roulette Ri. L'ensemble {#i(k)} représente l'ensemble non ordonné des symboles du mot de code relié à l'information de la roulette Ri. Selon des variantes de l'invention appliquées aux roulettes : - les roulettes peuvent correspondre à des codes en bloc quelconques, par exemple, de type BCH ou Reed-Solomon ; les codes constituants peuvent être des codes convolutifs et notamment récursifs systématiques circulaires qui résolvent le problème de la fermeture du treillis associé au décodeur correspondant sans dégradation de l'efficacité spectrale du codage ; dans ce cas, on peut associer à chaque roulette : - les polynômes générateurs du code convolutif récursif systématique associé à Ri; et - un motif de poinçonnage associé à la roulette Ri permettant d'obtenir le rendement ri.; - les codes utilisés peuvent être à base de symboles binaires, duo- binaires ou des n-uplets ; - les codes (m1, ci) peuvent être identiques pour chacune des roulettes R, ; et/ou les poinçonnages peuvent être identiques pour toutes les roulettes R, et donc permettre un rendement ri uniforme. Des variantes de mise en #uvre du graphe bipartite sont également possibles : - le nombre de roulettes traitées au cours d'une étape de décodage peut être différent pour chaque étape : pour une architecture donnée, on peut notamment gérer les effets de bords dus à l'utilisation de mots de longueur variable (par exemple, le nombre de roulettes n'est pas nécessairement un multiple de P) ; - selon les contraintes de la technologie, du type de réalisation de roulette (insertion de pipe-line, type de réalisation de l'algorithme du décodeur à entrée souple - sortie souple), et des contraintes de débits de l'application, le nombre P' de bancs mémoires et le nombre P de roulettes réalisées en parallèle peut-être différent ; le code doit être construit pour des valeurs de P' et P supérieures ou égales à 2. Selon l'invention, le code peut être à deux dimensions. Ainsi, au code générique décrit précédemment, on ajoute les spécifications suivantes : - le nombre de roulettes R est pair ; - toutes les roulettes ont une circonférence égale à C ; - le degré deg(k) de chacun des K symboles d' informations vaut deux et chaque symbole d'information est connecté à deux roulettes distinctes. Les roulettes peuvent alors êtres séparées en deux groupes tels que dans chaque groupe, les degrés deg(k) des Ksymboles d'informations valent 1. Selon une variante particulière réalisant une concaténation parallèle, les mots de code et les ensembles IIi(Ci) sont alors définis de la façon suivante : - les K symboles du mot de code sont écrits ligne par ligne dans une matrice possédant R/2 lignes et C colonnes ; - les lignes définissent les ensembles IIi(Ci) (i variant de 1 à R/2) du premier groupe. Elles sont des éléments des codes constituants correspondants ; on effectue ensuite pour chacune des lignes une permutation quelconque entre les symboles de ladite ligne ; - on effectue une permutation quelconque sur chacune des colonnes. En particulier, la permutation sur chacune des colonnes peut être une rotation circulaire ; - les lignes obtenues définissent les ensembles IIi(Ci) (i variant de R/2 à R) du second groupe. Elles sont codées par les codes constituants correspondants. Ce code à deux dimensions nécessite P égal à R/2 bancs mémoires chacun étant rempli par une ligne de la matrice non-permutée. Lorsque les codes constituants sont systématiques récursifs circulaires, on peut utiliser l'organisation de la mémoire suivante : à chaque adresse de la mémoire, sont mémorisées les données relatives au symbole systématique (symbole d'information en provenance du canal, informations extrinsèques produites par les décodeurs) ainsi que les symboles de redondance en provenance du canal correspondant. Chaque groupe peut alors être décodé simultanément par P décodeurs en parallèle en T (valant 2) étapes. Le procédé de permutation de la matrice assure lors du décodage du deuxième groupe de roulettes que les accès mémoires sont effectués sur des bancs mémoires distincts. Les permutations effectuées sur les lignes correspondent à un entrelacement temporel des données (c'est-à-dire, les permutations sur les lignes sont réalisées selon l'ordre de décodage par la lecture des symboles de chaque mémoire). Les permutations associées aux colonnes correspondent à un entrelacement spatial des données. Cet entrelacement est réalisé physiquement par un réseau de permutation entre les P bancs mémoires et les P décodeurs. Selon l'invention, à partir du code décrit précédemment, on peut construire un code irrégulier. Les 2P codes constituants utilisés ont chacun une circonférence égale à la somme C+D. Les ensembles IIi(Ci) définissant les codes constituant sont obtenus à partir des lignes des matrices non-permutées et des lignes permutées définies précédemment : chaque code constituant est associé à la séquence des symboles d'information d'une ligne à laquelle on ajoute les D premiers symboles d'information de la ligne suivante ; pour la dernière ligne, on ajoute les D symboles d'information de la première ligne. Le code irrégulier ainsi construit possède des symboles de degré égal à trois qui sont situés aux extrémités des roulettes. Les autres symboles sont tous de degré égal à deux. Ce schéma de codage rend le code plus robuste aux erreurs de transmission et permet une convergence plus rapide du décodeur. Selon encore une variante de l'invention mettant en oeuvre un code à deux dimensions par une concaténation série, avec un nombre de roulettes différent pour la première dimension et la deuxième dimension, on ajoute les spécifications suivantes : - le nombre de roulettes vaut R qui est égal à la somme de Pl et de P2 avec un produit de Pl et de P2 valant N et P1 étant supérieur ou égal à P2; il y a donc Pl roulettes de circonférence égale à P2 et P2 roulettes de circonférence égale à P1; - tous les degrés deg(k) des N symboles d'information valent 2 et donc chaque symbole d'information est connecté à deux roulettes distinctes. Les roulettes sont séparées en deux groupes de respectivement Pl et P2 roulettes. Le procédé de codage et les ensembles #i(Mi) du graphe bipartite sont alors définis de la façon suivante : - les N symboles du mot de code sont écrits ligne par ligne dans une matrice possédant P, lignes et P2 colonnes; à cette matrice, on ajoute un nombre de colonnes vides égal à la différence de P1 et P2 (soit P1- P2 sous forme condensée) ; - les lignes définissent les ensembles #i(Mi) (pour i allant de 1 à P) du premier groupe ; elles sont alors codées par les codes constituants correspondants de longueur égale à P2. - on effectue ensuite pour chacune des lignes une permutation quelconque entre les symboles de ladite ligne ; ces permutations ne sont pas toutes identiques (selon une variante, ces permutations sont identiques et peuvent être avantageusement supprimées) ; ces permutations répartissent uniformément sur les colonnes, les symboles des colonnes vides de la matrice précédente ; - on effectue une permutation Oj sur chacune des P1 colonnes de la matrice résultante, en respectant la contrainte suivante : après permutation, les symboles vides de la matrice précédente se répartissent sur les P1-P2 lignes ; - les lignes non vides obtenues définissent les ensembles #i(Mi) (pour i allant de P à P1+P2) du second groupe ; elles sont codées par des codes constituants. La permutation intra-ligne présentée dans les exemples précédents (code de dimension 2, codes irréguliers et codes produits) peut dans un mode préférentiel de réalisation être choisie parmi les permutations suivantes (la taille de la mémoire la ligne étant C): - le symbole k (k variant de 0 à C) de la roulette correspond au symbole situé à l'adresse l égale au produit ak modulo C (l= ak mod C) de la mémoire où a et C sont premiers entre eux. Préférentiellement, dans ce cas, a est voisin de la racine carrée de C ; - le symbole k (k variant de 0 à C) de la roulette correspond au symbole situé à l'adresse l égale à la somme du produit ak et de ss modulo C (l = ak + ss mod C) de la mémoire où a et C étant premiers entre eux. Préférentiellement, dans ce cas, a est voisin de la racine carrée de C. L'invention concerne également les dispositifs de codage, décodage, d'entrelacement définissant les ensembles #i(Mi) ou Il,(Ç). Ces dispositifs sont présentés en regard des figures 5,6 et 7. On présente, en relation avec la figure 1, le principe général du code selon un mode particulier de réalisation de l'invention. Le code est composé de quatre codes constituants 14,15, 16 et 17 dont deux codes peuvent être codés et/ou décodés simultanément selon l'invention. Chacun de ces codes constituants est un code convolutif récursif systématique circulaire : - de circonférence égale à trois ; - de taille égale à quatre ; et - définissant un code global de taille K égale à huit et de longueur N égale à douze. Chaque code constituant est représenté par une roulette, qui a : - trois entrées ordonnées el, e2 et e3 associées chacune à un symbole d'information ;et - une sorties associée à un symbole de redondance. Le degré de chacun des symboles n'est pas uniforme : - le degré des symboles de redondance (symboles 9 à 12) est égal à un ; et - le degré des symboles d'information est égal à un (pour les symboles 2, 3, 7 et 8) ou deux (pour les symboles 1, 4, 5 et 6). L'ensemble des symboles 1 à 12 du code 13 est mémorisé dans deux bancs mémoires BM, et BM2 qui contiennent respectivement les symboles suivants : - 1, 2, 3, 4, 9 et 10 (banc mémoire BM,) ; et - 5, 6, 7,8, 11et 12 (banc mémoire BM2). Lors de l'opération de codage et/ou de décodage, on code et/ou décode les roulettes avec un degré de parallélisme égal à deux. En effet, pour chacun des quatre symboles utilisés dans le code constituant, les accès mémoires suivants sont effectués: - pour un premier groupe constitué des roulettes 14 et 15 : - à partir du symbole el, on accède aux symboles 1 ou 6 ; - à partir du symbole e2, on accède aux symboles 5 ou 4 ; - à partir du symbole e3, on accède aux symboles 3 ou 8 ; - à partir du symbole s, on accède aux symboles 9 ou 11 ; - pour un deuxième groupe constitué des roulettes 16 et 17: - à partir du symbole el, on accède aux symboles 5 ou 2 ; à partir du symbole e2, on accède aux symboles 6 ou 1 ; à partir du symbole e3, on accède aux symboles 4 ou 7 ; - à partir du symbole s, on accède aux symboles 10 ou 12 ; A chaque cycle symbole, on accède à des bancs mémoires distincts et ainsi, on utilise un degré de parallélisme égal à deux. Selon une variante de réalisation de l'invention décrite à la figure 2, l'opération de codage global est basée sur deux groupes distincts comprenant chacun P roulettes Ri appliquées globalement aux mêmes données. La circonférence de chacune des roulettes Ri est égale à C. Les K symboles d'information à coder sont écrits ligne par ligne dans une matrice 20 à P lignes et C colonnes (K est égal au produit PxC). Chaque ligne est codée par un code constituant 21, par exemple du type code convolutif récursif systématique circulaire. La ième ligne de la matrice 20 comprend les N symboles données d'un mot de code 21 (information systématique et redondance) correspondant à une roulettes R1. Selon une variante, la ième ligne de la matrice 20 comprend les K symboles d'information systématique d'un mot de code 21 correspondant à une roulette Ri (les symboles de redondance n'étant pas représentés). Puis, on effectue une permutation des symboles de chacune des lignes par un entrelaceur (D 22. Cet entrelaceur est identique pour chacune des lignes. Selon une variante de l'invention, cet entrelaceur est différent pour chaque ligne. Selon une variante non représentée, l'entrelaceur # est égal à l'identité pour tous les lignes et peut donc être supprimé. Sur chacune des colonnes de la matrice 23 est effectuée une permutation Oi 24 de sorte que après permutation les C symboles de chacune des lignes de la matrice 25 proviennent de lignes différentes de la matrice 23 (avant permutation). La permutation Oi 24 est circulaire, selon le mode préféré de réalisation, ou non circulaire selon une variante de réalisation. Les lignes de la matrice 25 résultante sont codées par P codes constituants 26 qui peuvent être des codes convolutifs récursifs systématiques circulaires. La ième ligne de la matrice 25 comprend les C symboles d'informations systématiques correspondant à une roulette Ri+5. Ainsi, si la première (respectivement deuxième) ligne de la matrice 20 comprend une séquence qui commence par les bits a, b et c (respectivement d, e, f) comme illustré sur la figure 2, ces bits seront entrelacés par la permutation # 22. Ainsi, par exemple, les bits a, b et c seront respectivement placés à la quatrième, septième et deuxième position de la première ligne de la matrice 23. De même, les bits d, e et f seront respectivement placés à la quatrième, septième et deuxième position de la deuxième ligne de la matrice 23. Les données des quatrième, septième et deuxième colonnes de la matrice 23 seront ensuite respectivement entrelacées par les permutations 24 O4, O7 et O8. On obtient ainsi, la matrice 25 dans laquelle, par exemple : - la donnée d est située en quatrième position de la première ligne ; - les données cet e sont respectivement situées en deuxième et septième position de la deuxième ligne ; - les données f et a sont respectivement situées en deuxième et quatrième position de la quatrième ligne ; et - la donnée b est située en septième position de la dernière ligne. Ainsi, les données a, b et c (respectivement d, e et/) qui sont placées dans une même ligne des matrices 20 et 23 sont, après les permutations Oi, situées dans des lignes distinctes de la matrice 25. De cette manière, alors qu'avant permutation, elles sont codées avec une même roulette R, (respectivement R2), après permutation, les données a, b et c (respectivement d, e et/) sont donc codées avec des roulettes distinctes. L'association des K symboles d'information et des symboles de redondance produits par les 2P codes constituants forme le mot de code de longueur N. Selon une autre variante de réalisation de l'invention décrite à la figure 3, le graphe bipartite est séparé en deux groupes. Le premier groupe contient P1 roulettes de circonférence P2 et le deuxième groupe comprend P2 roulettes de circonférences Pl, avec P1 supérieur ou égal à Pz et le produit Pl par P2 égal à N. Les N symboles d'information du mot de code global sont écrits ligne par ligne dans une matrice carrée 30 de coté Pl dont seules les P2 premières colonnes sont remplies. Les P1- P2 dernières colonnes restent vides avec une valeur symbolisée par V. Chacune des P1 lignes est codée par un code constituant 31, la ième ligne de la matrice 30 correspondant à une roulette R1 de longueur P2. Chacun des codes 31 est, par exemple, un code convolutif récursif systématique circulaire (CRSC). Puis, on effectue une permutation des symboles de chacune des lignes par un entrelaceur #i 32. Chacun des Pl entrelaceurs possède la propriété suivante : après permutation, les symboles V de la matrice 30 se répartissent uniformément sur toutes les colonnes de la matrice 33. Ainsi, on obtient le même nombre de symboles V sur chacune des colonnes de la matrice 33. On effectue une permutation Oj sur chacune des Pl colonne de la matrice 33. Ces rotations possèdent la propriété suivante : après rotation, les symboles V de la matrice 33 se retrouvent dans les Pl-PZ dernières lignes de la matrice 33. Les P2 lignes non vides de la matrice résultante 35 sont alors codées par P2 codes constituants 36 de longueur P1. Les Pl+ P2 codes constituants définissent les N symboles du mot de code global. Ce code nécessite P égal à Pl bancs mémoires, chacun étant rempli par une ligne de la matrice non permutée. Le premier (respectivement deuxième) groupe peut alors être décodé simultanément par P1 (respectivement P2 décodeurs en parallèle. Le procédé de permutation de la matrice assure lors du décodage du deuxième groupe de roulettes que les accès mémoires sont effectués sur des bancs mémoires distincts. Selon une autre variante de réalisation de l'invention décrite à la figure 4, l'opération de codage permet de construire un code irrégulier à partir de K (égal à 24) symboles d'informations. Ce code est constitué de huit codes constituants Ri (i étant compris entre 1 et 8) 411, 412,413, 414, 441, 442, 443 et 444 de rendement r. Chaque code constituant est de circonférence égale à huit. Les symboles d'informations sont mémorisés dans quatre bancs mémoires 401 à 404. L'entrelacement 420 est défini de manière similaire à celui présenté en regard de la figure 2. Le code est alors défini de la façon suivante : - des symboles d'informations sont écrits ligne par ligne dans une matrice Mà quatre lignes et six colonnes ; - les lignes de la matrice M sont mises bout à bout pour former une trame circulaire 400, qui va être codée par les quatre roulettes R1 411, R2 412, R3 413 et R4 414. Les huit symboles d'informations de la roulette R1 411 (respectivement R2 412, R3 413 et R4 414) sont constitués des symboles de la ligne 401 (respectivement 402,403 et 404) de la matrice M et des deux premiers symboles de la roulette R2 412 (respectivement R3 413, R4 414 et R1411) ; - On effectue une permutation 420 des quatre lignes puis une permutation des six colonnes de la matrice M pour obtenir une matrice permutée M'; - Les lignes de la matrice M' obtenue sont mises bout à bout pour former une trame circulaire 430, qui va être codée par les quatre roulettes Rs 441, R6 442, R7 443 et R8 444. Les huit symboles d'informations de la roulette R5 415 (respectivement R6 416, R7 417 et Rs 418) sont constitués des symboles de la ligne 431 (respectivement 432,433 et 434) de la matrice permutée M et des deux premiers symboles de la roulette R6 416 (respectivement R7 417, R8 418 et R5 415). La permutation agissant sur les colonnes de la matrice M est choisie de telle sorte que lors du décodage des roulettes 441 à 444, les accès mémoires puissent être effectués simultanément sur des bancs mémoires distincts. Cette permutation sur les colonnes est par exemple l'identité, une rotation sur les colonnes ou, plus généralement, une permutation quelconque respectant la propriété liées aux accès mémoire énoncée précédemment. Après codage, les vingt-quatre symboles d' information et les symboles de redondance sont transmis sur le canal. La figure 5 présente un mode de réalisation d'un codeur global 500 utilisant P codeurs convolutifs systématiques récursifs circulaires en parallèle (CRSCx) 571,572, 57i, ..., 57P et dont l'architecture permet de générer les codes qui sont notamment décrits en regard des figures 1, 2 et 4. Le codeur global 500 accepte sur une entrée 550 des blocs de K symboles d'information qui sont également présentés sur une sortie 553 (le code global est systématique) et fournit, en outre, sur une sortie 590 des blocs de symboles de redondance issus du codage des blocs d' information. Le codeur global 500 comprend : - l'entrée 550 et la sortie 553 de symboles d' information ; - la sortie 590 de symboles de redondance ; - une unité de commande 504 ; P bancs mémoires (notés BMJ 561 à 56P ; - les codeurs élémentaires de type Convolutifs Récursifs Systématiques Circulaires (ou CRSC) 571 à 57P ; - un module de permutation PILk 510 ; - un module de rotation circulaire RC(OJ 530 ; - un module de commande Ok 520 du module 530 ; - un module de perforation 540. L'unité de commande 504 gère le fonctionnement de l'ensemble du dispositif 500. Cette unité de commande produit les signaux de contrôle suivants : - une commande 501 de mise à zéro des codeurs convolutifs récursifs circulaires 571 à 57p ; code convolutif récursif circulaire est obtenu par un premier pré-codage, avec un état initial du codeur nul, qui permet de définir l'état initial du codeur lors de l'opération de codage (on trouvera une description des codes convolutifs circulaires dans l'article écrit par C. Berrou, C. Douillard et M. Jézéquel, intitulé Multiple parallel concatenation of circular recursive systematic codes , et paru dans la revue Annales des Télécommunications, tome 54, n 3-4, pp 166-172,1999) ; - une commande d'accès mémoire 502 définissant l'adresse du symbole destiné à être traité et destiné aux modules 510 et 520 ; - une commande 503 de contrôle des bancs mémoires 561 à 56P en lecture et en écriture. L'unité de commande 504 peut être mise en oeuvre sous forme câblée et/ou sous forme de programme informatique s'exécutant sur un processeur. Les adresses des accès aux bancs mémoires 561 à 56P sont produites par le module 510, commandé via le signal 502 par l'unité de commande 504. Le module 510 pilote une permutation des données sur chaque banc si nécessaire par l'intermédiaire d'un signal d'adressage 505. Les données à coder 550 sont écrites dans les bancs mémoires 561,562, ..., 56i, ..., 56P à travers des bus 551, 552, ..., 55i, 55P avec la partition suivante pour un bloc de K symboles d'information : - le banc mémoire 561 mémorise les symboles d'indice 0 à C-l ; - le banc mémoire 562 mémorise les symboles d'indice C à 2C-1 ; - le banc mémoire 56i mémorise les symboles d'indice (i-l)C à iC-1 ; et - le banc mémoire 56P mémorise les symboles d'indice (P-1)C à K-1. Selon une variante, les données à coder comprennent non seulement les symboles d'informations mais également des symboles de redondances issues d'un code constituant du code global. L'architecture de cette variante étant similaire à celle du codeur 500, elle ne sera pas détaillée plus amplement. L'unité de commande 504 gère les accès en écriture des symboles 550 ou en lecture des symboles qui sont transférés sur la sortie 553 lorsque ces derniers ne sont pas directement lus lors de leur présentation sur l'entrée 550, via le signal 503 pour les commandes d'écriture et de lecture et via le module 510 pour la détermination des adresses d'accès. Chacun des blocs mémoires respectivement 561 à 56P est relié au module 530 par une liaison respectivement 531 à 53P permettant la lecture des données par le module 530 dans le bloc mémoire correspondant, cette lecture étant également pilotée par le signal 503 et le module 510. Une lecture simultanée d'un symbole dans chacun des blocs mémoires, par le module 530 est donc possible. Les blocs mémoires 561 à 56P sont de type RAM à simple port ou double ports en fonction de la bande passante nécessaire. En fonction du signal 502 émis par l'unité de commande 504, le bloc 520 définit la rotation circulaire Ok devant être appliquée à l'ensemble des symboles présentés aux entrées 531 à 53P et transmet le signal 506 au module 530 pour lui indiquer la rotation circulaire Ok à effectuer entre les entrées et les sorties du module 530. Chacun des codeurs CRSC respectivement 571 à 57P est relié au module 530 par une liaison respectivement 541 à 54P permettant la lecture d'un symbole donné en sortie du module 530 par le codeur CRSC correspondant. Un symbole lu par le module 530 est présenté pratiquement simultanément à une sortie du module 530 qui aiguille ce symbole sur la sortie adéquate en fonction du signal 506. Une lecture simultanée d'un symbole par chacun des codeurs CRSC dans le module 530 est donc possible. Chacun des codeurs convolutifs récursifs circulaires respectivement 571 à 57P permet : d'effectuer le pré-codage de chaque séquence d'information permettant de déterminer l'état initial du codeur tel que son état final après codage de la séquence considérée sera identique à cet état initial ; et - d'effectuer le codage convolutif récursif de chaque séquence de symboles présentés sur son entrée respectivement 541 à 54P par multiplication par un polynôme multiplicatif respectivement/, à fp et par division par un polynôme diviseur respectivement g 1 à gp, permettant de produire les bits de redondance (respectivement Etp+1 à EtP+P respectivement transmis sur des sorties 581 à 58P vers le module de perforation 540. Pour simplifier la réalisation, les polynômes générateurs des codes CRSC seront choisis identiques pour les P codeurs. Selon une variante, pour une adaptation à un code global quelconque, les polynômes générateurs des codes CRSC ne seront pas tous identiques. Les bits de redondance produits par les codeurs CRSC 571 à 57P sont poinçonnés par le module 540 pour fournir les symboles de redondance 590 associés aux symboles d' information 550. En résumé, à chaque accès en lecture commandé par les signaux 502 et 503, les bancs mémoires 561 à 56P fournissent des symboles (dans un ordre éventuellement différents de l'ordre d'entrée, ce qui correspond à un premier entrelacement) sur lesquels le module 530 applique une rotation circulaire de Ok symboles. Les symboles obtenus sont alors utilisés par les codeurs convolutifs récursifs circulaires 571 à 57P. Dans une mise en oeuvre du codeur 500 correspondant au code illustré en regard de la figure 1, - les permutations de données sont effectuées par l'unité de commande 504 et par le module 510 ; - deux bancs mémoires sont utilisés ; - le module 510 fournit, dans ce mode de réalisation, deux adresses mémoires pour les deux bancs mémoires par l'intermédiaire du signal 505 ; - la permutation spatiale entre les bancs mémoires est réalisée par l'unité de commande 504 et par les modules 520 et 530 ; et - les roulettes 14 et 15 (respectivement 16 et 17) sont codées simultanément à l'aide des codeurs 571 et 572 à la première étape avec T valant 1 (respectivement deuxième étape avec T valant 2), P valant alors 2. Dans une mise en oeuvre du codeur 500 correspondant au code illustré en regard de la figure 2 (respectivement 3), - la permutation 22 (respectivement #i 32) est effectuée par l'unité de commande 504 et par le module 510 ; - la rotation 24 (respectivement 34) est réalisée par l'unité de commande 504 et par les modules 520 et 530 ;et - le premier groupe de roulettes 21 R1 à R5 (respectivement 31 R1 à R5) et le deuxième groupe de roulettes 26 R6 à R10 (respectivement 36 R6 à R9) sont successivement codées à l'aide des codeurs 571 à 576, P valant alors 5 et les roulettes étant codées simultanément à l'intérieur de chaque groupe. De même, dans une réalisation du codeur 500 correspondant au code illustré en regard de la figure 4, - l'entrelaceur 420 est mis en oeuvre par l'unité de commande 504 et par les modules 510,520 et 530 ; - le premier groupe de roulettes 411 R1 à 414 R4 et le deuxième groupe de roulettes 441 R5 à 444 R8 sont successivement codées à l'aide des codeurs 571 à 574, P valant alors 4 et les roulettes étant codées simultanément à l'intérieur de chaque groupe. L'opération de codage d'une trame de K symboles d'information par T.P roulettes comporte donc les étapes suivantes : - une écriture des symboles d'information 550 reçus dans les bancs mémoires 561 à 56P ; T étapes de codage (T valant 2 dans les exemples précédents illustrés en regard des figures 1, 2 et 4) par P roulettes permettant de fournir les symboles de redondance correspondant ; - un poinçonnage (facultatif) des symboles de redondance (produit par les P roulettes) par le module 540 permettant d'obtenir le rendement désiré ;et transmission sur un canal des K symboles systématiques (si le code est systématique) et des N-K symboles de redondance, le cas échéant poinçonnés. L'organisation de la mémoire est, selon le mode de réalisation décrit, la suivante : à chaque adresse-mémoire d'un banc mémoire, sont mémorisées les données relatives à un symbole systématique (symbole d'information en provenance du canal et/ou informations extrinsèques produites par les décodeurs) ainsi que les symboles de redondance en provenance du canal correspondant. Pour chacune des T étapes de codage par les P roulettes, les opérations successives suivantes sont effectuées: - initialisation des codeurs convolutifs à l'état nul par l'intermédiaire du signal 501 ; - première lecture des C symboles d'information des P roulettes considérées et pré-codage de chacune des roulettes ; - détermination des états initiaux des codeurs ; - deuxième lecture des C symboles d'information par les P roulettes considérées et codage de chacune des roulettes afin de produire les symboles de redondance correspondant. Selon une variante du codeur 500 non représentée, un codeur similaire au codeur 500 met en #uvre des codes constituants non convolutifs systématiques récursifs circulaires. De même, selon une autre variante, un codeur adapté au codage du code illustré en regard de la figure 3 est mis en #uvre sur base du codeur 500 avec les modifications suivantes : - la perforation du code n'est pas nécessaire ; - l'organisation de la mémoire est adaptée au code ; et - si un code constituant n'est pas systématique, les sorties 58i concernent tous les symboles du mot de code constituant. La figure 6 présente d'un décodeur 600 adapté à décoder un code global produit par le codeur 500 illustré en regard de la figure 5. Le décodeur 600 utilise P décodeurs SISO en parallèle 671, 672, ..., 67i, ..., 67P correspondant chacun aux codeurs 571, 572, ..., 57i, ..., 57P. Le décodeur 600 accepte sur une entrée 650 des blocs de N symboles d'informations souples (symboles en provenance du canal et éventuellement informations a priori) et fournit sur une sortie 680 des symboles décodés. Les données entrantes et/ou mémorisées dans le décodeur 600 sont des symboles d'information et de redondance en provenance du canal et des informations pondérées produites par les décodeurs. Le décodeur global 600 comprend : - l'entrée 650 de symboles d'information douce ; - la sortie 680 de symboles décodés; - une unité de commande 604 ; - P bancs mémoires (notés BMx) 661 à 66P ; - les décodeurs élémentaires de type SISO 671 à 67P ; - un module de permutation intra-ligne, PILk 610, qui est identique pour les P bancs mémoires; - un module de rotation circulaire RC(Ok) 630 ; - une module de commande Ok 620 du module 630 ; - un module de décision 690. L'unité de commande 604 gère le fonctionnement de l'ensemble du dispositif 600. Cette unité de commande produit les signaux de contrôle suivants : - une commande d'accès mémoire 602 définissant l'adresse du symbole destiné à être traité et destiné aux modules 610 et 620 ; - une commande 603 de contrôle des bancs mémoires 661 à 66P en lecture et en écriture, les bancs mémoires pouvant être adressés simultanément et indépendamment les uns des autres. L'unité de commande 604 échange également un signal de contrôle 601 avec chacun des décodeurs SISO ; signal permet notamment de mettre en #uvre le critère d'arrêt en définissant quels sont les décodeurs effectivement utilisés au cours d'une itération ; Les adresses des accès aux bancs mémoires 661 à 66P sont produites par le module 610 commandé via le signal 602 par l'unité de commande 604. Le module 610 pilote une permutation des données sur chaque banc si nécessaire par l'intermédiaire d'un signal d'adressage 605. Les données à décoder 650 sont écrites ou lues dans les bancs mémoires 661, 662, ..., 66i, ..., 66P à travers des bus bidirectionnels 651,652, ..., 65i, 65P avec la partition suivante pour un bloc de K symboles d'information dans le cas où les codes constituants sont des codes convolutifs récursifs systématiques circulaires (pour ces codes les symboles de redondance et les symboles systématiques associés sont stockés à la même adresse mémoire) : - le banc mémoire 661 mémorise les données relatives aux symboles d'indice 0 à C-1 ; - le banc mémoire 662 mémorise les données relatives aux symboles d'indice C à 2C-1 ; - le banc mémoire 66i mémorise les données relatives aux symboles d'indice (i-l)C à iC-l ;et - le banc mémoire 66P mémorise les données relatives aux symboles d'indice (P-l)C à K-1. Dans le cas général d'un code constituant qui n'est pas convolutif récursif systématique circulaire, l'organisation mémoire est adaptée au code. L'unité de commande 604 gère les accès en écriture des symboles 650 ou en lecture des symboles qui sont transférés sur la sortie 680, via le signal 603 pour les commandes d'écriture et de lecture et via le module 610 pour la détermination des adresses d'accès. Chacun des blocs mémoires respectivement 661 à 66P est relié au module 630 par une liaison respectivement 631à 63P permettant la lecture des données par le module 630 dans le bloc mémoire correspondant, cette lecture étant également pilotée par le signal 603 et le module 610. Le module 630 peut donc lire ou écrire simultanément et en parallèle plusieurs symboles, un symbole étant lu ou écrit dans chacun des blocs mémoires. Les blocs mémoires 661 à 66P sont de type RAM à simple port ou double ports en fonction de la bande passante nécessaire. Chacun des décodeurs SISO respectivement 671 à 67P est relié au module 630 par une liaison bidirectionnelle respectivement 641 à 64P permettant la lecture ou l'écriture d'un symbole donné en sortie du module 630 par le décodeur SISO correspondant. Ainsi, plusieurs symboles sont lus en parallèle dans les bancs mémoires correspondant et alimentent autant de décodeurs SISO. En fonction du signal 602 émis par l'unité de commande 604, le bloc 620 applique, dans ce mode de réalisation, la rotation circulaire Ok à l'ensemble des symboles présentés aux entrées/sorties 631 à 63P ou 641 à 641P et transmet le signal 606 au module 630 pour lui indiquer la rotation circulaire Ok à effectuer entre les entrées et les sorties du module 630. Un symbole lu ou écrit par le module 630 est présenté ensemble à une sortie du module 630 qui aiguille ce symbole sur la sortie adéquate en fonction du signal 606. Une lecture ou une écriture simultanée d'un symbole par chacun des décodeurs SISO dans le module 630 est donc possible. Chacun des décodeurs SISO 671 à 67P utilise un algorithme à entrée souple et à sortie souple, qui produit des informations pondérées lors de la première (respectivement deuxième) étape, T valant 1 (respectivement 2) et P valant alors 2. Les décodeurs SISO contiennent également les modules permettant de mettre en oeuvre le critère d'arrêt. Chacun des modules renvoie des informations notamment sur la convergence du décodage associé au décodeur correspondant, à l'unité de commande par l'intermédiaire du signal 601. L'unité de commande prend en charge la mise en oeuvre de l'application des critères d'arrêts. Les informations pondérées sont alors écrites en mémoire de manière symétrique à l'opération de lecture précédente. En résumé, à chaque accès en lecture commandé par les signaux 602 et 603, les bancs mémoires 661 à 66P fournissent des symboles (dans un ordre éventuellement différents de l'ordre d'entrée, ce qui correspond à un premier entrelacement) sur lesquels le module 630 applique une rotation circulaire de Ok symboles. Les symboles obtenus sont alors utilisés par les décodeurs SISO 671 à 67P. Après décodage, une opération symétrique est mise en oeuvre, les données étant transmises de chacun des décodeurs SISO à un banc mémoire après un passage dans le module 630. A la fin du décodage itératif, le module 690 détermine les décisions dures, résultat du décodage à partir des données présentes dans les bancs mémoire 661 à 66p. Les décisions dures peuvent alors être lues sur une sortie 691 du décodeur 600. Dans une mise en oeuvre du décodeur 600 correspondant au code illustré en regard de la figure 1, - deux bancs mémoires sont utilisés; - les permutations de données sont effectuées par l'unité de commande 604 et par le module 610 qui fournit deux adresses mémoires différentes pour les deux bancs mémoires utilisés par l'intermédiaire du signal 605 ; - la permutation spatiale entre les bancs mémoires est réalisée par l'unité de commande 604 et par les modules 620 et 630 ; et - les roulettes 14 et 15 (respectivement 16 et 17) sont décodées simultanément à l'aide des décodeurs 671 et 672, à la première étape avec T valant 1 (respectivement deuxième étape avec T valant 2), P valant alors 2. Dans une mise en oeuvre du décodeur 600 correspondant au code illustré en regard de la figure 2 (respectivement 3), - la permutation 22 (respectivement #1 32) est effectuée par l'unité de commande 604 et par le module 610 ; - la rotation 24 (respectivement 34) est réalisée par l'unité de commande 604 et par les modules 620 et 630 ;et - le premier groupe de roulettes 21 RI à R5 (respectivement 31R1 à R5) et le deuxième groupe de roulettes 26 R6 à R10 (respectivement 36 R6 à R9) sont successivement décodées à l'aide des décodeurs 671 à 675, P valant alors 5 et les roulettes à l'intérieur de chaque groupe étant décodées simultanément en parallèle. De même, dans une réalisation du codeur 600 correspondant au code illustré en regard de la figure 4, - l'entrelaceur 420 est mis en oeuvre par l'unité de commande 604 et par les modules 610,620 et 630 ; - le premier groupe de roulettes 411 R1 à 414 R4 et le deuxième groupe de roulettes 441 Rs à 444 R8 sont successivement décodées à l'aide des décodeurs 671 à 674, P valant alors 4 et les roulettes à l'intérieur de chaque groupe étant décodées simultanément en parallèle. L'opération de décodage itérative d'une trame de K symboles d'information par T. P roulettes comporte donc les étapes suivantes : - une écriture des données relatives aux symboles d'information 650 reçues dans les bancs mémoires 661 à 66P (décisions souples en sortie du canal des symboles d'information systématique et des symboles de redondance); - plusieurs itérations de décodage, chacune étant constituée de T étapes de décodage (T valant, par exemple, 2 pour les codes illustrés précédemment en regard des figures 1 à 4) de P roulettes mettant en oeuvre un algorithme de type SISO qui nécessite la lecture des C symboles d'informations systématiques de la roulette considérée et l'écriture des C symboles d'information pondérés produits dans les bancs mémoires correspondant ; et - lecture, dans les bancs mémoires 661 à 66P, des données relatives aux K symboles d'informations pour effectuer la décision dure sur les symboles et produire la trame décodée qui sera transmise sur la sortie 680. Le décodage itératif est contrôlé par l'unité de commande 600 définissant l'algorithme de décodage itératif à utiliser et notamment l'utilisation du critère d'arrêt. Pour réduire le temps de décodage d'une trame, on applique un critère d'arrêt sur des fenêtres de données. Chacune des fenêtres est déterminée de façon à correspondre exactement à un code constituant. Ainsi, on détermine les blocs de données sur lesquels le critère d'arrêt est vérifié au cours de l'itération courante et on n'effectue plus les calculs correspondants au cours de l' itération suivante. Cette méthode offre la possibilité de réduire la taille globale des données à décoder au fur et à mesure des itérations au prix d'une dégradation limitée des performances car les fenêtres correspondent à des codes constituants. Ainsi, on utilise le critère d'arrêt de plusieurs façons, notamment : - si au moins un des P décodeurs utilisés en parallèle a convergé (indication par chaque signal 601 correspondant), l'unité de commande 600 gèle ce ou ces décodeurs ; et/ou - si tous les P décodeurs utilisés en parallèle ont convergé (indication par les signaux 601 correspondants), l'unité de commande 600 saute l'étape de décodage t correspondant et passe directement à l'étape de décodage suivante t+1, ce qui permet un gain de latence de décodage et de consommation. * Pour de plus amples détails sur les algorithmes de décodage utilisés pour les décodeurs SISO, on se référera aux articles (décrivant respectivement un algorithme de type BJCR et Viterbi): Optimal decoding of linear codes for minimizing symbol error rate , (ou en français décodage optimal des codes linéaires pour minimiser le taux d'erreur symbole ) écrit par L. R Bahl, J. Cocke, F. Jelinek, J. Raviv, et paru dans la revue IEEE Transactions on Information Theory, pp. 284-287, mars 1974. A Viterbi algorithm with soft decision outputs and ils applications (ou en français un algorithme de Viterbi avec des sorties à décisions souples et ses applications ) écrit par J. Hagenauer et P. Hoeher et paru dans le compte-rendu de la conférence IEEE Globecom, pp. 1680- 1686, novembre 1989. Selon une variante du décodeur non représentée, un décodeur similaire au décodeur 600 met en #uvre des codes constituants non convolutifs systématiques récursifs circulaires. De même, selon une autre variante, un décodeur adapté au codage du code illustré en regard de la figure 3 est mis en #uvre sur base du décodeur 600 avec une organisation de la mémoire est adaptée au code. En particulier, chaque symbole du mot de code est repéré par une adresse mémoire spécifique (alors que pour le décodeur 600, les mêmes adresses peuvent être utilisées pour un symbole systématique et un symbole de redondance correspondant). La figure 7 illustre une application du procédé de codage et de décodage selon l' invention aux stockage de données sur support magnétique et/ou optique. Le document Application des techniques de décodage itératif à la correction de l'interférence entre symboles écrit par P. Didier, A. Picard, C. Douillard et M. Jezequel et présenté lors du 15ème colloque GRETSI (France) du 18 au 21 septembre 1995 propose un mécanisme dans lequel on considère un canal à interférence entre symboles comme étant un des codes constituants d'un code convolutif concaténé en série. De même, M. Oberg et P. H. Siegel propose dans un article intitulé performance analysis of turbo-equalised partial response channels (ou en français analyse des performances des canaux à réponse partielle turbo-égalisés ) (paru dans la revue IEEE Transactions on communications, vol. 49, N 3, mars 2001, pages 436-444) une utilisation d'un turbo-décodage itératif dans le cas spécifique d'un canal magnétique avec interférences entre symboles. Ces techniques présentent les inconvénients des mécanismes de codage de l'état de la technique, présentés précédemment. Ils ne sont donc pas détaillés plus avant. Néanmoins, l' invention permet également de pallier ces inconvénients. Ainsi, on peut considérer que le canal 700 est un canal magnétique avec interférences entre symboles qui correspond à un code convolutif et permet de coder les données selon un code à roulette. De part sa nature, le canal 700 est continu. Son découpage en roulettes (par essence de taille finie) nécessite donc un traitement particulier. Selon le mode de réalisation illustré en regard de la figure 7, des symboles particuliers sont insérés dans la trame de façon à obtenir un retour périodique à un état prédéfini (par exemple, l'état 0). Le nombre des symboles ajoutés est supérieur ou égal à la mémoire du canal 700. Le découpage des roulettes se fait alors entre deux passages forcés à l'état prédéfini. Ainsi, selon l'exemple illustré en regard de la figure 7, quatre blocs comprenant chacun trois symboles d'informations sont codés respectivement par quatre roulettes 721,731, 741 et 751 pour former quatre mots de codes 720,730, 740 et 750. Les données ainsi codées sont ensuite entrelacées (selon un entrelacement 770) et enregistrées sur un support magnétique correspondant au canal 700 (données 701 à 716). Si la mémoire du canal 700 est égale, par exemple, à trois, on ajoute trois bits 717 à 719 égaux à 0 à la suite des symboles 701 à 716 enregistrés, ce qui permet de forcer le passage d'une roulette 760 correspondant au codage sur le canal 700 des symboles enregistrés 701 à 719 à l'état prédéfini égal à 0. Selon une variante de réalisation, on créée des roulettes par duplication des derniers bits des roulettes de façon à reboucler l'information (par exemple, un message Il 12 13 14 sera transmis dans le canal 700 par un message complété par les deux derniers symboles 13 14 placés en tête d'un message complété 13 14 Il 12 13 14 si la mémoire du canal 700 est égale à 2, avec seuls les quatre symboles finaux du message complété qui participe à une roulette). Selon une autre variante, on gère les effets de bord par recouvrement des roulettes comme illustré en regard de la figure 4, différents blocs correspondant à une roulette codée par le canal étant traités indépendamment, en prenant un contexte qui permet d'assurer la convergence des algorithmes de décodage, de façon à ce que le code ainsi obtenu ne soit pas sous-optimal. Selon encore une autre variante, un message à coder est découpé en blocs et des effets de bord sont gérés, au décodage, par un mécanisme de transmission d'information (par exemple, de l'état des noeuds du treillis utilisé par un algorithme de type SISO) d'un bloc à l'autre. L'opération de décodage est effectuée par un décodeur tout à fait similaire à celui illustré en regard de la figure 6, avec des décodeurs élémentaires correspondant aux sous-codes 700,721, 731,741 et 751, les codes 721,731, 741 et 751 pouvant être décodés en parallèle par des décodeurs distincts. De même, plusieurs blocs codés selon le code 700 pouvant eux-même être décodés en parallèle par des décodeurs distincts Elle ne sera donc pas détaillée plus amplement. Bien entendu, l'invention n'est pas limitée aux exemples de réalisation mentionnés ci-dessus. En particulier, l'homme du métier pourra apporter toute variante dans le type des roulettes utilisées, ainsi que leur nombre dans un dispositif de codage et/ou décodage de code global. L'homme du métier pourra également mettre en #uvre un nombre de codeurs et/ou de décodeurs ainsi que de bancs mémoires adapté aux besoins des opérations de codage et/ou décodage en fonction notamment de la latence de codage et/ou décodage souhaitée et/ou de la complexité du codeur et/ou décodeur de code global. Ainsi, dans certaines applications visant à optimiser la latence, le nombre de bancs-mémoires et/ou de codeurs/décodeurs sera proche de, voire égal au nombre de sous-codes. Afin d'améliorer encore la vitesse de décodage, des modules de décodage mettant en oeuvre une itération de décodage pourront être mis en cascade. Pour des applications visant à optimiser la complexité tout en gardant une vitesse de codage/décodage élevée, le nombre de bancs mémoires ainsi que de codeurs/décodeurs de sous-code pourra être réduit (pour par exemple correspondre à une fraction du nombre de sous-codes appartenant au code global). L'invention ne se limite pas au cas où le nombre d'étapes T vaut 2 mais s'étend également aux cas où T est supérieur à 2, notamment lorsque le code global peut être modélisé sous forme d'une première matrice et de deuxièmes matrices, chaque deuxième matrice étant obtenu par entrelacement des colonnes et éventuellement des lignes de la première matrice, et chaque ligne des première et deuxièmes matrices correspondant à un mot de sous-code du code global. Dans ce cas, T peut clairement prendre une valeur quelconque (par exemple, 3,4, 5, ...). L'invention ne se limite pas non plus au cas où la dimension du code vaut 2 mais s'étend également aux cas où elle est supérieure à 2. On note que l'invention ne se limite pas au codage ou au décodage de données destinées ou en provenance d'un canal de transmission mais s'étend à toute application des codes correcteurs d'erreurs et, notamment au stockage de données sur des supports magnétiques et/ou optiques. L'invention concerne, en outre, les dispositifs comprenant un ou plusieurs codeurs ou décodeurs selon l'invention, et notamment les mobiles ou équipement d'infrastructure de radio-communication ainsi que les équipements de transmission et/ou de réception de données, notamment sans fil (par exemple radio, optique et/ou acoustique) et à haut débit. L'invention concerne également les codes générés par les codeurs décrits précédemment et les signaux d'informations codées avec de tels codeurs. L'invention n'est pas limitée au code permettant une protection uniforme des symboles d'information mais s'étend également au cas où un niveau de protection en fonction des symboles d'information eux-même (par exemple, issus de sources différentes ou d'importance inégale selon un codage de source ou selon leur signification (symboles de données ou de contrôle)). Ainsi, les codes constituant d'un code global selon l' invention pourront être de rendement différents en fonction du niveau de protection souhaité. En outre, les symboles d'information pourront avoir des degrés différents et être répartis sur un ou plusieurs codes constituants. On notera que l'invention ne se limite pas à une implantation purement matérielle mais qu'elle peut aussi être mise en #uvre sous la forme d'une séquence d' instructions d'un programme informatique ou toute forme mixant une partie matérielle et une partie logicielle. Dans le cas où l'invention est implantée partiellement ou totalement sous forme logicielle, la séquence d'instructions correspondante pourra être stockée dans un moyen de stockage amovible (tel que par exemple une disquette, un CD-ROM ou un DVD-ROM) ou non, ce moyen de stockage étant lisible partiellement ou totalement par un ordinateur ou un microprocesseur. REVENDICATIONS 1. Procédé de décodage de code correcteur d'erreurs, du type associant un bloc de données décodé à des données codées selon un code global comprenant au moins deux sous-codes constituants (Ri), un graphe bipartite irrégulier étant associé audit code global, ledit procédé de décodage étant itératif et produisant à chaque itération un bloc de données extrinsèques, chacune des données extrinsèques se rapportant à une desdites données codées, ledit procédé mettant en #uvre une étape de mémorisation d'un bloc de données à décoder comprenant lesdites données codées et lesdites données extrinsèques, ledit bloc de données à décoder étant réparti dans une pluralité de bancs mémoires disjoints (BMi), adressables indépendamment, caractérisé en ce qu'à chaque itération, ledit procédé comprend, en outre, une étape d'alimentation en parallèle d'au moins deux décodeurs (671,672, 67i, 67P) parmi une pluralité de décodeurs, correspondant chacun respectivement à au moins un desdits sous-codes, par des données à décoder correspondantes dudit bloc de données à décoder, des données à décoder étant extraites en parallèle d'au moins deux desdits bancs mémoires (BMi)pour alimenter autant de décodeurs, et chacun desdits décodeurs étant alimenté séquentiellement par lesdites données à décoder lui correspondant. 2. Procédé selon la revendication 1, caractérisé en ce qu'au moins un desdits sous-codes est un code récursif convolutif circulaire. 3. Procédé selon l'une quelconque des revendications 1 et 2, caractérisé en ce qu'au moins un desdits sous-codes est un code systématique. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce qu'au moins deux desdits sous-codes sont des codes m-binaires, m étant un entier supérieur ou égal à 2 et en ce qu'une permutation intra-symboles est appliquée entre au moins deux desdits sous-codes m-binaires. 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce qu'il comprend, en outre, une étape d'aiguillage de chacune des données à décoder vers un desdits décodeurs, lesdites données étant aiguillées en parallèle et simultanément de sorte que chacune d'entre elles alimente un décodeur lui correspondant en propre. 6. Procédé selon la revendication 5, caractérisé en ce que ladite étape d'aiguillage comprend elle-même une étape de permutation circulaire d'un ensemble comprenant au moins une partie des données à décoder. 7. Procédé selon la revendication 6, caractérisé en ce que ladite permutation circulaire est une rotation qui possède un pas déterminé en fonction du rang de lecture des données lues dans lesdits bancs mémoires. 8. Procédé selon l'une quelconque des revendications 5 à 7, caractérisé en ce que ladite étape d'aiguillage met en #uvre une étape d'adressage de chacun desdits bancs mémoires de sorte que des données puissent être lues dans ledit banc mémoire dans un ordre prédéterminé distinct de l'ordre d'écriture desdites données dans ledit banc mémoire. 9. Procédé selon l'une quelconque des revendications 1 à 8, caractérisé en ce que chaque ligne d'une première matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à un premier groupe de sous-codes ; chaque ligne d'au moins une deuxième matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à au moins un deuxième groupe de sous-codes ; chaque matrice parmi lesdites au moins une deuxième matrice de données étant obtenue à partir d'une transformation de ladite première matrice, ladite transformation comprenant une permutation d'au moins une partie des colonnes de ladite première matrice. 10. Procédé selon la revendication 9, caractérisé en ce que ladite transformation comprend, en outre, une permutation d'au moins une partie des lignes de ladite première matrice. 11. Procédé selon l'une quelconque des revendications 1 à 10, caractérisé en ce que chaque ligne d'une première matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à un premier groupe de sous-codes, une partie des données de ladite première matrice, dites données non significatives, n'étant pas significative ; chaque ligne d'un premier sous-ensemble de lignes d'au moins une deuxième matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à au moins un deuxième groupe de sous-codes ; un deuxième sous-ensemble lignes de ladite deuxième matrice de données contenant lesdites données non significatives ; et chaque matrice parmi lesdites au moins une deuxième matrice de données étant obtenue à partir d'une transformation de ladite première matrice, ladite transformation comprenant une permutation d'au moins une partie des colonnes de ladite première matrice. 12. Procédé selon l'une quelconque des revendications 1 à 11, caractérisé en ce qu'il comprend une étape de test de décodage mettant en #uvre au moins un critère d'arrêt de façon à ce que lorsque ledit au moins un critère d'arrêt est vérifié pour au moins un desdits sous-codes, au moins un desdits décodeurs associés audit au moins un desdits sous-codes s'arrête de décoder ledit au moins un desdits sous-codes pour lequel ledit au moins un critère d'arrêt est vérifié. 13. Procédé selon l'une quelconque des revendications 1 à 12, caractérisé en ce qu'il met en #uvre une étape de lecture desdites données codées à partir d'un support optique et/ou magnétique et/ou de transmission desdites données codées sur un canal à interférences. 14. Procédé selon la revendication 13, caractérisé en ce qu'au moins un desdits sous-codes correspond à des interférences entre des symboles représentatifs dudit bloc de données décodé lorsque ledit bloc est stocké sur ledit support optique et/ou magnétique et/ou lorsque ledit bloc est transmis dans un canal à interférences. 15. Procédé selon l'une quelconque des revendications 1 à 14, caractérisé en ce qu'il met en #uvre une étape de réception desdites données codées en provenance d'un émetteur. 16. Procédé selon l'une quelconque des revendications 1 à 15, caractérisé en ce que les ensembles de données codées avec chacun desdits sous-codes sont tous différents deux à deux. 17. Procédé selon l'une quelconque des revendications 1 à 16, caractérisé en ce qu'au moins deux desdits sous-codes comprennent au moins deux desdits données à décoder en commun. 18. Procédé selon l'une quelconque des revendications 1 à 17, caractérisé en ce que ledit code global est de type code produit avec un entrelaceur non uniforme. 19. Procédé selon l'une quelconque des revendications 1 à 18, caractérisé en ce qu'il comprend, en outre, une étape de démultiplexage dudit bloc de données décodé de façon à alimenter au moins deux destinataires distincts par des données appartenant audit bloc de données décodé démultiplexé. 20. Procédé selon l'une quelconque des revendications 1 à 19, caractérisé en ce que le degré des symboles d'information dudit bloc de données décodé, dans ledit code global n'est pas uniforme. 21. Procédé de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, ledit bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, caractérisé en ce que ledit bloc de données codées est destiné à être décodé par ledit procédé de décodage itératif selon l'une quelconque des revendications 1 à 19. 22. Procédé de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, ledit bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, ledit bloc de données codées étant destiné à être décodé par un procédé de décodage itératif, caractérisé en ce que ledit procédé comprend, en outre, une étape d'alimentation en parallèle d'au moins deux codeurs parmi une pluralité de codeurs, correspondant chacun respectivement à au moins un desdits sous-codes, par des données à coder correspondantes dudit bloc de données à coder, des données à coder étant extraites en parallèle d'au moins deux desdits bancs mémoires pour alimenter autant de codeurs. 23. Procédé selon la revendication 22, caractérisé en ce que chacun desdits codeurs est alimenté séquentiellement par lesdites données à coder lui correspondant. 24. Procédé selon l'une quelconque des revendications 22 et 23, caractérisé en ce qu'au moins un desdits sous-codes est un code récursif convolutif circulaire. 25. Procédé selon l'une quelconque des revendications 22 à 24, caractérisé en ce qu'au moins un desdits sous-codes est un code systématique. 26. Procédé selon l'une quelconque des revendications 22 à 25, caractérisé en ce qu'au moins deux desdits sous-codes sont des codes m-binaires, m étant un entier supérieur ou égal à 2 et en ce qu'une permutation intra-symboles est appliquée entre au moins deux desdits sous-codes m-binaires. 27. Procédé selon l'une quelconque des revendications 22 à 26, caractérisé en ce qu'il comprend, en outre, une étape d'aiguillage de chacune des données à coder vers un desdits codeurs, lesdites données étant aiguillées en parallèle et simultanément de sorte que chacune d'entre elles alimente un codeur lui correspondant en propre. 28. Procédé selon la revendication 27, caractérisé en ce que ladite étape d'aiguillage comprend elle-même une étape de permutation circulaire d'un ensemble comprenant au moins une partie des données à coder. 29. Procédé selon la revendication 28, caractérisé en ce que ladite permutation circulaire est une rotation qui possède un pas déterminé en fonction du rang de lecture des données lues dans lesdits bancs mémoires. 30. Procédé selon l'une quelconque des revendications 27 à 29, caractérisé en ce que ladite étape d'aiguillage met en #uvre une étape d'adressage de chacun desdits bancs mémoires de sorte que des données puissent être lues dans ledit banc mémoire dans un ordre prédéterminé distinct de l'ordre d'écriture desdites données dans ledit banc mémoire. 31 Procédé selon l'une quelconque des revendications 22 à 30, caractérisé en ce que chaque ligne d'une première matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à un premier groupe de sous-codes ; chaque ligne d'au moins une deuxième matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à au moins un deuxième groupe de sous-codes ; chaque matrice parmi lesdites au moins une deuxième matrice de données étant obtenue à partir d'une transformation de ladite première matrice, ladite transformation comprenant une permutation d'au moins une partie des colonnes de ladite première matrice. 32. Procédé selon la revendication 31, caractérisé en ce que ladite transformation comprend, en outre, une permutation d'au moins une partie des lignes de ladite première matrice. 33. Procédé selon l'une quelconque des revendications 22 à 30, caractérisé en ce que chaque ligne d'une première matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à un premier groupe de sous-codes, une partie des données de ladite première matrice, dites données non significatives, n'étant pas significative ; chaque ligne d'un premier sous-ensemble de lignes d'au moins une deuxième matrice de données représentatives desdites données codées selon ledit code global est représentative de données codées par un sous-code constituant dudit code global appartenant à au moins un deuxième groupe de sous-codes ; un deuxième sous-ensemble lignes de ladite deuxième matrice de données contenant lesdites données non significatives ; et chaque matrice parmi lesdites au moins une deuxième matrice de données étant obtenue à partir d'une transformation de ladite première matrice, ladite transformation comprenant une permutation d'au moins une partie des colonnes de ladite première matrice. 34. Procédé selon l'une quelconque des revendications 22 à 33, caractérisé en ce qu'il met en #uvre une étape d'écriture desdites données codées sur un support optique et/ou magnétique et/ou de transmission desdites données codées sur un canal à interférences. 35. Procédé selon la revendication 34, caractérisé en ce qu'au moins un desdits sous-codes correspond à des interférences entre des symboles représentatifs dudit bloc de données décodé lorsque ledit bloc est stocké sur ledit support optique et/ou magnétique et/ou lorsque ledit bloc est transmis dans un canal à interférences. 36. Procédé selon l'une quelconque des revendications 22 à 35, caractérisé en ce qu'il met en #uvre une étape de réception desdites données codées en provenance d'un émetteur. 37. Procédé selon l'une quelconque des revendications 22 à 36, caractérisé en ce que les ensembles de données codées avec chacun desdits sous-codes sont tous différents deux à deux. 38. Procédé selon l'une quelconque des revendications 22 à 37, caractérisé en ce qu'au moins deux desdits sous-codes comprennent au moins deux données codées en commun. 39. Procédé selon l'une quelconque des revendications 22 à 38, caractérisé en ce que ledit code global est de type code produit avec un entrelaceur non uniforme. 40. Procédé selon l'une quelconque des revendications 22 à 39, caractérisé en ce qu'il comprend, en outre, une étape de multiplexage d'au moins deux blocs de données en provenance chacun de deux sources distinctes de façon à former ledit bloc de données source. 41. Procédé selon l'une quelconque des revendications 22 à 40, caractérisé en ce que le degré des symboles d'information dudit bloc de données décodé, dans ledit code global n'est pas uniforme. 42. Signal représentatif d'un bloc de données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, caractérisé en ce que ledit bloc de données codées est destiné à être décodé par ledit procédé de décodage itératif selon l'une quelconque des revendications 1 à 20. 43. Dispositif de décodage de code correcteur d'erreurs, du type associant un bloc de données décodé à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, ledit procédé de décodage étant itératif et produisant à chaque itération un bloc de données extrinsèques, chacune des données extrinsèques se rapportant à une desdites données codées, ledit dispositif mettant en #uvre des moyens de mémorisation d'un bloc de données à décoder comprenant lesdites données codées et lesdites données extrinsèques, ledit bloc de données à décoder étant réparti dans une pluralité de bancs mémoires disjoints, adressables indépendamment, caractérisé en ce qu'à chaque itération, ledit dispositif comprend, en outre, des moyens d'alimentation en parallèle d'au moins deux décodeurs parmi une pluralité de décodeurs, correspondant chacun respectivement à au moins un desdits sous-codes, par des données à décoder correspondantes dudit bloc de données à décoder, des données à décoder étant extraites en parallèle d'au moins deux desdits bancs mémoires pour alimenter autant de décodeurs, et chacun desdits décodeurs étant alimenté séquentiellement par lesdites données à décoder lui correspondant. 44. Dispositif de codage de code correcteur d'erreurs, du type associant un bloc de données source à des données codées selon un code global comprenant au moins deux sous-codes constituants, un graphe bipartite irrégulier étant associé audit code global, ledit bloc de données codées étant destiné à être transmis vers au moins un récepteur et/ou stocké sur un support de données, ledit bloc de données codées étant destiné à être décodé par un dispositif de décodage itératif, caractérisé en ce que ledit dispositif comprend, en outre, des moyens d'alimentation en parallèle d'au moins deux codeurs parmi une pluralité de codeurs, correspondant chacun respectivement à au moins un desdits sous-codes, par des données à coder correspondantes dudit bloc de données à coder, des données à coder étant extraites en parallèle d'au moins deux desdits bancs mémoires pour alimenter autant de codeurs.