Procédé de codage et/ou de décodage de codes correcteurs d'erreurs, dispositifs et signal correspondants.
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 recursive 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 compte- rendu 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 œuvre 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 ; et
- 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é.
Selon une caractéristique particulière, le procédé est remarquable en ce que le nombre des bancs mémoires est différent du nombre de décodeurs alimentés en parallèle.
Ainsi, le procédé de décodage est particulièrement bien adapté à différentes situations. Par exemple, dans le cas d'une application à très haut débit, afin d'améliorer le débit ou de rendre compatible le procédé avec une telle application, non seulement plusieurs décodeurs sont utilisés en parallèle mais au moins un des décodeurs est alimenté à partir de deux bancs mémoires logiques distincts. Il est aussi possible d'utiliser le procédé de décodage dans un système hétérogène pour lequel au moins deux décodeurs sont de nature différente et ne nécessitent pas le même nombre de données par cycle d'horloge pour être traité en temps réel. Le nombre de décodeurs (notamment dans ce cas) peut-être inférieur ou supérieur au nombre de bancs mémoire logiques. particulière, le procédé est remarquable en ce qu'au moins deux bancs mémoires sont adressés simultanément par un même décodeur d'adresse.
Le décodeur d'adresse permet de sélectionner un mot dans une mémoire pour une lecture ou une écriture. Des bancs mémoires logiques peuvent être distingués par la destination des données qu'ils contiennent, la différentiation se faisant par les aiguillages et les traitements qu'on fait subir aux données (deux
symboles de deux bancs mémoires logiques distincts étant à un moment donné aiguillés vers deux décodeurs distincts).
Lorsque les adresses d'accès à différents bancs mémoires logiques sont toujours identiques lors d'une opération de décodage (ou de codage), on peut, selon l'invention, adresser simultanément ces bancs mémoires par un même décodeur d'adresse et les regrouper en une seule mémoire physique. Ainsi, on simplifie la mise en œuvre des dispositifs de décodage (par exemple, en économisant de la surface de silicium) et/ou on diminue leur consommation d'énergie. Néanmoins, à chaque lecture et/ou écriture, la séparation des données permettant un décodage en parallèle est toujours effective, car les mots lus sont ensuite permutés par un réseau de permutation avant d'alimenter en parallèle plusieurs décodeurs.
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 d'émission desdites données codées à destination d'un récepteur.
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.
Selon une caractéristique particulière, le procédé est remarquable en ce que le nombre des bancs mémoires est différent du nombre des codeurs alimentés en parallèle.
Selon une caractéristique particulière, le procédé est remarquable en ce qu'au moins deux bancs mémoires sont adressés simultanément par un même décodeur d'adresse.
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 radio fré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écursif s systématiques et circulaires.
Pour chaque valeur d'un entier / variant de 1 à R, la iè e roulette R, d'un code global est définie, dans le cas général, par l'ensemble ordonné , des symboles du mot du code constituant (sous-code du code global) considéré. Par définition, m, représente le cardinal de Mt. 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 m, connexions. Elle est donc connectée à m, symboles du mot de code. Le nombre d'arcs M est donc égal à la somme des m, pour 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 recursive des codes à faibles complexité »), paru dans la revue IEEE Transaction On Information Theory, Nol. 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 Φ;(M() l'ensemble ordonné des symboles du mot de code global relié à la roulette R,. On notera aussi, par souci de simplicité Φ,(£)> le numéro du symbole du mot de code qui est connecté avec la léème entrée de la roulette R,. Lors du décodage de la roulette /, Φ;(fc) sera donc le klime symbole utilisé par le décodeur. L'ensemble {Φ,(fc)} représente l'ensemble non ordonné des symboles du mot de code global relié à la roulette R,. Selon l'invention, le graphe bipartite vérifie les conditions suivantes :
les ensembles Φ,( ,) 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 Φ,(M() 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 T).
La première étape de chaque itération comprend un décodage des P premières roulettes R_, 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, ... , R^. D'une manière générale, la t"è e étape de chaque itération (pour t variant de 1 à T-l) comprend un décodage des roulettes R(t.1)P+χ, ... , RtJ> chacune des P roulettes R(t.I)P+1, ... , RtP. étant associées à un des P décodeurs. L'étape T comprend un décodage des dernières roulettes (RR.P+], ... , 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 BMj, BM
2,... , BM
P. 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.
]j P+2(k),... , Φ
tJ>(k)) réalisent des accès mémoires en parallèle et indépendants dans R bancs distincts.
La contrainte sur les ensembles Φ,( ,) 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 (<* +y(*) . Φ(t.I).P+2(k),..., Φ,,(*)) aux P bancs (BM}, BM2,..., BMP) ;
c'est-à-dire que l'on peut trouver une répartition des symboles dans les P bancs mémoires, compatible avec les ensembles Φ,( ,) et garantissant des accès mémoires en parallèle ; soit, dans le cas contraire, si les symboles Φt(k) et Φj(k) correspondent au même banc mémoire BMX, alors ils sont égaux (Φ,(fc) = Φ &)) ; la donnée lue dans un banc est alors unique et elle est dupliquée avant d'être transmise aux roulettes R.et R
Ainsi, lorsque l'on utilise P décodeurs en parallèle, on multiplie par un facteur égal à R 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 (Φ((Λ ,)} sont tous différents deux à deux (soit {Φ,(Λ ,)} ≠ {ΦJ(MJ)} pour tout i différent de./', 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 {ΦJ( )} 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 de j tels que card({Φ,(M)} fl {Φ^M,)}) ≥ 2, où card représente la fonction cardinal d'un ensemble) ;
- soit le code vérifie la propriété: soit T l'ensemble des couples d'indice de roulette (ij,k) vérifiant :
- {Φ,( ,)} fl {Φj(M } = 0 (où 0 représente l'ensemble vide);
- cαr ({Φ1(M1)} n {Φ,(Mλ)}) = l ; et - card({Φ}{M)} D {Φt( *)}) = 1 ;
alors :
- si {Φ,(M,)} 0 {Φk(Mk)} = {Φ,( ι)} (où Φ,(/ι) représente un point unique d'indice h pour la roulette R, ; et
- si (Φ/ ,)} D {Φk(Mk)} = {Φj(h')} (où Φ /V) représente un point unique d'indice Λ' pour la roulette R,) ; il existe au moins un triplet (ij,k) dans l'ensemble T tel que h est différent de h'.)
(dans ce cas, on peut obtenir des codes ayant de meilleures performances que les codes à concaténation parallèles qui utilise un entrelaceur uniforme, connus en soi, pour lesquels cette dernière condition n'est pas vérifiée et qui sont notamment décrits dans l'article « Code construction and decoding of Parallel concatenated tail-biting codes » (ou en français « construction de code et décodage de codes circulaires à concaténation parallèle ») écrit par C. Weiss, C. Bettstetter et S. Riedel et paru dans la revue « IEEE transaction on information theory », Vol. 47, Ν°l 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 ; Pollara 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 R, 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(C)). 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 R, est noté et (ou e, = card(E)); et
- la quantité m, é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 C,et E, ( ou M, =(C„ E,)) de m, ( égal à la somme de c,et de e) symboles
est un mot du code R, 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 π
<( ) l'ensemble ordonné des symboles du mot de code relié à l'information de la roulette R,. Ainsi,
représente le numéro du symbole du mot de code qui est connecté à la k
ème entrée de la roulette R;. L'ensemble {]!;( )} représente l'ensemble non ordonné des symboles du mot de code relié à l'information de la roulette R,.
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é à R, ; et - un motif de poinçonnage associé à la roulette R, permettant d'obtenir le rendement r,. ; - les codes utilisés peuvent être à base de symboles binaires, duo- binaires ou des n-uplets ;
- les codes (m„ c,) 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 rj- 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) ; et/ou 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 ; néanmoins, 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 ; et 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 K symboles d'informations valent 1.
Selon une variante particulière réalisant une concaténation parallèle, les mots de code et les ensembles π,(C,) 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 π,(C,) (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 ; et
- les lignes obtenues définissent les ensembles π,(C,) (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 H^C, 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 Pλ et de P2 avec un produit de Pλ et de P2 valant N et P_ étant supérieur ou égal à R2 ; il y a donc Px roulettes de circonférence égale à P2 et P2 roulettes de circonférence égale à P_ ; - 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 P_ et P2 roulettes.
Le procédé de codage et les ensembles Φ,(M,) 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 Pλ et P2 (soit R, - P2 sous forme condensée) ; - les lignes définissent les ensembles Φ,( ,) (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 0_ sur chacune des P 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 P -P2 lignes ; les lignes non vides obtenues définissent les ensembles Φ,( ,) (pour i allant de R à Pι+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 é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 ; et - le symbole k (k variant de 0 à C) de la roulette correspond au symbole situé à l'adresse égale à la somme du produit ak et de β modulo C
(/ = ak + β 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 Φ/Λ ,) ou π,(C,). 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 sortie s 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, 11 et 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 ; et à 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 ; et à 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 R; appliquées globalement aux mêmes données.
La circonférence de chacune des roulettes R; est égale à C. Les K symboles d'information à coder sont écrits ligne par ligne dans une matrice 20 à R lignes et C colonnes (K est égal au produit Px .
Chaque ligne est codée par un code constituant 21, par exemple du type code convolutif récursif systématique circulaire. La ièπιe 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 R;. Selon une variante, la jè e ligne de la matrice 20 comprend les K symboles d'information systématique d'un mot de code 21 correspondant à une roulette R; (les symboles de redondance n'étant pas représentés).
Puis, on effectue une permutation des symboles de chacune des lignes par un entrelaceur Φ 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 0{ 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 O;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écursif s systématiques circulaires. La
j-ème ijgne (je ja 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, h 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 , h 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/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, 07 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 c et 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 Oj, 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 P}
roulettes de circonférence P2 et le deuxième groupe comprend P2 roulettes de circonférences Px, avec R, supérieur ou égal à P2 et le produit P, 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é Pλ dont seules les P2 premières colonnes sont remplies. Les Pλ - P2 dernières colonnes restent vides avec une valeur symbolisée par V.
Chacune des P_ lignes est codée par un code constituant 31 , la lème ligne de la matrice 30 correspondant à une roulette Rj 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 Φ, 32. Chacun des Px 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 Pλ 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 Pλ-P2 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 P . Les P_+ P2 codes constituants définissent les N symboles du mot de code global.
Ce code nécessite P égal à P_ 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 P] (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 R, (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 R, 411, R2 412, R3 413 et R4 414. Les huit symboles d'informations de la roulette R! 41 1 (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 et des deux premiers symboles de la roulette R2
412 (respectivement R3 413, R4414 et Rλ 411) ;
On effectue une permutation 420 des quatre lignes puis une permutation des six colonnes de la matrice M pour obtenir une matrice permutée Λf ; - 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 R5
441, R6 442, R7 443 et R8 444. Les huit symboles d'informations de la roulette R5 415 (respectivement R6 416, R7 417 et R8 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 R6416 (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 (CRSG ) 571, 572, ..., 57/, ..., 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 BMX) 561 à 56P ;
- les codeurs élémentaires de type Convolutifs Récursifs Systématiques Circulaires (ou CRSC) 571 à 57P ; - un module de permutation PIL,,. 510 ;
- un module de rotation circulaire RC(Ok) 530 ;
- un module de commande Ok 520 du module 530 ; et
- 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 ; un 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 concaténation 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 ; et
- 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-l)C à K- . 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 t à gP, permettant de produire les bits de redondance (respectivement Etp+1 à
Zttp+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 φ; 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 R, à R5 (respectivement 31 Rj à R5) et le deuxième groupe de roulettes 26 R6 à R10 (respectivement 36 Rg à Rç,) 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 ; et le premier groupe de roulettes 411 Rj à 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 ; et 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, ..., 67/, ..., 67P correspondant chacun aux codeurs 571, 572, ..., 57/, ..., 51 P.
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 ; et
- 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 ; et
- 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; ce 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-l ; 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 (M)C à /C-l ; et le banc mémoire 66P mémorise les données relatives aux symboles d'indice (P-l)C à K-l. 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érent 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 φj 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 R, à R5 (respectivement 31 R_ à R5) et le deuxième groupe de roulettes 26 R6 à R10 (respectivement 36 R<; à
Rç) 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 ; et - le premier groupe de roulettes 411 Rj à 414 R4 et le deuxième groupe de roulettes 441 R5 à 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 Niterbi): - « Optimal decoding oflinear 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 décision outputs and its applications » (ou en français « un algorithme de Niterbi 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, Ν°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. Us 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 11 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 II 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.
Le nombre de codeurs/décodeurs et le nombre de bancs mémoires pourront être différents. Ainsi, il est possible d'alimenter simultanément chacun des
décodeurs appartenant à un ensemble de P décodeurs (P étant préférentiellement égal au nombre de décodeurs pouvant être utilisés en parallèle) avec w valant deux, trois, quatre ou plus symboles en parallèle de façon à diminuer le temps de traitement de chaque code. Les P décodeurs lisent alors globalement w.P données dans w.P bancs mémoires logiques à chaque cycle d'horloge. Le nombre de bancs mémoires est alors strictement supérieur au nombre de décodeurs alimentés en parallèle. Ainsi, l'architecture du décodeur (et du codeur correspondant) peut être définie avec souplesse car on dispose de plus de liberté pour allouer des ressources pour traiter (mémorisation, décodage, codage, ...) plusieurs symboles que pour en traiter un seul.
Il est aussi possible d'utiliser le procédé de décodage dans un système hétérogène pour lequel au moins deux décodeurs sont de nature différente et ne nécessite pas le même nombre de données par cycle d'horloge pour être traité en temps réel. Préférentiellement, le système est alors équilibré pour adapter les bandes passantes entre les bancs mémoires et les décodeurs en ayant un nombre de bancs mémoires différent du nombre P de décodeurs alimentés en parallèle.
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élise 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, 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.