Brevet FR2805103A1 — publié le 20010817

Procédé de permutation pour turbo-codage convolutif de données 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 également 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 permutation, faisant correspondre à chaque rang d'entrée de 0 à r.m- 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- les m colonnes de S sont désignées par S, avec 0 sl sm-9, E3- chaque colonne Si est alors écrite sous la forme d'une matrice à R lignes et M colonnes, où R et M vérifient RM=r, 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 à R lignes et M colonnes, ledit entrelaceur n'étant pas l'identité, E4- cette matrice à R lignes et M colonnes est reconvertie, après lesdites permutations circulaires sur ses colonnes, en une colonne S*# qui occupera dans une matrice S* la même place que celle qu'occupe S# dans la matrice S, E5- chaque colonne S*# de la matrice S* est permutée par une permutation circulaire, 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*. On comprend qu'on a bien ainsi créé une table de permutation qui fait correspondre à chaque rang d'entrée un rang de sortie, cette table de permutation pouvant alors être avantageusement être utilisée dans un dispositif de transfert de données, par exemple utilisant le turbocodage convolutif de données. Selon diverses dispositions favorables à un mise en #uvre efficace de l'invention, éventuellement utilisées en conjonction : - au moins deux colonnes de la matrice S* sont obtenues en utilisant des entrelaceurs verrou différents. - les m entrelaceurs verrou utilisés pour produire les m colonnes de la matrice S* sont tous différents. - le procédé comporte également une étape de permutation des colonnes de S* entre elles. - au cours de l'étape E5 au moins une colonne S*# de la matrice S* est permutée par une permutation circulaire différente de l'identité. 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)= a,kxm+k, à coefficients t-1 binaires, divisible par un premier polynôme diviseur g(x) = 1+ g,x' +x, à l=1 coefficients binaires, fournissant une nouvelle séquence de symboles binaires représentée par un polynôme a*(x)= aJ,kxS * Jk divisible par un second t-1 polynôme diviseur g*(x)= 1+g *, x' + x', l=1 caractérisé en ce que S*J,k est l'élément en position (j,k) dans la matrice S* obtenue selon un procédé tel qu'exposé succinctement ci-dessus, et m est un multiple du plus petit entier m' tel que le premier polynôme diviseur g(x) divise xm'+1. L'invention vise sous un autre 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)= '" a kXJm+k à coefficients t-I binaires, divisible par un premier polynôme diviseur g(x) = 1+ g,x' + xl, à l=1 coefficients binaires, fournissant une nouvelle séquence de symboles binaires représentée par un polynôme a *(x) = y , 1 as* t x Jm+k divisible 0 Selon un mode de réalisation particulier, qui procure une simplification de mise en #uvre, le second polynôme diviseur g*(x) est égal au premier polynôme diviseur g(x) L'invention vise sous encore un autre 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 #uvre au moins un procédé de permutation tel qu'exposé succinctement ci-dessus. Selon une mise en #uvre particulière du procédé de codage, travaillant sur des séquences de données binaires u représentatives d'information et t-1 prenant en compte un premier polynôme diviseur g(x)=9+g,x' + x', un l=1 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, ledit procédé 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 fi(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 un procédé de décodage mettant en #uvre au moins un procédé de permutation tel qu'exposé précédemment. L'invention vise de même un procédé de turbo-décodage mettant en #uvre au moins un procédé de permutation tel qu'exposé précédemment. Dans une mise en #uvre particulière des procédés exposés ci-dessus, la matrice initiale S comporte 2415 éléments et est découpée en 7 colonnes de 345 lignes, chacune de ces 7 colonnes étant elle-même réécrite sous la forme d'une matrice à 23 lignes et 15 colonnes. Selon une disposition avantageuse des procédés exposés ci-dessus, 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. L'invention vise sous encore un autre aspect un entrelaceur (ou dispositif de permutation) adapté à fournir, à partir d'une séquence a de données binaires représentatives d'une grandeur physique, représentée par un polynôme a(x)= za,,k x jm+k 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 a},kxs*Jk où la matrice S* des S* il est produite selon un procédé de création de table de permutation tel qu'exposé ci-dessus. Sous encore un autre aspect, l'invention vise un entrelaceur 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)= a} k X }m+k 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 Zi 2 aS, k xm+k où la matrice S* des s jx est obtenue selon un procédé de O"J"r-10"k"m-1 création de table de permutation tel qu'exposé ci-dessus. On note ici que les entrelaceurs obtenus vérifient une propriété dite dans la suite de la description "de retour à zéro". Ceci signifie que lorsque les 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 t-1 (également dit polynôme diviseur) g(x)=1+ L9x' + Xl du turbocodeur, par 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-xj est la factorisation complète de g(x) dans un corps (en , anglais : field) d'extension du corps à deux éléments, alors la factorisation complète de g*(x) est 11 (x - x, tp) où v est un automorphisme (noté 1 exponentiellement) dudit corps d'extension. Dans la suite un tel polynôme g*(x) sera dit compatible avec g(x). En particulier un polynôme est toujours compatible avec lui-même. On remarquera que deux polynômes compatibles ont le même degré. De plus, si m est le plus petit entier tel que le premier polynôme diviseur g(x) divise xm+1, et si m* est le plus petit entier tel que le second polynôme diviseur g*(x) divise 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-d)(x-a4) de g(x)= x3+x+l où a est une racine primitive septième de l'unité et appartient au corps contenant huit éléments. Considérons les six automorphismes 0, : a-xi de ce corps à huit éléments. On vérifie que ci, qJ2 et ([J4 produisent g*(x) =g(x) alors que ([J3, qJ6 et t ços produisent g*(x)= x3+x2+1 qui se factorise comme g*(x)=(x-a3)(x-a6)(x-as). L'invention vise également un dispositif de codage comportant un entrelaceur tel qu'exposé succinctement ci-dessus, et en particulier un dispositif de codage travaillant sur des séquences de données binaires u représentatives d'information et prenant en compte un premier polynôme diviseur t-1 g(x)=9+g,x' + xi, un second polynôme diviseur g*(x) compatible avec g(x), l=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, 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 fi(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). De même, l'invention vise un dispositif de décodage, mettant en #uvre au moins un entrelaceur tel qu'exposé ci-dessuset / ou un désentrelaceur correspondant à cet entrelaceur. L'invention vise encore un dispositif de turbo-décodage mettant en #uvre au moins un entrelaceur tel qu'exposé ci-dessus et / ou un désentrelaceur correspondant à cet entrelaceur. 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 #uvre 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 (Intemet 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 #uvre 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 illustre une matrice S utilisée dans le procédé selon l'invention; - la figure 3 illustre une matrice S* obtenue à partir de la matrice S de la figure 2 après un entrelacement RZ ; - les figures 4 et 5 représentent, pour un entrelaceur de longueur 952 conforme à l'invention, les courbes de taux d'erreur bit (BER) et de taux d'erreur trame (FER) après décodage en fonction du rapport signal sur bruit (Eb/No) exprimé en décibels, pour deux nombres (8 et 195) d'itérations de décodage différents ; - les figures 6 et 7 représentent, pour un entrelaceur de longueur 2415 conforme à l'invention, les courbes de taux d'erreur bit (BER) et de taux d'erreur trame (FER) après décodage en fonction du rapport signal sur bruit (Eb/No) exprimé en décibels, pour deux nombres (8 et 195) d'itérations de décodage différents ; - les figures 8 et 9 représentent, pour un entrelaceur de longueur 2415 conforme à l'invention mais amélioré suivant ce qui est dit ci-dessous dans la section 7, les courbes de taux d'erreur bit (BER) et de taux d'erreur trame (FER) après décodage en fonction du rapport signal sur bruit (Eb/No) exprimé en décibels, pour deux nombres (8 et 195) 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 - 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. 1. Généralités / définitions 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).f(x)lg(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 fi et une division par le premier polynôme de rétroaction g utilisé dans le turbocode. On choisit généralement U et g de degré au plus égal à 4 pour conserver un codage et un décodage suffisamment simples. 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* Comme pour fi et g, on souhaite généralement que f2 et g* soient de degré au plus égal à 4 pour conserver un codage et un décodage suffisamment simple. 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). La présente invention propose des entrelaceurs RZ produisant des turbocodes ayant une bonne distance minimale. La méthode de spécification de ces entrelaceurs est décrite ci-après. 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(g) (souvent simplement noté m) qui est le plus petit entier tel que le polynôme g(x) divise le polynôme 1 + x m(g) Pour ce faire, on complète la séquence a(x) par des zéros pour atteindre une longueur acceptable n. Si la longueur naturelle de la séquence a(x) est égale à (r-1)m + s, pour un nombre s satisfaisant à m-1 ;?:s;?1, on peut par exemple la compléter par m-s zéros dans les m-s dernières positions de la séquence a(x). 2. En supposant alors n = r.m, on associe à chaque séquence a(x)=; ôa,x' une matrice A de taille r . m (r lignes et m colonnes) dont l'élément en position (j,k), 0 0 sj sur-9 et 0 sk sm-9 est jm+k. (voir figure 2 pour le cas r=8, m=7). 3. A partir de S on construit une matrice S* en appliquant à S une combinaison quelconque de permutations des deux types suivants : - une permutation quelconque agissant dans une quelconque des m colonnes de la matrice S, - 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. Une telle matrice S* est illustrée en figure 3. 4. Soit S*j,kl'élément en position (j, k) de la matrice S* ainsi obtenue. On a vue que jm+k est l'élément en position 0, k) de la matrice S. L'entrelaceur spécifié par (S, S*) est défini par le passage de la séquence : a(x)= a),kX)m+k à la séquence : 0 Pour simplifier la discussion, on se restreint ici au cas où on n'utilise pas de permutation des colonnes entre elles pour produire S* à partir de S. De ce fait, les ensembles des nombres apparaissant dans une même colonne de S et de S* sont identiques. Le cas général peut cependant être traité de façon analogue. Les conditions données ci-dessus pour qu'un entrelaceur soit de type RZ s'expriment 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-Û 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*. 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 donc aussi appliquer une permutation 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(x) = ,EI x' , I=?, i2, ...,i2s], Ír 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. Supposons alors un entrelaceur de type retour à zéro défini par une matrice S*, et considérons une séquence a(x) = #i#lX1 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 qu'il existe k dans l'ensemble {0,...,m-1}, tel que a(x) est divisible par xk, et que a(x)lxk est un polynôme en x# : v(xm) = a(x)/xk. Le polynôme v (x) appelé la version simplifiée de a (x). façon semblable, il existe k* dans {0, ...,m-1} tel que a*(x) est divisible par xk* et que a*(x)/ >1* est un polynôme en x"1: v*(xm)= a*(x)/ >1*. Le polynôme v*(x) sera appelé la version simplifiée de a*(x). Si une séquence a(x) n'est pas homogène, elle peut s'écrire comme somme de séquences homogènes. En effet, toute séquence a(x)peut se mettre sous la m-1 forme a(x) = x1 a, (xm), où chaque terme de la somme est une séquence t=0 homogène. Nous dirons que le terme x1 a, (xm) est la i ème composante homogène de la séquence a (x) . On rappelle ici la notion d'entrelaceur verrou. Avec N=RM, on associe à l'ensemble des séquences binaires N-1 z(x)= z,x' une matrice U à R lignes et M colonnes qui a pour élément en l=0 position (j, k) le nombre jM+k, pour j compris entre 0 et R-1 (bornes comprises) et k compris entre 0 et M-1 (bornes comprises). Par exemple, pour R=7 et M=5, N=RM=35, et U est illustrée par : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 U= 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 A partir d'un M-uple h=[ho, ..., hM-1], on réalise alors sur les colonnes de la matrice U une permutation circulaire d'amplitude h pour la j-ième colonne de U. La matrice obtenue est notée U*. De cette manière, si U est tel que défini plus haut, et si le M-uple h vaut [0 2 5 9 3J, alors la matrice U* est donnée par 0 26 12 33 24 5 31 17 3 29 10 1 22 8 34 U*= 15 6 27 13 4 20 11 32 18 9 25 16 2 23 14 30 21 7 28 19 Au couple (U, U*), ou de façon équivalente au M-uple h, on associe alors l'entrelaceur qui produit à partir de toute séquence z(x)=zo + zix + ... + zs4x34 la séquence entrelacée z*(x)=zo + zTx26 + Z2X12 + ... + Z34X 19, qu'on peut également écrire sous la forme z*(x)=zo + zx + Z27X2 + ... + z14x34. De façon générale, un tel entrelaceur est appelé pour la suite de la description un entrelaceur verrou (par analogie avec les verrous à rotation de bagues numérotées parallèles). Un entrelaceur verrou de taille RM, défini par le M-1 M-uple po, hM~J, produit à partir de la séquence z(x)= xK Z(K) (XM), où K=0 les Z(K)(X) sont des polynômes de degré R-1, une séquence entrelacée M-1 z*(x) = XIC hxMZ(K)(xM),modul0 XRM-9. k=0 Du fait de la nature d'une permutation circulaire, une telle matrice U* (et donc l'entrelaceur verrou associé à U et U*) est totalement défini par la connaissance de l'amplitude de la permutation réalisée dans chaque colonne. On note ici à titre de clarification que les nombres de colonnes des matrices S et S* dépendent du polynôme g(x), que les permutations dans les colonnes de S pour produire S* sont quelconques et que la transformation de S en S* peut comprendre des permutations des colonnes entre elles. Au contraire, le nombre de colonnes de U et de U* ne dépend pas du polynôme g(x), les permutations dans les colonnes de U pour obtenir U* doivent être des permutations circulaires, et de façon préférée, la transformation de U en U* ne comporte pas de permutation des colonnes entre elles. On note également, toujours pour clarifier, que les couples (S, S*) et (U, U*) définissent des permutations, alors que A et A* sont simplement les représentations sous forme matricielle des séquences binaires a(x) et a*(x) respectivement. Plusieurs utilisations d'entrelaceurs verrous sont envisageables. Dans l'une d'entre elles, correspondant à une mise en #uvre avantageuse de l'invention, chaque colonne de la matrice A est entrelacée par un entrelaceur verrou, puis subit une permutation circulaire. 2. Principes de la solution On prend comme exemple la classe des turbocodeurs ayant g(x) = 1 + x 2 + x 3 (ce qui implique m (g) = 7 ), f1 (x) =1 + x + x3 et f2(x) =1 + x + x 2 + x 3. Nous supposerons aussi que n peut s'écrire comme n = R M m (g) où R est un nombre premier qui vérifie R#M. Ces nombres R et M seront les dimensions des entrelaceurs verrous utilisés comme composants pour construire un entrelaceur de turbocode. Si avec m (g) = 7, nous choisissons R = 23 et M = 15, n sera égal à 23x15x7 = 2415, et si nous choisissons R = 17 et M = 8, n sera égal à 952. Comme nous l'avons dit plus haut, un entrelaceur RZ peut se représenter par une matrice S* de type rxm. Donc, pour ces deux ensembles de paramètres, r = RM = 345 pour n = 2415 et r= 136 pour n = 952. Pour spécifier quelle permutation d'une colonne de S produit la colonne correspondante de S* nous utilisons une procédure en 3 étapes. Une première étape est de choisir un entrelaceur verrou de taille R x M qui soit efficace en terme de portée complète ("full span", telle que définie plus haut). Une seconde étape consiste à utiliser cet entrelaceur verrou efficace d, fois, pour un bon choix de d/s, dans la ième colonne de A, pour i = 0, ... , m-1. Une troisième étape consiste à appliquer une permutation circulaire d'amplitude bien choisie e, à la ième colonne de A. Etant donc donnés g(x), fi (x), f2 (x), n, R et M, les entrelaceurs sont donc spécifiés par a) un M-tuple h = [ho, hm-1], b) un m-tuple d = [do, ..., dm-1], c) un m-tuple e = [eo, em-1]. Le choix de h est fait de façon à être efficace pour les informations a (x) ayant seulement une composante homogène non nulle et étant donné h, des m-uples d et e sont alors choisis pour être efficace pour des informations a (x) ayant plusieurs composantes homogènes non nulles. 3. Sélection de h Soit g(x), fi (x) et f2 (x) comme définis dans la section 2, soit a(x) = 1 Plus généralement, si g(x) est un polynôme primitif de degré p et si pour i =1, 2, f, (x) a la forme 1 + Illh,] x] + xP , f,, E 0,1, m est égal à 1 et le poids de Hamming d'une séquence codée v produite par une séquence d'information homogène a(x) =xka(k) (xm) est égale à 2p-1 fsp (a(k) (x)) + 3 WH (a(k) (x)). Dans la table 1 le poids de v est donné pour plusieurs valeurs de WH (a(k) (x)) et fsp (a(k) (x)). Nous voyons par exemple que pour réaliser un poids minimum de 34, un entrelaceur RZ doit réaliser (pour tout k) fsp (a(k) (x)) 7 si WH (a(l 6 si WH (a(k) (x)) = 4. Il n'y a pas de conditions imposées sur fsp (a(k) (x)) si WH (a(k) (x)) > 6. Table 1 : Poids de séquences codées homogènes (la table 1 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 ) WH (a(1 WH(v(x)) 14 18 22 26 30 34 38 42 46 50 54 WH (a(1 WH(v(x)) 28 32 36 40 44 48 52 42 WH (a(k) (x)) = 6 fsp (a(k) (x)) 6 7 8 9 WH(v (x)) 42 46 50 54 Nous sommes maintenant prêts à spécifier la permutation à appliquer à Sk, la (me colonne de S, pour produire , la fume colonne de S* Sk a en effet la forme Sk =[k,k+m,k-2m,...,...,k+(RM-1)m]T , où T représente la transposition. Etant donné un entrelaceur verrou R x M spécifié par une matrice U* (ou de façon équivalente par le h correspondant), soit u = [uo, ..., URM-11 le réordonnancement des RM entiers 0, 1, ... , RM-1 obtenu lorsque l'on lit, ligne par ligne les éléments de U* Utilisant ce verrou, nous associons à Sk la nouvelle colonne Sk =[k +uom,k + ulm,..À +uRM~lmf . Si par exemple, k = 3, R = 7, M = 5 et si la matrice U* est celle considérée ci-dessus, nous obtenons S3 = [3,3 + 26m,3 + 12m, ..,3 + 24m,3 + Sm,3 + 3 lm, . ,3 + 19m Nous représentons par S' la matrice dont, pour 0 permutations circulaires il faut appliquer aux colonnes de S' pour obtenir S* Ici, nous discutons quel choix de U* ou, de façon équivalente, du M-uple h définissant U*, est efficace lorsqu'on l'applique à une séquence homogène a(x) xe ak(x"'), avec 9, f1 et f2 comme donnés ci-dessus. Nous représenterons la version simplifiée de a(k)(xm), par z(x) et la séquence codée correspondante par v. Dans ce cas (où, rappelons-le, nous supposons que R est un nombre premier), nous pouvons démontrer les propriétés suivantes : Propriété P1 : Supposons que R bzz M > 2. Toute séquence z(x) de poids de Hamming égal à 2 et entrelacée par un entrelaceur verrou de taille R x M spécifié par un M-uple h vérifiera fsp (z) > M lorsque tous les résidus modulo R des composantes de h sont différents. Propriété P2 : Supposons que R # M # 6. Soit T la matrice M x M circulante dont la première colonne est [1 -2 1 0 ... 0]T. Toute séquence z(x) de poids de Hamming égal à 4 et entrelacée par un entrelaceur verrou de taille R x M spécifié par un M-uple h vérifiera fsp (z) # 6 si h vérifie la propriété P1 et si les résidus modulo R des composantes de h T sont non nuls. Propriété P3 : Supposons que R bzz Mu 8. Considérons alors les matrices T,, i =1, ... , 6 de type M x M et circulante et dont les premières colonnes sont respectivement : [1 -1 -1 1 0, ... , 0]T pour T, [1 -1 1 -1 0,... O]T pour T2, [1 0 -2 1 0, ... , 0]T pour T3, [1 -2 0 1 0 , ... , 0]T pour T4, [2 -1 -1 0 , ... , 0]T pour T5, [1 1 -2 0, ... @OIT pour T6, Toute séquence z(x) de poids de Hamming égal à 4 entrelacée par un entrelaceur verrou de dimensions R x M spécifié par un M-uple h vérifiera fsp(z) > 8 si h vérifie les propriétés P1 et P2, et si, pour tout i, i = 1, ..., 6, les résidus modulo R des composantes de hT, sont non nuls. Propriété P4: Supposons que R > M # 10. Considérons les 12 matrices circulantes Ti, i =1, ... , 12 de type M x M dont les premières colonnes sont respectivement : [1 1 -1 -1 0, ..., 0]T pour T, [1 -1 0 1 -1 0, ...,0pour72, [1 -1 0 -1 1 0 , ... , 0]T pour T3, [1 0 -1 -1 1 0, ..., 0]T pour T4, [1 -1 -1 0 1 0 , ..., 0]T pour T5, [10-11-10, ..., 0]T pour T6, [1 -1 1 0 -1 0 , ..., 0]T pour T7, [1 0 -2 0 1 0 , ..., 0]T pour T8, [1 0 0 -2 1 0, ..., 0]T pour T9, [1-20010, ... , 0]T pour To, [1 0 1 -2 0 , ..., 0]T pour T1, [2 -1 0 1 0 OIT pour r T 2, Toute séquence z(x) de poids de Hamming égal à 4 et entrelacée par un entrelaceur verrou de dimension R x M spécifié par un M-uple h vérifiera fsp (z) z 10 si h vérifie les propriétés P1 jusqu'à P3 et si, pour tout i, i =1, 12, les résidus modulo R des composantes de hTi sont non nuls. Une propriété semblable peut être établie pour garantir fsp (z) > 12 et peut-être aussi des valeurs plus élevées de fsp (z). Propriété Ps : Supposons que R # M # 6. Considérons les 3 matrices circulantes T,, i =1, ... , 3 de type M x M dont les premières colonnes sont respectivement : [1 -3 2 0 , ..., 0]T pour T, [2 -3 1 0 0 , ... , 0]T pour T2, [1 -2 2 -1 0 , ..., 0]T pour T3, Toute séquence z(x) de poids de Hamming égal à 6 entrelacée par un entrelaceur verrou de dimension R x M spécifié par un M-uple h vérifiera fsp(z) bzz 8 si h vérifie la propriété P1 et si, pour tout i, i =1, ..., 3, les résidus modulo R des composantes hTi sont non nuls. On peut par ailleurs démontrer qu'il n'y a pas d'entrelaceur verrou qui vérifie fsp (z) > 9 pour tout les z de poids de Hamming égal à 6, et ce, quels que soient R et M. Lorsque M est plus petit que ce qui est demandé dans les propriétés P2 à P5, les conditions deviennent plus complexes. En particulier pour M = 7 certaines des conditions mentionnées dans la propriété P3, ressemblent maintenant à "les résidus modulo R des composants de h ne sont égaux ni à 0, nià1, nià-1." Donnons deux exemples. Avec R = 23 et M = 15, le 15-uple h=[01198172118161031565119] est un parmi les 1850 15-uples sur {0, ..., 22} ayant ho = 0 et h1 = 1 qui satisfont les propriétés P1 jusqu'à P5. En utilisant la table 1, nous concluons que toute séquence homogène, lorsqu'elle est entrelacée, comme expliqué cidessus, par l'entrelaceur verrou 23 x 15 spécifié par h engendrera une séquence codée de poids > 50. De façon identique, avec R = 17 et M = 8, le 8-uple h=[014952711] satisfait les propriétés P1, P2, P3 et Ps. En utilisant la Table 1, nous concluons que toute séquence homogène entrelacée comme expliqué cidessus par l'entrelaceur verrou 17 x 8 spécifié par h, engendrera une séquence codée de poids > 38. Cette valeur minimale est réalisée par des séquences homogènes de poids 2. Un programme MATLAB, appelé GOODH. M et donné en Appendice, a été écrit pour trouver pour M donné et pour un nombre premier R# M, quels sont les M-uples h qui satisfont certaines des propriétés P1 à P5. Notre philosophie a été d'atteindre pour R et M donné, le poids minimal le meilleur possible pour les séquences homogènes non nulles. Bien que la distance minimale réalisée du code soit souvent strictement plus petite que ce poids minimal, notre approche en un certain sens essaie de minimiser le nombre de mots de codes de faible poids. Ceci devrait influencer favorablement la distribution de poids globale du code. D'autre part, lorsque R, comme on l'a supposé ici , est un nombre premier l'ensemble {0, R-1}structuré par l'addition et la multiplication modulo R a la structure du corps de Galois (en anglais Galois field) GF(R). Dans ce cas, pour tout d # {1, ..., R-1}, le M-uple dhT n'aura pas de composante non nulle modulo R si et seulement si la même propriété est vraie pour hT. Cette propriété sera très utile dans la suite. 4 Construction d'une matrice de distance Après avoir trouvé un bon h, nous allons obtenir la ième colonne de S* en appliquant à la ième colonne de S la permutation de type verrou définie par di h puis une permutation circulaire vers le bas d'amplitude e,. Nous représenterons la permutation correspondante de cette ième colonne de S ou la permutation associée de symboles dans la ième colonne de A, par la paire (d,, ei). Le choix de ces m paires (d,, et) est fait de façon à ce que deux symboles quelconques de la séquence d'information a (x) qui sont près l'un de l'autre deviennent raisonnablement distant après entrelacement Ceci est déjà réalisé pour les symboles d'une même colonne de A car h a été choisi pour optimiser ce critère et nous nous concentrons donc maintenant sur les paires de symboles dans différentes colonnes de A. Si le symbole as (respectivement at) de a (x) est déplacé de la position s à la position s* (respectivement de la position t à la position t*) par l'entrelaceur, nous pourrions attacher à cette paire (s,t) la fonction de coût donnée par C (s,t) = 1 s - t 1 + 1 s* - t* Cependant, dans le but d'obtenir un algorithme plus pratique, nous allons procéder comme suit. Nous considérons deux symboles avant entrelacement et nous supposons qu'ils apparaissent dans les lignes s et t de deux colonnes différentes (la ième et la jème par exemple) de la matrice A introduite ci-dessus Supposons que sous l'action de la permutation spécifiée par (di, e,) le premier de ces symboles, dans la ligne s, soit déplacé vers la ligne s* et que sous l'action de la permutation (dJ, eJ) le second de ces symboles, dans la ligne t, soit déplacé vers la ligne t*. Notre fonction de coût pour une telle paire de symboles est choisie comme étant C (s,t) = 1 s - t 1 + 1 s* - t* où étant donné (d,, e,) et (dJ, eJ), s* et t* dépendent seulement de s et de t. En pratique, nous construirons une matrice (R -1)2 x RM que nous appellerons F . Les (R -1)2 lignes de F seront indicées par les (R -1)2 paires (d,d'), dont les éléments d et d' satisfont : 1 # d, d' # R -1 alors que les RM colonnes de F seront indicées par les RM entiers s = 1, RM. En position ((d,d') #), l'élément de F sera la valeur minimale de C (s,t) pour tous les s et t sous la condition que les entrelaceurs utilisés sont (d, e) et (d', e') et que #=e'-e. Nous pouvons donc interpréter les éléments de F comme étant les plus petits (c'est-à-dire les moins favorables) effets de dissémination sur une paire de symboles de a(x) chacun d'eux étant dans une colonne différente de A et ce sous la condition que la colonne du premier de ces symboles est entrelacée par (d, e), que la colonne du second de ces symboles est entrelacée par (d', e') et que s = e' - e soit fixé. Un programme MATLAB appelé DISTM.M a été écrit pour construire cette matrice F. Il est donné en appendice dans le cas particulier où R = 13 et M = 9. 5. Méthode permettant d'obtenir de bons turbocodes Ayant spécifié un bon entrelaceur verrou h de type R x M nous allons maintenant choisir de bons M-uples d et e de façon à ce que le turbocode correspondant soit bon. Voici l'idée générale de cette sélection. Nous choisissons d et e de façon à ce que pour tout i, j, 0 # i # j # m-1, l'élément en position ((d,, dJ), e, - e, ) de F soit raisonnablement grand. Avec l'interprétation de F donnée ci-dessus, ceci signifie que toute paire de symboles d'information sera disséminée avec une efficacité raisonnable. Ce qui rend le problème d'optimisation correspondant quelque peu difficile est que étant donné par exemple les deux premières composantes do et d1 de d et les deux premières composantes eo et e1 de e, qui sont choisies de façon efficace, les troisièmes composantes d2 et e2 de d et e devront être efficaces simultanément par rapport à (do,eo) et (d1,e1). Pour faire une recherche systématique, nous choisissons une valeur appelée mini et nous acceptons l'entrelaceur défini par (d,e) si, pour toutes les paires de paires (d;,e,) et (d,e) avec zig i:g j: m-1, l'élément de F en position ((d1, dj), e, - ei) est > mini. En pratique, étant donné h , nous choisissons d'abord (do,eo) = (1, 0). Ensuite, nous essayons de trouver une certaine paire (d1, e1) telle que, en position ((d0, d1), e1- eo) l'élément de F soit > mini. S'il n'y a pas de tel élément, cela veut dire que mini n'est pas réalisable. Si nous trouvons une telle paire (d1,e1), nous cherchons alors une paire (d2, e2) telle que en position ((do, d2), e2 - eo) et ((ci, d2), e2 - el), l'élément de F soit > mini. Nous continuons l'algorithme dans le même esprit en essayant de trouver (d,,ei) pour i =3,4, 5 et 6. Nous pouvons raffiner cette recherche en prenant différentes valeurs de mini qui doivent être satisfaites pour différentes paires (i, j). En particulier, nous pouvons choisir la même valeur de mini pour toutes les paires (i, j) pour lesquelles j - i a une valeur fixée. Puisque pour m = 7 et i Chaque fois qu'une vérification est à faire, nous utiliserons le paramètre mini(j-i) qui convient aux valeurs spécifiées de i et de j. Un programme MATLAB appelé SELEC. M a été écrit pour exécuter cette recherche et il est donné en Appendice. 6 Exemples Avec R = 23 et M = 15 (ce qui implique n = 2415) et h donné comme plus haut par [0 1 19 8 17 21 18 16 10 3 15 6 5 11 9], nous avons appliqué la méthode de construction décrite à la section 4 pour obtenir la matrice 484 x 345 notée F et nous avons utilisé cette matrice selon les lignes esquissées à la section 5. Après quelques essais, un turbocodeur a été obtenu pour les valeurs suivantes des paramètres mini (i) : mini(1 ) = 6, mini(2) = 4, mini(3) = 5, mini(4) = 4, mini (5) 6, mini(6) = 5 . Ce turbocodeur est spécifié par d = [1, 3, 8,11, 15,9, 22] , e = [0, 7, 269, 291, 194, 337, 120] . Les performances du turbocode correspondant ont été simulées sur un canal à bruit blanc gaussien additif et les résultats de cette simulation sont donnés aux figures 6 et 7. Dans les deux cas, nous avons représenté les résultats obtenus après 8 et 195 itérations de décodage. L'expérience a montré que les meilleures performances sont essentiellement déjà obtenues après trente itérations. L'analyse des résultats de simulations a révélé l'existence dans ce code de séquences non nulles dont le poids de Hamming est égal à 34. Aucune séquence de poids de Hamming inférieure n'a été trouvée. Il est raisonnable de penser que 34 est la distance minimale du code. De façon semblable, avec R = 17, M = 8 (ce qui implique n = 952) et h donné comme plu haut par [0 1 4 9 5 2 7 11], nous avons appliqué la méthode de construction décrite à la section 4 pour obtenir une matrice 256 x 136 appelée F et nous avons utilisé cette matrice F selon les lignes esquissées dans la section 5. Après quelques essais, un turbocodeur a été obtenu avec les valeurs suivantes des paramètres mini(/) : mini(1 ) = 5, mini(2) = 3, mini(3) = 3, mini (4) = 3, mini(5) = 3, mini (6) =5 . Ce turbocodeur est spécifié par d = (1, 7, 10, 2, 15, 12, 16] , e = [0, 130, 58, 116, 76, 6, 148] . Ses performances ont été simulées sur le canal à bruit blanc gaussien additif et les résultats de cette simulation sont donnés aux figures 4 et 5. L'analyse des résultats de simulation a révélé l'existence dans ce code de séquences non nulles de poids de Hamming égal à 34 mais pas moins. Il est raisonnable de penser que ceci est la distance minimale du code. 7. Améliorations ultérieures On décrit dans cette section quelques améliorations qui peuvent être introduites en variante du procédé tel que décrit précédemment. Pour un choix donné de h, il est souvent possible de choisir d et e d'une façon encore plus efficace que ce qui a été décrit jusqu'à présent. Pour expliciter cela, considérons l'entrelaceur de taille 2415 construit avec R=23, M=15, h=[0 1 19 8 17 21 18 16 10 3 15 6 5 11 9], d=[1 3 8 11 15 9 22J et e=[0 7 269 291 194 337 120], que nous avons déjà mentionné précédemment. Les résultats de simulations ont révélé l'existence, dans le turbocode correspondant, de séquences dont le poids de Hamming est égal à 34. Cette dernière valeur semble par ailleurs être égale au poids minimal des séquences non nulles de ce code. Regardons maintenant une telle séquence d'un peu plus près. Elle correspond par exemple au codage d'une séquence a(x)=#telx' où l'ensemble 1 est donné par l={1067, 1076,1077, 2329,2330, 2334;. Soit i##(i) l'effet de l'entrelaceur sur la position i d'un symbole. L'ensemble J=fII (i) : ic 1) est alors donné par J=1760, 292, 1077, 285, 1070, 1767}. Dans l'ensemble J, les symboles #(i) apparaissent dans l'ordre des valeurs croissantes de i. En d'autres termes, l'entrelaceur déplace la position 1067 en la position 1760, la position 1076 en la position 292, la position 2329 en la position 285, la position 2330 en la position 1070 et la position 2334 en la position 1767. La position 1077 n'est pas modifiée par l'entrelaceur Nous voyons que la séquence a(x) peut être vue comme la succession des deux sous-séquences a, (X)=X067 +X 1076 +X 1077 et a2 (x) =x 2329 +x 2330 +x 2334 qui sont toutes deux divisibles par g(x). De même, la séquence a*(x) peut être vue comme la succession des trois sous-séquences a, *(x)=x 285 +x 2 , a2 *(X) =X 1070 +X 1077 et a3 *(X)=X760 +XI767. Définissons alors b,=a,f,191 b2=a2f/g, c 1 =a , *f2 /91 c2=a2*t2/g, c3 =a3'2/g. On vérifie que les poids W(.) de ces séquences sont W(b,)=7, W(b2)=3, W(Cl)=W(C2)=W(C3)=6. Avec W(a)=6, ceci produit bien un poids égal à 6+7+3+6+6+6=34. Pour d'autres entrelaceurs de taille 2415 correspondant aux mêmes valeurs de R et de M et au même h que ci-dessus, mais à d'autres choix de d et de e, c'est la situation inverse de celle que nous venons de décrire, qui peut se produire. Une séquence a(x)= x' de poids 6, où l'ensemble 1 a la forme 1=[r, r+7, s, s+7, t, t+7} pourra devenir après entrelacement une séquence du type a*(x)= a, *(x)+a2 *(x), où les deux polynômes a, *(x) et a2*(x) sont divisibles par g(x) et sont tous deux des trinômes de petit degré multipliés par une puissance dex. En conséquence, les poids de al *f 2 /g et de a 2 *f 2 /g seront eux-mêmes assez petits, et il se peut que le poids total de la séquence codée correspondante, soit de nouveau égal à 34. Si on veut obtenir un turbocode de distance minimale égale ou supérieure à 36, il faudra donc sélectionner un couple (d,e) pour lequel les deux situations que nous venons de mentionner ne se produisent pas. Considérons d'abord la première de ces situations. Pour l'éviter, il faut choisir un couple (de tel que tous les a(x) de la forme a(x)=a(x)+a2(x) produisant un a*(x) de la forme a*(x)=(9+x')(x'+x+xk) aient la propriété suivante : Propriété 7.1 : Soitp la plus petite puissance de x apparaissant dans ai(x), et posons adx)=xP a 1 (x). Soit q la plus petite puissance de x apparaissant dans a2(x), et posons a2(x)=xqa 2(x). La somme des degrés de a et de a 2 est suffisamment élevée pour que la somme des poids de b1=a1f1/g et de b2=a2f1/g soit au moins égale à 12. Considérons maintenant la deuxième des situations mentionnées cidessus. Pour l'éviter, il faut donc choisir un couple (d,e) tel que tous les a(x) de la forme a(x)= (9+x')(x'+x+xk) produisant un a*(x) de la forme a*(x)= a*1(x)+a 2(x) où a*1(x) et a*2(x) sont des trinômes divisibles par g(x), aient la propriété suivante : Propriété 7.2 : Soitp* la plus petite puissance de x apparaissant dans a*T(x), et posons a *1 (x) =xp. a *1 (x). Soit q* la plus petite puissance de x apparaissant dans a*2(x), et posons a*2(x)=xq'a 2(x). La somme des degrés de [alpha]*1 et de [alpha] *2 est suffisamment élevée pour que la somme des poids de c1 =a*1f2/g et de c2 =a*2 f2/g soit au moins égale à 12. Parallèlement à l'approche que nous venons de décrire, et qui conduit à prendre en compte les propriétés 7. 1 et 7. 2, on est amené à remarquer que les exigences mises sur les valeurs mini(i) introduites à la section 5 et utilisées à la section 6, peuvent être excessives par rapport au but poursuivi, qui est d'obtenir une distance minimale égale ou supérieure à 36. Nous avons donc effectué une recherche des paires (d,e) qui satisfont les propriétés 7. 1 et 7. 2, mais sous des contraintes moins fortes en ce qui concerne les 6 paramètres mini(i) introduits à la section 5. Nous avons en effet choisi mini(1 )=5 et mini(i)=4 pour i#2. Voici deux paires (d,e) trouvées par cette méthode : 1) du1 2 3 21 19 6 17J, p=[O 6 224 246 209 112 1421. Pour ce choix de d et de e, le turbocode est tel que le poids des séquences d'erreur après décodage constaté lors d'une simulation n'a jamais été inférieur à 36 pour un rapport signal/bruit allant jusqu'à 0. 9 dB. On constate une amélioration des performances (représentée aux figures 8 et 9) par rapport au cas décrit dans la section précédente. 2) çf=[1 6 10 15 8 7 221, e=/0 6 323 194 269 157 1201. Pour ce choix de d et de e, le turbocode est tel que le poids des séquences d'erreur après décodage constaté lors d'une simulation n'a jamais été inférieur à 38 pour un rapport signal/bruit allant jusqu'à 0. 8 dB. Ainsi, les méthodes de sélection des paramètres (de que nous venons de décrire, permettent d'augmenter le niveau du rapport signal/bruit où la probabilité d'erreur ne s'améliore plus autant en fonction de ce rapport. 8. Description d'un codeur et d'un décodeur utilisant un entrelaceur conforme à l'invention On notera que la détermination d'un bon entrelaceur comme décrit précédemment peut être effectuée soit à la volée dans les codeurs et décodeurs eux mêmes soit de préférence au préalable. Dans ce dernier cas, on peut stocker intégralement les entrelaceurs en mémoire ROM ou de manière plus économique seulement les paramètres nécessaires à la génération du ou des entrelaceurs. On applique alors les algorithmes de construction expliqués précédemment pour générer le ou les entrelaceurs qui pourront alors être stocké en mémoire RAM. 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 #uvre 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 a priori w4, portant sur la séquence a et initialisée à zéro, fournit une séquence d'estimation extrinsèque w1 de la séquence a. - un entrelaceur 1005, identique à l'entrelaceur utilisé dans le codeur, qui d'une part reçoit la séquence a et l'entrelace en une séquence a* et d'autre part reçoit la séquence w1 et l'entrelace pour produire une nouvelle séquence w2 d'informations a priori portant maintenant sur la séquence a* - un deuxième décodeur 1006, correspondant au deuxième codeur élémentaire 103 et recevant les séquences w2, a*et c, et fournit d'une part une séquence d'estimation extrinsèque w3 de la séquence a* et, d'autre part, une séquence estimée a*' de la séquence a*, - un désentrelaceur 1008 inverse de l'entrelaceur 1005 recevant la séquence a*' et fournissant la séquence estimée a' de 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 élémentaires 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 dé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 #uvre 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 (a, b, et c) et la séquence entrelacée a*, - 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 sont conservées les séquences décodées a*' et 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. et - 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 #uvre 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 fi(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 nuls . Cette opération fournit une estimation a' 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 #uvre 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 (en anglais Galois field) à 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. L'invention s'applique aussi à tout type de turbocodes y compris notamment les turbocodes séries ou hybrides L'invention s'applique également à 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 audiolvidéo, comportant un dispositif tel qu'exposé brièvement ci-dessus. De la même manière, l'invention s'applique é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 #uvre du procédé exposé succinctement ci-dessus APPENDICE Le programme GOODH.M q44=[ 1-2 1 0 0 0 1-2 1 0 0 0 1-2 1 ]; q46=[ 1-1-1 1 0 0 1 -1 -1 1 1 1-2 0 0 0 1 1-2 0 0 0 1 1-2 1 0-2 1 0 0 1 0-2 1 2 -1 -1 0 0 0 2 -1 -1 0 0 0 2 -1 -1 1-2 0 1 0 0 1-2 01 1 -1 1 -1 0 0 1 -1 1-1 ]; q48=[ 1 -1 0 1 -1 1 -1 0 -1 1 1 0 -1 -1 1 1-1-1 0 1 1 0 -1 1-1 1 -1 1 0-1 1 0-2 01 1 0 0-2 1 1 -2 0 01 1 0 1-2 0 0 1 0 1-2 2 -1 0 -1 0 0 2 -1 0-1 1 1-1-1 0 0 1 1-1-1 ]; q6=[ 2-3 1 0 0 0 2-3 1 0 0 0 2-3 1 1-3 2 0 0 0 1-3 2 0 0 0 1-3 2 1 -2 2 -1 0 0 1-2 2-1 ]; q=[q44' q46' q48' q6']';dq=size(q); u=n*n;fori=1:dq(1),u(i)=n*n;end;u=u';k=0;res=0;res(15)=0;nc=0; n0=0;n1 =0; n2=0 ; n3=0 ; n4=0 ; n5=0 ; n6=0 ; n 7=0; n8=0 ; n9=0 ; n 10=0; n11=0;n12=0;n13=0;n14=0;n15=0;n16=0;n17=0;n18=0;n19=0; n20=0;n21=0;n22=0;nm1=0;nm2=0;nm3=0;nm4=0;nm5=0; a0=0;s0=0;s0(n-1 )=0; forx1=1,ifs0(x1)==0, s1=s0;s1(x1)=1; a1=[a0x1];n1=1+n1;avance=[x1 n1] forx2=1:n-1,if s1(x2)==0, s2=s1;s2(x2)=1; a2=[a1 x2];n2=1+n2;avance=[x1 x2 n1 n2] for x3=1: n-1, if s2(x3)==0, s3=s2;s3(x3)=1 ; a3=[a2 x3]; n3=1 +n3; %avance=[x1 x2 x3 n1n2 n3] forx4=1:n-1,ifs3(x4)==0, s4=s3;s4(x4)=1 ; a4=[a3x4];n4=1+n4;%avance=[n1 n2 n3 n4] f=a4';g=rem(q*f+u,n);if min(g)>0, for x5=1: n-1, if s4(x5)==0, s5=s4;s5(x5)=1; a5=[a4 x5]; n5=1 +n5; f=a5 (2:6)';g=rem(q*f+u,n);if min(g)>0, for x6=1: n-1, if s5(x6)==O, s6=s5;s6(x6)=1; a6=[a5 x6]; n6=1 +n6; f=a6 (3:7)';g=rem(q*f+u,n);if min(g)>0, forx7=1:n-1,ifs6(x7)==0, s7=s6;s7(x7)=1 ; a7=[a6x7];n7=1+n7; f=a7(4:8)';g=rem(q*f+u,n);if min(g O, forx8=1:n-1,ifs7(x8)==0, s8=s7;s8(x8)=1 ; a8=[a7 x8]; n8=1 +n8; f=a8(5:9)';g=rem(q*f+u,n);if min(g)>0, for x9=1: n-1, if s8(x9)==0, s9=s8;s9(x9)=1 ; a9=[a8 x9];n9=1+n9; f=a9(6:10)';g=rem(q*f+u,n);if min(g)>0, for x10=1:n-1,if s9(x10)==0, s10=s9;s10(x10)=1; a10=[a9 x10];n10=1+n10; f=a10(7:11 )';g=rem(q*f+u,n);if min(g)>0, forx11=1:n-1,ifs10(x11)==0, s11=s10;s11(x11)=1; a11=[a10 x11];n11=1+n11; f=a11(8:12)';g=rem(q*f+u,n); if min(g)>0, for x12=1:n-1,if s11 (x12)==0, s12=s11;s12(x12)=1; a12=[a11 x12];n12=1+n12; f=a12(9:13)';g=rem(q*f+u,n);if min(g)>0, forx13=1:n-1,ifs12(x13)==0, s13=s12;s13(x13)=1; a13=[a12 x13];n13=1+n13; f=a13(10:14)';g=rem(q*f+u,n);if min(g)>0, for x14=1:n-1,if s13(x14)==0, s14=s13;s14(x14)=1; a14=[a13 x14];n14=1+n14; f=a14(m-4:m)';g=rem(q*f+u,n);if min(g)>0, anm1 =[a14 0];nm1 =1 +nm1 ; f=anm1 (m-3: m+1 )';g=rem(q*f+u,n);if min(g)>0, anm2=[anm1 x1];nm2=1+nm2; f=anm2(m-2:m+2)';g=rem(q*f+u,n);if min(g O, anm3=[anm2 x2];nm3=1+nm3; f=anm3(m-1 :m+3)';g=rem(q*f+u,n);if min(g)>0, anm4=[anm3 x3];nm4=1+nm4; f=anm4 (m:m+4)';g=rem(q*f+u,n);if min(g O, nm5=1 +nm5 ;nc=1 +nc;res(nc,:)=a14; end;end;end;end;end;end;end;end;end;end;end;end; end;end;end;end;end;end;end;end;end;end;end;end; end;end;end;end;end;end;end;end;end;end;end;end; end;end;end;end;end;end;end; Le programme DISTM.M r=17; m=8; rm=r*m;step=10, for d=1 :r-1 ,a=ggg(d,:);a=[a a];res=0;res(rm)=0;z=0; fordp=1:r-1, b=ggg(dp,:);b=[b b];lis=O;lis(rm)=0; for i=1:rm,maxi=rm;b=[b(2*rm) b(1 :2*rm-1 )]; for j=1 +step:rm+step, for k=j-step: j+step, val =abs U-k)+abs(aü)-b (k ; maxi=min(maxi,val); end ; end ; lis(i)=maxi; end ; z=z+1;res(z,:)=lis, end ; diary sink.m;f1=res',diary off end ; Le programme SELEC.M r=17;m=8; mini1=5;mini2=3;mini3=3;mini4=3;mini5=3;mini6=5; rm=r*m; h=r-1; for i=1:6,for j=i:6,norme(i,j)=1 ;end;end; k=0; resd=0;resd(7)=0; rese=0; rese(7)=0; u=1;for i=1 :rm,u(i)=1 ;end; u2=u(1:2);u3=u(1:3);u4=u(1:4);u5=u(1:5); th1 =mini1 *u;th2=mini2*u;th3=mini3*u; th4=mini4*u;th5=mini5*u;th6=mini6*u; d1=1;ford2=2:h,d=[d1 d2];d12=f(h*(d1-1)+d2,.)>th1; for i12=1:rm,if d12{i12)>O,lis12=i12; for d3=2:h,if (d2==d3) th1;d13=f(h*(d1-1 )+d3,: )>th2; for i23=1:rm,if d23(i23)>O,i13=rem(i12+i23,rm); if i13>0,if d13(i13)>O,lis13=[lis12 i23]; for d4=2:h,if sum((d4*u2)==d(2:3)) th1 ;d24=f(h*(d2-1 )+d4,:)>th2; d14=f(h*(d1-1 )+d4,:)>th3; for i34=1:rm,if d34(i34)>0,i24=rem(i23+i34,rm); if i24>0,if d24(i24)>0,i14=rem(i12+i24,rm); if i14>O,if d14(i14)>O,lis14=[lis13 i34]; for d5=2:h,if sum((d5*u3)==d(2:4)) th1 ;d35=f(h*(d3-1 )+d5,:)>th2; d25=f(h*(d2-1)+d5,:)>th3;d15=f(h*(d1-1)+d5,:)>th4; for i45=1:rm,if d45(i45)>0,i35=rem(i34+i45,rm); if i35>0,if d35(i35)>0,i25=rem(i24+i45,rm); if i25>0,if d25(i25)>0,i15=rem(i14+i45,rm); if i15>O,if d15{i15)>O,lis15=[1is14 i45]; for d6=2:h,if sum((d6*u4)==d(2:5)) th1 ;d46=f(h*(d4-1 )+d6,:)>th2; d36=f(h*(d3-1 )+d6,:)>th3;d26=f(h*(d2-1 )+d6,:)>th4; d16=f(h*(d1-1)+d6,:)>th5; for i56=1:rm,if d56(i56)>0,i46=rem(i45+i56,rm); if i46>0,if d46(i46 O,i36=rem(i35+i56,rm); if i36>0,if d36(i36)>0,i26=rem(i25+i56,rm); if i26>0,if d26(i26)>0,i16=rem(i15+i56,rm); if i16>O,if d16(i16)>O,lis16=[1is15 i56]; for d7=2:h,if sum((d7*u5)==d(2:6)) th1 ;d57=f(h*(d5-1 )+d7,:)>th2; d47=f(h*(d4-1 )+d7,:)>th3;d37=f(h*(d3-1 )+d7,:)>th4; d27=f(h*(d2-1)+d7,:)>th5;d17=f(h*(d1-1)+d7,:)>th6; for i67=1:rm,if d67(i67)>0,i57=rem(i56+i67,rm); if i57>0,if d57(i57)>0,i47=rem(i46+i67,rm); if i47>0,if d47(i47)>0,i37=rem(i36+i67,rm); if i37>O,if d37(i37 O,i27=rem(i26+i67,rm); if i27>0,if d27(i27)>0,i17=rem(i16+i67,rm); if i17>0,if d17(i17)>O,lis17=[lis16 i67]; k=k+1,resd(k,:)=d;bil=rem(1is17*norme,rm);rese(k,:)=[0 bil]; end ;end;end; end ;end;end;end;end;end; end;end;end;end;end;end;end;end; end;end;end;end;end;end;end;end;end;end; end;end;end;end;end;end;end;end;end;end;end;end; end;end;end;end;end;end;end;end;end;end;end;end;end;end, REVENDICATIONS 1. Procédé de permutation, caractérisé en ce qu'il 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- les m colonnes de S sont désignées par S# avec 0 #I # m-1, E3- chaque colonne S# est alors écrite sous la forme d'une matrice à R lignes et M colonnes, où R et M vérifient RM=r, 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 à R lignes et M colonnes, ledit entrelaceur n'étant pas l'identité, E4- cette matrice à R lignes et M colonnes est reconvertie, après lesdites permutations circulaires sur ses colonnes, en une colonne S*# qui occupera dans une matrice S* la même place que celle qu'occupe S# dans la matrice S , E5- chaque colonne S*# de la matrice S* est permutée par une permutation circulaire, 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 que au moins deux colonnes de la matrice S* sont obtenues en utilisant des entrelaceurs verrou différents. 3. Procédé selon la revendication 2, caractérisé en ce que les m entrelaceurs verrou utilisés pour produire les m colonnes de la matrice S* sont tous différents. 4. Procédé selon l'une quelconque des revendications 1 à 3 caractérisé en ce qu'il comporte également une étape de permutation des colonnes de S* entre elles. 5. Procédé selon l'une quelconque des revendications 1 à 4 caractérisé en ce qu'au cours de l'étape E5 au moins une colonne S*# de la matrice S* est permutée par une permutation circulaire différente de l'identité. 6. 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)= #aJ,kXJm+k, à coefficients binaires, divisible par un premier t-1 polynôme diviseur g(x) = 1+ g,x' + xt , à coefficients binaires, fournissant une l=1 nouvelle séquence de symboles binaires représentée par un polynôme a*(x)= * t-1 a3,kxs'k, divisible par un second polynôme diviseur g*(x)= 1+ g *, x' +x', l=1 caractérisé en ce que S*J,k est l'élément en position (j,k) dans la matrice S* obtenue selon un procédé conforme à une quelconque des revendications 1 à 5, et m est un multiple du plus petit entier m' tel que le premier polynôme diviseur g(x) divise xm'+1. 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)= #aJ,kXJm+k,à coefficients binaires, divisible par un premier t-1 polynôme diviseur g(x)=9+gJx' + xi, à coefficients binaires, fournissant une l=1 nouvelle séquence de symboles binaires représentée par un polynôme a *(x)= 1 Y a,, txjm+k ., divisible par un second polynôme diviseur 0#J#r-10#k#m-1 t-1 g*(x)= 1+ g *, x' + Xl, l=1 caractérisé en ce que s*J,kest l'élément en position (j,k) dans la matrice S* obtenue selon un procédé conforme à une quelconque des revendications 1 à 5, 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é selon l'une quelconque des revendications 6 à 7, caractérisé en ce que le second polynôme diviseur g*(x) est égal au premier polynôme diviseur g(x) 9. 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 selon l'une quelconque des revendications 6 à 8. 10. Procédé de codage selon la revendication 9, 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' + x, un second l=1 polynôme diviseur g*(x) compatible avec g(x), un premier polynôme multiplicatif fi(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 fi(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). 11. 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 6 à 8 12. Procédé de turbo-décodage caractérisé en ce qu'il met en oeuvre au moins un procédé de permutation selon l'une quelconque des revendications 6 à 8. 13. Procédé adapté à décoder des séquences reçues après codage par le procédé de codage selon la revendication 9 ou 10. 14. Procédé selon l'une quelconque des revendications 1 à 13, 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 (en anglais Galois field) à q éléments. 15. Dispositif de permutation, caractérisé en ce qu'il comprend des moyens de faire correspondre à chaque rang d'entrée de 0 à r.m-1 un rang de sortie de 0 à r.m-1, ledit dispositif comprenant notamment des moyens de : E1- considérer une matrice S comportant r lignes et m colonnes, remplie ligne par ligne par les nombres successifs de 0 à r.m-1, E2- désigner les m colonnes de S par Si avec 0#l #m-1, E3- écrire chaque colonne S# sous la forme d'une matrice à R lignes et M colonnes, où R et M vérifient RM=r, et entrelacement sous cette forme par un entrelaceur de type dit "verrou", défini par une permutation circulaire de chaque colonne de ladite matrice à R lignes et M colonnes, ledit entrelaceur n'étant pas l'identité, E4- reconvertir cette matrice à R lignes et M colonnes, après lesdites permutations circulaires sur ses colonnes, en une colonne S*# qui occupera dans une matrice S* la même place que celle qu'occupe S# dans la matrice S', E5- permuter chaque colonne S*# de la matrice S* par une permutation circulaire, E6- constituer d'une table de permutation 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*. 16. Dispositif selon la revendication 15, caractérisé en ce que au moins deux colonnes de la matrice S* sont obtenues en utilisant des entrelaceurs verrou différents. 17. Dispositif selon la revendication 16, caractérisé en ce que les m entrelaceurs verrou utilisés pour produire les m colonnes de la matrice S* sont tous différents. 18. Dispositif selon l'une quelconque des revendications 15 à 17 caractérisé en ce qu'il comporte également des moyens de permuter des colonnes de S* entre elles. 19. Dispositif selon l'une quelconque des revendications 15 à 18 caractérisé en ce qu'il comporte des moyens de permuter au moins une colonne S*# de la matrice S* par une permutation circulaire différente de l'identité. 20. Dispositif de permutation (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)= #aJ,kXJm+k 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 La J,k #***'* où la matrice S* des s ,k est produite selon l'une quelconque des revendications 1 à 5. 21. Dispositif de permutation (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)= #aJ,kXJm+k 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 as, k xJm+k où la matrice S* des Sj,k est produite selon l'une O:gjÉr-1 0 22. Dispositif de codage caractérisé en ce qu'il comporte un dispositif selon l'une quelconque des revendications 15 à 21. 23. Dispositif de codage selon la revendication 22, travaillant sur des séquences de données binaires u représentatives d'information et prenant en t-1 compte un premier polynôme diviseur g(x) = 1+ g/x' +x', un second l=1 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 x'+f, 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 Im-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 fi(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). 24. Dispositif de décodage, caractérisé en ce qu'il met en #uvre au moins un dispositif selon l'une quelconque des revendications 15 à 21 et/ou un désentrelaceur correspondant à cet entrelaceur. 25. Dispositif de turbo-décodage caractérisé en ce qu'il met en #uvre au moins un dispositif selon l'une quelconque des revendications 15 à 21 et / ou un désentrelaceur correspondant à cet entrelaceur. 26. Dispositif adapté à décoder des séquences reçues après codage par un dispositif de codage selon l'une quelconque des revendications 22 à 23. 27. Dispositif selon l'une quelconque des revendications 20 à 26, 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. 28. Dispositif de traitement de signaux représentatifs de parole, caractérisé en 15 à 27. 29. 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 15 à 28. 30. Dispositif de transmission de données selon la revendication 29, caractérisé en ce que ledit protocole est le protocole ATM, Asynchronous Transfer Mode. 31. Dispositif de transmission de données selon la revendication 29, caractérisé en ce que ledit protocole est le protocole IP, Internet Protocol. 32. 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 15 à 31. 33. Station de réseau, caractérisée en ce qu'elle comporte un dispositif selon l'une quelconque des revendications 15 à 32.