[0001] Le domaine de l'invention est celui du codage de données numériques appartenant à
une, ou plusieurs, séquences de données sources destinées à être transmises, ou diffusées,
notamment en présence de bruits d'origines diverses, et du décodage des données codées
ainsi transmises.
[0002] Plus précisément, l'invention concerne une amélioration de la technique de décodage
des codes notamment connus sous le nom de « turbo-code » (marque déposée), et plus
particulièrement de l'opération de décodage itératif des codes concaténés.
[0003] La transmission de l'information (données, image, parole,...) repose de plus en plus
sur les techniques numériques de transmission. De nombreux efforts ont été faits en
matière de codage de source pour réduire le débit numérique, tout en conservant une
bonne qualité. Ces techniques nécessitent bien sûr une meilleure protection des éléments
binaires vis-à-vis des perturbations liées à la transmission. L'utilisation de codes
correcteurs d'erreurs puissants dans ces systèmes de transmission se révélait indispensable.
C'est notamment dans ce but qu'a été proposée la technique des « turbo-codes ».
[0004] Le principe général des « turbo-codes » est notamment présenté dans le brevet français
n° FR-91 05280, ayant pour titre « Procédé de codage correcteur d'erreurs à au moins
deux codages convolutifs systématiques parallèles, procédé de décodage itératif, module
de décodage et décodeur correspondants », et dans l'article de C. Berrou, A. Glavieux
et P. Thitimajshima intitulé « Near Shannon limit error-correcting coding and decoding
: Turbo-codes » publié dans IEEE International conderence on Communication, ICC'93,
vo12/3, pages 1064 à 1071 en mai 1993. Un état de l'art est rappelé dans l'article
de C. Berrou et A. Glavieux « Near Optimum Error Correcting Coding and Decoding :
« Turbo-Codes » (IEEE Transactions on Communications, Volume 44, n° 10, pages 1261-1271,
Octobre 1996).
[0005] Selon cette technique, on propose la mise en oeuvre d'un codage à « concaténation
parallèle », s'appuyant sur l'utilisation d'au moins deux codeurs élémentaires. Cela
permet de disposer, lors du décodage, de deux symboles de redondance issus de deux
codeurs distincts. Entre les deux codeurs élémentaires, on met en oeuvre des moyens
de permutation, de façon que chacun de ces codeurs élémentaires soit alimenté par
les mêmes données numériques source, mais prises dans des ordres différents.
[0006] Un complément à ce type de technique, permettant d'obtenir des codes appelés des
« turbo-codes » en blocs ou TCB, est destinée au codage en blocs (codes concaténés).
Cette technique améliorée est décrite dans l'article de R. Pyndiah, A. Glavieux, A.
Picart et S. Jacq dans l'article « Near optimum decoding of product code » (publié
dans IEEE Transactions on Communications, vol 46, n° 8 pages 1003 à 1010 en août 1998),
dans le brevet FR-93 13858, ayant pour titre « Procédé pour transmettre des bits d'information
en appliquant des codes en blocs concaténés», ainsi que dans l'article de O. Aitsab
et R. Pyndiah « Performance of Reed Solomon block turbo-code » (IEEE Globecom'96 Conference,
Vol. 1/3, pages 121-125, Londres, Novembre 1996).
[0007] Cette technique repose, en particulier, sur l'utilisation de codes produits introduits
par P. Elias et décrits dans son article « Error-free coding » paru dans la revue
« IRE Transaction on Information Theory » (vol. IT4, pages 29-27) en septembre 1954.
Les codes produits sont basés sur la concaténation série de codes en blocs. Pendant
longtemps, on a décodé les codes produits suivant des algorithmes à entrées et sorties
dures, c'est-à-dire qu'un décodeur élémentaire de codes en blocs accepte en entrée
et fournit en sortie des éléments binaires.
[0008] Pour décoder les « turbo-codes » en blocs, on a envisagé d'utiliser des moyens de
décodage à entrées et sorties douces, c'est-à-dire qu'un décodeur élémentaire de codes
en blocs accepte en entrée et fournit en sortie des éléments non binaires, pondérés
en fonction de leur vraisemblance.
[0009] Les « turbo-codes » en bloc sont particulièrement attractifs lorsque le codage des
données s'appliquent sur des blocs de petite taille (par exemple inférieure à 100
bits) ou lorsque le rendement du code (c'est-à-dire le nombre de bits de données utiles
divisé par le nombre de bits de données codées, par exemple, 0,95) est élevé et que
le taux d'erreurs visé est faible. En effet, le niveau de performance du code, mesuré
généralement en termes de taux d'erreurs résiduel en fonction d'un rapport signal/bruit
donné, varie en fonction de la distance de Hamming minimale du code qui est très bonne
dans le cas des « turbo-codes » en blocs (9,16,24, 36 voire plus).
[0010] Les différentes techniques de « turbo-décodage » sont de plus en plus intéressantes
pour les systèmes de communication numériques qui nécessitent une fiabilité toujours
plus grande. En outre, les débits de transmission sont de plus en plus élevés. On
peut atteindre notamment, avec l'utilisation de canaux de transmission sur fibres
optiques, des débits atteignant des gigabits voire des térabits.
[0011] On connaît, dans l'état de la technique, deux différents types d'architecture de
décodeurs pour « turbo-codes » en blocs ayant pour base:
- une structure modulaire ; ou
- une structure de Von Neumann.
[0012] Dans la structure modulaire, on cascade des modules ou décodeurs élémentaires, chacun
de ces modules ayant en charge une demi-itération. Ce traitement est bien adapté aux
algorithmes de décodage à entrées et sorties pondérées dans la mesure où de nombreuses
fonctions dans ces algorithmes sont classiquement réalisées de manière séquentielle
et sont alors simples à implanter.
[0013] Un inconvénient majeur de cette technique de l'art antérieur est qu'elle introduit
une latence importante dans le traitement des données, la latence étant le nombre
d'échantillons qui sortent du décodeur avant qu'une donnée présente en entrée ne se
retrouve à son tour en sortie. Cette latence augmente avec le nombre de modules. En
outre, l'encombrement du circuit est lui aussi relativement important et s'accroît
avec le nombre de modules. Les paramètres de latence et d'encombrements du circuit
deviennent vite rédhibitoires quand le nombre d'itérations et/ou la longueur du code
augmentent.
[0014] Dans la structure de Von Neumann, le circuit réalise plusieurs itérations en utilisant
une seule unité de mémorisation et une seule unité de traitement pour l'ensemble des
itérations. On vient reboucler sur lui-même un module de décodage élémentaire. Avec
cette architecture, le nombre de mémoires nécessaire est réduit. Le gain en surface
de circuit de mémorisation est considérable puisque la surface de mémorisation est
indépendante du nombre d'itérations. Néanmoins, un inconvénient majeur de cette structure
est qu'elle entraîne une diminution du débit de données.
[0015] L'invention selon ses différents aspects a notamment pour objectif de pallier ces
inconvénients de l'art antérieur.
[0016] Plus précisément, un objectif de l'invention est de fournir un module, un procédé
et un dispositif de décodage qui soient adaptés à fournir de bonnes performances en
termes de taux d'erreurs, tout en limitant la surface du circuit nécessaire pour les
opérations de traitement (décodages élémentaires) et les mémoires.
[0017] Un autre objectif de l'invention est de fournir un module, un procédé et un dispositif
de décodage qui puisse traiter des hauts débits pour une fréquence d'horloge de fonctionnement
donnée.
[0018] L'invention a aussi pour objectif la diminution de la latence de décodage, dans un
tel module, procédé et dispositif de décodage.
[0019] Ces objectifs ainsi que d'autres qui apparaîtront par la suite sont atteints, à l'aide
d'au moins un module de décodage d'un code concaténé, correspondant à au moins deux
codes élémentaires, du type mettant en oeuvre des moyens de mémorisation dans lesquels
sont stockés des échantillons de données à décoder. Selon l'invention, le module comprend
au moins deux décodeurs élémentaires pour au moins un desdits codes élémentaires,
les décodeurs élémentaires associés à l'un desdits codes élémentaires traitant simultanément,
en parallèle, des mots de code distincts contenus dans les moyens de mémorisation.
[0020] Ainsi, l'invention repose sur une approche tout à fait nouvelle et inventive du décodage
dans lequel on duplique, dans un module, le nombre de décodeurs sans dupliquer le
nombre de moyens de mémorisation, ce qui représente un avantage par rapport à l'état
de l'art où l'homme du métier duplique naturellement le nombre de mémoires et de décodeurs
pour augmenter les débits alors que c'est la mémoire qui occupe le plus de place dans
un circuit de décodage (par exemple, la mémoire peut occuper 80% de la surface totale
du circuit).
[0021] L'invention s'applique avantageusement à des décodeurs itératifs et en particulier
aux « turbo-décodeurs ». L'invention peut s'appliquer à différentes structures de
décodeurs, notamment à des structures de Von Neumann (dans lesquels des mémoires de
réception et/ou de traitement des données ainsi que des unités de traitement sont
utilisées pour plusieurs itérations, ce qui permet une économie de surface de circuit
mais qui, pour une vitesse de fonctionnement donnée, limite la vitesse de décodage)
et à des structures modulaires (dans lesquels des mémoires de réception et/ou de traitement
des données ainsi que des unités de traitement sont utilisées pour une seule demi-itération
ce qui permet un gain de vitesse de décodage mais conserve une latence de décodage
importante), ces structures étant détaillées plus loin.
[0022] D'une manière générale, l'invention présente l'intérêt d'un gain en vitesse de décodage
(cas notamment de l'invention appliquée à une structure de Von Neumann, la vitesse
étant le principal problème de la structure de Von Neumann) et/ou un gain de la latence
de décodage (cas notamment de l'invention appliquée à une structure modulaire), tout
en maintenant une surface de circuit relativement petite.
[0023] Ainsi, l'invention permet d'obtenir des hauts débits de transmission de données.
[0024] Selon une caractéristique avantageuse, les moyens de mémorisation stockant lesdites
données à décoder étant organisés sous la forme d'une matrice de n
1 lignes contenant chacune un mot de code élémentaire et n
2 colonnes contenant chacune un mot de code élémentaire, le module de décodage comprend
n
1 décodeurs élémentaires (respectivement n
2) alimentés chacun par une des lignes (respectivement colonnes) de la matrice.
[0025] En d'autres termes, l'invention s'applique avantageusement aux codes concaténés série.
[0026] Selon une caractéristique particulière, le module de décodage, les moyens de mémorisation
étant organisés sous la forme d'une matrice de
n1 lignes dont
k1 lignes contenant chacune un mot de code élémentaire et
n2 colonnes dont
k2 colonnes contenant chacune un mot de code élémentaire, est remarquable en ce qu'il
comprend
k1 décodeurs élémentaires (respectivement
k2) alimentés chacun par une des lignes (respectivement colonnes) de la matrice.
[0027] Ainsi, l'invention s'applique avantageusement aux codes concaténés parallèles.
[0028] Elle permet également un décodage en parallèle des lignes (respectivement colonnes)
d'une matrice correspondant au code utilisé, améliorant ainsi la vitesse de décodage
ou diminuant la latence, tout en maintenant une surface de circuit relativement faible,
les décodeurs élémentaires requérant généralement une surface de circuit faible (ou
d'une manière générale un nombre de transistors faible) comparativement à la surface
nécessaire pour les mémoires de réception et de traitement des données.
[0029] Selon une caractéristique préférentielle de l'invention, les moyens de mémorisation
sont organisés de façon à permettre un accès simultané à au moins deux mots de code
élémentaire.
[0030] Ainsi, des données correspondant à au moins deux mots de codes peuvent être traitées
en parallèle lors des décodages élémentaires, ce qui permet un gain en vitesse et/ou
une diminution de la latence.
[0031] Avantageusement, les moyens de mémorisation sont du type RAM simple port.
[0032] Ainsi, l'invention permet l'utilisation de mémoires courantes qui ne permettent pas
l'accès à des données mémorisées à deux adresses distinctes et ne nécessite pas (même
si elle ne l'interdit pas) l'utilisation de mémoires multiports.
[0033] De façon préférentielle, les moyens de mémorisation sont organisés en cases, possédant
chacune une adresse unique et contenant chacune au moins deux données élémentaires
d'un code élémentaire.
[0034] Ainsi, l'invention permet d'accéder à une seule case mémoire contenant au moins deux
données élémentaires (d'une manière générale données binaires pondérées ou non), ces
données pouvant être utilisées simultanément par au moins deux décodeurs élémentaires.
Ceci permet d'avoir un accès simultané à des données dont le contenu est indépendant
et de limiter ainsi la fréquence de fonctionnement (donc la consommation) des circuits
de mémorisation tout en ayant une vitesse de décodage globale relativement élevée.
[0035] Selon une caractéristique avantageuse, le module de décodage permet un accès simultané
à
m mots de code élémentaire et à
l mots de code élémentaire,
m>1 et/ou
l>1, permettant d'alimenter simultanément au moins deux décodeurs élémentaires.
[0036] Ainsi, l'invention permet avantageusement de tirer le meilleur parti de la découpe
en codes élémentaires en ayant un décodeur élémentaire associé à chaque code élémentaire.
L'invention permet ainsi d'optimiser la vitesse de décodage et/ou la latence.
[0037] Selon une caractéristique particulière, les mots accessibles simultanément correspondent
à des lignes adjacentes et/ou à des colonnes adjacentes d'une matrice initiale à
n1 lignes et
n2 colonnes, chacune des lignes et/ou colonnes adjacentes contenant un mot de code élémentaire.
[0038] Selon un mode de réalisation particulier, les codes élémentaires sont le même code
C.
[0039] Ainsi, l'invention permet d'optimiser la vitesse de décodage et/ou la latence lorsque
les codes élémentaires sont identiques.
[0040] Avantageusement, le module de décodage est conçu de façon à effectuer au moins deux
opérations de décodage élémentaire.
[0041] Selon un premier mode de réalisation, le code concaténé est un code concaténé série.
[0042] Selon second mode de réalisation, le code concaténé est un code concaténé parallèle.
[0043] Ainsi, l'invention peut s'appliquer aussi bien à ces deux types importants de codes
concaténés.
[0044] L'invention concerne également un dispositif de décodage d'un code concaténé, mettant
en oeuvre au moins deux modules tels que décrit précédemment, effectuant chacun une
opération de décodage élémentaire.
[0045] L'invention concerne encore un procédé de décodage d'un code concaténé, correspondant
à deux codes élémentaires, et comprenant au moins deux étapes simultanées de décodage
élémentaire d'au moins un desdits codes alimentaires, alimentées par les mêmes moyens
de mémorisation.
[0046] Selon une caractéristique avantageuse, le procédé de décodage est remarquable en
ce que les moyens de mémorisation sont organisés de façon qu'un accès unique à une
adresse des moyens de mémorisation donne accès à au moins deux mots de code élémentaire,
de façon à alimenter simultanément au moins deux des étapes de décodage élémentaire.
[0047] Selon un mode de réalisation particulier, le procédé de décodage est itératif.
[0048] Préférentiellement, au moins certaines des données traitées sont pondérées.
[0049] Ainsi, l'invention est avantageusement utilisée dans le cadre des turbo-codes qui
permettent notamment d'obtenir de bonnes performances en termes de taux d'erreur résiduel
après décodage.
[0050] Les avantages des dispositifs et procédés de décodage sont les mêmes que ceux du
module de décodage, et ne sont donc pas détaillés plus amplement.
[0051] 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 une structure d'une matrice représentant un mot de code produit
ou « turbo-code en blocs », conforme à l'invention selon un mode particulier de réalisation
;
- la figure 2 illustre un organigramme de décodage d'un « turbo-code » en bloc, connu
en soi;
- la figure 3 présente schématiquement un schéma bloc d'une unité de traitement réalisant
une demi-itération de « turbo-décodage », également connu en soi ;
- la figure 4 présente schématiquement un schéma bloc d'une unité de traitement réalisant
une demi-itération de « turbo-décodage », également connu en soi;
- la figure 5 présente schématiquement un schéma bloc d'un module de turbo-décodeur
dans une structure modulaire selon l'état de l'art ;
- la figure 6 présente schématiquement un schéma bloc d'un module de turbo-décodeur
dans une structure modulaire avec mise en évidence de la structure des mémoires, selon
l'état de l'art ;
- la figure 7 présente schématiquement un schéma bloc d'un module de turbo-décodeur
dans une structure de Von Neumann avec mise en évidence de la structure des mémoires,
selon l'état de l'art ;
- la figure 8 présente un schéma bloc de décodeur adapté aux hauts débits avec parallélisation
de décodeurs, conforme à l'invention selon un premier mode particulier de réalisation
;
- la figure 9 illustre schématiquement une case mémoire, conforme à l'invention selon
un deuxième mode particulier de réalisation ;
- la figure 10 illustre schématiquement une case mémoire avec son affectation à des
unités de traitement, conforme à l'invention selon une variante d'un mode particulier
de réalisation ;
- la figure 11 présente un schéma-bloc de turbo-décodeur, conforme à l'invention selon
une variante d'un mode particulier de réalisation.
[0052] Le principe général de l'invention repose sur une architecture particulière des mémoires
utilisées dans une opération de décodage de code concaténés et plus particulièrement
de décodage de ces codes.
[0053] On rappelle d'abord qu'on peut représenter généralement, un code concaténé série
sous la forme d'une matrice
[C] binaire et de dimension 2 telle qu'illustrée en figure 1. Cette matrice
[C] contient
n1 lignes et
n2 colonnes et :
- les échantillons binaires d'informations sont représentés par une sous-matrice 10,
[M], à k1 lignes et k2 colonnes ;
- chacune des k1 lignes de la matrice [M] est codée par un code élémentaire C2(n2, k2, δ2) (la redondance est représentée par une sous-matrice 11 de redondance de ligne) ;
- chacune des n2 colonnes de la matrice [M] et de la redondance ligne est codée par un code élémentaire C1(n1,k1,δ1) (la redondance correspondant aux échantillons binaires d'information est représentée
par une sous-matrice 12 de redondance de colonne ; la redondance correspondant à la
redondance ligne de la sous-matrice 11 est représentée par une sous-matrice 13 de
redondance de redondance).
[0054] Si le code C
1 est linéaire, les (
n1-
k1) lignes construites par
C1 sont des mots du code de
C2 et peuvent donc être décodés comme les
k1 premières lignes. Un code concaténé série se caractérise par
n1 mots de code de
C2 suivant les lignes, et par
n2 mots de code de
C1 suivant les colonnes. Les codes
C1 et
C2 peuvent être obtenus à partir de codes élémentaires convolutifs utilisés comme codes
en blocs ou de codes en blocs linéaires.
[0055] On décode les codes concaténés itérativement en décodant d'abord chacun des codes
élémentaires suivant les lignes puis chacun des codes élémentaires suivant les colonnes.
[0056] Selon l'invention, pour améliorer le débit de décodage, on parallélise les décodeurs
élémentaires :
- pour décoder les n1 lignes, on utilise m1 (2 ≤ m1 ≤ n1) décodeurs élémentaires du code C2; et/ou
- pour décoder les n2 colonnes, on utilise m2 (2 ≤ m2 ≤ n2) décodeurs élémentaires du code C1.
[0057] Chaque décodeur élémentaire a en entrée des données issues d'une mémoire de réception
et/ou de traitement et fournit en sortie des données qui sont conservées dans une
mémoire de réception et/ou de traitement. Afin d'améliorer encore le débit de décodage,
en conservant une vitesse d'horloge de circuit qui reste raisonnable, on groupe plusieurs
données en entrée ou en sortie de décodeur dans une seule case mémoire. Ainsi, en
groupant par exemple 4 données élémentaires (chacune des données élémentaires correspondant
à une donnée binaire pondérée ou non) dans une seule case-mémoire et en démultiplexant
(respectivement multiplexant) ces données en entrée (respectivement sortie) des décodeurs
ou en sortie (respectivement entrée) des mémoires, on multiplie par 4 le débit des
données en entrée et en sortie de mémoire, pour une vitesse d'horloge de circuit donnée,
ce qui permet d'augmenter globalement les vitesses de décodage et/ou de diminuer la
latence.
[0058] L'invention s'applique de la même manière aux codes concaténés parallèles. On rappelle
qu'on peut représenter généralement, un code concaténé parallèle sous la forme d'une
matrice
[C] binaire et de dimension 2 telle qu'illustrée en figure 1. Cette matrice
[C] contient
n1 lignes et
n2 colonnes et :
- les échantillons binaires d'informations sont représentés par une sous-matrice 10,
[M], à k1 lignes et k2 colonnes ;
- chacune des k1 lignes de la matrice [M] est codée par un code élémentaire C2(n2, k2, δ2) (la redondance est représentée par une sous-matrice 11 de redondance de ligne) ;
- chacune des k2 colonnes de la matrice [M] est codée par un code élémentaire C1(n1, k1, δ1) (la redondance correspondant aux échantillons binaires d'information est représentée
par une sous-matrice 12 de redondance de colonne ; il n'y a pas de redondance de redondance
dans le cas des codes concaténés parallèles).
[0059] Le « turbo-décodage » d'un code correspondant à la matrice C de la figure 1 consiste
à faire un décodage à entrée et sorties pondérées de toutes les lignes puis de toutes
les colonnes de la matrice C, selon le processus itératif illustré en figure 2.
[0060] Après réception 21 des données à traiter, on effectue un nombre prédéterminé (
Nb_Iter_Max) des opérations suivantes :
- décodage 22 des colonnes (une demi-itération ) ;
- reconstruction 23 de la matrice ;
- décodage 24 des lignes (une demi-itération) ;
- reconstruction 25 de la matrice.
[0061] Ces opérations sont donc répétées tant que le nombre
i d'itérations, incrémenté (26) à chaque itération, est inférieur à
Nb_Iter_Max (27), le nombre
i ayant été préalablement initialisé à zéro (28).
[0062] Les données décodées, notées D
k, sont ensuite traitées (29).
[0063] De manière générale, les informations échangées d'une demi-itération 22, 25 à une
autre sont définies par la figure 3.
[0064] R
k correspond à l'information reçue du canal, R'
k à l'information qui vient de la demi-itération antérieure et R'
k+ à l'information envoyée à la demi-itération suivante. La sortie de chaque demi-itération
est donc égale à la somme 36 de R
k et de l'information extrinsèque, W
k, multipliée (31) ensuite par un coefficient,
alpha, de contre-réaction ou de convergence. Cette information extrinsèque correspond à
l'apport du décodeur 32. Elle est obtenue par différence 33 entre la sortie pondérée
F
k du décodeur et l'entrée pondérée de ce même décodeur.
[0065] Des délais 34 et 35 sont prévus pour compenser la latence du décodeur 32.
[0066] On considère par la suite le décodeur à entrées et sorties pondérées comme un bloc
ayant R
k et R'
k (échantillonnés sur
q bits) comme entrées, délivrant R'
k+ et R
k+ (échantillonnés sur
q bits) à la sortie avec une certaine latence
L (retard nécessaire pour mettre en oeuvre l'algorithme de décodage). Il prend le nom
d'Unité de Traitement (UT) 30.
[0067] Le décodeur 32 fournit par ailleurs une décision binaire D
k qui est utilisée lors de la dernière demi-itération d'une opération de « turbo-décodage
» et qui correspond à une donnée décodée émise lors de l'opération 29 illustrée en
regard de la figure 2.
[0068] En considérant une autre découpe du schéma bloc de la figure 3, R'
k peut être remplacé par l'information extrinsèque W
k qui devient entrée-sortie de l'unité de traitement 40, R'
k toujours utilisée en entrée du décodeur 32, étant alors une variable interne. Cette
variante est illustrée par la figure 4.
[0069] Comme déjà mentionné, une analyse fonctionnelle de l'algorithme de « turbo-décodage
» permet d'identifier deux architectures possibles pour un circuit « turbo-décodeur
» de code produit (l'une modulaire et l'autre s'apparentant à une machine dite de
Von Neumann). Ces deux structures sont maintenant décrites un peu plus précisément.
a) Structure modulaire
[0070] A partir du schéma de fonctionnement de l'algorithme, on peut imaginer pour le «
turbo-décodeur » une structure modulaire dans laquelle chaque sous-circuit réalise
une demi-itération de décodage (c'est-à-dire un décodage des lignes ou des colonnes
d'une matrice de données,
[R] et
[W] ou
[R']). Il faut mémoriser
[R] et
[W] (ou
[R'], suivant le schéma bloc d'unité de traitement 30 ou 40 retenu).
[0071] Le circuit complet est alors constitué de modules identiques cascadés, tels qu'illustrés
en figure 5. Pour 4 itérations par exemple, le circuit utilise 8 modules, ou décodeurs
élémentaires.
[0072] Avec l'architecture modulaire, les données sont traitées séquentiellement (échantillon
après échantillon). Ce traitement est bien adapté aux algorithmes de décodage à entrées
et sorties pondérées dans la mesure où de nombreuses fonctions dans ces algorithmes
sont classiquement réalisées de manière séquentielle et sont alors simples à implanter.
[0073] Chaque module introduit une latence de (
n1n2+
L) échantillons. La latence est le nombre d'échantillons qui sortent du décodeur avant
qu'une donnée présente en entrée ne se retrouve à son tour en sortie. Dans cette expression,
les
n1n2 premiers échantillons correspondent au remplissage d'une matrice de données et les
L échantillons suivants au décodage proprement dit d'une ligne (ou colonne) de cette
matrice.
b) Structure de Von Neumann
[0074] La seconde architecture s'apparente à une machine séquentielle de Von Neumann. Elle
utilise une seule et même unité de traitement pour réaliser plusieurs itérations.
Par rapport à la précédente, cette solution vise principalement à réduire l'encombrement
du « turbo-décodeur ». Elle présente en outre, l'avantage de limiter à 2.
n1n2 échantillons au maximum la latence globale introduite par le circuit, indépendamment
du nombre d'itérations effectué (
n1n2 pour remplir une matrice et
n1n2 supplémentaires pour le décodage).
[0075] Chaque échantillon est traité séquentiellement et doit être décodé en un temps ne
dépassant pas l'inverse du produit du débit des données par le nombre de demi-itérations
à effectuer. Ainsi, pour quatre itérations, le débit des données ne peut se faire
qu'à un rythme au moins huit fois inférieur à celui de leur traitement. Ceci implique
qu'entre les architectures modulaire et de Von Neumann, le débit maximal d'émission
des données est divisé d'un facteur au moins égal au nombre de demi-itérations utilisé.
La latence est moindre pour la structure de Von Neumann (2
n1n2 échantillons au maximum contre
(n1n2+
L).
it dans l'autre,
it étant le nombre de demi-itérations) mais le débit est plus faible pour une même vitesse
de traitement des données.
[0076] Le nombre maximal d'itérations que l'on peut intégrer dans le circuit se trouve limité
par le débit que l'on souhaite atteindre et par la fréquence maximale de fonctionnement
qu'autorise la technologie utilisée.
[0077] Les aspects mémoires vont maintenant être décrits en relation avec ces deux structures.
Dans tous les cas, l'encombrement du circuit provient essentiellement de la taille
et du nombre des mémoires utilisées. Indépendamment de l'architecture générale retenue,
il est en effet indispensable de mémoriser les matrices
[R] et
[W] (ou
[R']) pour toute la durée de la demi-itération en cours (une demi-itération correspond
à un décodage des lignes ou des colonnes d'une matrice de données). Le traitement
des données en lignes puis en colonnes oblige à prévoir une première mémoire pour
recevoir les données et une seconde pour les traiter. Ces deux mémoires travaillent
alternativement en mode écriture et lecture, un automate gérant le séquencement. Chaque
mémoire est organisée de manière matricielle et se compose, pour un code de longueur
n1n2 et une quantification des données sur
q bits, de plans mémoires de
q.n1n2 bits chacun.
a) structure modulaire
[0078] Dans le cas de la structure modulaire, l'organisation générale du circuit sur une
demi-itération est celle des figures 5 et 6.
[0079] Le module 50 illustré en regard de la figure 5 contient une unité de traitement 40
(telle qu'illustrée en regard de la figure 4) et quatre mémoires :
- une mémoire 51 de mémorisation contenant les données [R] ;
- une mémoire 52 de traitement contenant les données [R] ;
- une mémoire 53 de mémorisation contenant les données [W] (ou [R'] suivant l'unité de traitement); et
- une mémoire 54 de traitement contenant les données [W] (ou [R']).
[0080] Les données
[R] 57
1 (respectivement
[W] 57
2) codées sur
q bits qui parviennent au module de décodage 50 sont rangées suivant les lignes de
la mémoire 51 (respectivement 53) de réception fonctionnant en mode écriture, l'interrupteur
logique 55
1 (respectivement 55
3) en entrée de la mémoire 51 (respectivement 53) (mis en oeuvre, par exemple sous
la forme d'un bit d'adressage permettant la sélection de la mémoire 51 (respectivement
53) lors d'une opération d'écriture) étant alors fermé et l'interrupteur 56
1 (respectivement 56
3) en entrée de la mémoire 52 (respectivement 54) étant ouvert. Les données [
R] en entrée du premier module sont directement issues du canal de transmission alors
que les données
[R] de chacun des modules suivants sont issues de la sortie
[R] 59
1 du module précédent. Les données
[W] en entrée du premier module sont nulles alors que les données
[W] de chacun des modules suivants sont issues de la sortie
[W] 59
2 du module précédent.
[0081] Parallèlement, les données de la matrice reçue précédemment sont prélevées suivant
les colonnes des mémoires 52 et 54 de traitement, fonctionnant elle en mode lecture,
l'interrupteur logique 56
2 (respectivement 55
4) en sortie de la mémoire 52 (respectivement 54) (mis en oeuvre, par exemple sous
la forme d'un bit d'adressage permettant la sélection de la mémoire 52 (respectivement
54) lors d'une opération de lecture) étant alors fermé et l'interrupteur 56
2 (respectivement 56
4) en sortie de la mémoire 51 (respectivement 53) étant ouvert.
[0082] Une fois les mémoires de réception remplies, les mémoires de traitement passe en
mode écriture (en d'autres termes, les rôles des mémoires 51 et 52 (respectivement
53 et 54) sont échangés et les interrupteurs logiques 55
1, 55
2, 55
1 et 56
2 (respectivement 55
3, 55
4, 56
3 et 56
4) « changent de position ») afin de stocker les données correspondant au mot de code
suivant. En cascadant deux modules, l'un pour le décodage des colonnes et l'autre
pour celui des lignes d'une matrice codée, on réalise une itération complète.
[0083] Les mémoires 51, 52, 53 et 54 utilisées peuvent être conçues sans difficulté à partir
de RAM (Random Access Memory) classiques, simple port, adressables en ligne et en
colonne. D'autres solutions peuvent être envisagées (registres à décalage, par exemple)
mais elles sont plus encombrantes.
[0084] On note que les données échangées sur les bus de données tels qu'illustrés en regard
de la figure 5 sont codées sur
q bits alors que, selon une variante illustrée en regard de la figure 6, les données
sont codées sur 2.
q bits, chacune des données contenant alors
q bit correspondant à une données
[R] et
q bits correspondant à une donnée
[W] (ou
[R']).
[0085] Le module 60 illustré en regard de la figure 6 permet d'effectuer une demi-itération
de décodage et contient une unité de traitement 40 (telle qu'illustrée en regard de
la figure 4) et deux mémoires :
- une mémoire 62 de mémorisation ou de réception contenant les données [R] et [W] (ou [R'] dans le cas où l'unité de traitement est telle l'unité 30 illustrée en regard de
la figure 3); et
- une mémoire 63 de traitement contenant les données [R] et [W] (ou [R']).
[0086] Les données 61 codées sur 2.
q bits qui parviennent au module de décodage sont rangées suivant les lignes de la
mémoire 62 de réception fonctionnant en mode écriture. Parallèlement, les données
de la matrice reçue précédemment sont prélevées suivant les colonnes de la mémoire
62 de traitement, fonctionnant elle en mode lecture. Une fois la mémoire de réception
62 remplie, la mémoire de traitement passe en mode écriture afin de stocker les données
correspondant au mot de code suivant. En cascadant deux modules, l'un pour le décodage
des colonnes et l'autre pour celui des lignes d'une matrice codée, on réalise une
itération complète.
[0087] Les mémoires 62, 63 utilisées peuvent être conçues sans difficulté à partir de RAM
(Random Access Memory) classiques, simple port, adressables en ligne et en colonne.
D'autres solutions peuvent être envisagées (registres à décalage, par exemple) mais
elles sont plus encombrantes.
[0088] D'un point de vue pratique, la solution modulaire a pour avantages de permettre une
fréquence de fonctionnement élevée et d'être d'une grande souplesse d'utilisation.
En contrepartie, la mise en cascade de plusieurs modules entraîne un accroissement
de la latence et de l'encombrement du cicuit. Ces paramètres deviennent rapidement
rédhibitoires quand le nombre d'itérations et/ou la longueur du code augmente(nt).
b) structure dite de Von Neumann
[0089] Le circuit réalise cette fois plusieurs itérations en utilisant quatre unités de
mémorisation 70, 71, 72 et 73 illustrées en figure 7. On vient reboucler, sur lui-même,
un module de décodage. Avec cette architecture, le circuit complet ne comprend que
quatre mémoires 70, 71, 72 et 73 indépendamment du nombre d'itérations effectuées.
Ces mémoires 70, 71, 72 et 73 doivent cependant pouvoir être lues et écrites aussi
bien en lignes qu'en colonnes.
[0090] Les mémoires 70, 71, 72 et 73 utilisées sont des RAM classiques, simple port, dans
lesquelles on peut lire ou écrire une donnée repérée par son adresse. Comme on accède
directement à chaque échantillon, il est possible de décoder la matrice indifféremment
suivant ses lignes ou ses colonnes. Ces mémoires sont similaires à celles retenues
pour la solution modulaire mais, le circuit complet n'en comportant que quatre, le
gain en surface est considérable (80% pour quatre itérations). Il faut toutefois remarquer
que cette réduction de la surface est obtenue, pour une même vitesse de fonctionnement
des circuits, au détriment du débit des données (divisé par au moins
it pour
it/
2 itérations : il faut en effet tenir compte dans ce calcul de la latence de chaque
décodage élémentaire).
[0091] Les données
[R] 76 (respectivement
[W] 75) codées sur
q bits sont rangées suivant les lignes de la mémoire 70 (respectivement 72) de réception
fonctionnant en mode écriture, l'aiguilleur logique 77
1 (respectivement 78
1) aiguillant les données vers la mémoire 70 (respectivement 72) (mis en oeuvre, par
exemple sous la forme d'un bit d'adressage permettant la sélection de la mémoire 70
(respectivement 72) lors d'une opération d'écriture). Les données
[R] 76 en entrée sont directement issues du canal de transmission. Les données
[W] en entrées sont nulles lors de la première demi-itération alors que les données
[W] de chacune des demi-itérations suivantes sont issues de la sortie
[W] 75 de la demi-itération précédente.
[0092] Parallèlement, les données
[R] reçues précédemment sont prélevées suivant les colonnes de la mémoire 71 de traitement,
fonctionnant elle en mode lecture, l'aiguilleur logique 77
2 en sortie des mémoires 71 et 70 (mis en oeuvre, par exemple sous la forme d'un bit
d'adressage) permet la sélection de la mémoire 71 lors d'une opération de lecture.
Parallèlement, les données
[W] issues d'une demi-itération précédente (ou nulles s'il s'agit de la première demi-itération)
sont prélevées suivant les colonnes de la mémoire 73 de traitement, fonctionnant elle
en mode lecture, l'aiguilleur logique 78
2 en sortie des mémoires 72 et 73 permet la sélection de la mémoire 72 lors d'une opération
de lecture.
[0093] Une fois la mémoire de réception de
[W] remplie (c'est-à-dire à la fin de chaque demi-itération), les rôles des mémoires
[W] de traitement et de réception sont échangés : la mémoire de traitement de
[W] passe en mode écriture et devient mémoire de réception (en d'autres termes, les aiguilleurs
logiques 78
1 et 78
2 « changent de position ») afin de stocker les données correspondant au mot de code
suivant et la mémoire de réception et la mémoire de réception de
[W] passe en mode lecture et devient mémoire de traitement.
[0094] Une fois la mémoire de réception de
[R] remplie (c'est-à-dire à la fin de chaque opération de turbo-décodage d'un bloc si
on suppose que les données sont transmises de manière continue), les rôles des mémoires
[R] de traitement et de réception sont échangés : la mémoire de traitement de
[R] passe en mode écriture et devient mémoire de réception (en d'autres termes, les aiguilleurs
logiques 7.7
1 et 77
2 « changent de position ») afin de stocker les données correspondant au mot de code
suivant et la mémoire de réception et la mémoire de réception de
[R] passe en mode lecture et devient mémoire de traitement. Si en variante, les données
sont transmises en mode paquet (ou « burst » en anglais) et si chaque paquet est à
décoder en une seule fois, le décodage étant achevé avant l'arrivée d'un nouveau paquet,
il n'est pas nécessaire, pour une structure de Von Neumann, d'avoir deux mémoires
respectivement de traitement et de réception pour les données
[R] mais une seule suffit.
[0095] Les mémoires 70, 71, 72 et 73 utilisées peuvent être conçues sans difficulté à partir
de RAM (Random Access Memory) classiques, simple port, adressages en ligne et en colonne.
D'autres solutions peuvent être envisagées (registres à décalage, par exemple) mais
elles sont plus encombrantes.
[0096] On note que les données échangées sur les bus de données tels qu'illustrés en regard
de la figure 7 sont codées sur
q bits.
[0097] On note qu'en variante des modes de réalisation illustrés en regard des figures 5,
6 et 7, une unité de traitement 30 telle qu'illustrée en regard de la figure 3 peut
remplacer l'unité de traitement 40. Les données de types
[W] sont alors remplacées par des données de type
[R'] dans les mémoires.
[0098] Selon l'état de l'art, une architecture haut débit consiste à dupliquer le nombre
de modules tels qu'illustrés en regard des figures 6 ou 7.
[0099] L'invention propose une nouvelle approche, particulièrement adaptée à une architecture
haut débit d'un « turbo-décodeur » de codes concaténés.
[0100] On a vu que les codes concaténés avaient la propriété d'avoir des mots de code sur
toutes les lignes (ou les colonnes) de la matrice C initiale.
[0101] Selon l'invention, on parallélise le décodage, selon le principe illustré en figure
8, décrivant un module 80 permettant d'effectuer une demi-itération, les modules 80
pouvant être cascadés pour former une structure modulaire de turbo-décodage. La matrice
81 (plan mémoire de traitement de
n1.
n2 échantillons de 2
q bits contenant des données
[R] et
[W] (ou
[R'] selon le type d'unité de traitement) alimente une pluralité de décodeurs (ou unité
de traitement 30 ou 40 telle qu'illustrée en regard des figures 3 et 4) élémentaires
82
1 à 82
m.
[0102] On a en effet dupliqué le nombre de décodeurs élémentaires du code C
1 (ou C
2) en
m décodeurs élémentaires 82
1 à 82
m. On peut ainsi traiter un nombre maximal de
n1 (ou
n2) mots de code à condition toutefois que les accès mémoire, en lecture ou en écriture,
aient lieu à des instants différents (plusieurs points mémoire d'une matrice ne peuvent
être lus ou écrits en même temps, à moins d'utiliser des RAM « multi-ports »). Cette
contrainte étant respectée, il est possible de gagner un facteur
n2 (ou
n1) dans le rapport F
Débit/F
Utmax (F
Débit étant le débit utile en sortie du turbo décodeur et F
Utmax représentant la vitesse de fonctionnement d'une unité de traitement) puisqu'il peut
y avoir
n2 (ou
n1) échantillons traités à un instant donné.
[0103] La matrice 83 (plan mémoire de réception de
n1.n2 échantillons de 2
q bits) est alimentée par une pluralité de décodeurs élémentaires 82
1 à 82
m d'un module 80 précédent.
[0104] On note que dans le premier module, les données
[R] sont directement issues du canal alors que les données
[W] sont nulles (ou, en variante, on n'utilise qu'un demi-bus correspondant aux données
[R], en entrée des décodeurs élémentaires dans le premier module).
[0105] A chaque demi-itération, les rôles respectifs des mémoires 81 et 83 sont échangés,
ces mémoires étant alternativement mémoires de traitement ou mémoire de réception.
[0106] On note que les données sont écrites suivant les colonnes des plans mémoire de réception
alors qu'elles sont lues suivant les lignes dans les plans mémoire de traitement.
On obtient ainsi, avantageusement un moyen d'entrelacement et de désentrelacement
aisé à mettre en oeuvre (dans le cas où l'entrelaceur du turbo-codeur est uniforme,
c'est-à-dire que dans l'entrelaceur les données sont écrites ligne par ligne et lues
colonne par colonne) en cascadant les modules, les sorties des décodeurs élémentaires
d'un module étant connectées au plan mémoire de réception du module suivant.
[0107] L'inconvénient majeur de cette architecture est que les mémoires 81 et 83 doivent
fonctionner à une fréquence
m. F
Utmax, si on a
m décodeurs élémentaires en parallèle.
[0108] Selon une première variante de la structure modulaire, la matrice 81 est divisée
en deux plans mémoires de traitement de
n1.
n2 échantillons de
q bits, les deux plans contenant respectivement des données
[R] ou
[W] (ou
[R'] selon le type d'unité de traitement). En outre, la matrice 83 est elle-même divisée
en deux plans mémoire de réception de
n1.
n2 échantillons de
q bits contenant respectivement des données
[R] ou
[W].
[0109] En variante, le « turbo-décodeur » est réalisé selon une structure de Von Neumann.
Selon cette variante, le plan mémoire de traitement est divisé en un plan de mémoire
de traitement associé aux données
[R] (si on suppose que les données sont transmises de manière continue) et un plan de
mémoire de traitement associé aux données
[W] (ou
[R'] selon le mode de réalisation de l'unité de traitement). De même, le plan mémoire
de traitement est divisé en un plan de mémoire de réception associé aux données
[R] et un plan de mémoire de réception associé aux données
[W]. De même que dans la structure illustrée en regard de la figure 7, les rôles des mémoires
de traitement et de réception des données
[R] sont échangés à chaque demi-itération et rôles des mémoires de traitement et de réception
des données
[W] sont échangés à chaque opération de turbo-décodage d'un bloc. On note cependant que
selon l'invention, dans une structure de Von Neuman, les mémoires de traitement des
données
[R] et
[W] alimentent m décodeurs élémentaires et que les sorties
[W] de ces décodeurs sont rebouclées sur la mémoire de réception des données
[W]. Selon cette variante, si les données sont transmises en mode paquet (ou burst en
anglais) et si chaque paquet est à décoder en une seule fois, le décodage étant achevé
avant l'arrivée d'un nouveau paquet, il n'est pas nécessaire d'avoir deux mémoires
respectivement de traitement et de réception pour les données
[R] mais une seule suffit.
[0110] Selon un aspect avantageux de l'invention, on peut garder une même vitesse de fonctionnement
de la mémoire et augmenter le débit, en mémorisant à une même adresse, plusieurs données,
selon le principe illustré en figure 10. Il faut, cependant, pouvoir utiliser ces
données aussi bien en ligne ou en colonne. D'où l'organisation suivante : à cette
adresse vont se trouver des données adjacentes en lecture (ou écriture), aussi bien
en ligne ou en colonne.
[0111] Considérons deux lignes adjacentes
i et
i+
1 et deux colonnes adjacentes
j et
j+
1 de la matrice 90 initiale, présentée en figure 9.
[0112] Les 4 échantillons (
i,
j), (
i,
j+1), (
i+1,
j) et (
i+1,
j+1) constituent un mot 105 de la nouvelle matrice 100, illustrée en figure 10 qui
a 4 fois moins d'adresses (I,J) mais des mots 4 fois plus grands. Si
n1 et
n2 sont pairs,
alors si 1≤I≤
n1/
2,
i=2*I-1.
De même, si 1≤J≤
n2/
2,
j=2*J-1.
[0113] Pour le décodage ligne, les échantillons (
i,
j), (
i,
j+1) 101 sont affectés à une unité de traitement UT1, (
i+1,
j) et (
i+1,
j+1) 102 à une unité de traitement UT2. Pour le décodage colonne, il faut prendre (
i,
j), (
i+1,
j) 103 pour UT1 et (
i,
j+1), (
i+1,
j+1) 104 pour UT2. Si les unités de traitement savent traiter en entrée (lecture de
la RAM) et en sortie (écriture de la RAM) ces couples d'échantillons dans le même
temps 1/F
UTmax,le temps de traitement de la matrice est 4 fois plus rapide que pour la matrice initiale
(Figure 10).
[0114] Cette figure 10 n'est bien sûr qu'un exemple de « découpe » de la mémoire en 4 portées.
[0115] En généralisant, si un mot 105 de la nouvelle matrice 100 contient
m échantillons d'une ligne et
l échantillons d'une colonne, le temps de traitement de la matrice est
m.
l fois plus rapide avec seulement
m unités de traitement du décodage « ligne » et
l unités de traitement du décodage « colonne ».
[0116] Dans le cas où les codes C
1 et C
2 sont identiques, les UT « ligne » et les UT « colonnes » le sont aussi, ainsi que
cela est représenté en figure 11. Alors,
m=l et
m unités de traitement 112
1 à 112
m nécessaires (telles les unités de traitement 30 ou 40 illustrées en regard des figures
3 et 4). Un démultiplexeur 114 délivre les données de la matrice 111 (plan mémoire
de traitement de
n1n2/
m2 mots de 2
q.
m2 bits) aux
m unités de traitement (UT) élémentaires 112
1 à 112
m, chacune des unités de traitement recevant simultanément un échantillon de 2q
m bits.
[0117] Un multiplexeur 115 est alimenté en échantillons de 2q
m bits par les décodeurs élémentaires 112
1 à 112
m. Le multiplexeur 115 alimente ensuite, en échantillons de 2q.
m2 bits, le plan mémoire de réception 113 du module correspondant à la demi-itération
suivante.
[0118] Cette organisation des matrices de données ne requiert pas d'architectures de mémoires
particulières, ni une rapidité plus grande. Par ailleurs, si la complexité de l'UT
reste inférieure à
m fois celle de l'UT précédente, la complexité totale est moindre pour une vitesse
m2 fois plus élevée (ce dernier résultat aurait pu être obtenu en utilisant
m2 UT, comme proposé en figure 8).
[0119] La mémoire comporte
m2 fois moins de mots que la matrice initiale C. A technologie identique, son temps
d'accès sera donc moindre.
[0120] L'invention propose donc une architecture de décodage des codes concaténés, fonctionnant
à haut débit. Ils peuvent être obtenus à partir de codes convolutifs ou de codes en
blocs linéaires. Elle consiste essentiellement à modifier l'organisation initiale
de la mémoire C afin d'accélérer la vitesse de décodage. Pendant un temps 1/F
UTmax,
m échantillons sont traités dans chacun des
m décodeurs élémentaires, ce qui permet un gain
m2 en débit. Dans le cas où le traitement de ces
m échantillons n'augmente pas de façon considérable la surface du décodeur élémentaire,
le gain en surface est proche de
m, lorsqu'on compare cette solution à celle nécessitant
m2 décodeurs.
[0121] Selon une variante, le demultiplexeur 114 demultiplexe chacun des échantillons de
2q.
m2 bits reçus du plan mémoire 111 et les sérialise pour obtenir
m séquences de
m échantillons de 2q bits. Chacune de ces séquences est délivrée à l'une des unités
de traitement élémentaires 112
1 à 112
m. Chacune des unités de traitement 112
1 à 112
m alimente alors le multiplexeur 115 en séquences d'échantillons de 2q bits. Le multiplexeur
traite les
m séquences issues simultanément des unités de traitement 112
1 à 112
m pour alimenter en échantillons de 2q.
m2 bits le plan mémoire de réception 113 du module correspondant à la demi-itération
suivante. Selon cette variante, on obtient une vitesse de décodage
m fois plus élevée que selon l'état de l'art à vitesse d'horloge égale, avec un seul
plan mémoire de traitement dans chaque module.
[0122] Selon les modes de réalisations décrits en regard de la figure 11, les plans mémoires
111 et 113 contenant des données codées sur 2q.
m2 bits, le nombre de mots des mémoires de réception et de traitement est moindre et
le temps d'accès à ces mémoires est diminué.
[0123] Bien entendu, l'invention n'est pas limitée aux exemples de réalisation mentionnés
ci-dessus.
[0124] En particulier, l'homme du métier pourra apporter toute variante dans le type de
mémoire utilisée, qui peuvent être par exemple des RAMs simple port ou des RAM multiports.
[0125] En outre, l'invention s'applique aussi bien au cas où les données sont transmises
en mode paquets (ou burst en anglais) ou en continu.
[0126] De plus, l'invention concerne aussi bien les codes concaténés séries ou parallèles,
ces codes pouvant être de type codes convolutifs ou codes en blocs.
[0127] L'invention concerne les codes constitués de deux codes concaténés mais concerne
également les codes constitués de plus de deux codes concaténés.
[0128] D'une manière générale, l'invention concerne aussi tous les « turbo-codes » blocs
ou non, constitués de codes élémentaires agissant sur une séquence d'information (permutée
ou non), l'un au moins des mots de codes élémentaires étant constitué d'au moins deux
mots de codes.
1. Module de décodage d'un code concaténé, correspondant à au moins deux codes élémentaires,
du type mettant en oeuvre des moyens de mémorisation dans lesquels sont stockés des
échantillons de données à décoder,
caractérisé en ce qu'il comprend au moins deux décodeurs élémentaires (821 à 82m, 1121 à 112m) d'au moins un desdits codes élémentaires, lesdits décodeurs élémentaires (821 à 82m, 1121 à 112m) associés à l'un desdits codes élémentaires traitant simultanément, en parallèle,
des mots de code distincts contenus dans lesdits moyens de mémorisation (81, 83, 90,
111, 113) et
en ce que lesdits moyens de mémorisation (81, 83, 90, 111, 113) sont organisés en cases (105),
possédant chacune une adresse unique et contenant chacune au moins deux données élémentaires
(101, 102, 103, 104) correspondant à un mot de code élémentaire.
2. Module de décodage selon la revendication 1, lesdits moyens de mémorisation stockant
lesdites données à décoder étant organisés sous la forme d'une matrice (10) de n1 lignes contenant chacune un mot de code desdits codes élémentaires et n2 colonnes contenant chacune un mot de code desdits codes élémentaires,
caractérisé en ce qu'il comprend n1 décodeurs élémentaires (respectivement n2) (821 à 82m, 1121 à 112m) alimentés chacun par une desdites lignes (respectivement colonnes) de ladite matrice
(10).
3. Module de décodage selon la revendication 1, lesdits moyens de mémorisation stockant
lesdites données à décoder étant organisés sous la forme d'une matrice (10) de n1 lignes dont k1 lignes contenant chacune un mot de code desdits codes élémentaires et n2 colonnes dont k2 colonnes contenant chacune un mot de code desdits codes élémentaires,
caractérisé en ce qu'il comprend k1 décodeurs élémentaires (respectivement k2) (821 à 82m, 1121 à 112m) alimentés chacun par une desdites lignes (respectivement colonnes) de ladite matrice
(10).
4. Module de décodage selon l'une quelconque des revendications 1 à 3, caractérisé en ce que lesdits moyens de mémorisation (81, 83, 90, 111, 113) sont organisés de façon à permettre
un accès simultané à au moins deux mots de code élémentaire.
5. Module de décodage selon la revendication 4, caractérisé en ce que lesdits moyens de mémorisation (81, 83, 90, 111, 113) sont du type RAM simple port.
6. Module de décodage selon l'une quelconque des revendications 4 et 5,
caractérisé en ce que chaque dite case (105) desdits moyens de mémorisation (81, 83, 90, 111, 113) possédant
chacune une adresse unique contient
m.l données élémentaires (101, 102, 103, 104) permettant d'alimenter simultanément :
- m décodeurs élémentaires suivant lesdites lignes selon l'une quelconque des revendications
2 et 3 ; et/ou
- l décodeurs élémentaires suivant lesdites colonnes selon l'une quelconque des revendications
2 et 3 ;
m et
l étant des entiers strictement supérieurs à 1.
7. Module de décodage selon l'une quelconque des revendications 4 à 6, caractérisé en ce que lesdits mots accessibles simultanément correspondent à des lignes adjacentes et/ou
à des colonnes adjacentes d'une matrice (10) initiale à n1 lignes et n2 colonnes, chacune des lignes et/ou colonnes adjacentes contenant un mot de code élémentaire.
8. Module selon l'une quelconque des revendications 1 à 7, caractérisé en ce que lesdits codes élémentaires sont le même code C.
9. Module de décodage selon l'une quelconque des revendications 1 à 8, caractérisé en ce qu'il effectue au moins deux opérations de décodage élémentaire.
10. Module de décodage selon l'une quelconque des revendications 1 à 9, caractérisé en ce que ledit code concaténé est un code concaténé série.
11. Module de décodage selon l'une quelconque des revendications 1 à 10, caractérisé en ce que ledit code concaténé est un code concaténé parallèle.
12. Dispositif de décodage d'un code concaténé, caractérisé en ce qu'il met en oeuvre au moins deux modules selon l'une quelconque des revendications 1
à 11, montés en cascade et effectuant chacun une opération de décodage élémentaire.
13. Procédé de décodage d'un code concaténé, correspondant à deux codes élémentaires,
caractérisé en ce qu'il comprend au moins deux étapes simultanées de décodage élémentaire d'au moins un
desdits codes élémentaires, alimentées par les mêmes moyens de mémorisation (81, 83,
90, 111, 113) ; et
en ce que lesdits moyens de mémorisation sont organisés en cases de façon qu'un accès à une
adresse unique desdits moyens de mémorisation (81, 83, 90, 111, 113) donne accès à
au moins deux données élémentaires, correspondant à un mot de code élémentaire de
façon à alimenter simultanément au moins deux desdites étapes de décodage élémentaire.
14. Procédé de décodage selon la revendication 13, caractérisé en ce qu'il est itératif.
15. Procédé de décodage selon l'une quelconque des revendications 13 et 14, caractérisé en ce qu'au moins certaines des données traitées sont pondérées.
1. Modul zum Dekodieren eines mindestens zwei Elementarcodes entsprechenden verketteten
Codes,
welches Speichermittel einsetzt, in denen Muster der zu dekodierenden Daten gespeichert
sind,
dadurch gekennzeichnet, dass es mindestens zwei Elementardecoder (821 bis 82m, 1121 bis 112m) von mindestens einen dieser elementaren Codes umfasst, wobei die mit einem der Elementarcodes
assoziierten Elementardecoder (821 bis 82m, 1121 bis 112m) gleichzeitig in paralleler Arbeitsweise verschiedene in den Speichermitteln (81,
83, 90, 111, 113) Codewörter verarbeitet, sowie dadurch,
dass die Speichermittel (81, 83, 90, 111, 113) nach Fächern (105) organisiert sind,
die jeweils eine einzige Adresse besitzen und mindestens zwei einem elementaren Codewort
entsprechende Elementardaten (101, 102, 103, 104) enthalten.
2. Modul zum Dekodieren nach Anspruch 1, wobei die Speichermittel für die zu dekodierenden
Daten in Form einer Matrix (10) organisiert sind, welche n1 Zeilen, die jeweils ein Codewort der erwähnten Elementarcodes und n2 Spalten, die jeweils ein Codewort der erwähnten Elementarcodes enthalten, aufweist,
dadurch gekennzeichnet, dass es n1 (bzw. n2) Elementardecoder (821 bis 82m, 1121 bis 112m) umfasst, die jeweils durch eine der Zeilen (bzw. der Spalten) der Matrix (10) gespeist
werden.
3. Modul zum Dekodieren nach Anspruch 1, wobei die Speichermittel für die zu dekodierenden
Daten in Form einer Matrix (10) organisiert sind, welche n1 Zeilen aufweist, von denen k1 jeweils ein Codewort der erwähnten Elementarcodes enthalten sowie n2 Spalten, von denen k2 jeweils ein Codewort der erwähnten Elementarcodes enthalten,
dadurch gekennzeichnet, dass es k1 (bzw. n2) Elementardecoder (821 bis 82m, 1121 bis 112m) umfasst, die jeweils durch eine der Zeilen (bzw. der Spalten) der Matrix (10) gespeist
werden.
4. Modul zum Dekodieren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass die Speichermittel (81, 83, 90, 111, 113) so organisiert sind, dass sie den gleichzeitigen
Zugang zu mindestens zwei elementaren Codewörtern gestatten.
5. Modul zum Dekodieren nach Anspruch 4, dadurch gekennzeichnet, dass es sich bei den Speichermitteln (81, 83, 90, 111, 113) um RAM-Speicher mit nur einem
Port handelt.
6. Modul zum Dekodieren nach einem der Ansprüche 4 oder 5,
dadurch gekennzeichnet, dass jedes der Fächer (105) der Speichermittel (81, 83, 90, 111, 113), die jeweils eine
einzige Adresse besitzen,
m·l Elementardaten (101, 102, 103, 104) umfasst, welche die gleichzeitige Zufuhr zu den
folgenden Teilen ermöglichen:
- m Elementardecoder nach einer der Zeilen gemäß einem der Ansprüche 2 oder 3 und/oder,
- l Elementardecoder nach einer der Spalten gemäß einem der Ansprüche 2 oder 3,
wobei
m und
l ganze Zahlen sind, die streng größer als 1 sind.
7. Modul zum Dekodieren nach einem der Ansprüche 4 bis 6, dadurch gekennzeichnet, dass die gleichzeitig zugänglichen Wörter nebeneinander liegenden Zeilen und/oder Spalten
einer Ausgangsmatrix (10) mit n1 Zeilen und n2 Spalten entsprechen, wobei jede der nebeneinander liegenden Zeilen und/oder Spalten
ein elementares Codewort enthalten.
8. Modul nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, dass es sich bei den Elementarcodes um denselben Code C handelt.
9. Modul zum Dekodieren nach einem der Ansprüche 1 bis 8, dadurch gekennzeichnet, dass es mindestens zwei elementare Dekodieroperationen durchführt.
10. Modul zum Dekodieren nach einem der Ansprüche 1 bis 9, dadurch gekennzeichnet, dass der verkettete Code ein in Serie verketteter Code ist.
11. Modul zum Dekodieren nach einem der Ansprüche 1 bis 10, dadurch gekennzeichnet, dass der verkettete Code ein parallel verketteter Code ist.
12. Vorrichtung zum Dekodieren eines verketteten Codes, dadurch gekennzeichnet, dass sie mindestens zwei Module nach einem der Ansprüche 1 bis 11 einsetzt, wobei diese
Module in Kaskade angebracht sind und jeweils eine elementare Dekodieroperation ausführen.
13. Verfahren zum Dekodieren eines zwei Elementarcodes entsprechenden verketteten Codes,
dadurch gekennzeichnet, dass es mindestens zwei gleichzeitige Schritte zum elementaren Dekodieren von mindestens
einem der erwähnten Elementarcodes umfasst, die von denselben Speichermitteln (81,
83, 90, 111, 113) versorgt werden, und dadurch,
dass die Speichermittel nach Fächern organisiert sind, so dass der Zugang zu einer
einzigen Adresse der Speichermittel (81, 83, 90, 111, 113) den Zugang zu mindestens
zwei einem elementaren Codewort entsprechenden Elementardaten zulässt, um gleichzeitig
mindestens zwei der Schritte zum elementaren Dekodieren zu versorgen.
14. Dekodierverfahren nach Anspruch 13, dadurch gekennzeichnet, dass es iterativ ist.
15. Dekodierverfahren nach einem der Ansprüche 13 oder 14, dadurch gekennzeichnet, dass es sich bei mindestens einigen der verarbeiteten Daten um gewichtete Daten handelt.
1. Module for decoding a concatenated code, corresponding to at least two elementary
codes,
of the type implementing storage means in which data samples to be decoded are stored,
characterized in that it comprises at least two elementary decoders (821 to 82m, 1121 to 112m) of at least one of the said elementary codes, the said elementary decoders (821 to 82m, 1121 to 112m) being associated with one of the said elementary codes carrying out the simultaneous
processing, in parallel, of the separate code words contained in the said storage
means (81, 83, 90, 111, 113) and
in that the said storage means (81, 83, 90, 111, 113) are organized in cells (105), each
having a unique address and each containing at least two elementary data items (101,
102, 103, 104) corresponding to an elementary code word.
2. Decoding module according to Claim 1, the said storage means storing the said data
to be encoded being organized in the form of a matrix (10) of n1 rows, each containing a code word of the said elementary codes, and n2 columns, each containing a code word of the said elementary codes,
characterized in that it comprises n1 (and n2 respectively) elementary decoders (821 to 82m, 1121 to 112m), each supplied by one of the said rows (or columns respectively) of the said matrix
(10).
3. Decoding module according to Claim 1, the said storage means storing the said data
to be encoded being organized in the form of a matrix (10) of n1 rows, including k1 rows each containing a code word of the said elementary codes, and n2 columns, including k2 columns each containing a code word of the said elementary codes,
characterized in that it comprises k1 (and k2 respectively) elementary decoders (821 to 82m, 1121 to 112m), each supplied by one of the said rows (or columns respectively) of the said matrix
(10).
4. Decoding means according to any one of Claims 1 to 3, characterized in that the said storage means (81, 83, 90, 111, 113) are organized in such a way as to permit
simultaneous access to at least two elementary code words.
5. Decoding module according to Claim 4, characterized in that the said storage means (81, 83, 90, 111, 113) are of the single-port RAM type.
6. Decoding module according to any one of Claims 4 and 5,
characterized in that each said cell (105) of the said storage means (81, 83, 90, 111, 113), each having
a unique address, contains
m.l elementary data items (101, 102, 103, 104), permitting a simultaneous supply to be
made to:
- m elementary decoders along the said rows according to any one of Claims 2 and 3; and/or
- l elementary decoders along the said columns according to any one of Claims 2 and 3;
m and
l being integers which are greater than 1 in all cases.
7. Decoding module according to any one of Claims 4 to 6, characterized in that the said simultaneously accessible words correspond to adjacent rows and/or adjacent
columns of an initial matrix (10) with n1 rows and n2 columns, each of the adjacent rows and/or columns containing an elementary code word.
8. Module according to any one of Claims 1 to 7, characterized in that the said elementary codes are the same C code.
9. Decoding module according to any one of Claims 1 to 8, characterized in that it carries out at least two elementary decoding operations.
10. Decoding module according to any one of Claims 1 to 9, characterized in that the said concatenated code is a serial concatenated code.
11. Decoding module according to any one of Claims 1 to 10, characterized in that the said concatenated code is a parallel concatenated code.
12. Device for decoding a concatenated code, characterized in that it implements at least two modules according to any one of Claims 1 to 11, mounted
in cascade and each carrying out an elementary decoding operation.
13. Method for decoding a concatenated code, corresponding to two elementary codes,
characterized in that it comprises at least two simultaneous steps for the elementary decoding of at least
one of the said elementary codes, supplied by the same storage means (81, 83, 90,
111, 113); and
in that the said storage means are organized in cells in such a way that access to a unique
address of the said storage means (81, 83, 90, 111, 113) gives access to at least
two elementary data items corresponding to an elementary code word in such a way as
to supply simultaneously at least two of the said elementary decoding steps.
14. Decoding method according to Claim 13, characterized in that it is iterative.
15. Decoding method according to any one of Claims 13 and 14, characterized in that at least some of the processed data are weighted.