Brevet FR2808390A1 — publié le 20011102

Domaine de l'invention La présente invention concerne le domaine des communications numériques et de façon davantage particulière, la présente invention concerne un codeur et un décodeur destinés à être utilisés au niveau de la mise en oeuvre d'un schéma de modulation turbocodée par treillis. Arrière-plan de l'invention Le turbocode a fait l'objet d'un grand intérêt du fait de son gain de codage plus important. Voir par exemple "Application of Turbo Codes for Discrete Multi-Tone Modulation", Hamid R. Sadjapour, AT & T Shannon Labs., 1996. Le turbocode est constitué par deux codes de convolution ou plus qui sont séparés par un entrelaceur qui opère sur la séquence d'entrée du premier codeur. Dans un système à boucle d'abonné numérique (DSL), le turbocode peut être utilisé pour remplacer un code par treillis afin d'obtenir une meilleure performance en termes de taux d'erreurs binaires (BER). Cependant, lorsque la dimension d'une constellation augmente, I'avantage constitué par le gain de codage du turbocode commence à se réduire. Ceci est dû au fait que les bits redondants rendent encore plus grande la dimension de la constellation. Notre demande de brevet connexe de la même date décrit comment un turbocode peut être utilisé afin de coder seulement le bit de poids le plus faible (LSB) dans la constellation et afin d'ainsi obtenir une meilleure performance que dans le cas d'une modulation codée par treillis présentement utilisée telle qu'un code de Wei. Le débit de données disponible est seulement éloigné de la capacité de Shannon de 2 dB. Un objet de l'invention consiste à proposer une mise en oeuvre rapide d'un codeur et d'un décodeur pour une modulation turbocodée par treillis. Résumé de l'invention Selon la présente invention, on propose un appareil de codage qui génère un signal de modulation turbocodée par treillis comprenant un bloc de données de codeur pour stocker des données arrivantes et au moins deux codeurs convolutionnels systématiques récursifs, lesdits codeurs convolutionnels étant connectés pour recevoir des données en parallèle en provenance dudit bloc de données de codeur. La structure de mise en oeuvre parallèle décrite réduit le cycle de mise en oeuvre pour à la fois le codeur et le décodeur. Par ailleurs, I'exigence en termes de mémoire (RAM ou mémoire vive) pour le turbodécodeur peut également être économisée de 1/3 dans le cas d'une mise en oeuvre parallèle à trois bits. L'invention propose également un appareil de décodage pour un signal de modulation de code par treillis turbocodée, comprenant une paire de décodeurs qui réalisent une itération vers l'avant et vers l'arrière sur un signal d'entrée et un dispositif d'entrelaçage ainsi qu'un dispositif de désentrelaçage, chaque décodeur extrayant n entrées de bit souples pour chaque itération de turbodécodeur, o n est un entier supérieur à l'unité. Dans un mode préféré de réalisation de l'invention, I'appareil de décodage calcule 2n valeurs de probabilité et obtient, à partir de celles- ci, le bit de contrôle d'erreur correspondant. L'invention propose en outre un procédé de décodage d'un signal de modulation par treillis turbocodée, comprenant l'extraction d'un nombre n de bits d'entrée souples o n est un entier supérieur à l'unité, la détermination des valeurs de probabilité pour les combinaisons possibles des n bits, et la réalisation d'une itération vers l'avant et vers l'arrière sur les bits d'entrée en parallèle afin de générer la sortie décodée. De préférence, on prendra n égal à 3. Brève description des dessins La présente invention sera maintenant décrite de façon davantage détaillée à titre d'exemple seulement par report aux dessins annexés parmi lesquels: la figure 1 est un schéma fonctionnel d'un codeur pour une modulation turbocodée par treillis; la figure 2 est un schéma fonctionnel d'une mise en oeuvre parallèle du codeur; la figure 3(a) représente un codeur RSC (convolutionnel systématique récursif) typique; la figure 3b représente un codeur RSC parallèle conformément aux principes de l'invention; la figure 4 est un schéma fonctionnel d'un turbodécodeur parallèle; la figure 5 représente le fonctionnement du décodeur; la figure 6 représente la mise en oeuvre de l'itération vers l'avant; la figure 7 représente un détail de la figure 6; et la figure 8 représente la mise en oeuvre d'une itération vers l'arrière. Description détaillée de l'invention Codeur parallèle La structure de codeur à constellation générale pour un schéma de modulation turbocodée par treillis est représentée sur la figure 1 pour les cas x > 1 et y > 1. Le mot binaire d'entrée u = (uz,, uz,1,..., u1) détermine deux mots binaires v = (vzy,..., vo) et w = (wy_1, ..., w0) (o z' = x + y - 1), lesquels deux mots binaires sont utilisés pour consulter deux points de constellation dans une table de codeur. Un bloc de données de codeur 10 reçoit une partie des données à partir d'un train de bits ou binaire d'entrée et la stocke en mémoire. Les bits d'ordre le plus faible sont lus à partir du bloc de données de codeur et sont passés à des codeurs convolutionnels systématiques récursifs RSC1 et RSC2. Le turbocodeur qui est formé par le bloc 20 est un codeur systématique présentant une vitesse ou un débit de codage de 3/4 ramené au débit de 1/2. Le turbocodeur est constitué par deux codeurs convolutionnels systématiques récursifs, soit RSC1 et RSC2. Le codeur RSC1 reçoit des données séquentielles en provenance du bloc de données de codeur et le codeur RSC2 reçoit des données entrelacées en provenance du même bloc de données. Dans cette structure, trois cycles de mise en oeuvre sont requis pour obtenir un unique point de constellation, ce qui est essentiellement dû à l'exigence de mise en oeuvre du turbocodeur. Afin d'accélérer le processus, une structure de codeurs parallèles est représentée sur la figure 2. La différence par rapport à la figure 1 réside dans le fait que les deux codeurs RSC1 et RSC2 reçoivent trois données d'entrée simultanément et créent un bit de contrôle d'erreur dans un unique cycle de mise en oeuvre. Une comparaison entre un codeur RSC normal et un codeur RSC parallèle est représentée sur la figure 3, la figure 3(a) représentant un codeur RSC à 8 états normal et la figure 3(b) représentant une mise en oeuvre parallèle. Le codeur parallèle consomme seulement un cycle de mise en oeuvre tous les trois bits d'entrée. Bien que la figure 3(b) représente le même codeur que celui de la figure 3(a), il n'est pas nécessaire que le codeur parallèle soit dérivé à partir d'un codeur RSC normal. Avantageusement, chaque codeur convolutionnel systématique récursif parallèle RSC1, RSC2 comprend un premier jeu d'additionneurs, chaque additionneur étant connecté pour recevoir une pluralité de trains de données en provenance du bloc de données de codeur 10, un second jeu d'additionneurs connectés aux sorties des additionneurs respectifs du premier jeu d'additionneurs et des unités de retard pour appliquer les sorties du second jeu d'additionneurs sur leurs entrées selon un agencement récursif. En outre, chaque codeur convolutionnel systématique récursif parallèle RSC1, RSC2 comprend un additionneur supplémentaire qui est connecté pour recevoir certains des trains de données en provenance du bloc de données de codeur et les sorties de certaines des unités de retard, la sortie de l'additionneur supplémentaire constituant la sortie des codeurs convolutionnels systématiques récursifs. Turbodécodeur parallèle La procédure de décodage pour une modulation turbocodée par treillis est constituée par les étapes qui suivent:: 1. Décodage souple du bit de poids le plus faible (LSB); 2. Décodage dur des bits de poids le plus fort (MSB); 3. Décodage du LSB en utilisant un algorithme de turbodécodeur; et 4. Détermination de tous les bits de données. Afin de décoder le LSB (troisième étape), le turbodécodeur parallèle consomme trois entrées binaires ou de bits souples pour chaque itération vers l'avant (a) et vers l'arrière (p). De cette façon, seulement un tiers des cycles sont utilisés pour chaque itération de turbodécodeur et les exigences en termes de mémoire pour stocker des valeurs ce et 3 sont également réduites d'un facteur de trois. Le turbodécodeur parallèle est représenté sur la figure 4. Il est constitué par deux décodeurs 40, 42, par un dispositif d'entrelaçage ou entrelaceur 41 et par un dispositif de désentrelaçage ou désentrelaceur 43. La figure 5 représente un détail du décodeur 40 (le décodeur 42 présente la même structure). Les décodeurs 40, 42 sont constitués par des blocs pour calculer des valeurs y, par des blocs pour réaliser une itération et par un bloc de sortie de bits souples. La première étape au niveau de l'opération de décodage comme représenté sur la figure 5 consiste à extraire trois bits souples P3k(0), P3k(1), P3k+1(0), P3k+1(1), P3k+2(0), P3k+2(1) afin de former huit valeurs de probabilité (un turbodécodeur normal dispose de seulement deux valeurs du fait qu'il contient seulement un bit d'information) pk000 pk00o1 pk010, pk011, pk1o0, pk101, pk110, Pk1l1. Par exemple, Pk0o0 = log[sonde(b3k = 0, b3k+l = 0, b3k+2 = 0)] = P3k(0) + P3k+1 (0) + P3k+2(0) En général, pk (j = mnl = 000, 001,...,111) peut être obtenu comme suit: pkmnI = log[sonde(b3k = m, b3k+1 = n, b3k+2 =)] = P3k(m) + P3k+l1(n) + P3k+2(l) Avec pk; et le bit de contrôle d'erreur correspondant (Pck(0), PCk(1)), la valeur yj (Rk, S', S) peut être obtenue comme suit: yj (Rk, s', s) = log(sonde(dk = j, Sk = s, Rk I Sk-1 = S)) = pkj + Pck(m) o j = 000, 001,. .., 111 et m = 0 ou 1 en fonction du bit de contrôle d'erreur lors d'un transfert depuis un état s' jusqu'à un état s avec des données d'entrée j. De préférence, chaque état k est déterminé au moyen de 2n états correspondants. Rk représente l'information reçue. Avec yj (Rk, s', s), I'itération vers l'avant (c) avec un algorithme LOGMAP peut être mise en oeuvre comme représenté sur la figure 6 o le bloc de normalisation place tous les yj (Rk, s', s) au centre de la plage dynamique avec le même facteur de normalisation de telle sorte que la plage dynamique complète lors d'une mise en oeuvre par virgule fixe peut être utilisée. Le même principe est appliqué à la sortie ck(s), c'est-à-dire que tous les oLk(s) à un état différent s (pour la même itération k) sont normalisés avec un même facteur de normalisation de telle sorte qu'ils sont tous situés au centre de la plage dynamique. La détermination du facteur de normalisation est la même que celle utilisée dans la mise en oeuvre du turbodécodeur normal. La différence au niveau d'une itération vers l'avant est que chaque état s pour une itération k (oEk(s)) est déterminé par huit états précédents (c'k_1(s'000), cLk_1(s'001),... c'kl(s'111)) dont chacun correspond à une valeur d'entrée yj (Rk, s', s) (dans un turbodécodeur classique, chaque état pour l'itération k est déterminé au moyen de seulement deux états précédents du fait que l'entrée est seulement une information d'un bit). L'opération LOG-ADD sur la figure 6 est représentée sur la figure 7, laquelle est constituée par une opération MAX et par une table de consultation. Avantageusement, chaque décodeur 40, 42 comprend une unité de normalisation et une unité pour réaliser une opération LOG-ADD afin de réaliser l'itération. L'itération vers l'arrière présente la même structure que l'itération vers l'avant et elle est représentée sur la figure 8. Après la fin de l'itération vers l'avant et vers l'arrière, les sorties binaires ou de bits souples sont calculées selon deux étapes comme suit: En premier lieu, calcul de huit valeurs pkj pour j = 000, 001,... 111 comme suit: pk = MAX(s, s) [yj (Rk, S, S'):k-l(S') l3k(S)] Puis la sortie souple est la combinaison de pj3k valeurs telles que: p03k(0) = sonde(b3k = 0) = pk000 + pk010 +pk 100 +pk110 P0 3k(1) = sonde(b3k = 1) = pkoo001 + pk011 +pk101 +pk111 Po 3k+l(0) = sonde(b3k+l = 0) = pko00 + pkoo001 +pk100 +pk101 Po3k+l (1) = sonde(b3k+l = 1) = pk010 + pk011 + pk110 +pk111 po 3k+2(0) = sonde(b3k+2 = 0) = pkoo000 + pk 001 +pk010 + pk011 Po 3k+2(1) = sonde(b3k+2 = 1) = pk100 + pk101 +pkll0 +pk111 Au niveau de la dernière itération, les bits de contrôle d'erreur souples sont également émis en sortie comme suit: pc3k+2(1) = Sonde(bc3k 2 = 1) = MAX(s, s') [Yckl (Rk, S, S') Ok-1(S') 13k(S)] Pc 3k+2(0) = sonde(b c3k+2 = 0) = MAX(s s') ['/ckO (Rk, S, S') (k-1(S') lk(S)] O YckO (Rk, s, s') et Yckl (Rk, S, S') représentent la probabilité de transfert depuis l'état s' jusqu'à l'état s avec un bit de contrôle d'erreur (à l'instant 3k+2) qui vaut respectivement 0 et 1. Les blocs décrits ci-avant peuvent être mis en oeuvre dans un processeur de signal numérique en utilisant des techniques de traitement numérique standards connues de l'homme de l'art spécialisé dans le traitement de signal numérique. Les techniques décrites augmentent la vitesse de mise en oeuvre du turbocodeur et du turbodécodeur et conduisent à des économies de mémoire significatives dans le décodeur parallèle. L'invention peut être appliquée à un décodeur avec un débit de codage variable. REVENDICATIONS 1. Codeur pour une modulation de code par treillis turbocodée caractérisé en ce qu'il comprend un bloc de données de codeur (10) pour stocker des données arrivantes et au moins deux codeurs convolutionnels systématiques récursifs parallèles (RSC1, RSC2), lesdits codeurs convolutionnels systématiques récursifs étant connectés pour recevoir des données en parallèle en provenance dudit bloc de données de codeur (10). 2. Codeur selon la revendication 1, caractérisé en ce que chaque dit codeur convolutionnel systématique récursif parallèle (RSC1, RSC2) comprend un premier jeu d'additionneurs, chaque additionneur étant connecté pour recevoir une pluralité de trains de données en provenance dudit bloc de données de codeur (10), un second jeu d'additionneurs connectés aux sorties des additionneurs respectifs du premier jeu d'additionneurs et des unités de retard pour appliquer les sorties dudit second jeu d'additionneurs sur leurs entrées selon un agencement récursif. 3. Codeur selon la revendication 2, caractérisé en ce que chaque dit codeur convolutionnel systématique récursif parallèle (RSC1, RSC2) comprend en outre un additionneur supplémentaire qui est connecté pour recevoir certains desdits trains de données en provenance dudit bloc de données de codeur (10) et les sorties de certaines desdites unités de retard, la sortie dudit additionneur supplémentaire constituant la sortie desdits codeurs convolutionnels systématiques récursifs (RSC1, RSC2). 4. Codeur selon la revendication 2, caractérisé en ce que ladite sortie représente un bit de contrôle d'erreur. 5. Codeur selon la revendication 2, caractérisé en ce que lesdits trains de données représentent les bits de poids le plus faible desdites données codées. 6. Appareil de décodage pour un signal de modulation de code par treillis turbocodée, caractérisé en ce qu'il comprend une paire de décodeurs (40, 42) qui réalisent une itération vers l'avant et vers l'arrière sur un signal d'entrée et un dispositif d'entrelaçage (41) ainsi qu'un dispositif de désentrelaçage (43), chaque décodeur extrayant n entrées de bits souples pour chaque itération de turbodécodeur o n est un entier supérieur à l'unité. 7. Appareil de décodage selon la revendication 6, caractérisé en ce qu'il calcule 2" valeurs de probabilité et en ce qu'il obtient à partir de celles-ci le bit de contrôle d'erreur correspondant. 8. Appareil de décodage selon la revendication 7, caractérisé en ce que chaque décodeur (40, 42) comprend une unité de normalisation et une unité pour réaliser une opération LOG-ADD afin de réaliser ladite itération. 9. Appareil de décodage selon la revendication 8, caractérisé en ce qu'une unité pour réaliser une opération LOG-ADD comprend une table de consultation et une unité d'opération maximum. 10. Procédé de décodage d'un signal de modulation par treillis turbocodée, caractérisé en ce qu'il comprend: I'extraction d'un nombre n de bits d'entrée souples o n est un entier supérieur à l'unité; la détermination des valeurs de probabilité pour les combinaisons possibles desdits n bits; et la réalisation d'une itération vers l'avant et vers l'arrière sur lesdits bits d'entrée en parallèle afin de générer la sortie décodée. 11. Procédé selon la revendication 10, caractérisé en ce qu'il comprend tout d'abord l'obtention de la valeur yj (Rk, s', s) o yj (Rk, s', s) = log(sonde(dk = j, Sk = s, Rk Sk-1 = S' = = Pjk + Pok(m), la normalisation des valeurs j (Rk, s', s) et la réalisation d'une itération vers l'avant et vers l'arrière sur les valeurs Yj (Rk, s', s). 12. Procédé selon la revendication 11, caractérisé en ce que toutes les valeurs yj (Rk, s', s) sont normalisées avec le même facteur de normalisation de telle sorte qu'elles soient situées au centre d'une plage dynamique afin de permettre l'utilisation d'une mise en oeuvre à virgule fixe. 13. Procédé selon la revendication 12, caractérisé en ce que, suivant la direction vers l'avant, chaque état k est déterminé au moyen de 2" états précédents. 14. Procédé selon la revendication 10, caractérisé en ce que n est égal à 3. 15. Procédé selon la revendication 14, caractérisé en ce que, après la réalisation d'une itération vers l'avant et vers l'arrière, les sorties de bits souples sont calculées selon deux étapes comme suit: (i) calcul de huit premières valeurs pjk pourj = 000, 001,..., 111 comme suit: pkj = MAX(s, s') [yj (Rk, S, S') ck-l(S') Pk(S)] (ii) puis dérivation de la sortie souple en tant que combinaison de pj3k valeurs telles que: p03k(0) = sonde(b3k = 0) = pk00o0 + pk 010 +pk100 +Pk110 p03k(1) = sonde(b3k = 1) = pk001ol + pk011 +pk101 +pk111 p03k+1 (0) = sonde(b3k+l = 0) = pkoo000 + pko001 +pk100 +pko101 p03k+1 (1) = sonde(b3k+l = 1) = pk010 + pk011 + pk110 +pk11 p03k+2(0) = sonde(b3k+2 = 0) = pkoo000 + pkoo1 +pko010 +pk011 po3k+2(1) = sonde(b3k+2 = 1) = pk100 + pkl1 +pk10 +pk111. 16. Procédé selon la revendication 15, caractérisé en ce qu'au niveau de la dernière itération, les bits de contrôle d'erreur souples sont également émis en sortie comme suit: pc3k+2(1) = sonde(bc3k+2 = 1) = MAX(s, s) [Yckl (Rk, S, S') ak-l(S') Nk(S)] pc3k+2(0) = sonde(bc3k+2 = 0) = MAX(s s') [Ycko (Rk, s, s') k-1 (S') 13k(S)] O YckO (Rk, S, S') et Yckl (Rk, s, s') représentent la probabilité de transfert depuis l'état s' jusqu'à l'état s avec un bit de contrôle d'erreur (à l'instant 3k+2) qui vaut respectivement 0 et 1.