"Décodeur numérique pour système de transmission numérique sans fil utilisant un code spatio-temporel linéaire."
La présente invention se rapporte à un décodeur numérique d'une chaîne de transmission numérique sans fil multi-antennaires à l'émission et à la réception. Ce décodeur numérique est destiné à déterminer des symboles émis dans des signaux d'émission à codage spatio-temporel linéaire sur une base de codage binaire convolutif. L'invention trouve une application particulièrement intéressante dans le domaine de la transmission ou de la diffusion radio de données numériques, notamment dans le cas de transmission avec les mobiles ou bien de façon plus générale, dans le cas de réseaux sans fil locaux ou non. D'une manière plus précise, l'invention s'applique avantageusement dans le cadre de la norme IEEE 802.11a et
IEEE 802.11g lorsque à l'émission, le signal a subit un codage spatio-temporel linéaire sur une base de codage binaire. Pour rappel, la norme précise uniquement un codage binaire.
D'une manière générale, les systèmes combinant la multiplicité d'antennes à l'émission et à la réception, ou systèmes MIMO (Multiple-Input Multiple-output) , permettent d'augmenter la capacité et la fiabilité des chaînes de transmissions notamment par utilisation de codage spatio¬ temporel. Ce codage spatio-temporel permet de transmettre des symboles successifs via la pluralité d'antennes à l'émission. A la réception, il existe de nombreux détecteurs mettant en œuvre des algorithmes de réception, tels que notamment des récepteurs linéaires basés sur le critère de forçage à zéro ou la minimisation de l'erreur quadratique moyenne. La présente invention concerne plutôt les algorithmes basés sur le maximum de vraisemblance . qui autorisent des meilleures performances en terme de taux d'erreur. Cependant, les récepteurs standards basés sur un
— ? — tel algorithme présentent une grande complexité de conception.
La présente invention a donc pour but un nouveau décodeur numérique très performant, en particulier rapide et compact, pour lequel la conception est simplifiée. On atteint au moins l'un des buts précités avec un décodeur numérique d'une chaîne de transmission numérique sans fil multi-antennaires à l'émission et à la réception. Ce décodeur numérique est apte à déterminer des symboles émis dans des signaux d'émission à codage spatio-temporel linéaire sur une base de codage binaire convolutif. Il est alimenté par : un vecteur signal Z de symboles reçus, une matrice C résultant du produit entre une matrice H du canal de transmission et une matrice N de codage spatio-temporel à l'émission.
Selon l'invention, ce décodeur numérique comprend en combinaison : un décodeur spatio-temporel exhaustif pour calculer la métrique entre chaque mot de code possible et le vecteur signal Z de symboles reçus, et un décodeur binaire pour déterminer, en utilisant lesdites métriques comme des probabilités de transitions entre des états du décodeur binaire, le chemin le plus probable parcouru lors du codage convolutif, et d'en déduire les symboles émis.
Un décodeur est dit "exhaustif" losqu' il traite tous les mots de codes possibles.
Avec le système selon l'invention, on combine un décodeur espace-temps avec un décodeur binaire, le décodeur binaire étant adapté en fonction du nombre et du codage des métriques calculées au sein du décodeur espace-temps.
Bien entendu, à l'émission, un codeur binaire réalise un codage spatio-temporel linéaire adapté au décideur numérique selon la présente invention. De préférence, le codage binaire convolutif comporte 64 états .
Selon une caractéristique avantageuse de l'invention, le décodeur spatio-temporel comprend des moyens pour calculer l'ensemble des métriques par groupes successifs, les métriques de chaque groupe étant calculées en parallèle puis envoyées en parallèle vers le décodeur binaire à chaque cycle d'horloge. Le décodeur spatio-temporel présente ainsi une architecture en pipeline. Cette architecture permet de garantir des performances optimales à chaque instant et un fonctionnement en temps réel sans mise en mémoire tampon. A titre d'exemple, lorsque chaque mot de code possible comprend huit bits (bobib2b3b4b5b5b7) , les 256 métriques possibles sont déterminées en calculant seize groupes de seize métriques, chacune selon la définition suivante
(Définition d'une distance euclidiene) :
métrique
∑ Z
j-∑l(-ï)
bu-
2+K-ιγ
u-]c
Jk
7=1 4=1
Avantageusement, pour calculer les métriques, le décodeur spatio-temporel comprend : quatre modules identiques nommés "Diff-compo" pour calculer en parallèle et de façon séquentielle quatre valeurs Dj définies par :
DjiState)=Cj1Il-If*+i(-lp)+C.2((-lf^+1(-Ip)-Z,,;<={1,2,3,4}, avec State≈(bobχb2b3) ; seize modules nommés "Bitslice" pour calculer en parallèle et de façon séquentielle seize métriques, chaque métrique étant alors définie par :
4 _ _ 2
M X (State) = ∑ I Dj (State)+Cj3 ((-1)*° +i(-i)χi )+Cj4 ((-1)X* +i(-i)χ3 )
J= avec
X étant égal à (b4bsb6b7) . Par ailleurs X indexe chaque module "Bitslice". Le fait d'effectuer les calculs en pipeline par groupes de 16x16 notamment, permet un meilleur compromis taille/puissance.
De préférence, le décodeur spatio-temporel comprend en outre un contrôleur pour gérer la synchronisation entre le décodeur spatio-temporel et le décodeur binaire, et pour générer le signal State. Pour ce faire, le contrôleur utilise un signal d'horloge.
Selon un mode de réalisation préféré de l'invention, le décodeur binaire est implémenté selon un algorithme de Viterbi à entrée souple et sortie dure. On réalise ainsi un assemblage entre un décodeur espace-temps exhaustif et un décodeur de Viterbi adapté. Selon l'invention, ce décodeur binaire peut comprendre un module de gestion des métriques pour recevoir en continue l'ensemble des métriques issues du décodeur spatio-temporel, mémoriser ces métriques, et en extraire des décisions préliminaires. Par ailleurs, le décodeur binaire comprend en outre un module de gestion des décisions pour recevoir lesdites décisions préliminaires, mémoriser ces décisions préliminaires, et en déduire des décisions finales de décodage. Alors que de façon habituelle, le décodeur de Viterbi est utilisé pour prendre des décisions sur l'ensemble des symboles reçus, ici dans le décodeur numérique selon l'invention, le décodeur spatio-temporel fait une partie du travail en déterminant les métriques possibles à partir desquelles le décodeur de Viterbi va prendre ces décisions, ce qui limite les calculs, donc améliore la vitesse de traitement.
Avantageusement, le décodeur numérique selon l'invention peut être implémenté sur un circuit intégré programmable de type FPGA, les calculs étant exécutés de façon synchrone au moyen de registres. Les différents modules du décodeur numérique sont donc intégrés dans une architecture matricielle.
Le décodeur numérique selon l'invention est de préférence adapté pour une chaîne de transmission comprenant deux antennes à l'émission et deux antennes à la réception et pour une vitesse de transmission de 24Mbits par seconde.
o D'autres particularités et avantages de l'invention apparaîtront encore dans la description ci-après. Aux dessins annexés donnés à titre d'exemples non limitatifs: la figure 1 est une vue schématique générale d'une chaîne de transmission numérique sans fil selon 1' invention; la figure 2 est une vue schématique générale d'un décodeur numérique selon l'invention, la figure 3 est une vue schématique d'un décodeur spatio-temporel intégré au sein du décodeur numérique selon 1' invention; la figure 4 est une autre vue schématique simplifiée du décodeur spatio-temporel faisant apparaître un diagramme des timings des calculs; - la figure 5 est une vue schématique interne du module "Diff_compo" de la figure 3; la figure 6 est une vue schématique interne du module "Bitslice" de la figure 3; les figures 7 et 8 sont des vues schématiques internes des blocs de calcul des parties réelle et imaginaire respectivement d'une composée A dans le module "Bitslice"; la figure 9 est une vue schématique de l'architecture générale du décodeur binaire intégré dans le décodeur numérique selon l'invention; la figure 10 est une vue schématique interne du module de gestion des métriques au sein du décodeur binaire; la figure 11 est une vue schématique interne d'un module d'état Ei du module de gestion des métriques; et - la figure 12 est une vue schématique interne du module de gestion des décisions au sein du décodeur binaire.
On va maintenant décrire un décodeur numérique d'une chaîne de transmission numérique sans fil utilisant un code spatio-temporel linéaire 2x2 sur une base de codage binaire QPSK ("Quaternary Phase Shift Keying" en langue anglaise, pour modulation à déplacement de phase à 4 états) . Ce codage
est défini comme une fonction F de deux bits F(bO, bl) =
(-l)b0+ i. (-l)bl,
Toutefois, d'autres formes de codage telles que 16QAM ou 64QAM peuvent être utilisées.
La chaîne de transmission est basée sur la norme IEEE 802.11a avec deux antennes à l'émission et deux antennes à la réception. Le code convolutif utilisé est celui défini par la norme. Sur la figure 1, on voit une telle chaîne de transmission selon l'invention. Le signal à transmettre alimente, sous forme binaire série, un codeur binaire 2 contenu dans un émetteur 1. Ce signal est ensuite codé par le codeur spatio-temporel 3, puis modulé par les modulateurs 4, 5 avant d'être transmis par les deux antennes d'émission 6 et 7. La modulation peut être du type OFDM ("Orthogonal Frequency Division Multiplex" en langue anglaise) . A la réception, les deux antennes 8 et 9 transmettent les signaux captés vers deux démodulateurs OFDM respectivement 11 et 12. Le décodeur numérique 13 selon l'invention récupère l'ensemble des signaux provenant des démodulateurs 11 et 12, les traite de façon à retrouver le signal binaire série d'origine.
D'une façon générale, la structure du codage spatio¬ temporel est de la forme suivante :
Temps1 Temps2
Antenne 1 Y1(S11S21S31S4) Y2(S11S21S31S4) Antenne 2 Ya(Si1S21S31S4) Y4(S11S21S31S4^
Avec les Yj fonctions linéaires complexes des (Si, S2, S3, S4) , symboles QPSK.
"SiHbobi
On écrit alors les symboles Yj envoyés sous la forme d'un vecteur colonne :
- 1 ~
Avec N une matrice 4x4 dérivée du code spatio-temporel. Les symboles reçus Zj sont de la forme :
Avec H la matrice 4x4 de canal et w le bruit. Soit C la matrice 4
χ4 telle que C=HN. Les matrices Z et C sont les données d'entrée du décodeur numérique 13. On cherche à retrouver les symboles S
1, S
2, S
3 et S
4, soit huit bits
(b0bib2b3b4b5b6b7) à déterminer, donc 256 (28) mots de code possibles.
Sur la figure 2 on voit le schéma général du décodeur numérique qui reçoit en entrée les coefficients complexes de la matrice C tenant compte des déformations du canal de transmission, ainsi que les symboles reçus Z. En sortie, le décodeur numérique fournit un flux binaire en série des données décodées. Il comporte deux modules de traitement organisés séquentiellement :
- le décodeur Spatio-temporel (ST) 14 qui se charge de calculer des métriques 16 entre les 256 mots de code possibles et les symboles reçus,
— le décodeur binaire 15 qui déduit à partir des métriques calculées le chemin le plus probable parcouru lors du codage convolutif.
A partir du symbole reçu et des coefficients C, le décodeur ST 14 calcule les 256 métriques par groupe de seize. Chaque groupe de seize métriques est envoyé au bloc de décodage binaire 15. La sortie du décodeur binaire est un flux de bits décodés en série.
Le principe du décodeur spatio-temporel 14 est tel qu'illustré sur les figures 3 et 4. Plus précisément, il se présente de la manière suivante : il s'agit de calculer pour chacune des combinaisons des huit bits (bobib2b3b4b5b6b7) la métrique définie par l'équation suivante :
Ces 256 métriques sont calculées en pipeline seize états de seize calculs parallèles, c'est à dire qu'à chaque cycle d'horloge, on calcule simultanément seize métriques.
Pour ce faire, on définit alors une variable "State" =
(Si, S2) = (bobib2b3) comme étant l'état du pipeline et une variable "X" = (b4bsb6b7) comme étant l'indice du calcul parallèle. Cette définition de variables permet une ségrégation entre les éléments utilisant les coefficients Cj3, Cj4 et dépendants de X (S3 et S4) , et les autres éléments utilisant Cj1, Cj2 avec State (Si et S2) . Ainsi, dans le calcul des métriques, les membres faisant intervenir des éléments Cji, Cj2 et qui sont indépendant de S3 et S4, sont calculés hors du pipeline et s'expriment sous la forme :
D1(St3Ie)=C,((-if^+i(-i)^)+Cj2((-i)^+i(-Ip1J-Z1Je{1,2,3,4}
Les quatre valeurs Dj sont calculées par quatre modules 17 identiques, nommés "Diff_compo" . Ensuite, le pipeline est constitué par seize modules 18 nommés "Bitslice" pour calculer seize métriques en parallèle de façon synchrone. Chaque module Bitslice 18 reçoit les quatre valeurs Dj ainsi que les quatre valeurs Cj3 et les quatre valeurs Cj4. X permet d'indexer chaque module Bitslice 18. Le calcul de la métrique Mx est le suivant :
Λ
M, (State) = ∑ Dj(State)+Cj3((-i)χo+i(-ifi)+Cj4((-i)χ2+i(-i)χ3
l'
Ce calcul est effectué en cinq étapes successives, comme on peut le voir notamment sur la figure 4 avec les blocs 19 à 23 :
- calcul 19 de la composée A des Cj3 et Cj4, en fonction de X,
- somme 20 de Oj et des résultats précédents,
- calcul 21 de la valeur absolue de cette somme,
- élévation 22 au carré de la valeur absolue précédente, et - série 23 de sommes pour déterminer la métrique.
Ce découpage de calcul selon les valeurs "X" et "State" permet un gain de place lors de implémentation matérielle.
Sur la figure 3, on distingue également un contrôleur
19 destiné à gérer la synchronisation avec le décodeur binaire 15 et à transmettre le signal "State" vers les quatre modules identiques "Diff_compo" 17 utilisant des données d'entrée différentes. Un module "Diff_compo" est représenté plus en détail sur la figure 5. Les calculs sont effectués de façon synchrone au moyen des signaux de commande CE (pour "Clock Enable"), en l'occurrence CEi et CE2, transmis par le contrôleur 19 vers des registres 24 et 25 disposés en amont et en aval des modules réalisant la fonction d'addition. En fonction de la variable d'entrée "State", le module "Diff_compo" génère une partie réelle et une partie imaginaire de Dj .
Le pipeline est composé de seize modules "Bitslice" 18 prévus pour effectuer séquentiellement seize calculs de métriques. Chaque module "Bitslice" est donc instancié seize fois pour un total de 256 métriques, et reçoit un indice "X" . Cet indice paramètre les calculs internes de chaque module qui reçoit en entrée les coefficients Cj3 et Cj4 ainsi que les fonctions Dj (State) fournies par les modules "Diff_Compo" 17.
Sur la figure 6 est représenté un module "Bitslice" comprenant en fait quatre sous-modules "Bitslice_0", "Bitslice_l", "Bitslice_2", et "Bitslice_3" alimentés par Dj,
C-3 et C34, j allant de 1 à 4. Chaque sous-module génère une partie réelle I31 et une partie imaginaire I32 en fonction de l'indice X qui lui est fourni de la manière suivante :
I1,=<R(C)3((-if+i(-if)+C,4((-if+i(-ifJ+D1(SW.))1
I12=s(c,3((-if+i(-if)+cX-ψ+i(-if)+D,(State))f Conformément à la figure 4, ces calculs font intervenir le module 19 de calcul d'une composée A des coefficients C33 et C-,4 en fonction du paramètre X, l'additionneur 20, le module de valeur absolue 21 et l'élévation au carré 22. Les figures 7 et 8 montrent respectivement le calcul de la partie réelle et imaginaire de la composée A définie de la manière suivante :
ψ, ) = (- if 5R(C,3 )+ (- if13(c,3 )+ (- if* κ{cj4 )+ (- i)x> z(cj4 )
φJ=(-lfsR(cy3)+(-lF3(c,3)+(-l)^^4)+(-1^3(cy4)
Les huit valeurs I3i et I32 ainsi calculées sont ensuite introduites dans le bloc 23 qui consiste en une série de sept sommes synchrones entre deux coefficients réparties de façon pyramidale sur trois étages de pipeline. Le temps de traversée de ce bloc est de trois cycles d'horloge.
La figure 4 illustre le diagramme des timings de calcul au sein du décodeur spatio-temporel 14. Chaque bloc 17, 19- 23, représente une fonction effectuée. La longueur de chaque bloc indique la durée de traversée de celui-ci. Chaque flèche pointillée verticale (CE_Calci, CE_Calc2, CE_Add, CE_Abs, CE_Square, CE_Square_2, CE_sum, CE_sum_2, CE_sum_3) représente un cycle d'horloge. Le temps de traversée global du bloc de décodage ST est de 9 cycles d'horloge. Les 256 métriques calculées par le décodeur spatio¬ temporel 14 sont ensuite envoyées de façon séquentielle en seize paquets de seize vers le décodeur binaire 15. Ce dernier met en œuvre un algorithme de Viterbi a entrée
souple et sortie dure. Le codeur binaire correspondant est celui spécifié par la norme IEEE 802.11a. Seul le rendement H est utilisé.
D'une façon générale, l'encodeur convolutif défini par la norme IEEE 802.11a utilise un codage d'état à six bits.
Il existe donc 64 états possibles pour le codage. Le décodeur binaire comporte donc également 64 états. Pour le décodage, on prend en considération les bits de transition par groupe de quatre (correspondant à huit bits codés et donc à 256 mots de code différents) . Les bits de transition sont des bits fournis au codeur convolutif afin de passer d'un état du treillis à un autre. Ils sont regroupés par groupes de quatre selon l'invention.
Il existe donc pour chacun des 64 états seize transitions possibles. Chacun de ces états sélectionne à chaque cycle de décision la transition la plus probable. Les décisions prises par l'ensemble des états sont mémorisées et le chemin minimisant les métriques est remonté. Les transitions empruntées lors de cette remontée constituent le message décodé.
Par conséquent, le décodeur binaire 15 réalise deux fonctions complémentaires selon l'invention :
Gestion des métriques : il s'agit de récupérer en continu le flot de 16*16 métriques issues du décodeur ST 14, de les mémoriser et d'en extraire des décisions;
Gestion des décisions : il s'agit de réceptionner les décisions prises précédemment, les mémoriser et d'en déduire le chemin le plus probable; ce module prend également les décisions finales de décodage et fourni en sortie un flux binaire série de bits décodés.
Sur la figure 9, on voit que le module 26 de gestion des métriques reçoit les 256 métriques par groupe de seize, et génère 64 décisions préliminaires vers le module 27 de gestion des décisions qui génère à son tour un flux binaire série de bits décodés.
Sur la figure 10, on voit l'architecture interne du module 26. Chacun des 64 modules d'états EO,..., E63, reçoit seize métriques telles que prédéfinies dans le module 28 dit de "mapping" . L'homme du métier connaissant l'algorithme de Viterbi saura aisément constituer un "mapping" ou câblage permettant de diriger oies métriques arrivant du décodeur spatio-temporel vers les modules d'états Ei correpondants. En fait, chaque métrique est dirigée vers un module d'état Ei donné en fonction de la valeur de la variable "State". Ces métriques sont utilisées comme probabilité de transition et sont dénommées métriques de branche.
Chaque module d'état EO,..., E63 fonctionne par période de seize cycles d'horloge. Lors de chaque période, conformément à la figure 11, il effectue simultanément les deux opérations suivantes :
Stockage, dans une mémoire RAM 30, des seize métriques de branche, une par cycle d'horloge, qui lui sont fournies en entrée; chargement, une à une dans un ordre défini par le numéro de l'état que chaque module d'état Ei représente, des métriques de branche stockées lors de la période précédente; chacune de ces métriques étant additionnée à une métrique de nœud fournie en entrée (entrée « Métriques de nœud cumulées » sur la figure 11) . A la fin de la période, et pendant l'intégralité de la période suivante, le module en question fournit en sortie la valeur et l'indice (numéro du cycle de 0 à 15) correspondant à la plus petite des sommes calculées lors de la période passée. En fait, pour l'ordre de changement, pour chaque état, on code son indice (de 0 à 63) en binaire. Des équations selon l'algorithme de Viterbi donnent à partir du code binaire généré l'ordre dans lequel les métriques doivent être lues. Cet ordre tient compte de l'ordre dans lequel les métriques ont été calculées dans le décodeur spatio-temporel. Pour le calcul des sommes, chaque module d'état EO,..., E63 utilise les valeurs fournies en série sur l'entrée
« Métriques de nœud cumulées ». Ces valeurs représentent les métriques de nœud 33 issues des modules d'état EO à E63 lors de la période précédente. Elles sont stockées puis distribuées d'une manière prédéfinie au sein du module 29 dit de "mapping" de métriques de nœud, voir figure 10. L'homme du métier comprendra aisément que ce second "mapping" 29 se déduit du "mapping" 28 selon l'algorithme de Viterbi. La numérotation des cycles au sein d'une période est effectuée en utilisant la variable "State" en entrée de chaque module d'état EO,..., E63. Un contrôleur 31 sur la figure 11 gère la synchronisation des opérations et fournit à la fin de chaque cycle de décision une métrique cumulée dite métrique préliminaire.
Le module 27 de gestion des décisions de la figure 9 est illustré plus en détail sur la figure 12. Ce module reçoit à chaque cycle de décision 64 métriques préliminaires qui constituent des indices de transitions. Ces vecteurs de décisions sont stockés en mémoire 34. Les deux blocs "Trace_Back" 35 et 36 sont chargés de parcourir la mémoire 34 dans le sens inverse de celui d'écriture afin de remonter les chemins les plus probables. Lorsqu'il y a convergence, les informations récoltées par les blocs 35 et 36 sont transmises vers un bloc 37 dit de "Decodage__Inversé" qui se charge de remettre les décisions sélectionnées dans l'ordre chronologique et de passer en série les bits décodés vers la sortie. Un contrôleur 38 gère la mémoire 34 et le module de sortie 37.
Bien sûr, l'invention n'est pas limitée aux exemples qui viennent d'être décrits et de nombreux aménagements peuvent être apportés à ces exemples sans sortir du cadre de 1'invention.