FR 2860360 A1 20050401 FR 0311365 A 20030929 2860360 1 La présente invention concerne les systèmes de communication ou d'enregistrement de données dans lesquels, afin d'améliorer la fidélité de la transmission ou du stockage, on soumet les données à un codage de canal. L'invention concerne plus particulièrement la mise en oeuvre pratique des codes linéaires définis sur un corps de Galois, des codes de Reed-Solomon généralisés, et des codes de géométrie algébrique. Le problème technique général est l'obtention d'algorithmes moins complexes, la complexité étant définie ici soit comme le nombre d'opérations à effectuer lorsque le calcul est mis en oeuvre suivant un programme, soit comme le nombre de portes logiques utilisées lors du calcul par un circuit intégré. La première réduction nécessite une mise en parallèle des circuits et donc une augmentation du nombre de portes, la seconde réduction engendre souvent une augmentation du temps total de traitement. L'accent est mis ici sur la réduction de la complexité en nombre de portes, car le problème prédominant à l'heure actuelle sur les disques durs est le coût par unité de stockage, le disque dur étant un objet de consommation de masse. Il s'agit notamment de trouver le dispositif le plus efficace pour cela; par efficacité , on entendra essentiellement, dans le cadre de l'invention, le fait de requérir un nombre de composants matériels aussi faible que possible; le cas échéant, on envisagera néanmoins des moyens pour accélérer les calculs, au prix d'une faible augmentation du nombre de composants matériels. On rappelle que le codage de canal dit en blocs consiste, quand on forme les mots de code envoyés à un récepteur ou enregistrés sur un support de données, à introduire une certaine redondance dans les données. Plus précisément, on transmet, au moyen de chaque mot de code, l'information initialement contenue dans un nombre prédéterminé k de symboles prélevés dans un alphabet de taille finie q; on calcule à partir de ces k symboles d'information un nombre n > k de symboles appartenant à cet alphabet, qui constituent les composantes des mots de code: (le symbole signifie par définition ). L'ensemble des mots de code obtenus quand chaque symbole d'information prend une valeur quelconque dans l'alphabet, constitue une sorte de dictionnaire appelé code de dimension k et de longueur n. Lorsque la taille q de l'alphabet est une puissance d'un nombre premier, on peut donner à cet alphabet une structure de corps, dit corps de 5 Galois , noté Fq, dont les éléments non-nuls peuvent être commodément identifiés comme étant chacun égal à yi-1 pour une valeur correspondante de i, où i = 1, ..., q - 1, et où y est une racine (q -1)ème primitive de l'unité dans Fq. En particulier, certains codes, appelés codes linéaires , sont tels que toute combinaison linéaire de mots de code (avec les coefficients pris dans l'alphabet) est encore un mot de code. Ces codes peuvent, de façon commode, être associés à une matrice H de dimension (n - k)x n, dite matrice de parité : un mot v de longueur n donné est un mot de code si, et seulement si, il vérifie la relation: H É vT = 0 (où l'exposant T indique la transposition) ; on dit alors que le code est orthogonal à cette matrice H. Au niveau du récepteur, le procédé de décodage associé exploite alors judicieusement cette redondance pour détecter d'éventuelles erreurs de transmission et si possible les corriger. Il y a erreur de transmission si la différence e entre un mot reçu r et le mot de code v correspondant envoyé par l'émetteur, est non-nulle. Plus précisément, le décodage se fait en deux étapes principales. La première étape consiste à associer au mot reçu un mot de code associé . Pour ce faire, le décodeur calcule d'abord le vecteur de syndromes d'erreurs H É rT = H. eT. Si les syndromes sont tous nuls, on supposera qu'il n'y a pas eu d'erreur de transmission, et le mot de code associé sera alors simplement pris égal au mot reçu. Si ce n'est pas le cas, on en déduit que certains symboles dans le mot reçu sont erronés, et l'on met alors en oeuvre un algorithme de correction destiné à estimer la valeur de l'erreur e; l'algorithme va ainsi fournir une valeur estimée ê de manière à ce que (r - ê) soit un mot de code, qui constituera alors le mot de code associé. La seconde étape consiste simplement à inverser le procédé de codage. Dans la situation idéale où toutes les erreurs de transmission ont été corrigées, on retrouve ainsi les symboles d'information initiaux. Un algorithme de correction d'erreurs a pour tâche d'associer au mot reçu le mot de code situé à la distance de Hamming la plus courte de ce mot reçu, la distance de Hamming étant, par définition, le nombre d'emplacements où deux mots de même longueur possèdent un symbole différent. On appelle distance minimale d d'un code la plus petite distance de Hamming entre deux mots différents de ce code. C'est un paramètre important du code. Plus précisément, il est en principe possible de trouver la position des erreurs éventuelles dans un mot reçu, et de fournir le symbole de remplacement correct (c'est-à-dire, identique à celui envoyé par l'émetteur) pour chacune de ces positions, chaque fois que le nombre de positions erronées est au plus égal à INT[(d-1)12] (où INT désigne la partie entière) pour un code de distance minimale d (pour certaines configurations d'erreurs, on peut même parfois faire mieux). Dans tous les cas toutefois, il ne s'agit que d'une possibilité de principe, car il est souvent difficile de mettre au point un algorithme de décodage atteignant cette performance. On notera également que, lorsque l'algorithme choisi parvient à proposer une correction pour le mot reçu, cette correction est d'autant plus fiable (du moins, pour la plupart des canaux de transmission) qu'elle concerne un plus petit nombre de positions. Parmi les codes connus, on peut citer les codes dits de Reed-Solomon , qui sont réputés pour leur efficacité, et auxquels la présente invention fera abondamment référence. Ce sont des codes linéaires dont la distance minimale d est égale à (n k +1). La matrice de parité H du code de ReedSolomon de dimension k et de longueur n (où n est nécessairement égal à (q 1) ou un diviseur de (q -1)) est une matrice à (n k) lignes et à n colonnes, qui a la structure d'une matrice de Vandermonde. Cette matrice de parité H peut être définie par exemple en prenant Hu= a(+l)J (0 i n k -1, 0 s j n l), où a est une racine n eme de l'unité dans Fq. Parmi les algorithmes connus pour coder, au moyen d'un code de ReedSolomon, une séquence a= (ao,a1, ...,ak_1) de symboles d'information appartenant à Fq, certains utilisent cette matrice de parité H. Dans ces algorithmes, on choisit une certaine relation entre les symboles d'information et ceux du mot de code correspondant v_ (par exemple v, = a; pour 0 k -1; dans ce cas, on dit que le codage est systématique ). Puis on calcule les 5 composantes de v restant à déterminer d'après l'équation matricielle H É vT = 0: il faut donc résoudre (n k) équations linéaires sur F Pour le décodage des codes de Reed-Solomon, on utilise habituellement un algorithme dit de Berlekamp-Massey pour la détection des positions erronées dans un mot reçu, et un algorithme dit de Forney pour la correction des symboles erronés correspondants. Pour plus de détails sur les codes de Reed-Solomon, on pourra se référer par exemple à l'ouvrage de R.E. Blahut intitulé Theory and practice of error-control codes , Addison-Wesley, Reading, Mass.,1983. Dans les supports d'information modernes, par exemple dans les disques durs d'ordinateurs, les CD ( compact discs ) ou encore les DVD ( digital video discs ), on cherche à accroître la densité d'information. Quand un tel support est affecté par un défaut physique tel qu'une éraflure, un nombre important de symboles d'information peuvent être rendus illisibles. On peut toutefois remédier à ce problème en utilisant un code de très grande longueur. Or les codes de Reed-Solomon présentent la particularité que la longueur n des mots de code est nécessairement inférieure ou égale à la taille q de l'alphabet des symboles. Par conséquent, si l'on souhaite disposer d'un code de Reed- Solomon ayant des mots de code de grande longueur, on doit envisager de grandes valeurs de q, ce qui conduit à des mises en oeuvre coûteuses au niveau des calculs et de la mémorisation. De plus, de grandes valeurs de q sont parfois inadaptées à l'application technique envisagée. C'est pourquoi l'on a cherché à construire des codes offrant de manière naturelle une plus grande longueur de mots que les codes de Reed-Solomon. On a notamment proposé récemment des codes dits codes de géométrie algébrique ou codes de Goppa géométriques (voir par exemple a. Algebraic Geometric Codes , par J.H. van Lint, dans Coding Theory and Design Theory , 1 ère partie, IMA Volumes Math. Appt., volume 21, Springer-Verlag, Berlin, 1990). Ces codes sont construits à partir d'un ensemble de n couples (x,y) de symboles appartenant à un corps de Galois Fq choisi; cet ensemble de couples est appelé ensemble de localisation ( locating set en anglais). On définit alors une matrice de parité telle que chaque ligne de cette matrice est obtenue en évaluant une fonction bien choisie de deux variables X et Yen chaque élément de cet ensemble de localisation. De manière générale, il existe une équation algébrique à deux inconnues X et Y telle que les couples (x,y) de cet ensemble de localisation soient tous des solutions de cette équation algébrique. Les valeurs de x et de y de ces couples peuvent être considérées comme les coordonnées de points formant une courbe algébrique . Un paramètre important d'une telle courbe est son genre g. Dans le cas particulier où la courbe est une simple droite (le genre g est alors nul), le code de géométrie algébrique se réduit à un code de Reed-Solomon. Dans certains cas, les codes de géométrie algébrique permettent d'atteindre une longueur égale à (q + 2g J), qui peut être très élevée; par exemple, avec une taille d'alphabet égale à 256 et un genre égal à 120, on obtient des mots de 20 code de longueur 4096. On notera par ailleurs que les codes de géométrie algébrique possèdent une distance minimale d supérieure ou égale à (n-k+1-g). Comme tous les codes, les codes de géométrie algébrique peuvent être raccourcis . On dit qu'un code donné est une version raccourcie du code C s'il ne comprend que les mots de C dont, pour un nombre v de positions prédéterminées (non nécessairement consécutives), les composantes sont toutes nulles: ces positions étant connues du récepteur, on peut se dispenser de les transmettre, de sorte que le code raccourci est de longueur (n v). En particulier, il est courant de raccourcir un code de géométrie algébrique en supprimant de l'ensemble de localisation, le cas échéant, un point, ou plusieurs points, dont les coordonnées x sont nulles. On va maintenant présenter un exemple de code de géométrie algébrique. Considérons donc un code de géométrie algébrique de longueur 572 et de dimension 512 défini, de manière classique, comme suit. L'alphabet des symboles est constitué par les 28 éléments du corps de 5 Galois F256 (c'est-à-dire par des octets de symboles binaires) (ce corps peut être construit à l'aide du polynôme (X8 + x4 + X3 + X2 + 1) défini sur F2). On considère alors la courbe algébrique de genre g = 12 constituée par l'ensemble des solutions dans F256 de l'équation à deux inconnues: Y4+ Y=X9+X6+X5+X2+X. Pour toute valeur prise par X dans F256, les p = 4 solutions de l'équation correspondante en Y sont elles aussi dans F256. Ces solutions (X, Y) définissent les points de la courbe associée à cette équation sur F256. Cette courbe comprend 576 points de coordonnées finies (ainsi qu'un point à l'infini P.). De cet ensemble, on supprime les quatre solutions de l'équation pour lesquelles X = 0, afin de construire un code raccourci . L'ensemble des points P1 (où j = 1,...,572) restants va donc constituer l'ensemble de localisation, chaque point P1 servant à identifier le 1ème élément de tout mot de code. Ensuite, on considère l'espace vectoriel L(mP.) de polynômes en X et Y à coefficients dans F256 dont les seuls pôles sont situés en P.., et sont d'ordre inférieur ou égal à m, où m est un entier strictement positif (il s'agit donc d'un code de géométrie algébrique dit à un point ). Cet espace vectoriel, qui est de dimension supérieure ou égale à (m-g+1) (égale si m > 2g-2), possède une base constituée par les monômes (XfYs), où r est un entier positif ou nul, s est un entier compris entre 0 et 3, et: 9s + 4r On définit classiquement une matrice de parité de la manière suivante: l'élément en ligne i et colonne j de cette matrice est égal au sème monôme de ladite base (avec 1 Les codes de géométrie algébrique sont avantageux quant à leur distance minimale et, comme on l'a dit, quant à la longueur des mots de code, mais ils présentent l'inconvénient de requérir des algorithmes de décodage assez complexes, et donc assez coûteux en termes d'équipements (logiciel et/ou matériel) et de temps de traitement. Cette complexité est en fait plus ou moins grande selon l'algorithme considéré, une plus grande complexité étant en principe le prix à payer pour accroître la capacité de correction d'erreurs du décodeur (voir par exemple l'article de Tom Hoholdt et Ruud Pellikaan intitulé On the Decoding of AlgebraicGeometric Codes , IEEE Trans. Inform. Theory, vol. 41 n 6, pages 1589 à 1614, novembre 1995). II a été récemment proposé des codes définis sur un corps de Galois Fq, où q est un entier supérieur à 2 et égal à une puissance d'un nombre premier, s'apparentant à un code de géométrie algébrique, et pour lesquels il existe des procédés de codage et/ou de décodage relativement simples grâce au fait que ces codes peuvent être ramenés à une pluralité de codes de Reed-Solomon éventuellement raccourcis. Pour ces codes, on considère un certain ensemble (XI,X2,...,XR) d'éléments distincts, préférablement non-nuls, d'un corps de Galois Fq choisi. On choisit un entier p >1 et un p-uple d'entiers (to,...,tp_1) tels que q 1> to> t1 > ... > tp-1 > 0. Ces codes sont de longueur n = pR (sauf raccourcissement), et de redondance p I n k=Eti. 1=0 On considère également un p-uple (Yo,...,Yp_1) de matrices carrées diagonales de dimension R sur Fq telles que, pour tout j (1 j R), les p éléments yi (j) en position (j,j) de ces matrices Y (1= 0,...,p l) soient différents deux à deux (sauf en cas de raccourcissement, où les valeurs yl (j) pour les positions n j raccourcies sont arbitraires). On notera que, dans le cas où les couples (xi, yl (j)) (où j =1,..., R, et l = 0,...,p -1) sont tous solutions d'une certaine équation algébrique, on peut, à partir de la valeur du genre g de la courbe algébrique, obtenir une borne inférieure (n-k+ 1 g) pour la distance minimale de ce code. Enfin, la pluralité de codes de Reed-Solomon éventuellement raccourcis mentionnée ci-dessus est associée aux matrices de parité H(t,) (l = 0,..., p -1) qui sont de la forme H(w) Xl X2 XR (1) w-1 w-1 w-1 X1 X2 ". XR - - pour tout entier strictement positif w. Cette matrice H(w) est manifestement une matrice de Vandermonde, mais elle ne correspond à un code de Reed-Solomon non raccourci que si, comme mentionné ci-dessus, le nombre de colonnes (égal à R) est égal à (q -1) ou à un diviseur de (q -1) . Plus précisément, concernant le codage de symboles d'information, 10 on forme un mot de code v=[vo El... vp I où chaque mot El (1= 0,..., p -l) est de longueur R, obéissant au système d'équations v_o + _vl + + vp 1 uo voYo + vv1Y1 + + v p-1 Yp-1 ul, voY o + vv-lY j + + v p-1Y p-1 u2, (2) oYo-1 v p-lY p 11 = u p-1 + vIYP-1 + ... + où chaque mot ul est de longueur R et est orthogonal à la matrice H(t,) , autrement dit: H(" ÉuÎ =0, pour 1=(3) On peut, si l'on veut, considérer que les mots ul sont les composantes d'un mot pré-codé u= [uo ul... u p_1] de longueur n= pR. Pour tout mot ul ou -vl (où l = 0,...,p-l), nous appellerons position-X l'entier (j-l) servant d'indice pour la?Ème composante du mot. On connaît par exemple un tel procédé d'après la demande FR-0301546. Dans ce procédé, le codage est systématique , c'est-à-dire que dans chaque mot yl, les (R t1) premiers symboles sont des symboles d'information (et un ou plusieurs zéros si le code est raccourci), tandis que les tl derniers symboles sont des symboles de redondance calculés au moyen des équations (2) et (3). Plus précisément, ce calcul des symboles de redondance 5 implique une construction progressive, en parallèle et par allers-retours, des mots u = [uo ul... u p_1] et v = [v_o v_1... _vp_1] ; on trouvera une explication détaillée de cette construction dans ladite demande FR-0301546. Il est intéressant de raccourcir le code, par exemple, lorsque l'on souhaite s'appuyer sur une équation algébrique qui ne possède pas, pour tout xj appartenant à (x1,x2,...,XR), le même nombre p > l de solutions distinctes (xi, yl (j) ). On peut, alors, attribuer la valeur zero aux composantes de vl dont la position-X (j-1) correspond à une valeur xj associée à une seule solution (xj, yl(j)) de l'équation algébrique; de même, on attribuera la valeur zéro aux composantes de v2 dont la position-X (j-1) correspond à une valeur xj associée à exactement une solution ou exactement deux solutions distinctes (xi, yl (j)) de l'équation algébrique; et ainsi de suite, jusqu'au mot vp_1, où, par conséquent, les seules composantes non-nulles seront celles dont la position-X (j-1) correspond à une valeur xj associée à p solutions distinctes (xj, yl(j)) de l'équation algébrique. De cette façon, après suppression des 20 composantes systématiquement nulles dans les mots de code y, on pourra mettre en bijection la série de composantes des mots raccourcis ainsi obtenus et la série de solutions de l'équation algébrique où X prend l'une des valeurs (XI, x2,..., XR) . Dans ce cas, pour les éléments des matrices YI (où 1= 0,..., p -1) mentionnées ci-dessus, on donnera naturellement à h( j), lorsqu'il existe une 25 solution (xi, yl (j)) de l'équation algébrique, la valeur de Y correspondante; sinon, la valeur de yl (j) importe peu. Concernant à présent le décodage, on connaît, d'après la demande FR0304767, un procédé de correction d'erreurs dans des mots reçus r = [ r(xl' y0 (1)), ..., r(xl Yp 1(1)),..., r(xR Yp 1(R)) ] , de longueur n = pR, dans lesquels certaines composantes peuvent être effacées (une composante effacée est une composante dont on a des raisons de penser que sa valeur est erronée). On dira que les composantes r(xj, yl (j)) , où j est fixé et 1 = 0,..., p -1, forment un agrégat . Selon ce procédé, on met en oeuvre les étapes suivantes: a) pour s = 0,... ,p 1: É on calcule le mot NS =[rs(xl),rs(x2),...,rs(xR)] de longueur R, dans lequel, pour j = 1,...,R, le symbole agrégé p 1 r(x) = E [y1(11 s r(xj, yl (1)) 1=0 est effacé si au moins un des symboles r(xj,Y1(j)) est lui-même effacé, et É on calcule le vecteur de syndromes d'erreurs 6s H(r,)rsT b) on essaye de calculer un mot vo = [ vo (xl), 'O (x2),..., vo (XR) ] en 15 corrigeant le mot ro d'après le vecteur de syndromes d'erreurs 6o au moyen d'un algorithme de correction d'erreurs apte à tenir compte des effacements, c) pour s =1,..., p -1: É au cas où la tentative de correction précédente a abouti, on efface pour tout x tel que vs_l (x) rs_1(x) , les symboles rf (x) pour f = s,..., p -1, et É on essaye de calculer un mot vs - [ vs (xl), vS (x2),..., vs (xR) ] en corrigeant le mot rs d'après le vecteur de syndromes d'erreurs 6s au moyen d'un algorithme de correction d'erreurs apte à tenir compte des effacements, et d) au cas où les p tentatives de correction ci-dessus ont abouti, on calcule, pour j = 1,...,R, les symboles v(xj,y1(j)) (où 1=0,... ,p 1), qui sont respectivement les estimations des symboles émis correspondant aux symboles reçus r(xj, y1(j)) , en résolvant le système de p équations: p 1 Ils (xi) = E [yl (j)Js v(xi, yl (j)) , pour s = 0,..., p -1. (4) 1=0 Pour tout mot NS ou vs (où s = 0,...,p l), nous appellerons position-X l'entier (j-1) servant d'indice pour la Pme composante du mot. On notera que dans le cadre de la présente invention, on parlera souvent, pour faire court, de décodage pour désigner uniquement l'étape de correction d'erreurs dans les mots reçus, étant entendu que l'homme du métier sait effectuer ensuite sans difficulté la suppression de la redondance en utilisant un dispositif classique quelconque. Comme on le voit, les étapes d'un procédé de codage tel que décrit 10 cidessus présentent peu de ressemblances avec les étapes d'un procédé de décodage tel que décrit ci-dessus (ce qui n'est guère surprenant). Or les auteurs de la présente invention ont réalisé que l'on pouvait organiser ces deux procédés de manière à faire apparaître des analogies profondes. Pour ce faire, ils ont distingué dans les deux cas des étapes dites de pré-traitement et des 15 étapes dites de post-traitement . Ainsi, pour le codage, on met en oeuvre - des étapes de pré-traitement, à savoir: É l'attribution aux (R t1) premières composantes de chaque mot yl des valeurs de symboles d'information, É la transmission de ces mots au codeur de Reed-Solomon pour le calcul des parités (voir équations (3)) (une équation pour chaque étape de pré- traitement), et É la préparation des registres pour la résolution du système d'équations (2) en fonction des coefficients apparaissant sur le côté gauche de 25 chacune de ces équations (une équation pour chaque étape de pré- traitement), et - des étapes de post-traitement, à savoir: É la lecture, d'une part, des données résultant du pré-traitement, et d'autre part des mots issus du codeur de Reed-Solomon, É la lecture des valeurs des symboles Y1 (j) , et É la résolution du système d'équations (2). Pour le décodage, on met en oeuvre - des étapes de pré-traitement, à savoir: É le calcul des symboles agrégés (voir étape a)), É la transmission de ces symboles agrégés au décodeur de Reed-Solomon, et É la préparation des registres pour la résolution du système d'équations (4) en fonction des coefficients apparaissant sur le côté droit de chacune de ces équations (une équation pour chaque étape de pré- traitement), et - des étapes de post-traitement, à savoir: É la lecture, d'une part, des données résultant du pré-traitement, et d'autre part des mots issus du décodeur de Reed-Solomon (voir étapes b) et c)) (une équation pour chaque étape de post-traitement), É la lecture des valeurs des symboles y, (j) , et É la résolution du système d'équations (4) (voir étape d)). Partant de cette analogie de fonctionnement, l'invention concerne un dispositif pour le codage de symboles d'information à transmettre ou enregistrer, et la correction d'erreurs parmi des symboles reçus ou lus, selon des codes définis sur un corps de Galois Fq, où q est un entier supérieur à 2 et égal à une puissance d'un nombre premier, et dans lesquels on considère un ensemble d'éléments de Fq notés y, (j) , où j =1,..., R avec 1 1. Ce dispositif comprend, de manière connue, un codeur de Reed-Solomon, un décodeur de Reed-Solomon et une unité servant à calculer l'inverse d'une matrice de Vandermonde. Ce dispositif est remarquable en ce qu'il comprend en outre: - des registres A dans lesquels sont mémorisés É pour le codage, lesdits symboles d'information, et É pour la correction d'erreurs, les symboles reçus ou lus après qu'ils aient été corrigés, - des registres S dans lesquels sont mémorisés 2860360 13 É pour le codage, les symboles sortant dudit codeur de Reed-Solomon, et É pour la correction d'erreurs, les symboles entrant dans ledit décodeur de Reed-Solomon, et des registres Y dans lesquels sont mémorisés lesdites grandeurs yl (j) . Ainsi, selon l'invention, les registres A servent au pré-traitement pour le codage, et au post-traitement pour le décodage; les registres S servent au post-traitement pour le codage, et au pré-traitement pour le décodage; quant aux registres Y , ils servent au pré-traitement et au post-traitement, à la fois pour le codage et pour le décodage. Autrement dit, l'organisation judicieuse selon l'invention des opérations de codage et des opérations de décodage fait qu'il est possible d'utiliser exactement les mêmes circuits pour le codage et pour le décodage. Cela représente une économie avantageuse en termes de nombre de composants matériels par rapport à une réalisation routinière de circuits aptes à la fois pour le codage et pour le décodage, et, naturellement, une économie encore plus substantielle par rapport à une réalisation où le module de codage et le module de décodage seraient deux modules distincts. De plus, l'invention permet d'utiliser un codeur de Reed-Solomon classique, c'est-à-dire de longueur (q 1) si l'alphabet est Fq. Selon des caractéristiques particulières, ledit décodeur de Reed-Solomon est de longueur (q 1), et le dispositif selon l'invention comprend une table de conversion-X mettant en regard les indices de tout registre de longueur R avec des éléments respectifs du corps de Galois Fq. Plus précisément, cette table de conversion-X associe à chaque position-X d'un registre de longueur R la valeur de xi correspondante. En effet, le décodeur de Reed-Solomon indique des positions d'erreurs par rapport à une trame comprenant (q 1) composantes; lorsque R Grâce à ces dispositions, on pourra utiliser un décodeur de Reed-Solomon classique dans le dispositif selon l'invention. Selon un mode de réalisation de l'invention, dans lesdits registres Y sont également mémorisées les puissances yl (j)S, où s = 2,...,p 1, des 5 symboles yl (j) . Ces puissances peuvent être alors commodément lues au cours des étapes de post-traitement. En variante, le dispositif comprend également des circuits multiplicateurs permettant de calculer les puissances yl (j)S, où s = 2,.. .,p 1, des symboles Y1(j). Ce calcul est effectué, au cours des étapes de posttraitement, après que les valeurs de ces symboles ont été lues dans les registres Y . Cette variante requiert donc des circuits supplémentaires, mais moins de registres mémoire que dans le mode de réalisation cidessus. Selon d'autres caractéristiques particulières, on munira le dispositif selon l'invention d'une machine d'état apte à organiser l'activation et la désactivation de tous les signaux pilotant les opérations de codage et de correction d'erreurs. Grâce à ces dispositions, le dispositif selon l'invention sera à la fois compact et efficace. L'invention vise également: - un programme d'ordinateur contenant des instructions aptes à faire fonctionner une unité de commande du dispositif selon l'invention, lorsque cette unité de commande est réalisée sous la forme d'un dispositif de traitement de données, - un appareil d'émission et de réception de signaux numériques codés, comprenant des moyens pour moduler lesdits signaux numériques codés, un émetteur de données modulées,un récepteur de données modulées, des moyens pour démoduler lesdits signaux numériques codés, et des moyens pour calculer les symboles d'information estimés à partir des mots reçus corrigés, ledit appareil étant remarquable en ce qu'il comprend un dispositif tel que décrit succinctement ci-dessus, et - un appareil d'enregistrement et de lecture de signaux numériques codés, comprenant des moyens pour moduler lesdits signaux numériques codés, un enregistreur de données modulées, un lecteur de données modulées, des moyens pour démoduler lesdits signaux numériques codés, et des moyens pour calculer les symboles d'information estimés à partir des mots lus corrigés, ledit appareil étant remarquable en ce qu'il comprend un dispositif tel que décrit succinctement ci-dessus. D'autres aspects et avantages de l'invention apparaîtront à la lecture de la description détaillée ci-dessous de modes de réalisation particuliers, 10 donnés à titre d'exemples non limitatifs. La description se réfère aux dessins qui l'accompagnent, dans lesquels: - la figure 1 illustre l'architecture générale du dispositif selon l'invention, - la figure 2 illustre l'unité de pré-traitement de ce dispositif, - la figure 3 illustre un mode de réalisation des éléments mémoire de 15 ladite unité de pré-traitement, - la figure 4 illustre un codeur/décodeur de Reed-Solomon classique, - la figure 5 illustre une unité de post-traitement du dispositif selon l'invention, - la figure 6 illustre l'unité de commande de ce dispositif, - les figures 7a et 7b illustrent un algorithme de codage utilisable par le dispositif selon l'invention, - les figures 8a et 8b illustrent un algorithme de décodage utilisable par le dispositif selon l'invention, - les figures 9a et 9b illustrent une unité classique servant à calculer 25 l'inverse d'une matrice carrée de Vandermonde, et - la figure 10 illustre un appareil d'émission/réception ou d'enregistrement/lecture de signaux numériques codés, comprenant un dispositif selon l'invention. On va décrire à présent un mode de réalisation de l'invention dans lequel on met en oeuvre un procédé de codage tel que décrit dans la demande FR0301546, et un procédé de décodage tel que décrit dans la demande FR0304767; ces procédés ont été décrits succinctement ci-dessus. De plus, pour fixer les idées, on prend q = 2M (où M est un entier strictement positif) et p = 4. Prenons par exemple: M = 8, to = 18, tl = 16, t2 = 14, t3 = 12, et R = 143. Avec p = 4, cela correspond à des mots de code de longueur 4R = 572, et à une redondance de: 18+16+14+12 = 60 symboles, comme dans l'exemple de code de géométrie algébrique présenté ci-dessus. La dimension k = 512 de ce code correspond à une taille fréquemment utilisée pour les secteurs logiques de disque dur magnétique. L'invention dans sa réalisation pratique est donc décrite ici avec un certain nombre de choix avantageux compte tenu des normes techniques actuelles. Mais il est clair que la portée de l'invention est plus large, et qu'elle peut s'adapter facilement à des longueurs de trames plus courtes ou plus longues, ou bien à un corps de Galois différent de celui utilisé. Dans les figures, dont on trouvera ci-dessous une description 15 détaillée, on a fait usage des conventions suivantes. Les registres sont considérés comme étant indexés avec l'indice zéro à droite, et les flèches relationnelles n'indiquent pas le sens du décalage, mais simplement l'entrée ou la sortie des données sur les registres. Les décalages des registres sont toujours à droite, c'est-à-dire parcouru avec la position-X croissante. On observera, au passage, que le mot registre désigne, à travers la présente description, aussi bien une zone mémoire de faible capacité (quelques données binaires) qu'une zone mémoire de grande capacité (permettant de stocker un programme entier), au sein d'une mémoire vive ou d'une mémoire morte. On envisagera, de préférence, l'un ou l'autre des moyens de mémorisation suivants: selon un premier mode, chaque registre stocke un nombre entier de symboles de Fq; dans ce cas, les bits composant chaque symbole peuvent avantageusement être traités en parallèle; selon un second mode, chaque registre stocke, pour chaque symbole de Fq, la puissance correspondante de y, où y est une racine (q -1)ème primitive de l'unité dans Fq. Les signaux de commandes de décalage d'un registre reg quelconque sont notés SRreg (pour shift right reg en anglais). Par exemple, SRA1 désigne le signal de commande de décalage du registre Al. Les symboles M1, M2, et ainsi de suite, désignent des multiplexeurs. 5 Par commodité, on utilisera la même notation pour un multiplexeur et pour le signal qui le commande. Enfin, les signaux d'horloge et les signaux de reset ont été volontairement omis afin de faciliter la lecture des figures. Les opérations addition et multiplication sont réalisées sur le plan matériel de manière classique. Les circuits addition sont simplement des portes ou exclusif appliquées bit après bit sur les symboles représentés sous la forme de multiplets de bits. Ainsi, dans le corps F16 engendré par le polynôme (X4 +X+1), (y' +y1) s'écrit: (1011)+ (0010), et vaut (1001), ce qui correspond à y14 On distingue deux cas de multiplication: la multiplication générale et la multiplication par une constante. La multiplication par une constante intervient lorsque l'une des opérandes est définie par avance. Les circuits de multiplication par une constante sont en fait une suite de portes ou exclusif organisées sur les M bits représentant la constante. La multiplication est considérée comme une suite d'additions. Pour réaliser une multiplication par une constante, les circuits sont simples. Par exemple, si le multiplicateur est y5 dans F16, et les bits BO à B3 forment le multiplicande, les bits A0 à A3 du produit sont: A0 ≤ B2 XOR B3, Al ≤ BO XOR B2, A2≤BOXORBI XORB3,et A3 ≤ B1 XOR B2. Un exemple de cellule de multiplication générale est C = A É B, où ni A ni B ne sont définis d'avance: on peut exprimer dans F2 le calcul de cette multiplication dans F16 (compte tenu de 16 = 24) en utilisant la notation matricielle: AO A3 A2 Al Al A0 + A3 A2 + A3 Al + A2 A2 Al AO + A3 A2+ A3 A3 A2 Al A0 + A3 L'addition se traduit ici par une porte ou exclusif , la multiplication ou juxtaposition par une porte et . La complexité d'une multiplication générale est environ M fois plus grande qu'une multiplication par une constante. La figure 1 décrit l'architecture générale du dispositif 10 selon l'invention. Ce dispositif 10 comprend quatre unités principales: - une unité de codageldécodage 200, - une unité de pré-traitement 400, - une unité de post-traitement 300, et - une unité de commande 100. L'unité de commande 100 organise la succession des opérations. Les unités de pré- et de post-traitement réalisent les étapes, décrites ci-dessus, des procédés de codage et de décodage considérés. L'unité 200 met en oeuvre, de manière classique, le codage et le décodage de codes de Reed- Solomon de longueur (q l) et de redondance t1 (où 1= 0,...,p l) (voir Equation (1)). La figure 2 montre l'architecture de l'unité de pré-traitement 400. Quatre registres à décalage de R symboles de M bits chacun nommés Ao à A3 (respectivement 420, 430, 440 et 450) sont utilisés pour mémoriser: - soit des symboles d'information lors du fonctionnement en codeur, - soit des symboles reçus ou lus lors de l'utilisation en correcteur d'erreurs de transmission. Lorsqu'il s'agit d'un message à coder, le registre Ao 420 reçoit (R to) symboles, le registre A, 440 reçoit (R t,) symboles, le registre A2 430 reçoit (R t2) symboles, et le registre A3 450 reçoit (R t3) symboles. Lorsqu'il CO Cl C2 C3 C= BO B1 B2 B3 s'agit d'un message reçu, les quatre registres reçoivent R symboles de M bits chacun. Pour clarifier les schémas, le système de chargement de ces registres est omis. Il est évident pour l'homme de l'art que celui-ci peut être 5 effectué en mode série ou parallèle, un par un ou en groupe. La trame de (4R to t, -t2 t3) symboles de M bits (au codage) ou de 4R symboles de M bits (au décodage) est donc scindée en quatre sous-trames. Quatre groupes de registres de mémoire adressable en série 410, 10 411, 412, 413 contiennent les coefficients des diagonales des matrices Y, , ces coefficients étant élevés à diverses puissances. Cette mémoire est ici de la mémoire morte (ROM), mais elle pourrait, en variante, être de la mémoire vive (RAM) si, par exemple, le codeur était utilisé comme circuit périphérique d'un microprocesseur. Une première façon possible de grouper les mémoires est la suivante: un groupe de quatre registres contient les coefficients des diagonales de matrices Y à la puissance 0, un groupe de quatre registres contient les coefficients des diagonales de matrices Y à la puissance 1, un groupe de quatre registres contient les coefficients des diagonales de matrices Y à la puissance 2, et un groupe de quatre registres contient les coefficients des diagonales de matrices Y à la puissance 3. Les registres contenant les coefficients des diagonales de matrices Y à la puissance 0 sont virtuels, puisqu'il s'agit d'une multiplication par le nombre un; ils sont mentionnés ici pour des raisons de clarté, afin de mettre en avant l'aspect systématique de l'architecture. Une autre façon possible de grouper les mémoires est en fonction de la matrice à laquelle elles sont rattachées. Sur la figure 2, le groupe 410 est le groupe formé des mémoires contenant les éléments de la diagonale des matrices Y , Y , Y02, et Y 3. Le groupe 411 est le groupe formé des mémoires contenant les éléments de la diagonale des matrices YI, YI , Y12, et et ainsi de suite. D'une manière générale, il s'agit d'obtenir que les coefficients Y et le mot à coder ou à décoder soient rangés suivant la position-X, ce qui s'obtient de manière naturelle au moyen de registres à décalage. Le circuit tel qu'illustré permet d'effectuer un certain nombre d'opération en parallèle. On peut bien sûr remplacer les registres série par des registres parallèles et effectuer multiplications et additions en un seul coup d'horloge sur la totalité des données; cette variante permet un traitement plus rapide, mais au prix d'une certaine augmentation du nombre de composants nécessaires. L'unité de pré-traitement 400 contient également 16 multiplicateurs et 8 additionneurs (tous sur M bits si le corps utilisé est F2M). Une autre façon de réaliser les circuits 410, 411, 412 et 413 est illustrée en figure 3. Les R symboles de M bits qui constituent une diagonale d'une des matrices Y sont multiplexés sur deux multiplicateurs généraux de M bits (415 et 416). Un compteur 414 permet de créer l'adresse ide Y(i). Il compte donc de 0 à (R 1) (naturellement, il est parfaitement possible en variante de choisir un décrément de (R -1) à zéro). Un multiplexeur permet de choisir la valeur 1 (Y (i)) ou bien Y(i), ou bien Y2(1) ou encore Y3(1). Dans ce cas, on ne peut pas exécuter des calculs en parallèle avec un seul circuit. Ce circuit est l'optimum en termes de nombre de portes, mais en contrepartie il n'est pas l'optimum en vitesse d'exécution. D'autres variantes sont possibles, suivant le compromis vitesse d'exécution/nombre de portes que l'on cherche à réaliser. Chacun des symboles de M bits des quatre sous-trames peut donc ainsi être multiplié par le symbole correspondant qui appartient à la diagonale de la matrice Y correspondante. La figure 4 donne un exemple de réalisation de l'unité 200 qui contient un codeur de Reed-Solomon 210 et un décodeur de Reed-Solomon 220. Ces deux unités sont entièrement conformes à l'art antérieur, et ne seront que sommairement décrites ici (on pourra se référer pour cela, par exemple, à la thèse de E. Mastrovito intitulée VLSI architecture for Computations in Galois Field , University of Linkoping, 1991, ou à l'article de A. Hasan et al. intitulé Algorithm and architectures for a VLSI Reed-Solomon Codec , dans Reed-Solomon Codes and Their Applications édité par S. Wicker et V. Bhargava, IEEE Press 1994, ou à l'article de G. Seroussi intitulé A systolic Reed Solomon Encoder , IEEE Transactions on Information Theory, vol. 37 n 4, juillet 1991, ou encore au brevet US-4,958,348). Le codage peut, de manière connue, s'effectuer en multipliant chaque mot d'information par une matrice génératrice G, ( 1 =0, . . . , p 1) , de dimension (q -1 0 x (q -1) , correspondante (vérifiant chacune H(") . G, =0). Le codeur peut être réalisé comme un ensemble de p codeurs indépendants, associé chacun à une valeur respective de t, , ou comme un unique codeur associé à une matrice génératrice générale munie d'un paramètre ajustable en fonction de la valeur de t, considérée. Les parités sont obtenues à partir de sommes pondérées des sous-trames. De même, le décodeur peut être réalisé comme un ensemble de p décodeurs indépendants, associé chacun à une matrice de parité respective H(tt) de dimension t, x(q 1), ou comme un unique décodeur associé à une matrice de parité générale H(tt) dont le nombre de lignes est ajustable en fonction de la valeur de t, considérée. Dans les deux cas, c'est une somme pondérée des sous-trames qui sera multipliée par la matrice de contrôle de parité pour. former le syndrome d'erreurs. On pourra par exemple calculer le syndrome, puis appliquer l'algorithme de Berlekamp-Massey pour obtenir un polynôme localisateur des erreurs, puis appliquer une recherche de Chien pour déterminer les racines de ce polynôme localisateur. Ces racines sont les inverses des positions à valeurs erronées dans la trame. L'algorithme de Forney permettra alors de calculer la magnitude de ces erreurs. L'article de G. Seroussi et le brevet US 4,958,348 mentionnés ci-dessus indiquent des réalisations systoliques du codeur et du décodeur, qui utilisent un procédé séquentiel au lieu d'un procédé en boucles; ces réalisations sont avantageuses en ce qu'elles ne nécessitent pas de mémorisation supplémentaire. Il est toutefois à noter que les registres du dispositif 10 non encore utilisés peuvent l'être lors du codage et du décodage pour économiser davantage en nombre de portes. Un multiplexeur 230 permet de choisir laquelle des quatre sous-trames doit être prise en compte pour être codée ou décodée. Un autre multiplexeur 240 permet de choisir l'opération de codage ou l'opération de décodage. Quatre registres à décalage So, SI, S2 et S3 (respectivement 280, 285, 290 et 295) sont nécessaires pour stocker temporairement les données avant codage ou après décodage. Il est à noter que généralement un décodeur de code de Reed-Solomon donne une information sur la magnitude de l'erreur et sur sa position. L'information sur la position doit être dirigée sur l'unité de commande 100 afin d'y subir une transformation (comme expliqué plus bas en référence à la figure 6), au cas où les indications donnes par le décodeur ne conviennent pas du fait que la trame est raccourcie à un nombre R de symboles inférieur à q. Les magnitudes des erreurs sont stockées dans les registres So à S3. Un multiplexeur 260 permet d'aiguiller les données codées ou les magnitudes d'erreurs sur le multiplexeur 250, lequel permet le choix du registre So, SI, S2 ou S3. On notera également que les multiplexeurs 250 et 260 peuvent être omis dans une variante où les 4 registres seraient constituées par un seul et même registre à décalage. La figure 5 décrit l'unité de post-traitement 300. Pour une opération de codage, les données codées sont stockées dans les registres So à S3 de l'unité de codage et décodage. Sur la figure 5, les registres qui sont indiqués en pointillé sont des registres qui sont physiquement dans les autres unités; ils sont répétés ici pour faciliter la compréhension. Pour une opération de décodage, les magnitudes des erreurs détectées sont stockées dans les registres So à S3. L'unité de post-traitement 300 contient principalement une unité de calcul d'une matrice inverse d'une matrice de Vandermonde 500. Cette unité sera décrite en détail plus bas. L'unité de post-traitement 300 contient aussi quatre mémoires adressables qui contiennent chacune R = 143 (dans l'exemple numérique présenté ci-dessus) symboles inverses (portant respectivement les numéros de référence 320, 321, 322, et 323) des symboles des matrices Yo, YI, Y2 et Y3. L'unité de post-traitement 300 effectue également les opérations générales de multiplication et d'addition. Le multiplexeur 310 permet de choisir le registre So, SI, S2, ou S3 pour le post-traitement. Dans le cas du codage (pour des explications détaillées, on se référera à la demande FR-0301546), on doit ôter des symboles de redondance dans So les contributions correspondant aux sous-trames AI, A2 et A3 lors du calcul des parités de Ao. On doit ensuite ôter du registre SI les valeurs de A2'Y2 et A3.Y3 pour le calcul des parités de AI, puis ôter du registre S2 les valeurs de A3.Y32 pour le calcul des parités de A2. Pour ces opérations, on utilise les registres 430, 440 et 450, ainsi que les multiplexeurs 311, 312 et 313. On doit alors résoudre le système d'équations linéaires (2). Ce système d'équations peut être résolu en inversant une matrice de Vandermonde utilisant les coefficients des matrices Yo, YI, Y2 et Y3 correspondant à l'adresse des éléments de parités. Ainsi, pour les parités contenues dans le registre So aux adresses 0 à to, il s'agit des coefficients Yo(0), YI(0), Y2(0), et Y3(0) qui sont utilisés pour le calcul de la matrice, puis les coefficients Yo(1), YI(1), Y2(1), et Y3(1), et ainsi de suite. Le choix est laissé à l'homme du métier d'organiser les registres en mettant les parités aux adresses de poids faible, puis les données utilisateurs aux adresses de poids plus élevé, ou le contraire: cela n'a que peu ou pas d'influence sur la complexité de la réalisation. Le résultat du calcul de la matrice est ensuite multiplié avec le résultat de l'opération précédente. Comme il s'agit d'une multiplication matriceÉvecteur, mais effectuée ligne de matrice après ligne de matrice, un registre tampon 316 est nécessaire pour stocker les résultats intermédiaires, puis le multiplexeur 315 permet d'adresser le registre A correspondant. Toujours dans le cas du codage, les mémoires 320, 321, 322 et 323 ne sont pas sollicitées. Les multiplexeurs 330, 331, 332 et 333 sont aussi positionnés pour ne pas additionner les parités au contenu du registre. Dans le cas du décodage, on n'a pas à ôter les contributions précédemment calculées. Les multiplexeurs 311, 312 et 313 mettent alors un zéro en face des opérations d'addition correspondantes. Les résultats des décodages présents dans les registres So, SI, S2 et S3 sont directement multipliés par la matrice inverse de la matrice de Vandermonde formée à partir des coefficients des matrices Yo, YI, Y2 et Y3 correspondant à l'adresse des éléments de la trame qui sont erronés. Dans ce cas, il est nécessaire de multiplier les résultats obtenus dans la multiplication matrice.vecteur par les valeurs stockées dans les mémoires 320, 321, 322 et 323 avant de modifier le registre A, cette fois par addition. La figure 6 représente l'unité de commande 100, qui peut être réalisée, par exemple, sous la forme d'un dispositif de traitement de données pouvant être commandé par un programme d'ordinateur, ou sous la forme d'un circuit électronique tel qu'un circuit intégré dédié (en anglais Application Specific lntegrated Circuit ou ASIC) ou tel qu'un réseau de portes programmable par l'utilisateur (en anglais Field Programmable Gate Array ou FPGA). Cette unité de commande 100 contient une machine d'état 120 organisant l'activation et la désactivation de tous les signaux pilotant les opérations de codage et de décodage, par exemple dans des registres à décalage et/ou des multiplexeurs. Le positionnement des multiplexeurs est omis volontairement (pour ne pas surcharger la figure) car il peut se déduire aisément de la description des circuits. De même, pour réaliser certaines opérations, un certain nombre de décalages des registres sont nécessaires. Ils sont indiqués par un incrément sur la valeur i, et réalisés sous forme de compteurs qui peuvent éventuellement être indépendants. Comme entrées, l'unité de commande 100 accepte un signal indiquant si l'opération est un codage ou un décodage. Il admet aussi un groupe de signaux de symboles de M bits indiquant les positions des symboles erronés venant du décodeur Reed-Solomon et leur nombre. L'unité de commande 100 contient aussi une table de conversion-X 110, qui met en regard les positions-X de tout registre de longueur R, et la valeur de xf correspondante. En effet, le décodeur 220 indique des positions d'erreurs par rapport à une trame comprenant (q 1) composantes; lorsque R Si l'adresse formée par le code ne correspond pas à une position-X, alors on sait que le décodage est erroné, ce qui peut arriver par exemple si le nombre d'erreurs dépasse la capacité de correction du code. Cette indication est très utile et constitue un avantage de cette méthode par rapport au décodage de Reed-Solomon classique, car le décodeur de Berlekamp-Massey donne ici comme résultat, lorsque la capacité de correction du code est dépassée, un localisateur et un nombre d'erreurs détectées. On réalise alors une table en utilisant une mémoire à 2M adresses qui contient les M bits de la position-X correspondante si elle existe, et la valeur 2M partout où cette position-X n'existe pas. Un comparateur en sortie de mémoire détecte tous les bits égaux à 1, auquel cas il active un signal de faux décodage . Les figures 7a et 7b décrivent la succession des opérations pour le codage. L'étape 1 est le début de l'algorithme de codage. Comme expliqué cidessus, les registres A , AI, A2 et A3 doivent être chargés avec respectivement (R to) symboles de M bits, (R t,) symboles de M bits, (R t2) symboles de M bits, et (R t3) symboles de M bits. L'homme de l'art sait que plusieurs réalisations sont possibles. Si les registres A à A3 sont des registres série chargeables en parallèle, l'opération peut être indépendante de l'unité de commande. Si les registres sont chargés en série, l'unité de commande peut être utilisée pour produire les coups d'horloge nécessaires. Ensuite, à l'étape 2, les registres Y0 , YI , Y2 , et Y3 sont mis en regard des registres A , AI, A2 et A3 (et ce, par le nombre de décalages correspondant à t ), afin que les multiplications des données utilisateurs par les facteurs correspondants puissent être effectuées à l'étape 3. La position-X i est incrémentée jusqu'à la valeur (R 1) (test 4), et chaque nouveau décalage fournit une donnée au codeur de Reed-Solomon. Si le codeur est systolique, l'étape 5 serait incluse dans la boucle. Ici le codeur est considéré comme ayant des registres de stockage et comme effectuant les opérations de codage lorsque la trame est prête (étape 5). Une fois cette opération de codage effectuée, on s'intéresse alors aux valeurs dans le registre So qui sont entre la position t1 et la position to. L'unité de commande décale donc le registre So à l'étape 6 pour que la donnée indexée t1 soit disponible. L'unité de commande décale aussi les registres A1, A2, et A3 à l'étape 6 pour que les données indexées t1 soit disponibles. On peut donc à chaque décalage simultané des registres So, A1, A2, et A3 présenter (étape 7) le résultat So(i)-A1(i)-A2(i)-A3(i) comme élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 8. L'inverse de la matrice de Vandermonde se calcule en parallèle à l'étape 7. On note que la série considérée ici est de dimension 1x1 et vaut 1. L'unité de commande dirige le résultat uniquement sur le registre Ao. A l'étape 9, les (to - t1) décalages sont effectués. Dans le registre Ao, on trouve alors aux bonnes positions les résultats de la multiplication vecteur.matrice, qui vont former des données nécessaires au calcul suivant. A l'étape 11, les registres Yo1, Y11, Y21, et Y31 sont mis en regard des registres Ao, A1, A2 et A3 (et ce, par le nombre de décalages correspondant à t1), afin que les multiplications des symboles d'information par les facteurs correspondants puissent être effectuées à l'étape 12 de même que précédemment. La position-X i est incrémentée jusqu'à la valeur (R 1) (test 13), et chaque nouveau décalage fournit de nouveau une donnée au codeur de Reed-Solomon. Après le codage à l'étape 14, on s'intéresse aux valeurs dans le registre S1 qui sont entre la position-X t2 et la position-X t1. L'unité de commande décale donc le registre S1 à l'étape 15 pour que la donnée indexée t2 soit disponible. L'unité de commande décale aussi les registres A2, Y2 et A3, Y3 à l'étape 14 pour que les données indexées t2 soit disponibles. L'unité de 2860360 27 commande peut donc à chaque décalage simultané des registres So, Al, A2, et A3 présenter (étape 16) le résultat So(i)-AI(i)-A2(i)-A30) comme premier élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 17. Ensuite (toujours à l'étape 16), sans décaler, mais par multiplexage, l'unité de commande peut présenter le résultat S1(i)-A2(i).Y2(i)-A3(i). Y3(i) comme second élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 17. L'inverse de la matrice de Vandermonde se calcule à l'étape 19 en parallèle à l'étape 16. Pour cette itération, celle-ci est ici de dimension 2x2. Les données à fournir sont Yo(i) et Y1(i). L'unité de commande dirige le résultat de la multiplication matriceÉvecteur uniquement sur les registres A0 et Al. A l'étape 18, les (t1 - t2) décalages sont effectués. Dans les registres Ao et AI, on trouve alors aux bonnes positions les coefficients résultant de la multiplication vecteur.matrice de l'étape 17, qui vont former des données nécessaires au calcul suivant. A l'étape 20, les registres Y02, Y12, Y22, et Y32 sont mis en regard des registres A0, AI, A2 et A3 (et ce, par le nombre de décalages correspondant à t2), afin que les multiplications des symboles d'information par les facteurs correspondants puissent être effectuées à l'étape 21. La position-X i est incrémentée jusqu'à la valeur (R 1) (test 22), et chaque nouveau décalage fournit de nouveau une donnée au codeur de Reed-Solomon. Le résultat du codage est stocké dans le registre S2. Après le codage à l'étape 23, on s'intéresse aux valeurs dans le registre S2 qui sont entre la position t3 et la position t2. L'unité de commande décale donc le registre S2 à l'étape 24 pour que la donnée indexée t3 soit disponible. L'unité de commande décale aussi les registres A3 et Y3 à l'étape 24 pour que la donnée indexée t3 soit disponible. L'unité de commande peut donc à chaque décalage simultané des registres So, A,, A2 et A3 présenter (étape 25) le résultat So(i)-AI(i)-A2(i)-A3(i) comme premier élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 26. Ensuite, sans décaler, mais par multiplexage, l'unité de commande peut présenter le résultat S1(i)-A2(i).Y2(i)-A3(i).Y3(i) comme second élément du vecteur devant être multiplié par la matrice inverse de la matrice deVandermonde à l'étape 26. Ensuite, par multiplexage, l'unité de commande peut présenter le résultat S2(i)-A3(i).Y32(i) comme dernier élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 26. L'inverse de la matrice de Vandermonde se calcule à l'étape 28 en parallèle à l'étape 25. Pour cette itération, cette matrice est de dimension 3x3. Les données à fournir sont Yo(i), Y1(i) et Y2(i). L'unité de commande dirige le résultat de la multiplication matrice-vecteur uniquement sur les registres A0, AI et A2. A l'étape 27, les (t2 - t3) décalages sont effectués. Dans les registres A0, Al et A2 on trouve alors aux bonnes positions les résultats de la multiplication vecteur.matrice de l'étape 26, qui vont former des données nécessaires au calcul suivant. A l'étape 29, les registres Y03, Y13, Y23, et Y33 sont mis en regard des registres A0, A,, A2 et A3 (et ce, par le nombre de décalages correspondant à t3), afin que les multiplications des symboles d'information par les facteurs correspondants puissent être effectuées à l'étape 30. La position-X i est incrémentée jusqu'à la valeur (R 1) (test 31), et chaque nouveau décalage fournit de nouveau une donnée au codeur de Reed-Solomon. Le résultat du codage est mémorisé dans le registre S3. Après le codage à l'étape 32, on s'intéresse alors aux valeurs dans le registre S3 qui sont entre la position 0 et la position t3. L'unité de commande décale donc le registre S3 à l'étape 33 pour que la donnée indexée 0 soit disponible. L'unité de commande décale aussi les registres A3 et Y3 à l'étape 33 pour que les données indexées 0 soient disponibles. L'unité de commande peut donc à chaque décalage simultané des registres So, AI, A2 et A3 présenter (étape 34) le résultat So(i)-Ai(i)-A2(i)-A3(i) comme premier élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 35. Ensuite, sans décaler, mais par multiplexage, l'unité de commande peut présenter le résultat S1(i)-A2(i)-Y2(i)-A3(i)ÉY3(i) comme second élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 35. Ensuite, par multiplexage, l'unité de commande peut présenter le résultat S2(i)-A3(i).Y32(i) comme troisième élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 35. Ensuite, par multiplexage, l'unité de commande peut présenter le résultat S3(i) comme quatrième et dernier élément du vecteur devant être multiplié par la matrice inverse de la matrice de Vandermonde à l'étape 35. L'inverse de la matrice de Vandermonde se calcule à l'étape 37 en parallèle à l'étape 34. Pour cette itération, cette matrice est de dimension 4x4. Les données à fournir sont Yo(i), Y1(i), Y2(i) et Y3(i). L'unité de commande dirige le résultat de la multiplication matrice. vecteur uniquement sur les registres A et AI. A l'étape 36, les t3 décalages sont effectués. Dans les registres A , AI, A2 et A3, on trouve alors aux bonnes positions le résultat de la multiplication vecteurmatrice de l'étape 35, et le résultat complet du codage est obtenu. On va à présent décrire, en référence aux figures 8a et 8b, la correction d'erreurs et/ou d'effacements. L'étape 1 est le début de l'algorithme de décodage. A cette étape, les registres A , AI, A2 et A3 doivent tous être chargés avec R symboles de M bits. L'homme de l'art sait que plusieurs réalisations sont possibles. Si les registres A à A3 sont des registres série chargeables en parallèle, l'opération peut être indépendante de l'unité de commande. Si les registres sont chargés en série, l'unité de commande peut être utilisée pour produire les coups d'horloge nécessaires. A l'étape 2, les registres A , AI, A2 et A3 sont respectivement mis en regard des registres Y , YI , Y20, et Y30. L'étape 3 consiste en la multiplication de A(i) par Yo(i), et l'addition des résultats pour former, après R décalages (test 4), un mot de R symboles qui sera soumis au décodeur de Reed-Solomon à l'étape 5. Les magnitudes d'erreurs obtenues sont mémorisées dans le registre S . Il n'est pas nécessaire de sauvegarder les positions d'erreurs lors de ce premier décodage. A l'étape 6, les registres A0, AI, A2 et A3 sont respectivement mis en regard des registres Yo', Y1', Y21, et Y31. L'étape 7 consiste en la multiplication de A(i) par Y'(i), et l'addition des résultats pour former, après R décalages (test 8), un mot de R symboles qui sera soumis au décodeur de Reed-Solomon à l'étape 9. Les magnitudes d'erreurs obtenues sont mémorisées dans le registre Si. II n'est pas nécessaire de sauvegarder les positions d'erreurs pour ce second décodage. A l'étape 10, les registres A0, AI, A2 et A3 sont respectivement mis en regard des registres Y02, Y12, Y22, et Y32. L'étape 11 consiste en la multiplication de A(i) par Y2(i), et l'addition des résultats pour former, après R décalages (test 12), un mot de R symboles qui sera soumis au décodeur de Reed-Solomon à l'étape 13. Les magnitudes d'erreurs obtenues sont mémorisées dans le registre S2. Il n'est pas nécessaire de sauvegarder les positions d'erreurs lors de ce troisième décodage. A l'étape 14, les registres Ao, AI, A2 et A3 sont respectivement mis en regard des registres Y03, Y13, Y23, et Y33. L'étape 15 consiste en la multiplication de A(i) par Y3(i), et l'addition des résultats pour former, après R décalages (test 16), un mot de R symboles qui sera soumis au décodeur de Reed-Solomon à l'étape 17. Les magnitudes d'erreur obtenues sont mémorisées dans le registre S3. Il est nécessaire de sauvegarder les positions d'erreurs lors de ce dernier décodage; cela peut être réalisé dans l'unité de commande 100, où les adresses sont converties en positions-X et où les faux décodages sont détectés (étape 18). On doit alors résoudre le système d'équations linéaires (4). Pour cela, on doit effectuer le calcul de la matrice inverse de la matrice de Vandermonde, avec comme entrées les valeurs des matrices Yo, YI, Y2 et Y3 qui correspondent aux positions-X détectées comme erronées. A l'étape 19, un compteur est remis à zéro. Ce compteur a pour butée le nombre d'erreurs détectées (test 22). On utilise alors le calcul de la matrice inverse (étape 20) avec comme base de calcul les valeurs Yo, Y,, Y2 et Y3 correspondant à la position-X de l'erreur traitée. A l'étape 21, cette matrice est multipliée par le vecteur mémorisé dans les quatre registres So, S,, S2 et S3 qui mémorisaient les magnitudes obtenues par les décodages; il faut ensuite diviser le résultat obtenu par Yo, Y1, Y2 ou Y3 pour obtenir les valeurs devant être ajoutées aux registres A0, AI, A2 ou A3. Les figures 9a et 9b explicitent l'unité 500 servant à calculer l'inverse d'une matrice carrée de Vandermonde. On rappelle qu'une matrice carrée de Vandermonde V est de la forme w-1 2 w-1 w-1 1 a,w où les Ii (i = 1,...,w) sont tous différents deux à deux. Pour inverser une telle matrice, on définit un ensemble de polynômes: z 2 Pi(z) ' , où i,j= 1,...,w. i 2. j On voit que le polynôme Pi(z) s'annule pour z = aj pour tout j i, et vaut 1 pour z = 2.i; en conséquence, en formant une matrice dont les lignes sont définies par les coefficients de ce polynôme, on obtient bien l'inverse d'une matrice de Vandermonde. Pour obtenir ces coefficients avec le moins d'opérations à effectuer possible, on peut utiliser le polynôme: w-1 F(z) _ H(z 2) , j=o et définir 77i = H(2i -21) . On a alors: Pi( z) = 1 F(z) 77i z 2i L'unité 500 contient deux sous-unités 510 et 520. V= L'unité 510 est dédiée au calcul des paramètres 17o, 771, 772 et 173. L'unité de commande 100 choisit grâce au multiplexeur 512 le coefficient Y qui doit être mémorisé dans le registre 513. Puis le multiplexeur piloté par le signal M20 oriente les autres coefficients Y vers l'addition (rappelons qu'addition et soustraction sont des opérations identiques dans un corps de Galois utilisant F2). Les résultats sont multipliés et mémorisés dans le registre 514. La première multiplication se fait avec la valeur un. Une Look-Up Table 515, c'est à dire une mémoire contenant les nombres inverses des nombres présentés à l'adressage, permet d'éviter une division. Un multiplexeur permet d'aiguiller la valeur finale vers sa destination dans l'unité 520. L'unité 520 calcule les lignes de la matrice inverse. Le système calcule d'abord le polynôme F(z), puis divise ce polynôme par les coefficients Y en parallèle. Une multiplication par les coefficients ÎO, 17i 772 et 713 est effectuée ensuite. On notera que le cadencement des opérations permet d'obtenir les coefficients de toutes les lignes en parallèle, ou bien les coefficients d'une ligne les uns après les autres, puis une autre ligne, et ainsi de suite. Dans ce mode de réalisation, le cadencement ligne après ligne est adopté afin de réduire le nombre de registres mémoire nécessaires. Le système est réalisé suivant la dimension de matrice 4x4 qui est la dimension maximale de ce mode de réalisation. Les matrices de dimension 1x1, 2x2, et 3x3 sont obtenues avec le même système, en programmant les compteurs suivant la dimension de la matrice. On voit, sur la base de cet exemple à quatre matrices, que le procédé de codage comme le procédé de décodage sont en fait itératifs et structurés. Il est naturellement possible d'extrapoler la structure pour des hypermatrices constituées de N x N (où N > 4) sous-matrices. La figure 10 est un schéma synoptique d'un appareil d'émission/réception ou d'enregistrement/lecture 70 de signaux numériques 30 codés, comprenant un dispositif 10 selon l'invention. Cet appareil a pour fonction de transmettre des informations de nature quelconque à partir d'une source 101 vers un destinataire ou utilisateur 108. En premier lieu, la source 101 met ces informations sous la forme de symboles appartenant à un certain alphabet (par exemple des octets de bits dans le cas où la taille q de l'alphabet vaut 256), et transmet ces symboles à une unité de stockage 102, qui accumule les symboles de façon à former des ensembles contenant chacun k symboles. Ensuite, chacun de ces ensembles est transmis par l'unité de stockage 102 au dispositif 10 qui, fonctionnant en codeur, construit un mot de code v de longueur n. Le dispositif 10 transmet les mots de code v à un modulateur 103. Ce modulateur 103 associe à chaque groupe de bits de taille prédéterminée un symbole de modulation selon une certaine règle. II pourra par exemple s'agir d'une amplitude complexe définie selon la constellation 4-QAM, ou 8-DPSK ou 16-QAM. Ensuite, ces symboles de modulation sont transmis à un enregistreur, ou à un émetteur, 104, qui insère les symboles dans un canal de transmission. Ce canal peut être par exemple un stockage sur un support adapté tel qu'un DVD ou une bande magnétique, ou bien une émission filaire ou non- filaire comme c'est le cas d'un lien radio. Cette transmission, après avoir été affectée par un bruit de transmission dont l'effet est de modifier ou d'effacer, aléatoirement, certaines des données transmises, parvient à un lecteur, ou à un récepteur, 105. Ce lecteur ou récepteur 105 transmet alors ces symboles élémentaires au démodulateur 106, qui les transforme en symboles de l'alphabet Fq. Ces symboles de Fq sont groupés par séquences de n symboles successifs, chacune de ces séquences constituant un mot reçu r. Ce mot r est ensuite traité par le dispositif 10, qui, en mettant en oeuvre un algorithme de correction d'erreurs adapté, fournit un mot de code associé Une fois la correction terminée, le mot de code associé est transmis à une unité de calcul des symboles d'information 107, qui en extrait k symboles d'information en inversant la transformation mise en oeuvre au cours du codage. Enfin, ces symboles d'information sont fournis à leur destinataire 108. REVENDICATIONS 1. Dispositif (10) pour le codage de symboles d'information à transmettre ou enregistrer, et la correction d'erreurs parmi des symboles reçus ou lus, selon des codes définis sur un corps de Galois Fq, où q est un entier supérieur à 2 et égal à une puissance d'un nombre premier, et dans lesquels on considère un ensemble d'éléments de Fq notés yl (j) , où j =1, ., R avec 1 R q 1 et 1= 0,..., p -1 avec p >1, ledit dispositif (10) comprenant un codeur de Reed-Solomon (210), un décodeur de Reed-Solomon (220) et une 10 unité (500) servant à calculer l'inverse d'une matrice de Vandermonde, caractérisé en ce qu'il comprend en outre: - des registres A (420, 430, 440, 450) dans lesquels sont mémorisés É pour le codage, lesdits symboles d'information, et É pour la correction d'erreurs, les symboles reçus ou lus après qu'ils aient été corrigés, - des registres S (280, 285, 290, 295) dans lesquels sont mémorisés É pour le codage, les symboles sortant dudit codeur de Reed-Solomon 20 (210), et É pour la correction d'erreurs, les symboles entrant dans ledit décodeur de Reed-Solomon (220), et - des registres Y (410, 411, 412, 413) dans lesquels sont mémorisés lesdites grandeurs y1(j)...CLMF: 2. Dispositif selon la revendication 1, caractérisé en ce que ledit décodeur de Reed-Solomon (220) est de longueur (q 1), et en ce que le dispositif (10) comprend une table de conversion-X (110) mettant en regard les indices de tout registre de longueur R avec des éléments respectifs du corps de Galois Fq. 3. Dispositif selon la revendication 1 ou la revendication 2, caractérisé en ce que dans lesdits registres Y sont également mémorisées les puissances yl (j)s, où s= 2,..., p -1, des symboles yl (j) . 4. Dispositif selon la revendication 1 ou la revendication 2, 5 caractérisé en ce qu'il comprend également des circuits multiplicateurs permettant de calculer les puissances yl (j)s, où s= 2,..., p l, des symboles yl (j) , après que les valeurs de ces symboles ont été lues dans les registres Y , au cours des étapes de post-traitement. 5. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend une machine d'état (120) apte à organiser l'activation et la désactivation de tous les signaux pilotant les opérations de codage et de correction d'erreurs. 6. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend une unité de commande (100) réalisée sous la forme d'un circuit électronique tel qu'un circuit intégré dédié (ASIC) ou un réseau de portes programmable par l'utilisateur (FPGA). 7. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend une unité de commande (100) réalisée sous la forme d'un dispositif de traitement de données pouvant être commandé par un programme d'ordinateur. 8. Programme d'ordinateur, caractérisé en ce qu'il contient des instructions aptes à faire fonctionner l'unité de commande (100) du dispositif selon la revendication 7. 9. Appareil d'émission et de réception de signaux numériques codés (70), comprenant des moyens (103) pour moduler lesdits signaux numériques codés, un émetteur de données modulées (104), un récepteur de données modulées (105), des moyens (106) pour démoduler lesdits signaux numériques codés, et des moyens (107) pour calculer les symboles d'information estimés à partir des mots reçus corrigés, caractérisé en ce qu'il comprend un dispositif selon l'une quelconque des revendications 1 à 7. 10. Appareil d'enregistrement et de lecture de signaux numériques codés (70), comprenant des moyens (103) pour moduler lesdits signaux numériques codés, un enregistreur de données modulées (104), un lecteur de données modulées (105), des moyens (106) pour démoduler lesdits signaux numériques codés, et des moyens (107) pour calculer les symboles d'information estimés à partir des mots lus corrigés, caractérisé en ce qu'il comprend un dispositif selon l'une quelconque des revendications 1 à 7.