Brevet FR2888062A1 — publié le 20070105

Le domaine de l'invention est celui du codage de données utiles numériques destinées à être transmises, ou diffusées, notamment en présence de bruits d'origines diverses, et du décodage des données codées ainsi transmises. L'invention concerne un procédé et un module électronique de codage d'une matrice ayant kl lignes, k2 colonnes et kl *k2 données utiles organisées en vecteurs lignes et en vecteurs colonnes, afin de construire une matrice ayant nl lignes, n2 colonnes et nl *n2 symboles (nl et n2 étant bien entendu respectivement supérieurs à kl et k2) à partir de codes concaténés, correspondant à deux codes élémentaires, avec entrelacement uniforme. Cependant ce procédé peut aussi s'appliquer à des matrices de taille T > 2 utilisant T codes élémentaires avec entrelacement uniforme. L'invention concerne aussi un procédé et un module électronique de décodage d'une telle matrice construite, après transmission dans un milieu (ou canal) déterminé et réception. Une telle matrice nl *n2 peut être construite selon la technique des turbo codes, notamment présentée dans le document FR-91 05280, comprenant une concaténation série ou parallèle de codes élémentaires et un entrelacement interne uniforme. De façon particulière, on peut mettre en oeuvre une concaténation série ou parallèle, en construisant une matrice nl *n2 de code produit. La notion de code produit a été introduite par P. Elias dans son article Error-free coding paru dans la revue IRE Transaction on Information Theory (vol. IT4, pages 29-27) en septembre 1954. Un code produit permet d'obtenir à partir de deux (ou plus) codes élémentaires, ayant chacun une faible distance de Hamming minimale b, un code dont la distance de Hamming minimale est égale au produit des distances de Hamming des codes élémentaires utilisés et dont le rendement est égal au produit des rendements élémentaires. Ainsi, en référence à la figure 1, si on considère deux codes élémentaires Cj(ni,kj,Sj) et C2(n2,k2,S2), obtenus à partir de codes élémentaires convolutifs ou de codes en blocs linéaires, le code produit se présente sous forme d'une matrice C à nl lignes et n2 colonnes où: les données binaires d'informations sont représentées par une sous- 2 2888062 matrice M à kl lignes et k2 colonnes, chacune des k1 lignes de la sous-matrice M est codée par le code C2, chacune des n2 colonnes de la matrice C est codée par le code CI. Si le code Cl est linéaire, les (ni kl) lignes construites par Cl sont des mots du code de C2 et peuvent donc être décodés comme les kl premières lignes. Un code produit a donc ni mots de code de C2 suivant les lignes, et n2 mots de code de CI suivant les colonnes. Il est connu de construire les codes produits en appliquant successivement aux mots de données utiles de la matrice initiale kl *k2, les polynômes générateurs des deux l0 codes CI et C2. La première phase consiste à faire un codage par le code C2 des Ici lignes de la matrice de données. A l'issue de cette phase, une matrice intermédiaire kl *n2 est obtenue, avec un bloc de redondance k1 *(n2 k2). La deuxième phase consiste à faire un codage par le code C, de chacune des n2 colonnes de la matrice intermédiaire, pour obtenir la matrice finale n 1 *n2. Cette approche nécessite l'utilisation d'un plan mémoire de taille k1 *n2 afin de mémoriser ladite matrice intermédiaire, entre le codage ligne et le codage colonne. Ce plan mémoire implique de prévoir au moins une mémoire dans le circuit électronique, encombrante en terme de taille. En outre, la mémorisation de la matrice intermédiaire, puis la lecture de cette 20 mémoire pour le codage en colonne, entraîne des temps d'écriture et de lecture qui ralentissent le temps de codage. Une amélioration à ce niveau serait donc souhaitable. En ce qui concerne le décodage d'une telle matrice construite de taille nl *n2, on peut utiliser la technique du turbo décodage consistant en un décodage itératif de la matrice, chaque itération comprenant une première demi-itération correspondant à un décodage de toutes les lignes (ou de toutes les colonnes) puis une deuxième demi-itération correspondant à un décodage de toutes les colonnes (ou de toutes les lignes). Les algorithmes de décodage sont à entrées et sorties souples (c'est-à-dire que le décodeur accepte en entrée et fournit en sortie des éléments non binaires pondérés en fonction de leur vraisemblance). Dans un contexte de décodage non itératif, les algorithmes de décodage sont à entrées et sorties dures (c'est-à-dire que le décodeur, mettant en oeuvre l'algorithme, accepte en entrée et fournit en sortie des éléments binaires). En référence aux figures 2 et 3, deux schémas blocs représentent respectivement deux exemples de demi-itération d'un turbo décodage à entrées et à sorties souples. En référence à la figure 2, Rk correspond à l'information reçue du canal, R'k à l'information qui vient de la demi-itération précédente et R'k+ à l'information envoyée à la demi-itération suivante. La sortie de chaque demi-itération est donc égale à Rk plus une information extrinsèque, Wk, multipliée ensuite par un nombre alpha. Cette information extrinsèque correspond à l'apport du décodeur 10. Elle est obtenue par différence entre la sortie pondérée Fk du décodeur 10 et l'entrée pondérée de ce même décodeur 10. Par la suite le décodeur 10 à entrées et sorties pondérées sera considéré comme un bloc ayant Rk et R'k (échantillonnés sur q bits) comme entrées, délivrant Rk et R'k+ (échantillonnés sur q bits) à la sortie avec une certaine latence L (retard nécessaire pour mettre en oeuvre l'algorithme de décodage). Cependant, en référence à la figure 3, Rk et R'k+ peuvent être respectivement remplacés par Wk et Wk+ qui deviennent alors respectivement une entrée et une sortie de la demi-itération: R'k est alors variable interne. L'intégration d'un turbo décodeur peut être effectuée selon deux techniques: - la technique séquentielle; - la technique modulaire (encore appelée technique pipeline ). En référence à la figure 4, est présentée l'architecture séquentielle, le circuit comprenant un seul décodeur élémentaire 10 et un seul plan mémoire 20, un bouclage entre la sortie et l'entrée du circuit permet de réaliser les demi-itérations successives. Le plan mémoire 20 est composé de quatre mémoires de taille gnjn2 bits indépendamment du nombre d'itérations effectuées. Deux des quatre mémoires fonctionnent en mode lecture, les deux autres fonctionnent en mode écriture. Il y a une inversion des modes de fonctionnement (lecture/écriture) des mémoires R'k entre chaque demi-itération. Pour les mémoires Rk, l'inversion du mode de fonctionnement intervient à la réception d'une nouvelle matrice d'information. L'intérêt principal de l'architecture séquentielle est un faible encombrement du turbo décodeur. La latence globale introduite par l'architecture séquentielle est au maximum de 2*ni*n2, et est indépendante du nombre d'itérations, une latence étant définie comme le nombre de symboles traités par le turbo décodeur avant qu'un nouveau symbole présent en entrée du circuit soit à son tour complètement traité. L'inconvénient majeur de l'architecture séquentielle est le débit de traitement des Io données. En effet, le débit doit tenir compte de l'utilisation d'une seule structure de base ou module (le décodeur élémentaire 10 et le plan mémoire 20) pour toutes les demi-itérations. Le débit maximal de traitement des données pour le turbo décodeur est donc au plus égal au débit de traitement d'un décodeur élémentaire divisé par le nombre de demi-itérations. C'est pourquoi l'architecture séquentielle permet un débit de traitement des données limité. L'utilisation de cette architecture séquentielle dans un contexte haut débit n'est par conséquent pas adaptée. En référence à la figure 5, est présentée l'architecture pipeline où l'intégration d'un turbo décodeur repose sur une architecture modulaire en cascade, le nombre de modules étant égal au nombre de demi-itérations à exécuter. Chaque module est sensiblement identique audit module selon l'architecture séquentielle, à savoir qu'il comprend un décodeur élémentaire 10-i et un plan mémoire 20-i (i étant compris entre 1 et 2*it, it étant le nombre d'itérations). Le décodage à partir d'une structure pipeline consiste à réaliser un décodage à entrées et à sorties pondérées de toutes les lignes ou de toutes les colonnes d'une matrice pour chacune des demi-itérations. Ainsi, pour it itérations, l'architecture du turbo décodeur contient 2it décodeurs élémentaires 10-i et 8it mémoires de taille qnJ*n2 bits. L'intérêt de l'architecture pipeline est le débit de traitement des données. En 30 effet, le débit obtenu est le débit de traitement d'un décodeur élémentaire. En revanche, l'inconvénient majeur de cette architecture est qu'elle implique un turbo décodeur très encombrant du fait de la structure en cascade, l'encombrement provenant en grande partie des blocs mémoires 20i nécessaires pour mémoriser les matrices Rk (information reçue du canal) et R'k (information qui vient de la demi- itération antérieure) afin de reconstruire la matrice après le décodage selon les lignes ou les colonnes. Cette solution architecturale est donc très coûteuse lorsque le nombre d'itérations augmente. En outre, la latence est égale à (n j*n2*2it)+it*(L j+L2) pour it itérations, les n jn2 premiers symboles correspondant au remplissage d'une matrice de données et les Li symboles suivants au décodage proprement dit d'une ligne (Lj=xn2) ou d'une colonne (L2=xn j) de cette matrice, la valeur de x dépendant de la structure interne des décodeurs 10-i utilisés. La latence est donc importante, introduisant un retard excessif. Le document WO 02/39587 décrit une technique permettant de diminuer les problèmes de faible débit dans les architectures séquentielles et les problèmes d'encombrement et de latence dans les architectures pipeline. La solution proposée consiste à mémoriser plusieurs données à la même adresse grâce à une organisation particulière de la mémoire, et à prévoir un décodeur apte à 20 traiter plusieurs symboles d'une ligne ou d'une colonne simultanément. La figure 6 illustre cette technique, en montrant une matrice comprenant quatre symboles (QI (ij+1), (i+1,j) et (i+1,j+1) adjacents les uns aux autres (i et j représentant respectivement des indices de lignes et de colonnes). Ladite organisation particulière de la mémoire permet ainsi de stocker ces quatre symboles à l'adresse (I,J). La mémoire contient donc quatre fois moins de mots, mais des mots quatre fois plus grands. Pour le décodage ligne, les symboles (id) , (i j+1) sont alors affectés à un premier décodeur élémentaire DEC1, et (i+1,j) , (i+l,j+1) à un deuxième décodeur élémentaire DEC2. Pour le décodage colonne, on prend (i j), (i+l j) pour DEC1 et (i,j+1), (i+1,j+1) pour DEC2. Ces décodeurs élémentaires sachant traiter simultanément en entrée (lecture du plan mémoire) et en sortie (écriture du plan mémoire) les couples de symboles, le débit de traitement des données de la matrice est alors quatre fois plus rapide que pour le décodeur classique. Le coût matériel de cette solution architecturale implique l'utilisation de deux décodeurs élémentaires traitant simultanément deux symboles d'un mot de matrice dans l'exemple considéré. En généralisant, si un mot de la nouvelle matrice contient m symboles d'une ligne et 1 symboles d'une colonne, le temps de traitement de la matrice est m.l fois plus rapide avec seulement m décodeurs élémentaires pour le traitement des lignes lors d'une 10 demi-itération et 1 décodeurs élémentaires pour le traitement des colonnes lors de la demi-itération suivante. Cette configuration augmente approximativement la complexité des décodeurs dans un rapport m2/2 (cf. thèse de J. Cuevas Turbo Décodage de Code Produit Haut Débit , thèse de Doctorat à l'Université de Bretagne Sud, Brest, 6 mai 2004) par rapport aux décodeurs classiques, mais permet l'obtention d'une vitesse m2 fois plus élevée. En outre, pour une taille identique, la mémoire comporte m2 fois moins de mots que la matrice initiale. A technologie équivalente, son temps d'accès sera donc moindre. L'invention tente d'améliorer la situation par rapport à ces architectures, en prévoyant un autre type de décodage et de nouvelles architectures. Un objectif principal de l'invention est d'augmenter le débit de traitement des données tout en diminuant la latence globale du circuit de turbo décodage, notamment en perfectionnant les architectures séquentielles et pipeline. Un autre objectif est d'éliminer les plans mémoires entre les demiitérations 25 pour les architectures pipelines, et pour des architectures séquentielles. Un autre objectif est de prévoir des architectures permettant des débits supérieurs à environ 10 Gbits/s. Un autre objectif est de diminuer substantiellement le coût matériel du Mbits/s. A ces effets, l'invention propose, selon un premier aspect un procédé de 30 décodage d'une matrice construite à partir de codes concaténés, correspondant à au moins deux codes élémentaires, avec entrelacement uniforme, cette matrice ayant n1 lignes, n2 colonnes et nl *n2 symboles, caractérisé en ce qu'il comprend un traitement de tous les vecteurs lignes et colonnes de la matrice par groupes successifs de symboles, ce traitement comprend un premier décodage pour traiter simultanément tous les symboles d'un groupe de symboles selon leurs lignes puis un deuxième décodage pour traiter simultanément tous les symboles d'un groupe de symboles selon leurs colonnes, ou inversement. D'autres caractéristiques de ce procédé de décodage sont: - le procédé est mis en oeuvre de sorte que le deuxième décodage est mis en oeuvre simultanément au 10 premier décodage, les premier et deuxième décodages traitant alors des groupes de symboles différents; - selon un premier type de décodage selon l'invention, chaque groupe de symbole est défini par une ligne ou une colonne de la matrice, différente de celle de chacun des autres groupes de symboles; - selon un second type de décodage selon l'invention, la localisation d'un symbole dans chaque groupe de symbole correspond à une colonne et à une ligne qui sont respectivement différentes de la colonne et de la ligne localisant chacun des autres symboles du groupe; - dans le cas particulier où le nombre de symboles dans un groupe de symboles est identique d'un groupe de symboles à un autre, les symboles traités d'un nouveau groupe sont déterminés par leurs positions respectives dans la matrice, les positions étant trouvées à partir des positions respectives des symboles du groupe précédemment traité qui sont décalées en ligne ou en colonne d'un indice prédéterminé ; - ledit indice prédéterminé pouvant être un nombre entier modulo le nombre de symboles par groupe; - la matrice est en outre décodée par sousmatrices successives constituées chacune de groupes de symboles, chaque sous-matrice ayant des symboles distincts de ceux des autres sousmatrices, en particulier, si n2 = u*nl (ou n1 = u*n2), u étant un entier supérieur ou égal à 2, chaque sous-matrice a une taille égale à nl *nl (ou n2*n2) ; - le nombre de symboles traités dans chaque groupe de symboles est égal au minimum de n l et de n2, min (n l, n2) ; - au moins certaines des données traitées sont pondérées; - selon une première configuration, le procédé ne comprend pas d'étape de mémorisation de données entre le premier décodage et le deuxième décodage; - selon une deuxième configuration, l'ensemble décodeur ligne et l'ensemble décodeur colonne sont constitués de décodeurs élémentaires utilisés successivement pour le décodage ligne et colonne, et le procédé comprend une étape de mémorisation de données entre le premier décodage et le deuxième décodage; - le procédé est itératif Selon un deuxième aspect, l'invention propose un module de décodage apte à mettre en oeuvre ledit procédé de décodage, comprenant un ensemble décodeur ligne apte à décoder des lignes de ladite matrice et un ensemble décodeur colonne apte à décoder des colonnes de ladite matrice, caractérisé en ce que l'ensemble décodeur ligne et l'ensemble décodeur colonne sont agencés l'un avec l'autre de sorte à réaliser ledit traitement de tous les vecteurs lignes et colonnes de la matrice par groupes successifs de symboles, lesdits premier et deuxième décodages étant respectivement assurés par l'ensemble décodeur ligne et l'ensemble décodeur colonne ou inversement. D'autres caractéristiques de ce module de décodage sont: - le module ne comprend pas de mémoire entre l'ensemble décodeur ligne et l'ensemble décodeur colonne; - l'ensemble décodeur ligne (ou colonne) comprend un nombre n1 (ou n2) de décodeurs élémentaires en parallèle et en ce que l'ensemble décodeur colonne (ou ligne) est constitué d'un décodeur combinatoire apte à traiter simultanément un nombre n1 (ou n2) de symboles; - l'ensemble décodeur ligne comprend un nombre n de décodeurs lignes en parallèle qui est égal au nombre de décodeurs colonnes en parallèle compris dans l'ensemble 25 décodeur colonne, ce nombre n étant inférieur ou égal à min (nl, n2) ; - l'ensemble décodeur ligne et l'ensemble décodeur colonne comprennent chacun au moins un décodeur apte à traiter simultanément au moins deux symboles distincts; - l'ensemble décodeur ligne et l'ensemble décodeur colonne comprennent respectivement des décodeurs ligne en parallèle et des décodeurs colonne en parallèle, et sont agencés l'un avec l'autre de sorte que les décodeurs ligne soient reliés électriquement aux décodeurs colonne selon un réseau d'interconnexion dynamique; - Dans ce cas, le réseau d'interconnexion peut autoriser un profil de communication entre les décodeurs ligne et les décodeurs colonne de type permutation circulaire, une permutation circulaire modifiant de façon cyclique les connexions entre décodeurs ligne et décodeurs colonne, déterminant ainsi les traitements successifs des groupes de symboles dans la matrice; - le module peut en outre comprendre un deuxième réseau d'interconnexion sensiblement identique au premier réseau d'interconnexion, ce deuxième réseau d'interconnexion étant situé en sortie (ou en entrée) de l'ensemble décodeur colonne ou en entrée (ou en sortie) de l'ensemble décodeur ligne; - le module peut en outre comprendre une mémoire en entrée apte à mémoriser au moins temporairement la matrice, l'ensemble décodeur ligne ou colonne étant connecté à la mémoire de sorte à être alimenté respectivement par les lignes ou par les colonnes de la matrice mémorisée. Selon un troisième aspect, l'invention propose un dispositif de décodage modulaire comprenant plusieurs desdits modules de décodage montés en série, ces molécules de décodage comprenant deux réseaux d'interconnexion, les réseaux d'interconnexion dynamique des différents modules étant configurés pour mettre en oeuvre un décodage itératif de la matrice, chaque itération étant assurée par un module. Selon un quatrième aspect, l'invention propose un dispositif de décodage séquentiel comprenant ledit module de décodage, en outre une mémoire, et une liaison électrique entre la sortie du module et l'entrée du module de sorte à mettre en oeuvre un décodage itératif de la matrice, toutes les itérations étant assurées par le module. Selon un cinquième aspect, l'invention propose un module de codage d'une matrice ayant kl lignes, k2 colonnes et kl *k2 données utiles organisées en vecteurs lignes et en vecteurs colonnes, le module comprenant k2 (ou kl) codeurs élémentaires, caractérisé en ce qu'il comprend en outre un ensemble codeur apte à traiter simultanément k2 (ou kl) données utiles et agencé avec les k2 (ou kl) codeurs élémentaires de sorte que les vecteurs de données utiles de dimension k2 (ou kl) soient successivement codés, chaque codage de vecteur comprenant un premier codage par les k2 (ou kl) codeurs élémentaires puis un second codage par l'ensemble codeur. D'autres caractéristiques de ce module de codage sont: - le module ne comprend pas de mémoire intermédiaire entre les k2 (ou kl) codeurs et l'ensemble codeur; - l'ensemble codeur est un codeur dit combinatoire qui correspond à une arborescence combinatoire de fonctions OU-exclusif. D'autres caractéristiques, buts et avantages seront décrits dans la description non limitative qui suit de l'invention, illustrée par les figures suivantes: La figure 1 représente schématiquement une matrice de code produit. Les figures 2 et 3 sont des schémas bloc représentant deux types de turbo décodage à entrée et à sortie pondérées, au cours d'une demi itération. La figure 4 représente schématiquement un turbo décodeur séquentiel classique. La figure 5 représente schématiquement un turbo décodeur pipeline classique. La figure 6 représente une matrice illustrant le principe de décodage parallèle selon le document WO 92/39587. Les figures 7A à 7G représentent différentes étapes d'un type de décodage matriciel selon l'invention pour une matrice carrée. Les figures 8A à 8H représentent différentes étapes d'un type de décodage d'une matrice non carrée selon l'invention. La figure 9 représente schématiquement une architecture de module de décodage selon l'invention. Les figures 10 et 11 représentent un exemple de réseau d'interconnexion entre décodeurs selon l'invention, le réseau d'interconnexion étant ici dans un état de déterminé. La figure 12 représente un premier type d'architecture séquentielle traitant des demi-itérations selon l'invention. La figure 13 représente un second type d'architecture séquentielle traitant des itérations selon l'invention. La figure 14 représente un premier type d'architecture pipeline selon l'invention. La figure 15 représente un second type d'architecture pipeline selon l'invention. Les figures 16A à 16D représentent chacune respectivement une étape de décodage d'une matrice carrée lors d'itérations différentes, les étapes de décodage étant mises en oeuvre simultanément par différents modules d'une architecture pipeline selon l'invention. Les figures 17A à 17G représentent différentes étapes d'un 2ème type de décodage matriciel selon l'invention pour une matrice carrée. La figure 18 représente schématiquement une architecture de module de décodage selon l'invention. Les figures 19A à 19H représentent différentes étapes de codage d'une matrice 10 carrée selon l'invention. Les figures 20A à 20F représentent différentes étapes de codage d'une matrice non carrée selon l'invention. La figure 21 représente deux types d'architecture de codage selon l'invention. Un principe général selon l'invention repose sur un codage ou un décodage en parallèle des vecteurs lignes et colonnes d'une matrice C, en alternant plusieurs fois des traitements simultanés de lignes puis des traitements simultanés de colonnes. Cette technique permet de traiter complètement et en continu des groupes successifs de symboles de la matrice. L'invention propose en particulier des architectures permettant de mettre en oeuvre de tels codage et décodage, et notamment des ensembles codeur (ou décodeur) ligne et colonne aptes à traiter simultanément des données matricielles selon, respectivement, les lignes et les colonnes. On verra par la suite que ce type de codage et de décodage selon l'invention peut diminuer l'encombrement du circuit, et permet des gains en vitesse et en débit 25 substantiels. La matrice C alors construite après codage (et celle alimentant le décodeur) est constituée de kl et k2 vecteurs de données utiles (uniformément entrelacés selon des lignes de longueurs k2 et selon des colonnes de longueur kl) concaténés, en série ou en parallèle, avec au moins deux codes élémentaires, de sorte à avoir au final une dimension nl *n2. Cette matrice C peut par exemple être de code produit, telle que celle illustrée sur la figure 1 et précédemment discutée. A. DECODAGE Dans cette partie, est présenté un type d'architecture pour les turbo décodeurs de codes concaténés avec entrelacement uniforme, tels que les codes produits. Chacune des demi-itérations peut ainsi être mise en oeuvre conformément à la figure 2 ou 3. On part du principe que, pour les matrices C construites à partir de tels codes: les n1 lignes et les n2 colonnes correspondent respectivement à ni et n2 mots indépendants; que le décodage des ni mots et des n2 mots peuvent respectivement être effectués en parallèle si des ressources matérielles (décodeurs élémentaires) sont disponibles; et que le traitement des symboles constituant un mot n'a pas un ordre particulier, seul importe la position du premier symbole traité dans le mot considéré.. Le décodage selon l'invention peut être mis en oeuvre par des décodeurs élémentaires, et/ou par des décodeurs combinatoires. Un décodeur élémentaire est apte à traiter un symbole à la fois, alors qu'un décodeur combinatoire est apte à traiter plusieurs symboles simultanément. 1. 1 er TYPE DE DECODAGE I.1 Principe de ce décodage I.1.1 Décodage d'une matrice carrée En référence aux figures 7A à 7G, sont représentées différentes étapes d'un tel traitement d'une matrice carrée 8*8, lors d'une même itération. La matrice est représentée par un carré rempli de 8*8 cases, chaque case 25 représentant un symbole. Aux fins du décodage, 16 décodeurs (8 pour les lignes et 8 pour les colonnes) sont prévus. Un ensemble décodeur ligne est constitué ici de 8 décodeurs lignes (Dli avec i C [1,8]) traitant 8 mots de 8 symboles. Un ensemble décodeur colonne est constitué ici de 8 décodeurs colonnes (DGj avec j C [1,81) traitant également 8 mots de 8 symboles. Chacun de ces décodeurs (ligne ou colonne) est ici apte à traiter un symbole à la fois: ce sont donc des décodeurs élémentaires, pouvant ainsi, mettre en oeuvre un turbo décodage selon la figure 2 ou 3. En référence à la figure 7A, la matrice est traitée ici en commençant par un groupe de symboles constitués des symboles se trouvant sur une diagonale, en mettant en oeuvre les décodeurs ligne (Dii avec i C [1,8]). Puis, en référence à la figure 7B, les décodeurs colonne (Dci avec i C [1, 8]) traitent les mêmes symboles que ceux traités précédemment. Etant donné ce qui a été vu précédemment (traitement possible des symboles de façon indépendante), les symboles selon la diagonale sont alors entièrement traités (i.e. en ligne et en colonne) lors de cette itération: c'est ce que signifient les cases noires de la figure 7C. Le prochain groupe de symboles à traiter est constitué de symboles ayant des positions trouvées à partir des positions respectives des symboles du groupe précédemment traité (ici la diagonale) : ainsi, dans l'exemple présent, les positions des symboles du nouveau groupe de symboles à traiter sont trouvées en décalant en ligne d'une unité modulo 8 les positions des symboles de la diagonale. On trouve ainsi que le prochain groupe de symboles est constitué des symboles (1,2), (2,3), (3,4), (4,5), (5,6), (6,7), (7,8), (8,1). Ainsi, en référence à la figure 7B, du point de vue du 2ème mot de ligne, le traitement de son symbole (2,3) fait suite au traitement de son symbole (2,2). Et du point de vue du 2ème mot de colonne, le traitement de sonsymbole (1,2) fait suite au traitement de son symbole (2,2). Ainsi, chaque décodeur ligne i traite les symboles d'un mot en incrémentant l'indice (i* modulo 8) associé aux symboles. La latence de décodage de la matrice C est alors de L=8*x symboles. Et chaque décodeur colonne j traite les symboles d'un mot en décrémentant l'indice 0'* modulo 8) associé aux symboles. La latence de décodage de la matrice C est alors de L=8*x symboles. Il est à noter ici que la latence entre le décodage des lignes et le décodage des colonnes est nul, étant donné qu'il y a absence de plan mémoire entre les deux, ces deux décodages se succédant sans mémorisation intermédiaire. La latence globale de la matrice C est alors de 16*x. Le nouveau groupe de symboles est alors traité de façon identique au précédent, d'abord simultanément en ligne (figure 7B) puis simultanément en colonne (figure 7C). Il est alors complètement traité lors de l'itération courante (figure 7D). Avantageusement, les symboles d'un nouveau groupe sont traités en ligne simultanément au traitement en colonne du groupe précédent (voir figure 7B) : on optimise ainsi le temps de traitement de la matrice. La matrice est ensuite entièrement décodée, lors de l'itération courante, en lignes et en colonnes de façon identique aux ter et 2' groupes de symboles (voir figures 7A à l0 7G). De façon triviale, on peut appliquer l'enseignement technique de cet exemple au cas général de décodage d'une matrice concaténée avec entrelacement uniforme, carrée ayant une dimension n *n (n lignes et n colonnes). On dispose ainsi de 2n décodeurs, et il est possible de décoder n lignes et n colonnes en parallèle. Si on considère une itération complète, la latence de décodage de la matrice C suivant les lignes puis les colonnes est alors de 2L symboles, L= x*n. Il est à noter ici que la latence entre le décodage des lignes et le décodage des colonnes est nul, étant donné qu'il y a absence de plan mémoire entre les deux, ces deux 20 décodages se succédant sans mémorisation intermédiaire. I.1.2 Décodage d'une matrice non carrée L'un des objectifs du décodage parallèle d'une matrice C est d'éliminer les plans mémoires. Cela implique d'avoir autant de décodeurs pour les lignes que pour les colonnes. Si les nombres de lignes et de colonnes d'une matrice C sont différents, alors on peut prendre 2n décodeurs élémentaires tel que n = min(nl,n2). Parmi eux, n décodeurs sont utilisés pour le décodage des lignes et n décodeurs sont utilisés pour le décodage des colonnes. Par conséquent, le décodage selon l'invention est capable de décoder en parallèle n lignes et n colonnes de la matrice C. En référence aux figures 8A à 8H, sont représentées différentes étapes d'un traitement d'une matrice 8*16, lors d'une même itération. Sont utilisés 16 décodeurs (8 pour les lignes et 8 pour les colonnes). Les 8 décodeurs lignes (Dli avec i E [1,8]) traitent 8 mots de 16 symboles. Les 8 décodeurs colonnes (Dj avec j E [1,8]) traitent deux fois 8 mots de 8 symboles. La matrice est alors traitée en deux fois, par sous-matrices de 8*8, chaque sous- matrice étant carrée et traitée de façon similaire au traitement d'une matrice carrée telle que décrit ci-dessus. Lorsque tous les symboles de la première sous-matrice ont été traités en lignes (en colonnes), le décodage ligne (colonne) commence pour la deuxième sousmatrice (voir figure 8F). Dans chaque sous-matrice: pour un traitement suivant les lignes, l'indice indiquant le passage d'un symbole à l'autre dans un mot est incrémenté de 1 modulo 8 (nombre de décodeurs lignes). Par contre, pour un traitement suivant les colonnes, l'indice indiquant le passage d'un symbole à l'autre dans un mot est décrémenté de 1 modulo 8 (nombre de décodeurs colonnes). La latence des décodages lignes et colonnes sont respectivement de 16x et de 8x symboles. Enfin, la latence entre le décodage des lignes et le décodage des colonnes est nulle (absence de plan mémoire). De façon plus générale, si on considère une matrice nl*n2 avec n2=u*nl (ou nl=u*n2), avec u un entier supérieur ou égal à 2, le traitement se fait successivement par sous-matrices (qui sont ici au nombre de u): pour un traitement suivant les lignes, l'indice indiquant le passage d'un symbole à l'autre dans un mot est incrémenté de 1 modulo n (nombre de décodeurs lignes). Par contre, pour un traitement suivant les colonnes, l'indice indiquant le passage d'un symbole à l'autre dans un mot est décrémenté de 1 modulo n (nombre de décodeurs colonnes). La latence d'une itération complète est alors de (nl+n2)x. Bien entendu, les exemples et développements ci-dessus ne sont pas limités à des traitements selon les lignes puis suivant les colonnes, mais s'étendent aussi de façon triviale aux traitements selon les colonnes puis suivant les lignes. En outre, le lei groupe de symboles traité de la matrice n'est évidemment pas nécessairement au groupe constitué de la diagonale principale, mais peut être évidemment choisi autrement. Il est néanmoins préféré que la localisation d'un symbole dans chaque groupe de symbole corresponde à une colonne et à une ligne qui sont respectivement différentes de la colonne et de la ligne localisant chacun des autres symboles du groupe. Le nombre de symboles dans un groupe de symboles est aussi préférentiellement identique d'un groupe de symboles à un autre, afin d'utiliser autant de décodeurs d'un traitement d'un groupe à un autre groupe. Enfin, les symboles traités d'un nouveau groupe étant déterminés par leurs positions respectives dans la matrice, ces positions sont avantageusement trouvées à partir des positions respectives des symboles du groupe précédemment traité en les décalant en ligne ou en colonne d'un indice prédéterminé. Ce décalage d'indice prédéterminé ne se limite pas à une valeur égale à une unité modulo n, mais à tout moyen permettant de balayer toute la matrice sans traiter une seconde fois le même symbole lors d'une même itération. Enfin, le nombre n de décodeurs utilisés (en ligne et en colonne) n'est pas nécessairement égal à n1 ou à n2. En effet, il peut être aussi inférieur à n, dans le cas particulier où on utilise au moins un décodeur apte à décoder simultanément plusieurs symboles, tels que les décodeurs divulgués dans WO 02/39587 (discutés plus haut). A été décrite dans ce chapitre, une technique de décodage parallèle des codes produits. Cette technique peut être appliquée à toutes les architectures de turbo décodeurs de code produit. I.2 Turbo décodage L'un des avantages de la technique de décodage parallèle des codes produits selon l'invention, est d'éliminer les plans mémoires associés aux matrices générées par un code produit entre les différentes demi-itérations. Une gestion de la communication des symboles des différents mots de la matrice entre le décodage des lignes et des colonnes est alors nécessaire. Une solution selon l'invention consiste à placer un réseau d'interconnexion 50 entre l'ensemble décodeur ligne 60 et l'ensemble décodeur colonne 70, comme indiqué sur la figure 9, interconnectant ainsi les codeurs de l'ensemble 60 avec les codeurs de l'ensemble 70. Ce réseau d'interconnexion 50 peut être matérialisé par de simples liaisons point à point ou par un réseau Crossbar. Dans le cadre de l'invention, on peut préférer un réseau d'interconnexion dynamique, tel que celui représenté en figure 11, un réseau dynamique étant un réseau dont la topologie de connexion varie au cours du temps. Ce type de réseau 50 permet de traiter les symboles en les répartissant sur l'ensemble des décodeurs de la demi-itération suivante selon un profil de communication de type permutation circulaire. De plus, le réseau d'interconnexion de l'architecture selon l'invention traite n communications simultanément. En référence à la figure 11, le réseau dynamique 50 ici retenu est de type multiétages. L'intérêt de cette structure par rapport à une solution à base de liaisons point à point ou de type Crossbar est de limiter les nombres de connexions et de commutateurs. En effet, dans les réseaux multi-étages, le nombre de liaisons et le nombre de commutateurs évoluent de manière logarithmique: nombre de liaisons: (n *Log2n) nombre de commutateurs: ((n *Log2n)/2) Les commutateurs (51, 52, 53) contiennent généralement deux entrées et deux sorties. Ils sont assemblés sous forme de tableau rectangulaire de dimension n lignes et Log2n colonnes. Le nombre d'étages est donc de Log2n. En particulier, le réseau d'interconnexion dynamique multi-étages de type Oméga, que l'on trouve dans les architectures de machines parallèles informatiques, est basé sur le principe de permutation circulaire. L'algorithme de liaison consiste ainsi à décaler circulairement le passage de l'information entre les sources et les destinations. Un exemple de communication entre les décodeurs élémentaires pour le traitement d'une matrice 8*8 suivant les lignes puis suivant les colonnes est illustré par les figures 10 et 11: l'état du réseau 50 ici illustré correspond ainsi à l'étape de décodage selon la figure 7B. Les commutateurs sont des circuits très simples et peu coûteux à réaliser, notamment en utilisant des interrupteurs en technologie CMOS. Un commutateur deux positions (positions 50-1 et 50-2) correspond à quatre interrupteurs et un inverseur. La complexité en équivalent portes logiques est donc de 2,5 portes. Le réseau d'interconnexion 50 de l'exemple de communication des figures 10-11 a une complexité matérielle de 30q portes logiques (q étant le nombre de bits de quantification des symboles de la matrice). Le réseau nécessite également un contrôleur 100 pour le positionnement des commutateurs suivant les connexions désirées. I.2.1 Architectures séquentielles. Selon un premier type d'architecture séquentielle selon l'invention, en référence à la figure 12, le circuit réalise l'ensemble des demiitérations à partir d'un seul module élémentaire, ce module élémentaire comprenant un ensemble décodeur 60 apte à décoder en parallèle (simultanément) la matrice suivant les lignes ou les colonnes selon le procédé précédemment décrit, et un plan mémoire 20. Un bouclage 90 entre la sortie et l'entrée du module assure de réaliser les demi-itérations successives par groupe de symboles. Le plan mémoire 20 peut être composé de quatre mémoires de taille q*nj*n2 bits indépendamment du nombre d'itérations effectuées. Deux des quatre mémoires fonctionnent en mode lecture, les deux autres fonctionnent en mode écriture. Il y a une inversion des modes de fonctionnement (lecture/écriture) des mémoires R'k entre chaque demi-itération. Pour les mémoires Rk, l'inversion du mode de fonctionnement intervient à la réception d'une nouvelle matrice d'information. Les mémoires peuvent être des RAM classiques accessibles par adressage suivant les lignes et les colonnes. L'ensemble décodeur 60 se compose ici de n décodeurs élémentaires. D'une itération à l'autre, cet ensemble décodeur 60 traite en parallèle un groupe de symboles suivant les lignes, puis suivant les colonnes (ou inversement). Une étape de mémorisation des données dans le plan mémoire 20 est prévue entre chaque demi-itération. Le débit de ce premier type d'architecture parallèle séquentielle est n fois plus élevé que celui de l'architecture séquentielle classique. Selon un deuxième type d'architecture séquentielle selon l'invention, en référence à la figure 13, le circuit réalise l'ensemble des itérations à partir d'un seul module élémentaire, ce module élémentaire comprenant deux ensembles décodeurs 60 et 70 aptes à décoder en parallèle (simultanément) la matrice suivant, respectivement, les lignes et les colonnes (selon le procédé précédemment décrit), et un plan mémoire 20. Un bouclage 90 entre la sortie et l'entrée du module assure de réaliser les itérations successives par groupes de symboles. Le plan mémoire 20 peut être composé de quatre mémoires de taille gn1n2 bits indépendamment du nombre d'itérations effectuées. Deux des quatre mémoires fonctionnent en mode lecture, les deux autres fonctionnent en mode écriture. Il y a une inversion des modes de fonctionnement (lecture/écriture) des mémoires R'k entre chaque itération. Pour les mémoires Rk, l'inversion du mode de fonctionnement intervient à la réception d'une nouvelle matrice d'information. Les mémoires peuvent être des RAM classiques accessibles par adressage suivant les lignes et les colonnes. Les ensembles décodeurs 60 et 70 se composent ici chacun de n décodeurs élémentaires. Durant une itération, l'ensemble décodeur 60 traite en parallèle un groupe de symboles suivant les lignes (ou les colonnes), puis l'ensemble décodeur 70 traite en parallèle un groupe de symboles suivant les colonnes (ou les lignes). Un réseau d'interconnexion 50 prévu entre les deux ensembles décodeur 60 et 70 assure de transmettre les données décodées d'un groupe de symboles d'un ensemble décodeur à l'autre, comme expliqué précédemment. Avantageusement, lorsque l'ensemble décodeur 70 traite un groupe de symboles, l'ensemble décodeur 60 traite un autre groupe de symboles. Le débit de ce deuxième type d'architecture séquentielle selon l'invention est 2 *n fois plus important que dans une architecture séquentielle classique. Une étape de mémorisation des données dans le plan mémoire 20 n'est pas prévue, ici, entre chaque traitement selon les lignes et les colonnes, contrairement au premier type d'architecture séquentielle selon l'invention. Cette latence, pour le traitement d'une itération de la matrice, est de (LI+L2) symboles. La latence globale introduite alors par l'une ou l'autre des architectures séquentielles selon l'invention doit donc être au maximum de 2 *n1 *n2 (ni *n2 symboles pour le remplissage d'une matrice et nln2 symboles pour le traitement itératif de cette matrice). La latence globale est donc indépendante du nombre d'itérations. Cependant, il faut s'assurer que le nombre d'itérations it permet le respect du maximum de latence autorisé, c'est à dire: Latence = (LI+L2) *it La technique pipeline pour l'intégration d'un turbo décodeur repose sur une architecture modulaire. Dans une architecture pipeline selon l'invention, chaque module i (i étant compris entre 1 et le nombre it d'itérations) comprend deux ensembles décodeurs 60-i et 70-i aptes à décoder en parallèle (simultanément) la matrice suivant, respectivement, les lignes et les colonnes (selon le procédé précédemment décrit), ou inversement, et deux réseaux d'interconnexion 50-i et 80-i, un premier réseau d'interconnexion 50-i situé entre les ensembles décodeurs 60-i et 70-i et un deuxième réseau d'interconnexion 80-i situé en sortie du deuxième ensemble décodeur 70-i. Les modules sont disposés en cascade, le premier ensemble décodeur 60-i de chaque décodeur étant relié au deuxième réseau d'interconnexion 80-(i-1) du précédent module; à l'exception du premier module qui est alimenté par une mémoire de réception des données 20. L'architecture finale est donc constituée d'autant de modules que d'itérations it. Chaque ensemble décodeur 60-i et 70-i se compose ici de n décodeurs élémentaires. Les réseaux d'interconnexion 50-i et 80-i sont avantageusement contrôlés de sorte que, lorsqu'un groupe de symboles est complètement traité lors d'une itération (c.à.d. par un module déterminé), les données décodées sont transférées immédiatement vers l'itération suivante (c.à.d. vers le module suivant) pour le décodage de l'itération suivante. Ainsi, pour illustration, les figures 16A à 16D donnent respectivement l'état du traitement des symboles pour quatre itérations successives i, i+l, i+2 et i+3 à un instant donné, dans une matrice carrée 8*8. On voit ici dans cet exemple que, non seulement la structure à deux ensembles décodeur par module permet de traiter simultanément deux groupes de symboles par itération (figures 16B et 16C), mais que la structure en cascade permet aussi de traiter, toujours simultanément, des groupes de symboles dans d'autres itérations mises en oeuvre parallèlement par d'autres modules. On voit ainsi que, alors que le décodage lors de l'itération i est en passe de se terminer (figure 6A), le décodage de l'itération i+3 commence (figure 16D). Le débit en est donc d'autant augmenté. En référence à la figure 14, la solution architecturale selon l'invention ne nécessite au maximum que quatre mémoires de taille q *n1 n2 bits. Certaines de ces mémoires peuvent être supprimées suivant l'environnement dans lequel se trouve être le turbo décodeur. L'encombrement du circuit selon l'invention concerne donc essentiellement les ensembles décodeurs 60-i et 70-i. La complexité due aux plans mémoires est donc bien moindre que pour la solution architecturale pipeline classique. De plus, comme la mémorisation des matrices Rk (information reçue du canal), R'k (information qui vient de la demi-itération antérieure) et R'k+ (information envoyée à la demi-itération suivante) n'est plus nécessaire entre les demi-itérations, la latence globale est également bien moins importante. La latence de traitement de la matrice C pour it itérations de ce type d'architecture est donc de: Latence = (L,+L2) *it pour it itérations L'avantage principal de toute architecture pipeline est le débit de traitement des données qui peut être atteint, le débit obtenu étant le débit de traitement d'un module. Dans le cadre de l'invention, ce débit est donc n fois supérieur de celui d'une architecture pipeline classique (voir figure 16A-16D pour illustration). De plus, il est possible d'augmenter encore ce débit en utilisant l'architecture selon la figure 15. Cette architecture est identique à celle de la figure 14, à l'exception que les ensembles décodeurs 60-i et 70-i ont un nombre n de décodeurs respectifs inférieurs à n1 et à n2. En effet, ces ensembles décodeurs 60-i et 70-i comprennent au moins un décodeur apte à traiter simultanément k symboles d'une ligne (ou d'une colonne) (k étant supérieur ou égal à 2). Chacun de ces décodeurs k-UT se décompose en k décodeurs élémentaires capables de traiter simultanément k symboles d'un même mot. En particulier, on pourra choisir pour chaque ensemble décodeur 60-i et 70-i, de ne prendre que de tels décodeurs, leur nombre dans un ensemble décodeur étant alors de n/k. Ce type de décodeur est notamment utilisé dans WO 02/39587 et a déjà été décrit plus haut en référence de la figure 6. On peut configurer la structure pipeline selon l'invention (en référence à la 30 figure 15) de sorte que la complexité en terme de nombre de décodeurs élémentaires soit similaire à celle de la structure pipeline selon la figure 14, c'est à dire 2n décodeurs élémentaires par itération. La complexité du décodeur élémentaire k- UT est environ k/2 fois supérieure à celle d'un décodeur élémentaire classique 1-UT, mais l'encombrement du circuit final est moindre et le débit en est augmenté de k X k2. En outre, la latence d'une itération complète est de (L1/k+L2/k) symboles, car le décodeur élémentaire traite k symboles d'un mot simultanément. La latence de traitement de la matrice C pour it itérations de ce type d'architecture est donc de: Latence = (LI/k+L2/k) *it pour it itérations La latence est donc inférieure de k*it fois celle de l'architecture pipeline selon la figure 14. Cette latence est très faible si nous la comparons à celles obtenues dans les architectures pipelines classiques. Un atout très important de cette architecture pipeline selon l'invention est en outre le débit qui peut être atteint. Il est ainsi possible d'intégrer des circuits de turbo décodeur de code produit ayant des débits supérieurs à 10 Gbits/s. Ainsi, le gain en débit est d'un facteur (n/k) *k2 plus élevé qu'une architecture pipeline classique. De plus, ce gain en débit demeure élevé (n/k) par rapport à la solution architecture pipeline proposée dans le document WO 02/39587. On peut ainsi augmenter le débit de traitement des données tout en conservant 20 une fréquence constante pour le plan mémoire et le décodeur. Dès lors, l'architecture selon l'invention est une architecture de turbo décodeur de code produit de faible latence pour le très haut débit. I.3 Résultats Pour illustrer l'apport des architectures de décodage selon l'invention, ci-après sont comparées les performances d'un turbo décodeur de référence, d'un turbo décodeur haut-débit étudié dans la thèse de J. Cuevas ( Turbo Décodage de Code Produit Haut Débit , thèse de Doctorat à l'Université de Bretagne Sud, Brest, 6 mai 2004), et d'un turbo- décodeur selon l'invention, utilisant l'architecture pipeline illustrée par la figure 15. Le code produit qui y est utilisé est constitué de deux codes BCH étendus (32,26,4). Le tableau 1 donne les performances en termes de débit et de latence de traitement du décodage de la matrice 32 *32 pour une demi-itération. La complexité en nombre de portes logiques est également fournie. Il est à noter que pour les décodeurs haut débit et très haut débit, les décodeurs élémentaires traitent quatre symboles simultanément (4- UT selon la terminologie vue ci-dessus). La technologie d'intégration est la CMOS 0. 18 m de chez STMicroelectronics. Décodage k-UT Débit Latence Complexité Capacité Complexité 32*32 (Mbits/s) (nombre de décodeur mémoire réseau symboles) (nombre de (nombre de connexion portes) bits) (nombre de portes) Architecture 1-UT 100 64 5 500 20 480 0 référence Architecture 4-UT 1 600 16 44 000 20 480 0 haut débit J. Cuevas Architecture 4-UT 12 800 16 352 000 0 1 000 selon l'invention Tableau 1 On peut constater dans cet exemple que le débit de l'architecture selon l'invention (12,8 Gbits/s) est 128 fois plus important que le débit de référence. De plus, ce débit est 8 fois plus élevé que celui obtenu par l'architecture de la thèse de J. Cuevas. La latence, quant à elle, est divisée par quatre. Le coût matériel induit selon l'invention au niveau des décodeurs élémentaires est 64 fois plus élevé que l'architecture de référence et 8 fois plus élevé que l'architecture de la thèse de J. Cuevas. Néanmoins, l'architecture pipeline selon l'invention élimine les plans mémoires entre chaque demi-itération et entre chaque itération. Cette disparition des plans mémoire compense, au moins en partie, la complexité matérielle introduite au niveau des décodeurs. De plus, si on considère le rapport nombre de portes du décodeur par Mbits/s, on 20 constate qu'il est d'environ 55 pour l'architecture de référence et d'environ 27,5 pour les deux autres architectures. Le coût matériel du Mbits/s est donc divisé par deux. Le tableau 2 est un tableau récapitulatif qui met en évidence les performances de la famille des architectures selon l'invention étudiées précédemment (séquentielles et pipelines), en termes de latence et de débit. Architecture classique Architecture parallèle Séquentielle Pipeline Séquentielle Pipeline 1-UT 1-UT k-UT 1-UT 1-UT k-UT Latence Capacité 4gn1n2 4qnl n2*2it 4gnin2*it 4gn1n2 0 0 mémoire (en bit) Nombre de 0 0 0 0 2it-1 2it-1 réseaux d'interconne xion Tableau 2 En outre des améliorations visibles sur ce dernier tableau, il faut préciser que cette famille d'architectures élimine les plans mémoires associés aux matrices de données d'un code produit entre les demiitérations pour les structures pipelines. En outre, le deuxième type d'architecture séquentielle selon l'invention (voir figure 13) élimine les plans mémoires entre chaque traitement par lignes et par colonnes. Le circuit en est ainsi d'autant moins encombrant. Cette élimination ou diminution des plans mémoires implique l'utilisation d'un réseau d'interconnexion entre les demi-itérations, qui est peu coûteux en terme de complexité. De plus, même si la complexité au niveau des décodeurs élémentaires est augmentée, le coût matériel par Mbits/s est cependant diminué. Une illustration du tableau récapitulatif est également fournie dans le tableau 3 pour l'exemple particulier d'un turbo décodeur de code produit utilisant le code BCH étendu (32,26,4). Architecture classique Architecture parallèle Séquentielle Pipeline Séquentielle Pipeline 1-UT 1-UT k-UT 1-UT 1-UT k-UT Latence (nombre Tableau 3 Ainsi, le décodage selon l'invention permet d'augmenter le débit de traitement des données tout en diminuant la latence globale du circuit. De plus, cette approche élimine les plans mémoires entre les demiitérations pour les architectures pipelines. En outre, le coût matériel par Mbits/s est sensiblement diminué. Enfin, si les décodeurs parallèles selon WO 02/39587 sont utilisés dans des architectures parallèles selon l'invention, les circuits de turbo décodeurs résultants 10 peuvent avoir des débits supérieurs à 10 Gbits/s. IL 2ème TYPE DE DECODAGE Ce 2ème type de décodage reprend un principe général de l'invention qui est de décoder en lignes et en colonnes les symboles par groupes de symboles successifs. Contrairement au lei type de décodage, ce 2ème type de décodage utilise une série de décodeurs élémentaires lignes Dli (i étant compris entre 0 et le nombre de lignes de C) et un décodeur combinatoire colonne Dc (ou bien sûr, l'inverse: des décodeurs élémentaires colonne et un décodeur combinatoire ligne). Un décodeur combinatoire est capable de décoder simultanément l'ensemble des 20 symboles d'un mot pour le décodage d'une ligne ou d'une colonne. En référence aux figures 17A à 17G, sont représentées différentes étapes d'un tel traitement d'une matrice carrée 8*8, lors d'une même itération. Aux fins du décodage, 9 décodeurs (8 élémentaires pour les lignes et 1 combinatoire pour les colonnes) sont prévus. Un ensemble décodeur ligne est ainsi constitué ici de 8 décodeurs lignes (Dii avec i E [1,8]) traitant 8 mots de 8 symboles. Un ensemble décodeur colonne est constitué ici de 1 décodeur combinatoire colonne (D, avec j E [1,8]) traitant également 8 mots de 8 symboles. Chacun de ces décodeurs (ligne ou colonne) peut alors mettre en oeuvre un turbo décodage selon la figure 2 ou 3. En référence à la figure 17A, une première étape de décodage d'un vecteur de colonne (ou de ligne) selon l'invention, consiste à décoder en parallèle le vecteur. A cet effet, on peut mettre en oeuvre en parallèle les 8 (ou nl -ou n2- de façon plus générale) décodeurs élémentaires, c'est à dire des décodeurs aptes à décoder un symbole à la fois. En référence à la figure 17B, une seconde étape de décodage du vecteur colonne (ou ligne) débute alors dès que tous les symboles du vecteur ont été décodés selon la première étape. Cette seconde étape est mise en oeuvre par ledit décodeur combinatoire apte à décoder 8 (ou n1 -ou n2- defaçon plus générale) symboles simultanément. A l'issue de ces deux étapes, le vecteur en question est alors entièrement décodé (voir figure 17C). Le nouveau groupe de symboles est traité de façon identique au précédent, d'abord en parallèle (figure 17B) puis simultanément par un traitement combinatoire (figure 17C). Il est alors complètement traité lors de l'itération courante (figure 17D). Avantageusement, lesdits décodeurs élémentaires décodent selon la première étape un autre vecteur simultanément au deuxième décodage. Ainsi, le temps de décodage est optimisé, et les premier et second décodages respectifs peuvent se faire en continu, le décodeur combinatoire parcourant successivement chacun des vecteurs préalablement traités par les codeurs élémentaires. Ainsi, tout plan mémoire entre les deux décodages est éliminé, contrairement 25 aux techniques connues qui nécessitaient une mémoire apte à mémoriser une matrice de nl *n2 entre les deux décodages (discuté plus haut). La matrice C est ensuite entièrement décodée, lors de l'itération courante, en lignes et en colonnes de façon identique aux lei et 2ème groupes de symboles (voir figures 17A à 17G). Si on considère une itération complète, la latence de décodage de la matrice carrée 8*8 suivant les lignes puis les colonnes est alors de 16 x. De façon triviale, on peut appliquer l'enseignement technique de cet exemple au cas général de décodage d'une matrice concaténée avec entrelacement uniforme, carrée ou non carrée ayant une dimension nl *n2 (nl lignes et n2 colonnes), avec n1 (ou n2) décodeurs élémentaires et 1 décodeur combinatoire. Si on considère une itération complète, la latence de décodage de la matrice C suivant les lignes puis les colonnes est alors de L symboles, L= x*(nl +n2). Il est à noter ici que la latence entre le décodage des lignes et le décodage des colonnes est nul, étant donné qu'il y a absence de plan mémoire entre les deux, ces deux l0 décodages se succédant sans mémorisation intermédiaire. II.2 Turbo décodage L'un des avantages de la technique de décodage parallèle des codes produits selon l'invention, est d'éliminer les plans mémoires associés aux matrices générées par un code produit entre les différentes demi-itérations. Une gestion de la communication des symboles des différents mots de la matrice entre le décodage des lignes et des colonnes est alors nécessaire. Un module de décodage selon l'invention est présenté en figure 18. Ce module, contrairement aux modules de décodage du ter type (chapitre I), ne comprend pas de réseau d'interconnexion, mais de simples connexions parallèles entre les décodeurs élémentaires Dli (i étant ici compris entre 1 et nl) et le décodeur combinatoire D,. Ce module représente une itération. Pour permettre de faire se succéder les itérations on peut alors boucler les sorties du décodeur combinatoire De avec les entrées des décodeurs élémentaires D1i (structure séquentielle) ou de prévoir plusieurs de ces modules et de les connecter en série (structure pipeline). On peut alors adapter de façon triviale les enseignements techniques précédemment décrits pour le lei type de décodage selon l'invention, à ce 2ème type de décodage. B. CODAGE Dans cette seconde partie, est présenté un procédé de codage et une architecture permettant un tel codage. Cette architecture traite les k1 et k2 mots de données utiles binaires, (i.e. données d'informations) d'une matrice de données utiles à k1 lignes et à k2 colonnes, simultanément par les deux codes CI et C2. En particulier ici, le principe de codage permet de construire une matrice de codes concaténés avec entrelacement uniforme, tel qu'une matrice de code produit présenté en figure 1. Les codes utilisés peuvent être convolutifs ou en blocs linéaires. L'opération de codage pour les codes en blocs linéaires correspond à une division polynomiale de l'information à transmettre par le polynôme générateur du code retenu. Une fois construite, une telle matrice comprend ni lignes et n2 colonnes 10 correspondant respectivement à ni et n2 mots de code indépendants. C'est pourquoi le codage des Ici mots de données peut être effectué en parallèle si des ressources matérielles (codeurs élémentaires) sont disponibles. De même, le codage des n2 mots de code peut être effectué en parallèle. De plus, il est possible de coder simultanément l'ensemble des données utiles d'un mot pour le codage d'une ligne ou d'une colonne si ces données utiles sont disponibles. Pour ce faire, on réalise le développement de la division polynomiale en utilisant les propriétés du corps de Galois associé au polynôme générateur du code retenu. Le codeur correspond alors à une arborescence combinatoire de fonctions OU-exclusif. On obtient ainsi un seul codeur dit combinatoire apte à coder simultanément les données d'une ligne ou d'une colonne. Selon une première étape de codage d'un vecteur de colonne (ou de ligne) selon l'invention, le vecteur est codé en parallèle par l'un des deux codes Cl (ou C2) A cet effet, on peut mettre en oeuvre en parallèle kl (ou k2) codeurs élémentaires, c'est à dire des codeurs aptes à coder une donnée utile à la fois. Une seconde étape de codage du vecteur colonne (ou ligne) débute alors dès que toutes les données utiles du vecteur ont été codées selon la première étape. Cette seconde étape est mise en oeuvre par ledit codeur combinatoire apte à coder k2 (kl) données utiles simultanément. A l'issue de ces deux étapes, le vecteur en question est alors entièrement codé. Avantageusement, lesdits codeurs élémentaires codent selon la première étape un autre vecteur simultanément au deuxième codage. Ainsi, le temps de codage est optimisé, et les premier et second codages respectifs peuvent se faire en continu, le codeur combinatoire parcourant successivement chacun des vecteurs préalablement traités par les codeurs élémentaires. Ainsi, tout plan mémoire entre les deux codages est éliminé, contrairement aux techniques connues qui nécessitaient une mémoire intermédiaire apte à mémoriser une matrice de kl *n2 (ou k2 *nl) entre les deux codages (discuté plus haut). 1. Codage d'une matrice carrée Les figures 19A à 19H illustrent différentes étapes d'un tel codage d'une matrice de données utiles carrée de taille 4*4. Une matrice de données utiles est représentée par le carré à trait plein rempli de 4*4 cases, chaque case représentant une donnée utile. Cette matrice comprend donc 4 vecteurs ligne (ou mots de ligne) et 4 vecteurs colonne (ou mots de colonne). Ici, le codage est mis en oeuvre de sorte à construire une matrice de code produit de taille 7*7, à l'aide du code BCH(7,4,3). Les figures représentent ainsi un plan-mémoire de taille 7*7, nécessaire pour mémoriser la matrice codée. Aux fins du codage, sont utilisés 5 codeurs (4 pour les lignes et 1 pour les colonnes). Les 4 codeurs élémentaires lignes (Cii avec i C [1,4]) traitent 4 mots de 4 données en parallèle. Chaque codeur élémentaire traite une donnée à la fois. Le codeur combinatoire colonne Q traite 7 mots de 4 symboles. Le codeur combinatoire tel que défini plus haut est capable de traiter simultanément 4 symboles du bloc 4 * 7. En référence à la figure 19A, la matrice est traitée, en parallèle par lesdits quatre codeurs élémentaires, en commençant ici par les 4 symboles se trouvant sur la première colonne selon ladite première étape. Puis, en référence à la figure 19B, la seconde étape est mise en oeuvre par le codeur combinatoire colonne (Ce), sur les mêmes données qui ont été précédemment traitées par les codeurs lignes. Comme indiqué ci-dessus, à l'issue de cette seconde étape, le vecteur colonne 30 traité (ici le premier vecteur colonne) est complètement codé en colonne: c'est ce que signifient les cases noires de la figure 19C. Le prochain vecteur colonne (ici le deuxième) est alors traité. Ce nouveau vecteur est alors traité de façon identique au précédent, d'abord simultanément au moyen des vecteurs ligne (figure 19B) puis simultanément au moyen du vecteur combinatoire colonne (figure 19C) afin d'être complètement traité lors de l'itération courante (figure 19D). Avantageusement, le deuxième vecteur colonne est traité en lignes par les codeurs élémentaires ligne (Cli), alors que ledit vecteur combinatoire colonne (Ce) traite le premier vecteur colonne (figure 19B). Il est à remarquer que si, ici, l'indice indiquant le passage d'une donnée à une autre dans un mot, pour traitement par les codeurs, est incrémenté de 1 selon les colonnes, le passage d'un codage d'un mot à un autre peut être régi par d'autres règles du moment que ces règles puissent déterminer au final un codage complet de la matrice. La matrice de données 4*4 est alors entièrement codée en lignes et en colonnes de façon identique aux 1e et 2ème vecteurs colonne (voir figures 19A à 19E). Lorsque les codeurs élémentaires (Cli) ont été mis en oeuvre pour l'ensemble des données utiles de la matrice 4*4, le codage suivant les lignes est alors terminé. Il reste à terminer le codage selon les colonnes, c'est à dire de terminer le codage de la matrice de données 4*4 et de la matrice de redondance lignes 4*3. A cet effet, le vecteur combinatoire traite le dernier vecteur colonne de la matrice 4*4 (figure 19E) et, successivement, les 3 vecteurs colonnes de la matrice de redondance ligne (figures 19F à 19H). La matrice construite, de taille 7*7, est alors complètement codée. Le temps de traitement d'une matrice de données binaires d'informations est défini comme le nombre d'unités de temps (périodes d'horloge) nécessaire à l'obtention de la matrice codée. Dans le cas de la matrice de données 4 *4, le temps de traitement suivant les lignes ou suivant les colonnes est de sept (4 pour les symboles données et 3 pour les symboles redondances). Le temps de traitement suivant les lignes puis suivant les colonnes est de huit, étant donné le décalage d'une unité de temps entre le traitement des lignes et celui des colonnes. De façon plus générale, lorsqu'on souhaite coder une matrice initiale de taille k*k en réalisant le codage au moyen de deux codes en blocs élémentaires identiques C(n, k, ô), le code produit se présente sous forme d'une matrice C à n lignes et n colonnes. Si on dispose de k codeurs élémentaires et d'un codeur combinatoire traitant k symboles simultanément, alors il est possible de coder k lignes et n colonnes en parallèle. La durée du codage de la matrice C suivant les lignes ou suivant les colonnes est alors de n (pour les données et la redondance). Enfin, la durée du codage de la matrice C suivant les lignes puis les colonnes est de (n+l). 2 Codage d'une matrice non carrée La matrice à coder est ici de dimension kl *k2. L'un des objectifs du codage selon l'invention est d'éliminer le plan mémoire 15 entre le codage selon les lignes et le codage selon les colonnes. Cela implique, selon l'invention, d'avoir des codeurs élémentaires et un codeur parallèle. Si les nombres de lignes et de colonnes d'une matrice sont différents, alors deux solutions sont possibles. Une première solution consiste à prendre k1 codeurs élémentaires pour le codage suivant les lignes et un codeur combinatoire traitant simultanément Ici symboles pour le codage suivant les colonnes. La seconde solution consiste à prendre k2 codeurs élémentaires pour le codage suivant les colonnes et un codeur combinatoire traitant simultanément k2 symboles pour le codage suivant les lignes. En référence aux figures 20A à 20F sont représentées différentes étapes de codage d'une matrice 4*12, construite à l'aide des codes BCH(8,4,4) et BCH(16,11,4), et donc pour construire une matrice codée de taille 8* 16. codeurs (4 pour les lignes et 1 pour les colonnes) sont utilisés. Les 4 codeurs élémentaires lignes (Cii avec i C [1,4]) traitent 4 mots de 12 données utiles. Chaque 30 codeur élémentaire traite une donnée utile à la fois (traitement séquentielle classique). Le codeur combinatoire colonne CC traite 16 mots de 4 symboles. Le codeur parallèle tel que nous l'avons défini est capable de traiter simultanément 4 symboles du bloc 4*16. En référence aux figures 20A à 20C, l'ensemble de la matrice 4*12 est traitée (en commençant par les 4 données utiles se trouvant sur la première colonne) de manière sensiblement identique au cas d'une matrice carrée. En référence aux figures 20E et 20F, le codeur combinatoire termine le codage de la matrice de manière similaire à celle concernant une matrice carrée. On obtient alors une matrice construite 8*16. La durée de codage de la matrice suivant les colonnes ou suivant les lignes est de 16 (pour les données et la redondance). La durée de codage de la matrice C suivant les lignes puis les colonnes est alors de 17. De façon plus générale, si on considère deux codes en blocs élémentaires Cl(nl, k1, S1) et C2(n2, k2, S2), le code produit se présente sous la forme d'une matrice à n1 lignes et n2 colonnes. Deux configurations sont alors envisageables: a-) On dispose de kl codeurs élémentaires et d'un codeur combinatoire traitant kl symboles d'un mot simultanément. Il est possible de coder k1 lignes et n2 colonnes en parallèle. La durée du codage de la matrice C suivant les lignes ou suivant les colonnes est alors de n2 (pour les données et la redondance). Enfin, la durée du codage de la matrice suivant les lignes puis suivant les colonnes est de (n2+1). b-) On dispose de k2 codeurs élémentaires et d'un codeur combinatoire traitant k2 symboles d'un mot simultanément. Il est possible de coder k2 colonnes et n1 lignes en parallèle. La durée de codage de la matrice suivant les colonnes ou suivant les lignes est de ni (pour les données et la redondance). La durée de codage de la matrice C suivant les colonnes puis suivant les lignes est de (n1+1). 33 2888062 Le codage d'une matrice carrée ou non carrée selon l'invention nécessite éventuellement un plan mémoire de taille égale à la matrice construite (nl *n2), mais ne nécessite nullement un plan mémoire intermédiaire (kl *n2 ou k2 *n 1) étant donné que les vecteurs colonnes (ou lignes selon une alternative triviale) sont alternativement traités en ligne et en colonnes (ou l'inverse) par les codeurs élémentaires d'une part et par le codeur combinatoire d'autre part. Le codage selon l'invention permet donc de s'affranchir de plan mémoire entre le codage des lignes et celui des colonnes. D'autre part, la valeur de latence correspondant au plan mémoire est nulle. 3. Architectures de codage. A été décrite précédemment une technique de codage parallèle de codes produits selon l'invention. L'architecture du codeur correspondant se compose de plusieurs codeurs élémentaires traitant une donnée à la fois et d'un codeur combinatoire traitant l'ensemble des données d'une ligne ou d'une colonne simultanément. En référence à la figure 21, deux solutions architecturales pour le codage d'un code produit sont présentées: a-) Une première solution architecturale consiste à faire le codage suivant les lignes puis suivant les colonnes. Dans ce cas, un ensemble 160 de k1 codeurs élémentaires (Cii) et un codeur combinatoire 170 traitant k1 symboles d'un mot simultanément sont prévus. Les données traitées par les kl codeurs lignes sont directement transmises au codeur combinatoire 170. b-) Une seconde solution architecturale consiste à faire le codage suivant les colonnes puis suivant les lignes. Dans ce cas, un ensemble 160' de k2 codeurs élémentaires (Cri) et un codeur combinatoire 170' traitant k2 symboles d'un mot simultanément sont prévus. Les données traitées par les k2 codeurs colonnes sont directement transmises au codeur combinatoire 170'. 4. Résultats obtenus Le tableau 4 ci-dessous permet de comparer les performances en termes de débit, de temps de traitement et de complexité de différentes solutions architecturales. On y considère deux types d'architectures: les architectures séquentielles et les architectures parallèles. Les architectures séquentielles correspondent à l'approche traditionnelle de codage des codes produits. Le codeur de code produit se compose d'un codeur élémentaire et d'un plan mémoire. Le codeur élémentaire effectue alors successivement les deux codages (lignes puis colonnes). Les architectures parallèles sont celles de l'invention. On différencie dans le tableau 4 les architectures effectuant le codage suivant les lignes puis suivant les colonnes, de celles effectuant le codage suivant les colonnes puis suivant les lignes. On définit le temps de traitement d'une matrice de données binaires d'informations comme le nombre d'unités de temps (périodes d'horloge) nécessaire à l'obtention de la matrice codée. Code produit Débit Temps de Nombre de codeurs Capacité codeur traitement mémoire (Mbits/s) (nombre de (nombre de périodes bits) d'horloge) (n,, S,) *(n2, k2, S2) Elémentaire Combi- natoire Architecture Codage Dref n,*n2 1 0 ki*n2 séquentielle ligne puis colonne Codage Dfef n,*n2 1 0 k2*n, colonne puis ligne Architecture Codage Dref*2*kf n2+1 kf 1 0 parallèle très ligne puis haut débit colonne Codage Dref*2*k2 n,+1 k2 1 0 colonne puis ligne Tableau 4 Pour illustrer l'apport de l'invention (selon l'architecture parallèle), le tableau 5 présente une comparaison des performances pour le codeur de code produit (32,26,4)2. 15 Il s'agit d'un codeur utilisant le code BCH étendu (32,26,4). Code produit Débit codeur Temps de Complexité Capacité (32,26,4)2 (Mbits/s) traitement codeur (nombre mémoire (nombre de de portes) (nombre de bits) périodes d'horloge) Architecture 250 1 024 127 832 séquentielle Architecture 16 000 33 3 494 0 parallèle très haut débit Tableau 5 Le tableau 5 donne les performances en termes de débit et de temps de traitement du codage de la matrice 32 *32. La complexité en nombre de portes logiques 5 est également fournie. La technologie d'intégration est la CMOS 0,18 m de chez STMicroelectronics. Le débit de la solution architecturale selon l'invention (16 Gbits/s) est 64 fois plus important que le débit de référence dans le cas du codeur de code produit (32,26,4)2. l0 Le temps de traitement, quant à lui, est divisé par environ 32. Le coût matériel induit par l'invention au niveau du codeur est de 26 codeurs élémentaires et d'un codeur combinatoire. Les codeurs élémentaire et combinatoire ont un coût respectif de 127 et de 192 portes. Enfin, l'architecture de codage parallèle élimine le plan mémoire. Cette propriété compense en partie la complexité matérielle introduite au niveau du codeur. De plus, si on considère le rapport nombre de portes du codeur par Mbits/s, alors on constate qu'il est autour de 0,5 pour l'architecture traditionnelle et autour de 0,2 pour l'architecture parallèle selon l'invention. Le coût matériel du Mbits/s est donc divisé par environ deux et demi. Le codage selon l'invention élimine donc le plan mémoire associé aux mots de données entre les deux codages. L'approche proposée permet en outre de coder les mots de données à des débits bien supérieurs à ceux des architectures séquentielles traditionnelles. Enfin, le temps de traitement d'une matrice de données binaires d'informations par ce type d'architectures est fortement réduit. REVENDICATIONS 1. Procédé de décodage d'une matrice construite à partir de codes concaténés, correspondant à au moins deux codes élémentaires, avec entrelacement uniforme, cette matrice ayant nl lignes, n2 colonnes et nl *n2 symboles, caractérisé en ce qu'il comprend un traitement de tous les vecteurs lignes et colonnes de la matrice par groupes successifs de symboles, ce traitement comprend un premier décodage pour traiter simultanément tous les symboles d'un groupe de symboles selon leurs lignes puis un deuxième décodage pour traiter simultanément tous les symboles d'un groupe de symboles selon leurs colonnes, ou inversement. 2. Procédé de décodage selon la revendication précédente, caractérisé en ce qu'il est mis en oeuvre de sorte que le deuxième décodage est mis en oeuvre simultanément au premier décodage, les premier et deuxième décodages traitant alors des groupes de symboles différents. 3. Procédé de décodage selon l'une des deux revendications précédentes, caractérisé en ce que chaque groupe de symbole est défini par une ligne ou une colonne de la matrice, différente de celle de chacun des autres groupes de symboles. 4. Procédé de décodage selon l'une des revendications 1 et 2, caractérisé en ce que la localisation d'un symbole dans chaque groupe de symbole correspond à une colonne et à une ligne qui sont respectivement différentes de la colonne et de la ligne localisant chacun des autres symboles du groupe. 5. Procédé de décodage selon la revendication précédente, caractérisé en ce que le nombre de symboles dans un groupe de symboles est identique d'un groupe de symboles à un autre, et en ce que les symboles traités d'un nouveau groupe sont déterminés par leurs positions respectives dans la matrice, les positions étant trouvées à partir des positions respectives des symboles du groupe précédemment traité qui sont décalées en ligne ou en colonne d'un indice prédéterminé. 6. Procédé de décodage selon la revendication précédente, caractérisé en ce que ledit indice prédéterminé est un nombre entier modulo le nombre de symboles par groupe. 7. Procédé de décodage selon l'une des revendications précédentes, caractérisé en ce que la matrice est en outre décodée par sous-matrices successives constituées chacune de groupes de symboles, chaque sousmatrice ayant des symboles distincts de ceux des autres sous-matrices. 8. Procédé de décodage selon la revendication précédente, caractérisé en ce que n2 = u*nl (ou n1 = u*n2), u étant un entier supérieur ou égal à 2, et en ce que chaque sous-matrice a une taille égale à nl *nl (ou n2*n2). 9. Procédé de décodage selon l'une des revendications précédentes, caractérisé en ce que le nombre de symboles traités dans chaque groupe de symboles est égal à min (nl; n2). 10. Procédé de décodage selon l'une des revendications précédentes, caractérisé en ce qu'au moins certaines des données traitées sont pondérées. 11. Procédé de décodage selon l'une des revendications précédentes, caractérisé en ce qu'il ne comprend pas d'étape de mémorisation de données entre le premier 25 décodage et le deuxième décodage. 12. Procédé de décodage selon l'une des revendications 1 à 9, caractérisé en ce que l'ensemble décodeur ligne et l'ensemble décodeur colonne sont constitués des mêmes décodeurs utilisés successivement pour le décodage ligne et colonne, et en ce 30 qu'il comprend une étape de mémorisation de données entre le premier décodage et le deuxième décodage. 13. Procédé de décodage selon l'une des revendications précédentes, caractérisé en ce qu'il est itératif. 14. Module de décodage apte à mettre en oeuvre un procédé de décodage selon l'une des revendications 1 à 11, comprenant un ensemble décodeur ligne apte à décoder des lignes de ladite matrice et un ensemble décodeur colonne apte à décoder des colonnes de ladite matrice, caractérisé en ce que l'ensemble décodeur ligne et l'ensemble décodeur colonne sont agencés l'un avec l'autre de sorte à réaliser ledit traitement de tous les vecteurs lignes et colonnes de la matrice par groupes successifs de symboles, lesdits premier et deuxième décodages étant respectivement assurés par l'ensemble décodeur ligne et l'ensemble décodeur colonne ou inversement. 15. Module de décodage selon la revendication précédente, caractérisé en ce qu'il ne comprend pas de mémoire entre l'ensemble décodeur ligne et l'ensemble décodeur colonne. 16. Module de décodage selon l'une des deux revendications précédentes, caractérisé en ce que l'ensemble décodeur ligne (ou colonne) comprend un nombre nl (ou n2) de décodeurs élémentaires en parallèle et en ce que l'ensemble décodeur colonne (ou ligne) est constitué d'un décodeur combinatoire apte à traiter simultanément un nombre n1 (ou n2) de symboles. 17. Module de décodage selon l'une des revendications 14 et 15, caractérisé en ce que l'ensemble décodeur ligne comprend un nombre n de décodeurs lignes en parallèle qui est égal au nombre de décodeurs colonnes en parallèle compris dans l'ensemble décodeur colonne, ce nombre n étant strictement inférieur à nl *n2. 18. Module de décodage selon la revendication précédente, caractérisé en ce que n est inférieur ou égal à min (nl, n2). 19. Module de décodage selon l'une des deux revendications précédentes, caractérisé en ce que l'ensemble décodeur ligne et l'ensemble décodeur colonne comprennent chacun au moins un décodeur apte à traiter simultanément au moins deux symboles distincts. 20. Module de décodage selon l'une des trois revendications précédentes, caractérisé en ce que l'ensemble décodeur ligne et l'ensemble décodeur colonne comprennent l0 respectivement des décodeurs ligne en parallèle et des décodeurs colonne en parallèle, et sont agencés l'un avec l'autre de sorte que les décodeurs ligne soient reliés électriquement aux décodeurs colonne selon un réseau d'interconnexion dynamique. 21. Module de décodage selon la revendication précédente, caractérisé en ce que le réseau d'interconnexion autorise un profil de communication entre les décodeurs ligne et les décodeurs colonne de type permutation circulaire, une permutation circulaire modifiant de façon cyclique les connexions entre décodeurs ligne et décodeurs colonne, déterminant ainsi les traitements successifs des groupes de symboles dans la matrice. 22. Module de décodage selon la revendication précédente, caractérisé en ce que le réseau d'interconnexion est choisi parmi les réseaux de type multi-étages, Crossbar, point à point. 23. Module de décodage selon l'une des trois revendications précédentes, caractérisé en ce qu'il comprend en outre un deuxième réseau d'interconnexion sensiblement identique au premier réseau d'interconnexion, ce deuxième réseau d'interconnexion étant situé en sortie (ou en entrée) de l'ensemble décodeur colonne ou en entrée (ou en sortie) de l'ensemble décodeur ligne. 24. Module de décodage selon l'une des revendications 14 à 23, caractérisé en ce qu'il comprend en outre une mémoire en entrée apte à mémoriser au moins temporairement la matrice, l'ensemble décodeur ligne ou colonne étant connecté à la mémoire de sorte à être alimentés respectivement par les lignes ou par les colonnes de la matrice mémorisée. 25. Dispositif de décodage modulaire comprenant plusieurs modules de décodage montés en série, chacun des modules étant conforme à l'objet de la revendication 23, les réseaux d'interconnexion dynamique des différents modules étant configurés pour mettre en oeuvre un décodage itératif de la matrice, chaque itération étant assurée par un module. 26. Dispositif de décodage modulaire comprenant plusieurs modules de décodage 15 montés en série, chacun des modules étant conforme à l'objet de la revendication 16. 27. Dispositif de décodage séquentiel comprenant un module de décodage selon la revendication 24, comprenant une liaison électrique entre la sortie du module et l'entrée du module de sorte à mettre en oeuvre un décodage itératif de la matrice, toutes les itérations étant assurées par le module. 28. Module de codage d'une matrice ayant kl lignes, k2 colonnes et kl *k2 données utiles organisées en vecteurs lignes et en vecteurs colonnes, le module comprenant k2 (ou kl) codeurs élémentaires, caractérisé en ce qu'il comprend en outre un ensemble codeur apte à traiter simultanément k2 (ou kl) données utiles et agencé avec les k2 (ou kl) codeurs élémentaires de sorte que les vecteurs de données utiles de dimension k2 (ou kl) soient successivement codés, chaque codage de vecteur comprenant un premier codage par les k2 (ou kl) codeurs élémentaires puis un second codage par l'ensemble codeur. 29. Module de codage selon la revendication précédente, caractérisé en ce qu'il ne comprend pas de mémoire intermédiaire entre les k2 (ou kl) codeurs et l'ensemble codeur. 30. Module de codage selon la revendication précédente, caractérisé en ce que le codeur parallèle correspond à une arborescence combinatoire de fonctions OU-exclusif.