FR 2800950 A1 20010511 FR 9913835 A 19991104 L'invention est du domaine général des procédés de transfert d'informations. Elle concerne plus particulièrement un procédé et un dispositif d'entrelacement de données faisant partie d'un procédé d'émission ou de réception. L'invention trouve sa place dans le domaine général du codage de données en vue de leur émission et de leur réception par exemple par un système radio. On connaît de façon classique dans ce domaine des codeurs de type particulier dits "turbocodeurs" (ainsi que les dispositifs de décodage associés dits "turbodécodeurs") décrits par exemple dans des brevets précédents du même déposant. Un tel turbocodeur et le décodeur associé utilisent un ou plusieurs dispositifs d'entrelacement des données. La présente invention a pour objet un procédé d'entrelacement et de désentrelacement, destinés à faire partie d'un tel procédé dit de "turbocodage" et du procédé de turbodécodage associé. La présente invention s'applique aussi bien au codage (en anglais "encoding") de données représentatives d'une grandeur physique, au codage de données susceptibles de moduler une grandeur physique, au décodage de signaux modulés sous forme de données, qu'au décodage de données représentatives de grandeurs physiques ou à la gestion des transmissions de données. Ces données peuvent, par exemple, représenter des images, des sons, des données informatiques, des grandeurs électriques, ou des données mémorisées. Lorsqu'on utilise des codeurs convolutifs pour mettre en oeuvre un décodage itératif utilisant des décodeurs élémentaires à entrées et sorties douces, ces codes sont fortement améliorés lorsque leurs codeurs contiennent un dispositif de permutation appelé entrelaceur (en anglais "interleaver"), un dispositif de permutation permettant de revenir à la séquence initiale étant alors appelé "désentrelaceur". Dans ce cas, ils sont habituellement appelés turbocodeurs (en anglais "turbo-encoder") et le décodeur itératif correspondant est appelé turbodécodeur . Par commodité : - on appelle l'opération effectuée par le turbo-codeur, un turbo- codage et cette opération fournit une séquence dite turbo-codée on appelle l'opération effectuée par le turbo-décodeur, un turbo- décodage et cette opération fournit une séquence dite turbo- décodée . Sur ces sujets, des documents qui servent de référence sont, d'une part, l'article de C. BERROU, A. GLAVIEUX et P. THITIMAJSHIMA intitulé Near Shanon limit error-correcting coding and decoding : turbocodes publié dans les comptes-rendus de la conférence ICC'93, 1993, pages 1064 à 1070, et d'autre part, l'article de C. BERROU et A. GLAVIEUX intitulé Near Optimum error-correcting coding and decoding : turbo-codes publié dans IEEE Transactions on Communications, Volume 44, pages 1261 à 1271, en octobre 1996. Le but de la présente invention est de proposer des entrelaceurs plus efficaces pour un turbocodeur, c'est à dire permettant d'obtenir une distance minimale plus grande, Ceci est surtout important lorsque le rapport signal sur bruit du canal est relativement élevé, car cela peut alors réduire le taux d'erreurs de décodage et par conséquent éviter de devoir renvoyer des données mal reçues. On rappelle brièvement ici qu'un turbocode présente un comportement différent selon la valeur du rapport signal sur bruit du canal. Si le rapport signal sur bruit est grand, le poids minimum des mots non nuls du turbocode et le nombre de ces mots de poids minimum prédominent dans la détermination des performances du turbodécodeur. Au contraire, si le rapport signal sur bruit est faible, il semble que ce soit le nombre de mots de code de poids proche d'une valeur supérieure ou égale au poids minimum du code qui influence la performance du turbodécodeur. L'invention vise en premier lieu un procédé de création d'une table de permutation, caractérisé en ce que ladite table fait correspondre à chaque rang d'entrée de 0 à r.m-1 un rang de sortie de 0 à r.m-1, ledit procédé comportant des étapes suivantes : E1- on considère une matrice S comportant r lignes et m colonnes, remplie ligne par ligne par les nombres successifs de 0 à r.m-1 E2- chaque colonne de ladite matrice S est découpée en un nombre prédéterminé l de sous-colonnes, tel que r/l ne soit pas premier, E3- les sous-colonnes de S en nombre égal à l.m sont désignées par SI, 12 avec 0 S /1 E4- chaque sous-colonne SI, 12 est alors écrite sous la forme d'une matrice à N lignes et M colonnes (avec r/l= NM) et sous cette forme elle est entrelacée par un entrelaceur de type dit "verrou" défini par une permutation circulaire de chaque colonne de ladite matrice à N lignes et M colonnes, ledit entrelaceur n'étant pas l'identité, E5- cette matrice à N lignes et M colonnes est reconvertie, après lesdites permutations circulaires sur ses colonnes, en une sous-colonne S*l1l2 qui occupera dans une matrice S* la même place que celle qu'occupe SI, 12 dans la matrice S , E6- la table de permutation est constituée des couples formés chacun d'un élément de la matrice S et de l'élément de même position de la matrice S*. Préférentiellement, le procédé comporte également dans au moins une colonne /2 (0 sl2 sm-1) de la matrice S* une modification de l'ordre d'apparition des sous-colonnes S*l1l2 dans ladite colonne. Selon une mise en #uvre préférée, un même entrelaceur verrou est utilisé pour produire chacune des sous-colonnes S*l1l2 d'une colonne donnée l2 de la matrice S*. Selon une mise en #uvre particulière, les sous-colonnes d'au moins deux colonnes de la matrice S* sont produites par des entrelaceurs verrou différents. Selon une mise en #uvre plus particulière, les m entrelaceurs verrou utilisés pour entrelacer les sous-colonnes de chaque colonne de la matrice S* sont différents. Préférentiellement, le procédé tel qu'exposé ci-dessus comporte également une étape de modification de l'ordre d'apparition des colonnes de S*. L'invention vise sous un second aspect un procédé de permutation des symboles d'une séquence de données binaires, représentatives d'une grandeur physique, représentée par un polynôme a(x)= l a, Á X 1111+1., à coefficients f-1 binaires, divisible par un premier polynôme diviseur g(x)=1+ Ig/x' + x', à l=1 coefficients binaires, fournissant une nouvelle séquence de symboles binaires représentée par un polynôme a*(x)= Ia ,I. X5'", divisible par un second l-1 polynôme diviseur g*(x)= 1+#g *, x' + x', caractérisé en ce que S*,k est l'élément en position U,k) dans la matrice S* obtenue selon un procédé tel qu'exposé ci-dessus, et m est un multiple du plus petit entier m'tel que le premier polynôme diviseur g(x) divise xm'+1. Selon une mise en #uvre préférée, le premier polynôme diviseur g(x) est égal au second polynôme diviseur g*(x) L'invention vise sous un troisième aspect un procédé de codage caractérisé en ce qu'il comporte une opération de détermination d'une séquence a*, au cours de laquelle on met en oeuvre au moins un procédé de permutation tel qu'exposé ci-dessus. Dans une mise en oeuvre préférée, le procédé de codage tel qu'exposé, travaillant sur des séquences de données binaires u représentatives d'information et prenant en compte un premier polynôme diviseur @-1 g(x) = 1 + Ig,x' + x' , un second polynôme diviseur g*(x) compatible avec g(x), @=1 un premier polynôme multiplicatif fi(x) et un deuxième polynôme multiplicatif f2(x), un nombre entier r#1, un nombre entier m multiple du plus petit entier m' tel que le premier polynôme g(x) divise xm'+1, est caractérisé en ce qu'il comporte : - une opération de constitution d'une "première" séquence, dite "séquence a" représentée par un polynôme a(x) dit "premier polynôme" dont les r.m-t premiers coefficients d'ordre croissant sont les données binaires à coder et dont les t derniers coefficients sont choisis de telle manière que le polynôme g(x) divise le polynôme a(x) - une opération de constitution d'une deuxième séquence dite "séquence b" représentée par un polynôme b(x) égal au produit du premier polynôme a(x) par le premier polynôme multiplicatif f1(x), le tout divisé par le premier polynôme diviseur g(x), - une opération de permutation, travaillant sur des données binaires de la première séquence a pour former une séquence dite "permutée" a* représentée par un polynôme dit "permuté" a*(x), dont les coefficients d'ordre croissant sont les données binaires de la séquence permutée a*, et qui est divisible par le second polynôme diviseur g*(x), - une opération de constitution d'une troisième séquence dite "séquence c" représentée par un polynôme c(x) égal au produit du polynôme permuté a*(x) par le second polynôme multiplicatif f2(x), le tout divisé par le second polynôme diviseur g*(x). L'invention vise également sous un quatrième aspect un procédé de décodage, caractérisé en ce qu'il met en #uvre au moins une permutation créée par un procédé selon l'exposé précédent. Selon des dispositions particulières de mise en #uvre de ces procédés, éventuellement utilisées en conjonction, - la matrice initiale S comporte 2401 éléments et est découpée en 7 colonnes de 343 lignes, chacune de ces 7 colonnes étant elle-même découpée en 7 sous-colonnes de 49 éléments. - l'alphabet sur lequel est défini le turbocode contient q lettres, avec q une puissance d'un nombre premier, l'alphabet recevant la structure du corps de Galois à q éléments. On comprend en résumé que par l'utilisation simultanée de trois techniques différentes, il est possible de concevoir des entrelaceurs efficaces pour turbocodeur. La première de ces techniques est l'utilisation de petits entrelaceurs locaux appelés entrelaceurs verrou. La seconde technique modifie dans chaque colonne la position des blocs de données permutés localement par les entrelaceurs verrou. La troisième technique est une méthode spécifique pour choisir les différents entrelaceurs verrou utilisés pour chaque colonne dans la conception de l'entrelaceur global. Les entrelaceurs globaux obtenus vérifient en outre une propriété dite dans la suite de la description "de retour à zéro". Ceci signifie que lorsque les deux codeurs convolutifs élémentaires du turbocodeur sont dans l'état nul au début du codage d'une séquence d'information, ils seront tous deux simultanément dans l'état nul à la fin du codage de chaque séquence d'information. Plus précisément, lors du turbocodage, on construit une séquence dont la représentation polynomiale a(x) est divisible par un polynôme de rétroaction 1-1 (également dit polynôme diviseur) g(x)=1+g,x + x' du turbocodeur, par ,I simple ajout de bits bien choisis en nombre égal au degré du polynôme g(x), à la fin d'une séquence d'entrée u(x). Soit a*(x) la représentation polynomiale de la séquence a(x) entrelacée. On dit qu'un entrelaceur vérifie la propriété de retour à zéro (RZ) si, à chaque fois que a(x) est divisible par g(x), le polynôme a*(x) correspondant est aussi divisible par g(x). Plus généralement, on considère le cas où les deux polynômes de rétroaction notés g(x) et g*(x) (également dits premier et second polynômes diviseurs) ne sont pas obligatoirement égaux. On dit alors qu'un entrelaceur vérifie la propriété RZ si, à chaque fois que a(x) est divisible par g(x), le polynôme a*(x) correspondant est divisible par g*(x). Cette dernière définition n'a toutefois de sens que si g(x) et g*(x) ont la propriété suivante :si g(x)=(x - x, ) est la factorisation complète de g(x) dans un corps d'extension du corps à deux éléments, alors la factorisation complète de g*(x) est (x - x, 'l) ou xm*+1, g*(x) ne peut être compatible avec g(x) que si m=m*. Considérons par exemple la factorisation g(x)=(x-a)(x-a')(x-a4) de g(x)= x3+x+1 où a est une racine primitive septième de l'unité et appartient au corps contenant huit éléments. Considérons les six automorphismes (p, : a-3a' de ce corps à huit éléments. On vérifie que ci, 2 et ((J4 produisent g*(x) =g(x) alors que ((J3, CP6 et 5 produisent g*(x)= x3+xz+I qui se factorise comme g*(x)=(x-d)(x-a6)(x-d). L'invention vise également un dispositif employant un procédé d'entrelacement et de désentrelacement tels que ceux succinctement présentés ci-dessus. L'invention vise encore un dispositif de transmission de données comportant un émetteur adapté à mettre en oeuvre un protocole de transmission par paquets, comportant un dispositif tel qu'exposé ci-dessus Dans un mode particulier de réalisation, le dispositif de transmission de données est tel que ledit protocole est le protocole ATM, Asynchronous Transfer Mode. Dans un autre mode de réalisation, le protocole est le protocole IP (Internet Protocol). L'invention vise plus généralement un téléphone, un appareil photographique, une imprimante, un scanner, une caméra, un ordinateur, un télécopieur, un téléviseur, un lecteur audio/vidéo, caractérisés en ce que ces dispositifs comportent un dispositif tel qu'exposé brièvement ci-dessus. L'invention vise également un moyen de stockage d'informations et un moyen de stockage d'informations amovible, partiellement ou totalement, lisibles par un ordinateur ou un microprocesseur conservant des instructions d'un programme informatique, permettant la mise en oeuvre du procédé exposé succinctement ci-dessus La description et les dessins qui suivent permettront de mieux comprendre les buts et avantages de l'invention. Il est clair que cette description est donnée à titre d'exemple, et n'a pas de caractère limitatif. Dans les dessins : - la figure 1 est un schéma fonctionnel d'un turbocodeur utilisant un entrelaceur susceptible d'avoir la propriété RZ; - la figure 2 est une table des poids de séquences homogènes encodées (a b c) en fonction de la portée globale de la,séquence simplifiée v ; - la figure 3 représente une division d'une matrice A en 49 sous colonnes Al1l2 ; - la figure 4 est une table de 28 septuples h avec ho=O et h1=1; - la figure 5 est une représentation de la matrice A ; - la figure 6 illustre une permutation des sous-colonnes de la matrice A ; - la figure 7 illustre une permutation plus efficace des sous-colonnes de la matrice A ; - la figure 8 illustre une représentation simplifiée d'une permutation des sous-colonnes d'une autre matrice A ; - la figure 9 montre des courbes de taux d'erreur bit (BER) après décodage en fonction du rapport signal sur bruit (Eb/No) exprimé en décibels, pour quatre nombres d'itérations de décodage différents ; - La figure 10 représente, schématiquement, un dispositif de codage adapté à mettre en #uvre le mode de réalisation préféré de la présente invention, - la figure 11est un schéma fonctionnel d'un turbodécodeur classique - la figure 12 représente, schématiquement, un dispositif de décodage adapté à mettre en #uvre le mode de réalisation préféré de la présente invention, - la figure 13 représente un organigramme de fonctionnement du dispositif de codage illustré en figure 10, - la figure 14 représente un organigramme de fonctionnement du dispositif de décodage illustré en figure 12. Avant de décrire un mode particulier de réalisation de la présente invention, nous donnons ci-dessous une présentation mathématique de son fonctionnement, explicitée sur des exemples. Un turbocodeur de taux 1/3 est caractérisé par quatre polynômes : g(x) et g*(x) (dits polynômes de rétroaction), fi(x) et f2(x), une longueur de trame n et un entrelaceur. La figure 1 illustre un turbocodeur de taux 1/3. Une information entrante u(x) est codée en trois séquences : - une première séquence a(x) est la séquence initiale u(x) complétée par des bits d'ajout (opération dite de padding) pour assurer la divisibilité de la séquence complétée par le polynôme de rétroaction g(x). - une seconde séquence b(x)=a(x).f1(x)/g(x). Ces deux premières séquences sont obtenues en sortie d'un premier codeur élémentaire 102. - une troisième séquence c(x) = a*(x).f2(x)lg*(x) où a*(x) est la description polynomiale de la version entrelacée de a(x), et où g*(x) doit alors vérifier les conditions de factorisation telles que mentionnées ci-dessus. La seconde séquence b(x) codée par le premier codeur élémentaire 102 est obtenue dans un registre à décalage effectuant une multiplication par f1 et une division par le premier polynôme de rétroaction g utilisé dans le turbocode. Le degré de f1 est souvent 2,3 ou 4 pour faciliter la conception du décodeur. Le calcul de la troisième séquence c(x) obtenue en sortie d'un second codeur élémentaire 103, utilise au préalable un entrelaceur 101 qui mélange les coefficients de la séquence a pour produire une séquence entrelacée a*, ainsi qu'un registre à décalage effectuant une multiplication par f2 et une division par le second polynôme de rétroaction g*. On obtient en sortie du second codeur élémentaire 103 une séquence c= a*.f2/g*. De même on souhaite généralement que f2 soit de degré 2,3 ou 4 sinon le décodage est de plus en plus complexe. Afin que c(x) soit de longueur finie, on utilise un entrelaceur garantissant le retour à zéro, tel que défini plus haut. Comme on l'a dit plus haut, un entrelaceur qui garantit que pour tout polynôme a(x) divisible par g(x), le polynôme entrelacé correspondant a*(x) est aussi divisible par g*(x) est appelé un entrelaceur RZ (Retour à Zéro). Le but de la présente invention est de proposer une méthode de construction d'entrelaceurs RZ produisant des turbocodes ayant une bonne distance minimale. Supposons d'abord que g(x)= g*(x). On va décrire ici en premier lieu la classe d'entrelaceurs qui préserve après entrelacement la divisibilité d'une séquence a(x) par le polynôme g(x). Puis on présentera les conditions qui sont impliquées dans la construction des entrelaceurs selon la présente invention. Enfin on combinera ces éléments pour réaliser un entrelaceur efficace. C'est, entre autres, pour conférer à tous les bits d'informations d'une trame, une probabilité d'erreur après décodage égale ou à peu près égale que nous choisissons de construire des entrelaceurs RZ. On peut démontrer qu'un entrelaceur garantit que tout polynôme a(x) divisible par g(x) est tel que le polynôme entrelacé correspondant a*(x) est aussi divisible par g(x) si il peut être exprimé de la façon suivante : 1. Le nombre n de caractères binaires sur lesquels il agit est un multiple de m (plus petit entier tel que le polynôme g(x) divise le polynôme 1 + x m ). Pour ce faire, on complète la séquence a(x) par des zéros pour atteindre une longueur acceptable n. 2. En supposant alors n = r.m, on associe à chaque séquence a=y" ax' la matrice A de taille r. m (r lignes et m colonnes) dont l'élément en position (j,k), 0 3. A partir de A on construit la matrice A* en appliquant à A une combinaison quelconque de permutations des deux types suivants : - une permutation quelconque agissant dans une quelconque des m colonnes de la matrice A, - une permutation des colonnes entre elles, cette permutation étant un automorphisme du code cyclique linéaire de longueur m et de polynôme générateur g. Il faut donc que cette permutation transforme tout mot de code de ce code cyclique en un mot de ce code cyclique. 4. Soit a*j,k l'élément en position (j, k) de la matrice A* ainsi obtenue. La version entrelacée a*(x) de a(x) est définie par : En général une procédure d'entrelacement remplaçant a(x) par a*(x) (ou de façon équivalente A par A*) peut s'exprimer de façon compacte par une matrice S* de type r.m dont l'ensemble de tous les éléments s*j,k (où j est l'indice ligne et k l'indice colonne) est l'ensemble de tous les entiers de 0 à r.m- 1. Deux interprétations sont possibles pour spécifier un entrelaceur à partir de S. La première est de définir la séquence entrelacée a*(x) par Et la seconde est de définir a*(x) par On peut vérifier que si un de ces deux entrelaceurs est de type RZ alors l'autre l'est aussi. Les conditions données ci-dessus pour qu'un entrelaceur soit de type RZ s'exprime alors comme suit en termes de propriétés de la matrice S*: - le résidu modulo m des éléments d'une colonne quelconque de S* est constant, - soit (ro,...,(m-1) le m-uple de ces résidus; ce m-uple doit être obtenu à partir du m-uple (0,1,...,m-1) par action d'une permutation qui est dans le groupe d'automorphisme du code cyclique binaire de longueur m et de polynôme générateur g(x); - il n'y a pas de restrictions sur l'ordre des éléments d'une colonne de S*. Parmi les deux interprétations de la matrice S* données ci-dessus, c'est la seconde qui a notre préférence. Plus généralement, comme on l'a dit plus haut, l'entrelaceur peut transformer tout a(x) multiple de g(x) en un a*(x) multiple de g*(x) lorsque g*(x) est compatible avec g(x). La représentation par la matrice S* d'un tel entrelaceur est semblable à ce qui vient d'être dit mais les conditions à satisfaire par S* sont légèrement différentes : le m-uple (ro, ...,rm-1) doit être maintenant obtenu à partir du m-uple (0,...,m-1) par action d'une permutation qui transforme le code cyclique binaire de longueur m et de polynôme générateur g(x) en le code cyclique binaire de longueur m et de polynôme générateur g*(x). La suite de l'exposé est faite en supposant que g(x) = g*(x), mais on peut bien sûr l'adapter au cas où ces deux polynômes sont obtenus à partir l'un de l'autre par l'action d'un automorphisme de corps comme expliqué plus haut. Dans le cas g(x) = g*(x) on peut d'ailleurs aussi appliquer une modification de l'ordre dans lequel apparaissent les colonnes de S*, à condition que cette permutation soit un automorphisme du code cyclique de longueur m engendré par g(x). On introduit ici la notion de portée de polynôme (en anglais "span"), ainsi que de portée totale (en anglais "full span"). Etant donné un polynôme a(x) comportant un nombre pair de coefficients non nuls a( =,,', 1={i1, r2, ...,r2s, Ir impair: spray = (i2-il) + (l4-!3J+...+(!2s-!2s-,) Ce polynôme a(x) étant alors transformé par la seconde méthode décrite plus haut en polynôme a*(x), la portée sp(a*) est calculée de façon identique. On définit alors la portée totale fsp(a) comme la somme de la portée de a et de la portée de a*. Supposons alors un entrelaceur de type retour à zéro défini par une matrice S* avec la seconde des deux interprétations mentionnées ci-dessus, et considérons une séquence a(x) = #i#lx' dont les éléments non nuls sont tous dans la même colonne k de la matrice A (tous les i ont le même reste k dans leur division par le nombre m de colonnes de A). Dans ce cas, une telle séquence a(x) est dite homogène, et est divisible par g(x) si et seulement si elle contient un nombre pair d'éléments non nuls. On comprend alors aisément que a(x) est divisible par xk, et que a(x)/xk est un polynôme en x"' : v(x') = a(x)/ / Le polynôme v(x) sera appelé la version simplifiée de a(x). De façon semblable, il existe k* dans 0, ...,m-1} tel que a*(x) est divisible par xk* et que a*(x)l xk* est un polynôme en xm: v*(xm)= a*(x)l xk*. Le polynôme v* (x) appelé la version simplifiée de a*(x). On peut alors établir que si a(x) est séquence homogène, la connaissance de la portée totale fsp(v) de la séquence simplifiée correspondante, permet de déterminer le poids de la séquence codée (a, b, c) obtenue à partir de la séquence a, lorsque m est égal à 2t-1 où t est le degré de g(x). Par exemple, avec g(x)=1+x2+x3 (ce qui implique m=7), f(x)=1+x+x2+x3, f2(x)=1+x+x3, pour a(x) séquence homogène de poids 2, le poids de la séquence codée (a(x), b(x), c(x)) est toujours de 4.fsp(v) + 6. Plus généralement, si a(x) est une séquence homogène comprenant un nombre pair égal à w, d'éléments non nuls, et si v(x) est le polynôme simplifié associé, avec fi(x), f2(x) et g(x) tels que précédemment définis, le poids de la séquence codée correspondante est égal à 4 fsp(v) +3.w. Par ailleurs, il est clair qu'une limite inférieure existe pour la portée totale fsp(v). Elle est égale au poids de Hamming du polynôme v(x) (égal au poids de a (x)) Il est alors possible à partir de ces remarques de constituer une table fournissant pour divers poids de Hamming de la séquence homogène a (notés WH(a)) les poids de Hamming WH(a,b,c) des séquences codées (abc) en fonction de la portée totale fsp(v) (voir figure 2). A titre d'exemple, comme on le voit sur la figure 2, si WH(a) est égal à 2 et si on souhaite une distance minimale au moins égale à 34, il est indispensable que la séquence simplifiée correspondante v ait une portée totale fsp(v) au moins égale à 7. Par contre, si le poids de Hamming WH(a) de la séquence a ,est de 6, la condition d'avoir une distance minimum au moins égale à 34 ne produit aucune condition supplémentaire sur la portée totale, cette condition de distance étant alors toujours remplie. En partant alors d'une matrice A de type (r, m) associée à une séquence a(x) choisie multiple d'un polynôme g(x) diviseur de xm+1, chaque colonne de A est découpée en l sous-colonnes notées Al1l2 (voir figure 3) et appelées "sousséquences colonne". Dans le but d'utiliser sur chaque sous-colonne ainsi déterminée un entrelaceur verrou, ainsi que défini précédemment, il est nécessaire que la valeur r/l ne soit pas un nombre premier (sinon il n'est pas possible de représenter cette séquence sous forme d'une matrice à au moins deux lignes et deux colonnes). On peut donc écrire r/l = N.M avec M>2. De plus, on verra ultérieurement que les méthodes de synthèse d'entrelaceur selon la présente invention nécessitent N#M. Par nature les coefficients a, d'une sous-colonne Al1l2 auront pour indices : io, io+m, io+2m, ..., io+m(r-/)// avec io= li (m rli) +/2. Pour conserver des notations raisonnables, nous représenterons toute ( /1-1 telle sous séquence colonne par y(x) = 2=Ca,o;/II, )xl ou, en posant y=a,O+mi, par Il) /\Ili 1 - y(x) ~ y, x' avec et rll=NM ,-il On associe alors à l'ensemble de toutes les telles séquences y(x) une matrice Z à N lignes et M colonnes qui jouera le même rôle pour les entrelaceurs "microscopiques" que la matrice S pour l'entrelaceur "macroscopique". L'action d'un entrelaceur microscopique sur l'ensemble des séquences y(x) est représenté par une autre matrice Z*, à N lignes et M colonnes. Cette matrice Z* joue le même rôle pour les entrelaceurs microscopiques que la matrice S* pour les entrelaceurs macroscopiques. Il est à noter que ces entrelaceurs microscopiques n'ont pas à assurer de "Retour à Zéro" d'aucune sorte, puisque la condition de divisibilité est à vérifier au niveau de l'entrelaceur macroscopique. Cependant, on choisit de restreindre les permutations Z#Z* à celles obtenues par réalisation d'une permutation circulaire dans chaque colonne de Z. Un tel entrelaceur microscopique est appelé pour la suite de la description un entrelaceur verrou (par analogie avec les verrous à rotation de bagues numérotées parallèles). Du fait de la nature d'une permutation circulaire, une telle matrice Z* (et donc l'entrelaceur verrou associé à Z et Z*) est totalement défini par la connaissance de l'amplitude de la permutation réalisée dans chaque colonne. Un entrelaceur verrou peut donc être défini par un M-uple h=(ho,..., hM-1) comprenant les valeurs d'amplitude de la permutation circulaire vers le bas effectuée dans chaque colonne de Z pour obtenir Z*. On rappelle pour la suite que ce type d'entrelaceur verrou va être utilisé pour entrelacer (permuter) des éléments d'une sous-séquence colonne de A. Etant donné la façon dont a été choisi le nombre de colonnes de A, la propriété de retour à Zéro (RZ) de l'entrelaceur macroscopique résultant sera fournie en sus. Comme on l'a dit plus haut, cette propriété RZ reste assurée si est appliquée une modification de l'ordre dans lequel apparaissent les colonnes de A à condition que cette modification soit un automorphisme du code cyclique de longueur m et de polynôme générateur g(x). Cette technique est la première des trois techniques mentionnées cidessus pour produire des entrelaceurs efficaces. Par exemple, dans la cas N=M=7, qui correspond à des sous-séquences colonne de longueur 49 (ayant 49 éléments), pour permettre au turbocode généré une distance minimale égale à 34, il faut que chaque entrelaceur microscopique Z#Z* garantisse que fsp(y) soit supérieure ou égale à 7, pour chaque séquence simplifiée y de poids de Hamming égal à 2, et une portée totale fsp(y) supérieure ou égale à 6 pour chaque séquence simplifiée de poids de Hamming égal à 4. Avec N # M # 2, on peut démontrer que tout entrelaceur verrou Z# Z* de taille NM décrit par un M-uple h tel que défini plus haut, a la propriété que toutes les séquences simplifiées y(x) de poids de Hamming égal à 2 ont leur portée totale fsp(y) supérieure ou égale à la valeur M dès que les M éléments de h sont de valeur différente (ce qui revient à dire que l'on doit appliquer des permutations circulaires de valeurs différentes sur toutes les colonnes de la représentation matricielle de la sous-séquence colonne). En revenant alors au cas N=M=7, on a a priori 77combinaisons de permutations circulaires possibles sur les 7 colonnes , mais en fait seules 7!, soit 5040 vérifient la condition fsp(y) supérieur ou égal à 7 pour chaque séquence simplifiée y(x) de poids 2. En supposant alors que T1 et T2 sont deux matrices circulantes (matrice dont chaque colonne se déduit de la précédente par décalage (rotation) d'un cran vers le bas) de type M x M, telles que la première colonne de T! est [1,- 2,1, 0, ..., 0]' et la première colonne de T2 est [2,-2,0, ...,0]', on peut démontrer la propriété suivante : avec N > M # 6, tout entrelaceur verrou Z#Z* de taille NM décrit par un M-uple h tel que défini plus haut, a la propriété que toutes les séquences simplifiées y(x) de poids de Hamming égal à 4 ont leur portée totale fsp(y) supérieure ou égale à la valeur 6 dès que les restes modulo N de hT1 et de hT2 ne contiennent pas de composante nulle. En revenant encore au cas N=M=7, on peut déterminer les septuples h vérifiant à la fois les deux propriétés précédentes. Par exemple pour une première composante nulle (pas de permutation circulaire de la première colonne), on a exactement 168 septuples satisfaisant ces propriétés. Pour le cas où de plus h1=1 (permutation circulaire d'amplitude égale à un de la deuxième colonne), on a 28 tels septuples satisfaisant aux deux propriétés (voir la table de la figure 4). Par exemple, on démontre que les septuples suivants satisfont aux conditions énoncées : h()=(0643 25), h(2)=(051 6243), h(3) =(0 45236 1) h(4)=(0 3 2 5 4 1 6), h(5)=(0 2 6 1 5 3 4), h(6)=(01 3 4 6 5 2) ce dernier septuple étant le dernier élément de la figure 4. Dans un autre exemple (avec M=5), si l'on souhaite obtenir un turbocode ayant une distance minimale de 42, on voit sur la table de la figure 2 que ceci implique que pour des séquences y de poids 2, la portée totale fsp(y) soit supérieure ou égale à 9 et pour des séquences de poids 4, la portée totale fsp(y) soit supérieure ou égale à 8. On remarque aussi que la condition fsp(y) #42 est toujours vérifiée pour les séquences de poids 6 ou plus. On cherche alors à construire des entrelaceurs Z#Z* où Z et Z* sont des matrices à N lignes et 5 colonnes. Il faut donc spécifier des entrelaceurs verrou par des 5-uples h=[ho, h1, h2, h3, h4] de nombres h, compris entre 0 et N-1 (bornes incluses), telles que la portée totale fsp(y) de toute séquence simplifiée y(x) de poids 2 soit supérieure ou égale à 9 et que la portée totale fsp(y) de toute séquence simplifiée y(x) de poids 4 soit supérieure ou égale à 8 (voir figure 2). On peut vérifier que ceci est réalisé pour toutes les séquences y(x) de poids 2, si et seulement si deux composantes h,, h, quelconques de h sont telles que leur différence modulo N est en valeur absolue supérieure strictement à 1 (ni zéro, ni -1, ni 1). Pour vérifier la condition pour toutes les séquences de poids 4, on peut mettre en évidence quelques conditions nécessaires à remplir par les m-uples h remplissant déjà la condition pour les séquences de poids 2, et en se restreignant au cas où la première composante ho est nulle (pas de permutation circulaire de la première colonne de Z pour obtenir la première colonne de Z*). Supposons en effet que T1, T2, ... T7 sont sept matrices circulantes de type M x M, comprenant respectivement comme premières colonnes, pour T1 [1, -2, 1, 0, 07', pour T2:[2, -2, 0, 0, 0]\ pour T3 : [2, -1, -1, 0, 0]', pour T4 : [1, -1, -1, 1, 0]', pour T5 : [1, 1, -2, 0, 0]', pour T6.- [1, 0, -2, 1, 07', pour T7 : [1, -2, 0, 1, 0] '. Une première condition nécessaire est que pour i=1 à 7, le reste modulo N de hT, n'ait pas de composante égale à 0,1 ou-1. En introduisant une matrice circulante 5 x 5 T8 de première colonne [1, 1, - 1, -1, 0]', une seconde condition nécessaire est que le reste modulo N de hT8 n'ait pas de composante égale à 1 ou-1. En introduisant une matrice circulante 5 x 5 T9 de première colonne [1, -1, 1, -1, 0]', une troisième condition nécessaire est que le reste modulo N de hTg n'ait pas de composante égale à 0 ou 1. On vérifie alors que pour N=26, ces conditions (nécessaires) sont également suffisantes et que pour N égal ou inférieur à 25 ces conditions ne sont jamais satisfaites. Pour N=26, il existe 120 quintuples satisfaisant les conditions énoncées. Ces quintuples sont tous les multiples non nuls modulo 26 des 10 quintuples suivants : 0 2 6 22 8 0 2 8 20 16 0 2 10 16 12 0 2 10 22 6 0 2 12 8 20 0 2 16 12 18 0 2 18 14 6 0 2 20 6 22 0 2 22 6 18 0 2 22 14 10 On a explicité dans les pages précédentes une méthode de construction d'entrelaceurs microscopiques satisfaisant des conditions nécessaires permettant à la distance minimale du turbocode généré par l'entrelaceur macroscopique associé d'être supérieure à une valeur prédéterminée. En se basant alors sur les entrelaceurs verrou définis plus haut pour les sous colonnes Al1l2, on suppose ici qu'un entrelaceur verrou identique Z#Z* est utilisé pour toutes les sous-colonnes. Dans ce cas l'entrelaceur global est tel que le turbocode correspondant contient en assez grand nombre des séquences de très faible poids. En effet, avec g(x)=1+x2+x3, f1(x) = 1 +x++)(3 et f2(x)=1+x+x3 tels que considérés plus haut, un polynôme de la forme a(x)=x7'.g(x) vérifie a*(x) =x7j.g(x), pour un certain j. En conséquence, le poids de Hamming correspondant à la séquence encodée (a, b, c) est seulement de 10, ce qui est une valeur assez faible. On définit ici la notion de portée sp(a) et de portée totale fsp(a) pour des trinômes a(x) =xi + xj + Xk avec i A la suite de l'action d'un entrelaceur verrou sur chacune des souscolonnes Al1l2 on obtient une matrice A*. Comme chaque sous-colonne Al1l2 permutée par un entrelaceur verrou conserve jusqu'à présent la même position relative dans A* que dans A, cette matrice A* est encore représentée par le même tableau, par exemple celui donné à la figure 5, que la matrice A. Dans le but d'éviter certaines séquences codées de faible poids comme celles de poids 10 mentionnées ci-dessus, on va aussi modifier la matrice A* obtenue jusqu'à présent en permutant entre elles les sous-colonnes d'une même colonne. On peut alors montrer sur des exemples que toutes les permutations permutant entre elles les sous-colonnes de chaque colonne ne sont pas équivalentes en terme de distance minimale du turbocode obtenu. En particulier, on observe qu'il est souhaitable d'éviter, outre la situation a(x)=x7'.g(x), a*(x) =x 7j. g(x), mentionnée ci-dessus, toute situation du type a(x)=(x'+x'+x').g(x) et a*(x)=(x'*+x'*+xk*).g(x) car le poids de la séquence codée correspondante est égal à 30, et donc strictement inférieur à 34, qui est la distance minimale souhaitée. Une permutation des sous-colonnes de A* qui évite la première des situations défavorables qui viennent d'être évoquées est représentée à la figure 6. La présence dans la figure 6 de la paire (il, l2) dans la position occupée à la figure 5 par la paire (k1, k2) veut dire que la sous-colonne (A*)k1k2 est déplacée dans la position préalablement occupée par la sous-colonne (A*)l1l2. En particulier, dans l'exemple donné, la sous-colonne (A*)01 est déplacée dans la position initiale de (A *)5', la sous-colonne (A *) 2 est déplacée dans la position initiale de (A*)32, la sous-colonne (A*)03 est déplacée dans la position initiale de (A*)3', ..., , la sous-colonne (A*)10 reste où elle est, ..., , la sous-colonne (A*)66 est déplacée dans la position initiale de (A*)16. Cette permutation a toutefois le défaut de ne pas éviter la seconde situation défavorable mentionnée ci-dessus. En effet, avec q=rll, g(x), fi(x), et f2(x) comme ci-dessus, la séquence a(x=(x3l+'+xs'+j+xGl).g(x) produit a*(x)=(>?+yr+2+x6r).g(X), et on vérifie que la séquence codée correspondante à un poids de 30. Considérons, au contraire, la permutation des sous-colonnes de A* entre elles qui est donnée à la figure 7. Dans ce cas la seconde situation défavorable mentionnée ci-dessus est également évitée. En conséquence l'entrelaceur global induit par la figure 7 élimine du code beaucoup de séquences de poids # 30 et les remplace par des séquences de poids #34. Voici quelques détails sur la façon de trouver des permutations ayant cet effet. Dans ce but nous simplifions et généralisons les représentations des figures 5,6 et 7. Comme simplification nous omettons le second nombre l2 dans chaque paire l1,l2, car la valeur de l2 n'est pas modifiée par les permutations que nous considérons. Comme généralisation, nous acceptons que q puisse être strictement supérieur au nombre de colonnes. Avec ces deux conventions et q=8, une permutation des sous-colonnes entre elles qui a l'effet souhaité est donnée à la figure 8. On peut alors démontrer la propriété suivante : La deuxième situation défavorable mentionnée ci-dessus est évitée si il est impossible de trouver 9 paires (it, jt), (ir, lr+2) (lr jt+3) pour t compris entre 1 et 3, où les ir et les jr, sont des nombres entiers satisfaisant 0 S it s q-1 et 0 s h s 6 et où les additions se font modulo 7, telles que lorsque ces paires sont considérées comme les indices de ligne et de colonne des éléments de la matrice donnée à la figure 8, il y a exactement trois entiers différents apparaissant chacun dans trois des neuf positions ainsi obtenues. La matrice représentée à la figure 8 évite bien cette situation défavorable ainsi qu'on peut le vérifier par un programme en langage MATLAB fourni en appendice. De manière à améliorer encore le turbocode, on choisit d'utiliser un entrelaceur verrou différent pour chaque colonne de A. Considérons le cas où chaque sous-colonne Al1l2 contient 49 éléments, où A contient 7 colonnes et où chaque colonne contient 7 sous-colonnes. La longueur de la séquence a(x) correspondante est donc égale à 49 x 7 x 7 = 2401. On choisit de construire la matrice A* en permutant entre elles les souscolonnes de chaque colonne suivant la règle représentée par la figure 7. Ensuite, à chaque sous colonne Al1l2 de 49 éléments ayant une valeur fixée de l2, on associe un même entrelaceur verrou 7 x 7 spécifié par un septuple h=[ho, h 1, h2 h3, ha h5, /le]- Le choix de l'entrelaceur verrou associé à chaque sous colonne est réalisé comme suit : On numérote de 0 à 6 les colonnes de A et A*, et on utilise les septuples suivants : h(1)=(06431 25), h(2)=(051 6243), h(3)=(0 4 5 2 3 6 1) h(4)=(0 3 2 5 4 16), h(5) =(0 2 6 1 5 3 4), h(6)=(0 1 3 4 6 5 2). Chacun de ces septuples spécifie un entrelaceur verrou et le verrou spécifié par h(i) est utilisé pour permuter toutes les sous-colonnes de la colonne i(i=1,...,6) de A. Pour la colonne d'indice 0, les sous-colonnes sont permutées en utilisant un des six septuples définis, par exemple h(1). On a vu plus haut que ces septuples vérifient des conditions nécessaires pour que la portée globale d'une séquence simplifiée y(x) correspondant à une séquence homogène a(x) soit supérieure ou égale à 7 si le poids de Hamming de la séquence a(x) est égal à 2, et soit supérieur ou égal à 6 si le poids de Hamming de a(x) est égal à 4. La raison pour laquelle on choisit des entrelaceurs verrou différents dans chaque colonne de A est la suivante. Si on ne le faisait pas, il serait possible de choisir pour i fixé, un nombre j tel que la séquence a(x)=x(1+x')(I+x'+2+x'+3) soit entrelacée en a*(x)=x*{l-tx7J*)(J+x:'+x?) par un entrelaceur de type décrit par la figure 7. Dans ce cas, le poids de la séquence codée correspondante pourrait être strictement inférieur à 34. Dans un autre exemple, les sous-colonnes ont une "longueur" de 117 éléments, et sont placées en matrices 13 x 9, devant être entrelacées par des entrelaceurs verrous 13 x 9. L'entrelaceur global permute alors 117 x 49 soit 5733 bits d'information. Dans ce cas, pour i compris entre 1 et 12, on note h(i) le 9-uple suivant : h(i)=(O i 5i 7i 12i 8i11i 9i 3i) dont toutes les valeurs sont calculées modulo 13. Chaque tel 9-uple définit complètement un entrelaceur verrou (on rappelle qu'il donne par chacune de ses composantes l'amplitude de la rotation de chaque colonne d'une matrice à 9 colonnes) qui satisfait à une condition de portée globale fsp(y) > 9 pour toutes les séquences a de poids 2, et fsp(y) > 8 pour les séquences a de poids 4, ce qui permet d'espérer une distance minimale égale à 42 (voir figure 2). Pour cela, on utilisera par exemple des h(i) différents dans les 7 colonnes de A et on appliquera une permutation des colonnes entre elles du type de celle décrite par la figure 8. On obtient ainsi un turbocode adapté à coder des séquences binaires de longueur 5733 et spécifié comme dit plus haut par g(x)=1+x2+x3, f1(x) = 1 +X+X2+X3 et f2(x)= 9+x+x3 . Des simulations ont été réalisées dans le cas où on utilise un entrelaceur de longueur 2401 (premier exemple ci-dessus). Elles sont illustrées par la figure 9 qui donne pour quatre nombres différents d'itérations de décodage le taux d'erreur par bit (BER) en fonction du rapport signal sur bruit par bit (Eb/No exprimé en dB). On constate que le gain est très significatif pour des rapports signal/bruit déjà peu élevés, et que l'essentiel du gain est obtenu après 8 itérations. Il est clair que par rapport aux entrelaceurs habituellement utilisés, l'entrelaceur proposé dans la présente invention offre l'avantage majeur de garantir le retour à zéro simultané des deux codeurs élémentaires tout en garantissant une bonne distribution de distance du code, ce qui est un facteur intéressant lorsque le rapport signal sur bruit par bit Eb/No est élevé. La description d'un mode particulier de réalisation du dispositif mettant en #uvre la présente invention va maintenant se poursuivre en regard des figures 10 à 14. La figure 10 illustre schématiquement la constitution d'une station de réseau ou station de codage informatique, sous forme de schéma synoptique. Cette station comporte un clavier 911, un écran 909, une source d'informations externe 910, un émetteur hertzien 906, conjointement reliés à un port d'entrée/sortie 903 d'une carte de traitement 901. La carte de traitement 901 comporte, reliés entre eux par un bus d'adresses et de données 902 : - une unité centrale de traitement 900 ; - une mémoire vive RAM 904 ; - une mémoire non volatile 905 ; et - le port d'entrée/sortie 903. Chacun des éléments illustrés en figure 10 est bien connu de l'homme du métier des micro-ordinateurs et des systèmes de transmission et, plus généralement, des systèmes de traitement de l'information. Ces éléments communs ne sont donc pas décrits ici. On observe, cependant, que : - la source d'informations 910 est, par exemple, un périphérique d'interface, un capteur, un démodulateur, une mémoire externe ou un autre système de traitement d'information (non représenté), et est préférentiellement adaptée à fournir des séquences de signaux représentatifs de parole, de messages de service ou de données multimédia notamment de type IP ou ATM, sous forme de séquences de données binaires, - l'émetteur hertzien 906 est adapté à mettre en oeuvre un protocole de transmission par paquets sur un canal non filaire, et à transmettre ces paquets sur un tel canal. On observe, en outre, que le mot "registre" utilisé dans la description désigne, dans chacune des mémoires 904 et 905, 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). La mémoire vive 904 conserve des données, des variables et des résultats intermédiaires de traitement, dans des registres de mémoire portant, dans la description, les mêmes noms que les données dont ils conservent les valeurs. La mémoire vive 904 comporte notamment les registres suivants : - un registre "nb~données" dans lequel est conservée la longueur de la séquence de données à coder, - un registre "a", dans lequel est conservée a, la séquence de données à coder, incluant la séquence d'entrée u et les bits ajoutés (bits de padding) garantissant la divisibilité de la séquence a par g (la séquence d'entrée u n'étant pas nécessairement divisible par g, le premier codeur ajoute à la séquence d'entrée u un nombre de bits égal au degré de g formant ainsi la séquence a pour rendre cette dernière divisible par g) - un registre a* dans lequel est conservée la séquence entrelacée a*, - un registre a,b,c dans lesquels sont conservées les séquences résultant du turbo codage a, b et c, et - un registre "trame~radio" dans lequel est conservée l'intégralité de la trame radio à émettre. La mémoire non volatile 905 est adaptée à conserver, dans des registres qui, par commodité, possèdent les mêmes noms que les données qu'ils conservent : - le programme de fonctionnement de l'unité centrale de traitement 900, dans un registre "programme", - la séquence g, dans un registre "g", - la séquence f1, dans un registre "f1", - la séquence f2, dans un registre "f2", - la taille de l'entrelaceur n, dans un registre n - un registre "entrelaceur" dans lequel est conservé le tableau définissant l'entrelaceur, en fonction de la valeur de n, - la valeur m, de la période de g dans un registre m L'unité centrale de traitement 900 est adaptée à mettre en #uvre l'organigramme décrit en figure 13. En figure 11, on observe qu'un dispositif de décodage est essentiellement constitué de : - trois entrées douces 1001,1002 et 1003 de séquences a, b et c, estimations des séquences codées, - un premier décodeur 1004 correspondant au premier codeur élémentaire 102 (figure 1) et recevant les séquences a et b ainsi qu'une séquence d'information extrinsèque w4, initialisée à zéro, fournit une séquence d'estimation a posteriori w1, - un entrelaceur 1005, identique à l'entrelaceur utilisé dans le codeur, qui reçoit la séquence w1 et l'entrelace en w2, - un deuxième décodeur 1006, correspondant au deuxième codeur élémentaire 103 et recevant les séquences w2 et c, et fournit d'une part une séquence d'estimation a posteriori w3 et, d'autre part, une séquence estimée a', et - un désentrelaceur 1007, inverse de l'entrelaceur 1005, recevant la séquence w3 et fournissant la séquence w4. On ne prend en compte la séquence estimée a' qu'à la suite d'un nombre d'itérations prédéterminé (voir l'article "Near Shannon limit error-correcting coding and decoding : turbocodes" cité supra) . Conformément à la présente invention, les décodeurs 1004 et 1006 sont initialisés en prenant en compte le fait que les codeurs élementaires 102 et 103 possèdent, chacun, un état initial et un état final nul. La figure 12 illustre schématiquement la constitution d'une station de réseau ou station de codage informatique, sous forme de schéma synoptique. Cette station comporte un clavier 1111, un écran 1109, un destinataire d'informations externe 1110, un récepteur hertzien 1106, conjointement reliés à un port d'entrée/sortie 1103 d'une carte de traitement 1101. La carte de traitement 1101 comporte, reliés entre eux par un bus d'adresses et de données 1102 : - une unité centrale de traitement 1100 ; - une mémoire vive RAM 1104 ; - une mémoire non volatile 1105 ;et - le port d'entrée/sortie 1103. Chacun des éléments illustrés en figure 12 est bien connu de l'homme du métier des micro-ordinateurs et des systèmes de transmission et, plus généralement, des systèmes de traitement de l'information. Ces éléments communs ne sont donc pas décrits ici. On observe, cependant, que : - le destinataire d'informations 1110 est, par exemple, un périphérique d'interface, un afficheur, un modulateur, une mémoire externe ou un autre système de traitement d'information (non représenté), et est préférentiellement adapté à recevoir des séquences de signaux représentatifs de parole, de messages de service ou de données multimédia notamment de type IP ou ATM, sous forme de séquences de données binaires, - le récepteur hertzien 1106 est adapté à mettre en oeuvre un protocole de transmission par paquets sur un canal non filaire, et à transmettre ces paquets sur un tel canal. On observe, en outre, que le mot "registre" utilisé dans la description désigne, dans chacune des mémoires 1104 et 1105, 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). La mémoire vive 1104 conserve des données, des variables et des résultats intermédiaires de traitement, dans des registres de mémoire portant, dans la description, les mêmes noms que les données dont ils conservent les valeurs. La mémoire vive 1104 comporte notamment les registres suivants : - des registres "données~reçues , dans lesquels sont respectivement conservées les séquences reçues, - des registres "inf extrinsèques", dans lesquels sont respectivement conservées les séquences intermédiaires (voir figure 11) de décodage, - un registre "données~estimées"', dans lequel est conservée la séquence décodée a', - un registre "nb~itérations", dans lequel est conservée la valeur du nombre d'itérations effectuées par le turbo décodeur, - un registre nb~données dans lequel est conservée la longueur de la séquence à décoder. - un registre "trame~radio" dans lequel est conservée l'intégralité de la trame radio reçue. La mémoire non volatile 1105 est adaptée à conserver, dans des registres qui, par commodité, possèdent les mêmes noms que les données qu'ils conservent : - le programme de fonctionnement de l'unité centrale de traitement 1100, dans un registre "programme", - la séquence g, dans un registre "g", - la séquence f1, dans un registre "f1", - la séquence f2, dans un registre "f2", - la taille de l'entrelaceur ,n, dans un registre n , - un registre "entrelaceurs" dans lequel est conservé le tableau définissant l'entrelaceur et son entrelaceur inverse en fonction de n, - la valeur ,m, de la période de g dans un registre m - le nombre maximal d'itérations dans un registre nb-iteration-max L'unité centrale de traitement 1100 est adaptée à mettre en #uvre l'organigramme décrit à la figure 14. En figure 13, on observe que, à la suite d'une opération d'initialisation 1201 de type connu de l'homme du métier des systèmes comportant une unité centrale, au cours d'une opération 1202, l'unité centrale 900 attend qu'une séquence de symboles à coder lui soit transmise par la source d'information 910. On observe ici que la fin de cette séquence est marquée, soit par un délai assez long avant qu'un autre symbole ne soit transmis, soit par des informations possédant des valeurs particulières qui signifient que la séquence est achevée. Ensuite, au cours d'une opération 1203, l'unité centrale 900 détermine le nombre n' de symboles de la séquence qui sont à transmettre, en extrayant les symboles qui ne sont pas destinés à être transmis, selon des procédures connues. Puis, au cours d'une opération 1204, l'unité centrale effectue une opération de padding au cours de laquelle, à la fin de la séquence de symboles à transmettre, un nombre de symboles binaires égal au degré du polynôme diviseur g(x), est ajouté afin que la représentation polynomiale de cette séquence soit divisible par le polynôme g(x). Puis, parallèlement : - une opération dite de "stuffing" 1205 est effectuée, au cours de laquelle des symboles binaires de valeur nulle sont ajoutés à la fin de la séquence résultant de l'opération de padding, afin que le nombre n de symboles binaires de la séquence finale soit un multiple admissible du nombre m, qui est, on le rappelle, la plus petite valeur telle que le polynôme xm+1 soit divisible par le polynôme g(x) ; - une opération de choix d'entrelaceur 1206 est effectuée en fonction de sa longueur n. Ensuite, la séquence résultant de l'opération de stuffing 1205 est turbocodée au cours d'une opération de turbocodage 1207 mettant en oeuvre l'entrelaceur choisi au cours de l'opération 1206, le polynôme diviseur g(x) et les polynômes multiplicateurs f1(x) et f2(x). Puis, au cours d'une opération de retrait de bits de stuffing 1208 : - les bits de stuffing sont retirés à la fin de la séquence systématique et de la séquence de première parité pour former, respectivement, les séquences a et b. Enfin, au cours d'une opération 1209, les séquences a, b et c sont insérées dans des trames radio, elles modulent des signaux électromagnétiques et sont transmises sur un canal radio. L'opération 1202 est ensuite réitérée. En figure 14, on observe que, à la suite d'une opération d'initialisation 1301 de type connu de l'homme du métier des systèmes comportant une unité centrale, au cours d'une opération 1302, l'unité centrale 1100 attend qu'une trame radio lui soit transmise par le dispositif de codage et d'émission. On observe ici que la fin de cette trame radio est marquée, par des informations possédant des valeurs particulières. Ensuite, au cours d'une opération 1303, l'unité centrale 1100 détermine le nombre n et le nombre de bits de stuffing de symboles de la trame radio qui sont à décoder. Puis, en parallèle : - au cours d'une opération 1304, l'unité centrale 1100 effectue une opération de "stuffing" sur les deux premières séquences à décoder, en leur ajoutant des bits de stuffing et les bits de parité correspondants affectés d'une valeur de fiabilité la plus élevée possible correspondant à un bit dur nul de telle manière que la longueur de la séquence résultante soit égale à n, et - au cours d'une opération 1305, l'unité centrale 1100 effectue le choix de l'entrelaceur et de son entrelaceur inverse, en prenant en compte la valeur de n, en mémoire non volatile 1105. Ensuite, au cours d'une opération 1306, les trois séquences provenant, pour les deux premières de l'opération de stuffing 1304 et, pour la dernière de l'opération 1303, sont décodées selon des procédures de turbo décodage bien connues de l'homme du métier. Ici, ces procédures mettent en oeuvre les entrelaceurs choisis au cours de l'opération 1305, le polynôme diviseur g(x), les polynômes multiplicateurs f1(x) et f2(x), un nombre d'itérations inférieur ou égal au nombre d'itérations maximum autorisé et une initialisation des décodeurs élémentaires prenant en compte le fait que les états initiaux et finaux des codeurs sont nuis . Cette opération fournit une estimation de la séquence a'. Puis, au cours d'une opération 1307, les symboles ajoutés au cours de l'opération de stuffing 1304 et ceux provenant d'une opération de padding effectuée au codage (voir opération 1204), et qui sont, pour ces derniers, en nombre égal au degré du polynôme diviseur g(x), sont retirés de la séquence a' pour former la séquence transmise. Enfin, la séquence est transmise à la destination d'information 1310 et l'opération 1302 est réitérée. Selon une variante, la mémoire vive 904 (respectivement 1104) est amovible, partiellement ou totalement, et comporte, par exemple une bande magnétique, une disquette ou un compact disque réinscriptible. On note de façon générale que dans le procédé d'entrelacement tel que décrit, les données sont lues ligne par ligne (dans la matrice A) avant et après entrelacement. Il est clair par ailleurs que lors de la mise en oeuvre pratique du procédé d'entrelacement (ou de désentrelacement), on ne passe pas nécessairement par une étape de mise sous forme matricielle des données entrantes. Il est possible, en utilisant la table de permutation de l'entrelaceur (qui associe à chaque position d'entrée une position de sortie, après permutation), de travailler directement sur les données entrantes au fur et à mesure de leur arrivée. Le procédé reste cependant inchangé dans son principe. Bien entendu, la présente invention ne se limite pas aux détails des formes de réalisation décrits ici à titre d'exemple, mais s'étend au contraire aux modifications à la portée de l'homme de l'art. En particulier, elle s'étend au cas où l'alphabet sur lequel est défini le turbocode contient q lettres, avec q une puissance d'un nombre premier. L'alphabet peut alors recevoir la structure du corps de Galois à q éléments. De même, l'invention a été ici décrite en utilisant deux entrelaceurs. Il est clair qu'elle s'applique plus généralement au cas d'un code comportant plusieurs entrelaceurs avec des polynômes de rétroaction conformes à la description. Appendice Dans cet appendice, nous présentons le programme MATLAB destiné à éviter la deuxième situation défavorable mentionnée plus haut. Ce programme teste une matrice, a, telle celle donnée à la figure 8. Ce programme utilise une matrice appelée filt et un vecteur appelé zéro : filt =[ -110000000 0-11000000 000-110000 0000-11000 000000-110 0000000-11 ] ; zéro ==[ 000000 ]'; Il construit d'abord une matrice m parjuxtaposition de a avec ellemême: m=[ a a et il initialise un paramètre y à zéro : y=0; Il construit ensuite les ensembles de 9 paires d'indices (i,ii), (i, ii+2), (i, ii+3) U, jj), U, jj+2), U, jj+3) (k, kk), (k, kk+2), (k, kk+3) et construit le 9-uple d dont les éléments sont les éléments de la matrice m dans chacune des 9 positions ci-dessus, de (i, ii) à (k, kk+3) : i=0 ; while ((y= =0)+(i m(i,ii+3)]; j=i ; while ((y= =0)+(j = 2,j=j+1 ;jj=O; while ((y= =0)+(jj m (j,jj+3)]; k=j; while ((y==0)+(k while ((y==0)+(kk m (k,kk+2) m(k,kk+3)]; d=[aa bb cc]; Il réordonne les 9 éléments de d par ordre croissant : for iii=1 :8,for jjj=1 +iii:9,if d(üi)>d(jjj), side=d(iii);d(iii)=d{jjj);d(jjj)=side; end;end;end; et il vérifie que le nombre de paires d'éléments consécutifs égaux dans d n'est pas égal à 6. S'il l'est, il pose y = y+1 : qq=filt*d';q=[1 1 1 1 1 ]*(qq==zero); if q= =6,y=y+1 ;end; end;end;end;end;end;end; Si, à la fin du calcul, y est encore zéro, le test est positif et le programme pose m = a : if y= =0, m=a, end; REVENDICATIONS 1. Procédé de création d'une table de permutation, caractérisé en ce que ladite table fait correspondre à chaque rang d'entrée de 0 à r.m-1 un rang de sortie de 0 à r.m-1, ledit procédé comportant des étapes suivantes : E1- on considère une matrice S comportant r lignes et m colonnes, remplie ligne par ligne par les nombres successifs de 0 à r.m-1, E2- chaque colonne de ladite matrice S est découpée en un nombre prédéterminé / de sous-colonnes, tel que r/l ne soit pas premier, E3- les sous-colonnes de S en nombre égal à l.m sont désignées par Sl1l2 avec 0 sI, 1-1 et D E4- chaque sous-colonne Si, 12 est alors écrite sous la forme d'une matrice à N lignes et M colonnes (avec r/l= NM) et sous cette forme elle est entrelacée par un entrelaceur de type dit "verrou" défini par une permutation circulaire de chaque colonne de ladite matrice à N lignes et M colonnes, ledit entrelaceur n'étant pas l'identité, E5- cette matrice à N lignes et M colonnes est reconvertie, après lesdites permutations circulaires sur ses colonnes, en une sous-colonne S*l1l2 qui occupera dans une matrice S* la même place que celle qu'occupe Si, 12 dans la matrice S , E6- la table de permutation est constituée des couples formés chacun d'un élément de la matrice S et de l'élément de même position de la matrice S*. 2. Procédé selon la revendication 1 caractérisé en ce qu'il comporte également dans au moins une colonne l2 (0 3. Procédé selon l'une quelconque des revendications 1 à 2, caractérisé en ce que un même entrelaceur verrou est utilisé pour produire chacune des / sous-colonnes S*l1l2 d'une colonne donnée l2 de la matrice S*. 4. Procédé selon la revendication 3, caractérisé en ce que les souscolonnes d'au moins deux colonnes de la matrice S* sont produites par des entrelaceurs verrou différents. 5. Procédé selon la revendication 4, caractérisée en ce que les m entrelaceurs verrou utilisés pour produire les sous-colonnes de chaque colonne de la matrice S* sont différents. 6. Procédé selon l'une quelconque des revendications 1 à 5 caractérisé en ce qu'il comporte également une étape de modification de l'ordre d'apparition des colonnes de S*. 7. Procédé de permutation des symboles d'une séquence de données binaires, représentatives d'une grandeur physique, représentée par un polynôme a(x)= I:a l' X 111/+', à coefficients binaires, divisible par un premier (-1 polynôme diviseur g(x)=1+ Ig,x' + x', à coefficients binaires, fournissant une , nouvelle séquence de symboles binaires représentée par un polynôme a*(x)= (-1 "a "X5'1 , divisible par un second polynôme diviseur g*(x) = 1+" g *, Xl + Xl, 1=1 caractérisé en ce que S*j,k est l'élément en position (j,k) dans la matrice S* obtenue selon une quelconque des revendications 1 à 6, et m est un multiple du plus petit entier m'tel que le premier polynôme diviseur g(x) divise xm'+1. 8. Procédé de permutation des symboles d'une séquence de données binaires, représentatives d'une grandeur physique, représentée par un polynôme a(x)= a,x"'+A, à coefficients binaires, divisible par un premier t-\ polynôme diviseur g(x)=1+g,x' +x', à coefficients binaires, fournissant une nouvelle séquence de symboles binaires représentée par un polynôme a*M s. x 1111+' ., divisible par un second polynôme diviseur 0 9. Procédé selon l'une quelconque des revendications 7 à 8, caractérisé en ce que le second polynôme diviseur g*(x) est égal au premier polynôme diviseur g(x) 10. Procédé de codage caractérisé en ce qu'il comporte une opération de détermination d'une séquence a*, au cours de laquelle on met en #uvre au moins un procédé de permutation selon l'une quelconque des revendications 7 à 9. 11. Procédé de codage selon la revendication 10, travaillant sur des séquences de données binaires u représentatives d'information et prenant en compte un premier polynôme diviseur g(x)=1+ g,x' + Xl, un second ,-l polynôme diviseur g*(x) compatible avec g(x), un premier polynôme multiplicatif f1(x) et un deuxième polynôme multiplicatif f2(x), un nombre entier r #1, caractérisé en ce qu'il comporte : - une opération de constitution d'une "première" séquence, dite "séquence a" représentée par un polynôme a(x) dit "premier polynôme" dont les r.m-t premiers coefficients d'ordre croissant sont les données binaires à coder et dont les t derniers coefficients sont choisis de telle manière que le polynôme g(x) divise le polynôme a(x) - une opération de constitution d'une deuxième séquence dite "séquence b" représentée par un polynôme b(x) égal au produit du premier polynôme a(x) par le premier polynôme multiplicatif f1(x), le tout divisé par le premier polynôme diviseur g(x), - une opération de permutation, travaillant sur des données binaires de la première séquence a pour former une séquence dite "permutée" a* représentée par un polynôme dit "permuté" a*(x), dont les coefficients d'ordre croissant sont les données binaires de la séquence permutée a*, et qui est divisible par le second polynôme diviseur g*(x), - une opération de constitution d'une troisième séquence dite "séquence c" représentée par un polynôme c(x) égal au produit du polynôme permuté a*(x) par le second polynôme multiplicatif f2(x), le tout divisé par le second polynôme diviseur g*(x). 12. Procédé de décodage, caractérisé en ce qu'il met en #uvre au moins un procédé de permutation selon l'une quelconque des revendications 7 à 9. 13. Procédé de turbo-décodage caractérisé en ce qu'il met en #uvre au moins un procédé de permutation selon l'une quelconque des revendications 7 à 9. 14. Procédé adapté à décoder des séquences reçues après codage par le procédé de codage selon l'une quelconque des revendications 10 à 11. 15. Procédé selon l'une quelconque des revendications 1 à 14 caractérisé en ce que la matrice initiale S comporte 2401 éléments et est découpée en 7 colonnes de 343 lignes, chacune de ces 7 colonnes étant elle-même découpée en 7 sous-colonnes de 49 éléments. 16. Procédé selon l'une quelconque des revendications 1 à 15, caractérisé en ce que l'alphabet sur lequel est défini le turbocode contient q lettres, avec q une puissance d'un nombre premier, l'alphabet recevant la structure du corps de Galois à q éléments. 17. Entrelaceur (101) adapté à fournir, à partir d'une séquence a de données binaires représentatives d'une grandeur physique, associée à un polynôme a(x)= 2:> /,Á .x/1JI4Á divisible par un premier polynôme diviseur g(x), et dont les coefficients d'ordre croissant sont les données binaires de la séquence a, une séquence permutée a* associée à un polynôme a*(x) dont les coefficients d'ordre croissant sont les données binaires de la séquence a*, ledit polynôme a*(x) étant destiné à être divisé par un second polynôme diviseur g*(x) compatible avec le premier polynôme diviseur g(x), pour former une séquence de données binaires c, et a possédant un nombre de données binaires égal au produit d'un nombre entier r quelconque par l'entier m, m étant un multiple du plus petit entier m' tel que le premier polynôme diviseur g(x) divise xm'+1, caractérisé en ce que la séquence permutée a* est donnée par I> ,,1. ,A x'x'" où la matrice S* des s ;,k est produite selon l'une quelconque des revendications 1 à 6. 18. Entrelaceur (101) adapté à fournir, à partir d'une séquence a de données binaires représentatives d'une grandeur physique, associée à un polynôme a(x)= al Á .x 1111 th divisible par un premier polynôme diviseur g(x), et dont les coefficients d'ordre croissant sont les données binaires de la séquence a, une séquence permutée a* associée à un polynôme a*(x) dont les coefficients d'ordre croissant sont les données binaires de la séquence a*, ledit polynôme a*(x) étant destiné à être divisé par un second polynôme diviseur g*(x) compatible avec le premier polynôme diviseur g(x), pour former une séquence de données binaires c, et a possédant un nombre de données binaires égal au produit d'un nombre entier r quelconque par l'entier m, m étant un multiple du plus petit entier m' tel que le premier polynôme diviseur g(x) divise xm'+1, caractérisé en ce que la séquence permutée a* est donnée par Y-., -Y-., as* XIIll+A où la matrice S* des s*; est produite selon l'une 0 19. Dispositif de codage caractérisé en ce qu'il comporte un entrelaceur selon l'une quelconque des revendications 17 à 18. 20. Dispositif de codage selon la revendication 19, travaillant sur des séquences de données binaires u représentatives d'information et prenant en 1-1 compte un premier polynôme diviseur g(x=9+g,x +x', un second polynôme diviseur g*(x) compatible avec g(x), un premier polynôme multiplicatif f1(x) et un deuxième polynôme multiplicatif f2(x), un nombre entier r #1, un nombre entier m multiple du plus petit entier m'tel que le premier polynôme g(x) divise xm'+1, caractérisé en ce qu'il comporte : - des moyens de constitution d'une "première" séquence, dite "séquence a" représentée par un polynôme a(x) dit "premier polynôme" dont les rm-t premiers coefficients d'ordre croissant sont les données binaires à coder et dont les t derniers coefficients sont choisis de telle manière que le polynôme g(x) divise le polynôme a(x) - des moyens de constitution d'une deuxième séquence dite "séquence b" représentée par un polynôme b(x) égal au produit du premier polynôme a(x) par le premier polynôme multiplicatif f1(x), le tout divisé par le premier polynôme diviseur g(x), - des moyens de permutation, travaillant sur des données binaires de la première séquence a pour former une séquence dite "permutée" a* représentée par un polynôme dit "permuté" a*(x), dont les coefficients d'ordre croissant sont les données binaires de la séquence permutée a*, et qui est divisible par le second polynôme diviseur g*(x), - des moyens de constitution d'une troisième séquence dite "séquence c" représentée par un polynôme c(x) égal au produit du premier polynôme a(x) par le second polynôme multiplicatif f2(x), le tout divisé par le second polynôme diviseur g*(x). 21. Dispositif de décodage, caractérisé en ce qu'il met en #uvre au moins un entrelaceur selon l'une quelconque des revendications 17 à 18 et / ou un désentrelaceur correspondant à cet entrelaceur. 22. Dispositif de turbo-décodage caractérisé en ce qu'il met en #uvre au moins un entrelaceur selon l'une quelconque des revendications 17 à 18 et ou un désentrelaceur correspondant à cet entrelaceur. 23. Dispositif adapté à décoder des séquences reçues après codage par un dispositif de codage selon l'une quelconque des revendications 19 à 20. 24. Dispositif selon l'une quelconque des revendications 17 à 23, caractérisé en ce qu'il comporte un moyen de transmission adapté à transmettre, d'une part, la séquence a, et, d'autre part, un sous-ensemble des données des séquences produites par le codeur. 25. Dispositif de traitement de signaux représentatifs de parole, caractérisé en ce qu'il comporte un dispositif selon l'une quelconque des revendications 17 à 24. 26. Dispositif de transmission de données comportant un émetteur adapté à mettre en #uvre un protocole de transmission par paquets, caractérisé en ce qu'il comporte un dispositif selon l'une quelconque des revendications 17 à 25. 27. Dispositif de transmission de données selon la revendication 26, caractérisé en ce que ledit protocole est le protocole ATM, Asynchronous Transfer Mode. 28. Dispositif de transmission de données selon la revendication 26, caractérisé en ce que ledit protocole est le protocole IP, Internet Protocol. 29. Dispositif de transmission de données comportant un émetteur émettant sur un canal non filaire, caractérisé en ce qu'il comporte un dispositif selon l'une quelconque des revendications 17 à 28. 30. Station de réseau, caractérisée en ce qu'elle comporte un dispositif selon l'une quelconque des revendications 17 à 29.