Brevet FR2842671A1 — publié le 20040123

Compression de données numériques robuste au bruit de transmission L'invention concerne la compression de données numériques, notamment pour des signaux multimédia (audio, image, vidéo, parole), et la transmission robuste de ces données sur des réseaux bruités, tels que des réseaux sans fils, des communications mobiles. Pour réduire le débit de transmission des données numériques, on les comprime, en cherchant à s'approcher du maximum théorique que les spécialistes appellent "l'entropie du signal". Pour cela, on utilise souvent des codes statistiques aussi appelés codes à longueurs variables, par exemple les codes de Huffman. Ces codes ont néanmoins l'inconvénient d'être très sensible aux erreurs de transmission. L'inversion de un bit peut conduire à une désynchronisation du décodeur, qui a pour conséquence un décodage erroné de toutes les données qui suivent la position du bit erroné. Les solutions actuelles de compression, transmission et décompression de signaux multimédia sur réseau, sur lesquelles on reviendra, se fondent sur l'hypothèse qu'une certaine qualité de service du transport des données est garantie. En d'autres termes, elles supposent que les couches de transport et de liaison, en s'appuyant sur l'utilisation de codes correcteurs, vontpermettre d'atteindre un taux d'erreur résiduel quasi nul (c' est-à-dire vupar l'application de compression et de décompression). Mais cette hypothèse de taux d'erreur résiduel quasi nul n'est plus vraie lorsque les caractéristiques des canaux varient dans le temps (canaux non stationnaires), notamment dans les réseaux sans fil et mobiles, et pour une complexité du code de canal réaliste. En outre, l'ajout de redondance par codes correcteurs d'erreurs conduit à réduire le débit utile. Le besoin se fait donc sentir de solutions qui soient robustes au bruit de transmission, c'est à dire qui soient peu affectées par les erreurs de bits induites par ce bruit d'une part et qui permettent une utilisation optimale de la bande passante (c'est à dire de la capacité) du réseau d'autre part. La présente invention vient proposer des avancées en ce sens. Selon un aspect de l'invention, il est proposé un codeur de compression de données numériques, qui comprend: - une entrée (physique ou non) pour un premier flux de données, et un second flux de données, - un module de codage, établissant une correspondance entre des symboles du premier flux de données et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole, et - un module de traitement pour coder les symboles du premier flux de données d'après la correspondance, en choisissant parmi les mots redondants, en fonction d'une partie au moins du second flux de données. Selon différents autres aspects: - les mots de code peuvent être de longueur fixe, - le module de traitement comprend: . une fonction de calcul de la capacité de multiplexage courante du premier flux de données, au vu de la table de codage, et . une fonction d'extraction, dans le second flux de données, d'une partie multiplexée, déterminée d'après la capacité de multiplexage courante, pour être portée par lesdits mots redondants. - le codeur comprend une transformation d'un flux binaire en un flux de variable multivaluée, en particulier en utilisant les transformations décrites dans la table C ci-après. - en variante, le codeur comprend une transformation d'un flux binaire en un flux de variable multi-valuée, en particulier en utilisant une décomposition euclidienne généralisé à partir d'une variable globale donnée par la relation (E9) décrite ci-après. Selon une première variante : - le module de codage comprend une table de codage et le module de traitement comprend: - une fonction de lecture d'une capacité de multiplexage de chaque symbole courant du premier flux de données au vu de la table de codage, et - une fonction d'extraction d'une partie du second flux de données déterminée d'après la capacité de multiplexage, pour être portée par lesdits mots redondants, - la table de codage comprend pour chaque symbole, un nombre de mots de code associé égal à une puissance de 2. Selon une deuxième variante : - le module de codage comprend un arbre binaire de codage contenant, pour chaque symbole du premier flux de données, une première partie de mot de code, de longueur variable et inférieure à une longueur maximale, et le module de traitement comprend: - une fonction de calcul de la capacité de multiplexage pour chaque symbole courant du premier flux de données au vu de la première partie de mot de code de chaque symbole, - une fonction d'extraction d'une partie du second flux de données déterminée d'après la capacité de multiplexage, pour être portée par lesdits mots redondants. - en variante, chaque symbole comprend une séquence de symboles. Selon une troisième variante : - chaque symbole comprend une séquence de symboles, et le module de codage comprend un codeur arithmétique propre à calculer, pour une séquence de symboles du premier flux de données, une première partie de mot de code, de longueur variable et inférieure à une longueur maximale ; module de traitement comprend: - une fonction de calcul de la capacité de multiplexage pour chaque symbole courant du premier flux de données au vu de la première partie de mot de code de chaque symbole, - une fonction d'extraction d'une partie du second flux de données déterminée d'après la capacité de multiplexage pour chaque symbole, pour être portée par lesdits mots redondants. Dans la deuxième et troisième variante, ladite partie du second flux de données est concaténée à la première partie de mot de code jusqu'à la longueur maximale du mot de code. De manière générale: - le second flux de données est préalablement encodé. - le reste du second flux de données est concaténé aux données transmises. L'invention vise également un décodeur, propre à effectuer les opérations inverses ou réciproques de celle du codeur, dans ses différents aspects. L'invention vise encore un procédé de compression de données numériques, qui comprend les étapes suivantes: a. établir une correspondance entre des symboles du premier flux de données et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole, et b. coder les symboles d'un premier flux de données d'après l'étape a., en choisissant parmi les mots redondants, en fonction d'une partie au moins d'un second flux de données. Ce procédé peut intégrer les autres aspects du codage. Enfin, l'invention vise également le procédé de décompression de données numériques, comprenant les étapes réciproques de celles du procédé de compression. D'autres caractéristiques et avantages de l'invention apparaîtront à l'examen de la description détaillée ci-après, et des dessins annexés, sur lesquels : - la figure 1 illustre de façon schématique un procédé de création de codes, - la figure 2 est un diagramme formant vue générale du processus d'encodage dans sa variante principale, - la figure 2A illustre un exemple simplifié de code multiplexé, à quatre éléments, - la figure 3 illustre un premier mode de réalisation d'un processus détaillé d'encodage, - la figure 4 illustre une variante de réalisation du processus de la figure 3, - la figure 5 illustre un exemple de création d'une capacité de stockage par l'attribution de plusieurs mots de code à un symbole, un flux de données q pouvant être conjointement stocké, et - la figure 6 ou table C illustre des transformations utilisées dans un exemple où le paramètre fv est égal à 5, - la figure 7 illustre un autre exemple simplifié de code multiplexé à quatre éléments, - la figure 8 illustre un processus d'encodage général des figures 3 et 4, - la figure 9 illustre un deuxième mode de réalisation d'un processus détaillé d'encodage, - la figure 10 illustre une table de résultat d'une première variante du deuxième mode de réalisation du processus d'encodage selon la figure 9, -la figure 11 illustre un diagramme formant vue générale d'une deuxième variante du deuxième mode de réalisation du processus d'encodage selon la figure 9 - la figure 12 un diagramme formant vue générale d'une troisième variante du deuxième mode de réalisation du processus d'encodage selon la figure 9, En outre: - l'annexe 1 contient des expressions utilisées dans la présente description, et - l'annexe 2 contient des algorithmes en langage naturel utilisés dans la présente description. Les dessins et les annexes à la description comprennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la description, mais aussi contribuer à la définition de l'invention, le cas échéant. De manière générale, un système de compression de signaux multimédia (image, vidéo, audio, parole) fait appel à des codes statistiques aussi appelés codes à longueurs variables. Ceux-ci permettent d'obtenir des débits approchant ce que les spécialistes appellent "l'entropie du signal". Les codes les plus utilisés dans les systèmes existants (en particulier dans les standards) sont les codes de Huffman qui ont été décrits dans l'ouvrage suivant : D. A. Huffman : "A method for the construction ofminimum redundancy codes", Proc. IRE, 40 (1951), p.1098-1101. Plus récemment, on a vu un regain d'intérêt pour les codes arithmétiques en raison de leurs performances accrues en terme de compression. Ils permettent en effet de découpler le processus d'encodage du modèle supposé de la source. Ceci permet aisément d'utiliser des modèles statistiques d'ordre supérieur. Ces codes arithmétiques ont été décrits dans des ouvrages tels que - J. J. Rissanen "Generalized kraft inequality and arithmetic", IBM J. Res. Develop., 20:198- 203, Mai 1976 - J. J. Rissanen, "Arithmetic Coding as number representations", Acta Polytech. Scand. Math., 31 :44-51, 1979 ainsi que dans des brevets américains US 4 286 256, US 4 467 317, US 4 652 856. Jusque récemment, la conception des systèmes de compression se faisait en supposant une qualité de service transport garantie. On supposait en effet que les couches inférieures du modèle OSI incorporent des codes correcteurs d'erreurs garantissant un taux d'erreur résiduel vu de l'application quasi-nul. Les codes à longueurs variables pouvaient donc être largement utilisés malgré leur forte sensibilité au bruit de transmission. Toute erreur dans le train binaire peut engendrer une désynchronisation du décodeur et donc une propagation des erreurs sur la suite des informations décodées. Pour pallier ce problème de propagation, les standards de premières générations (H.261, H. 263, MPEG-1, MPEG-2) ont incorporé dans la syntaxe du train binaire transmis des marqueurs de synchronisation. Ce sont des mots de code longs (16 ou 22 bits constitués d'une suite de 15 ou 21 bits à 'l'suivis d'un '0') non émulables par des erreurs se produisant sur les autres mots de code et qui peuvent donc être reconnus par le décodeur avec une probabilité proche de '1'. Cela conduit à structurer le train binaire en paquets délimités par ces marqueurs de synchronisation. Cela permet de confiner la propagation des erreurs au sein du paquet. Cependant si une erreur intervient en début de paquet la suite du paquet peut être perdue. En outre, la périodicité de ces marqueurs de synchronisation doit être restreinte pour éviter une perte trop grande en efficacité de compression. Cette hypothèse de taux d'erreur résiduel quasi nul n'est plus vraie dans les réseaux sans fil et mobiles, dont les caractéristiques des canaux varient dans le temps (canaux non stationnaires). Ce taux d'erreur résiduel vu par le décodeur des signaux de source est souvent loin d'être négligeable. Les nouveaux standards ( H.263+ et MPEG-4) ont alors fait appel à des codes à longueurs variables réversibles (RVLC). La particularité de ces codes est qu'ils peuvent être décodés du premier vers le dernier bit d'un paquet, et, à l'inverse, du dernier vers le premier bit du paquet. Si une erreur s'est produite en milieu de paquet, cette symétrie du code permet de confiner la propagation des erreurs sur un segment en milieu de paquet au lieu de la propager jusqu' à la fin du paquet délimité par un marqueur de synchronisation. Cependant, la symétrie du code engendre une perte en efficacité de compression par rapport à un code de Huffman de l'ordre de 10 %. En outre les codes à longueurs variables réversibles n'évitent pas complètement le problème de propagation des erreurs : si une erreur se produit en début et en fin de paquet, tout le paquet risque d'être erroné. La conception de codes qui soient à la fois performants en compression (i.e., qui permettent d'approcher l'entropie de la source), tout en étant robustes au bruit de transmission, constitue doncun enjeu important, notamment pour les futurs systèmes de communication multimédia (image, vidéo, audio, parole) mobiles. Pour ces systèmes de nouveaux standards sont à l'étude à la fois au sein de l'ITU (International Télécommunication Union) et de l'ISO (International Standard Organization). Bien que les standards occupent une place prépondérante dans le secteur des télécommuni- cations, une telle famille de codes peut aussi trouver des applications sur des marchés de niche faisant appel à des solutions propriétaires. De façon générale, les procédés de compression de données numériques proposés ci-après sont mis en oeuvre par un codeur de compression de données numériques selon l'invention comprenant une module de codage et un module de traitement. Plus spécifiquement, le module de codage établit une correspondance entre des symboles d'un premier flux de données et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole. De manière générale, un module de codage peut être toute forme de stockage présentant la correspondance définie ci-dessus, toute forme de représentation de cette correspondance ou toute fonction de codage calculant cette correspondance. Ainsi, à titre d'exemple seulement, le module de codage peut être une table de codage, un arbre de codage ou un codeur arithmétique suivant les procédés de compressions détaillés ci-après. Le module de traitement met en oeuvre les étapes des procédés de compression de données à partir du premier flux de données et d'un second flux de données et du module de codage. Le module de traitement comprend des fonctions propre à réaliser certaines étapes des procédés et peut comprendre une transformation d'un flux binaire en un flux de variable multi-valuée. Ces fonctions comprennent une fonction de calcul ou de lecture d'une capacité de multiplexage liée au premier flux de données, une fonction d'extraction d'une partie du second flux de données. Ces fonctions seront plus particulièrement développées dans la suite de la description. De façon symétrique, les procédés de décompression de données sont mis en oeuvre par un décodeur selon l'invention. De façon générale, le procédé décrit ci-après consiste à créer des codes de longueur fixée pour les données de source importantes (flux sH ), en attribuant plusieurs mots de codes à chaque réalisation possible de cette source. Ainsi, pour transmettre un symbole, il est possible de choisir parmi les différentes représentations possibles de celui-ci. Ce choix, qui est une variable multi-valuée, définit une capacité de stockage qui va pouvoir être utilisée pour transmettre conjointement d'autres données (cf. exemple de la figure 5 détaillée ci-après). Ce sont les données d'importance moindre, représentées par un flux noté SL, qui vont être représentées via la représentation multiple des symboles. La figure 1 présente le procédé de création de ces codes, plus précisément le procédé de création de codes multiplexés. A l'étape 100, la source importante, SH, prend ses valeurs dans un alphabet à # éléments, qui peut être défini par l'expression (El) en annexe. La loi de probabilité d'apparition des symboles sur cet alphabet est supposée connue. On note i la probabilité associée au symbole a; de l'alphabet de la source SH, comme représenté par l'expression (E2). Le procédé de création des codes, représenté sur la figure 1, peut ensuite se décomposer en 2 étapes principales: - Pour chaque symbole a; , choix du nombre N; de mots de code affectés à ce symbole, - Allocation des mots de codes aux symboles. La première étape consiste en une sélection des paramètres de codes c et (Ni ) décomposée en différentes étapes 120, 130, 140 et 150. A l'étape 120-1, un paramètre c de longueur de mot de code, en nombre de bits, est choisi. Dans une première réalisation (en référence aux figures 2A et 5), le paramètre c prend la valeur c = 4. Dans une autre réalisation (en référence aux figures 2B, 7 et 10), le paramètre c prend la valeur 3. Ceci définit 2c mots de codes à l'étape 120-2, à répartir entre les symboles de l'alphabet A. En fonction des valeurs possibles de la probabilité i à l'étape 130-1, on partitionne l'ensemble des symboles de l'alphabet A en deux sous-ensembles Am et AM respectivement à l'étape 130-2 et à l'étape 130-3. Le premier est l'ensemble des symboles a; dont la probabilité i est inférieure ou égale à 1/2c, le second est son complémentaire dans A. Les cardinaux de ces ensembles sont notés respectivement #m et #M. A l'étape 140, la loi de probabilité [i, sur les symboles de AM est alors calculée. Elle est donnée par l'expression (E3). A l'étape 150-1, le nombre de mots de codes par symbole est alors choisi de manière à vérifier approximativement l'expression (E4), sous la contrainte de l'expression (E5) pour le sous-ensemble AM . Dans ce but, un algorithme classique d'optimisation peut être utilisé. A l'étape 150-2, le nombre de mots de codes par symbole est déterminé pour l'ensemble des symboles de l'alphabet A. Dans une variante du procédé de création des codes, comprenant les étapes 120, 130, 140 et 150, une étape additionnelle est ajoutée après l'étape 150, et les étapes 120-1 et 150-1 se déclinent respectivement sous la forme suivante. Soient f1 = 2, f2 = 3, f3 = 5 ..., fv , les v premiers nombres premiers. En plus du paramètre c à l'étape 120-1, un nombre premier fv est également choisi parmi ces nombres premiers. A l'étape 150-1, on procède de la même manière, mais en ajoutant une contrainte supplémentaire de l'étape 150-11 pour le choix du nombre de mots de code Ni associés à chaque symbole : la décomposition en facteurs premiers de tous les N; ne doit pas contenir de facteur premier supérieur à fv. Après l'étape 150-1, la décomposition en facteurs premiers de chaque Ni est alors effectuée, et on calcule pour tout N; le nombre de fois que chaque facteur premier f@,avec 1 L'étape additionnelle consiste en une allocation des mots de codes aux symboles. Cette étape se décompose en différentes étapes 160 et 180 développées ci-après. A l'étape 160, un étiquetage binaire (0000, 0001, ...) des symboles rangés selon, à titre d'exemple uniquement, un ordre lexicographique est réalisé. Ceci permet d'affecter aux différents symboles Ni de mots de codes, le paramètre N; étant un entier déterminé à l'étape précédente (150-2). L'ensemble des mots de codes ainsi associés à un symbole ai est appelé classe d'équivalence de a; , et notée Ci à l'étape 180. On associe alors aux mots de codes de chaque classe d'équivalence une valeur entre 0 et N, -1, appelée ici état. Cette valeur identifie le mot de code au sein de la classe d'équivalence. Ainsi, à chaque mot de code c; est associé un symbole ai et une variable d'état comprise entre 0 et Ni -1, comme illustré par l'expression (E6). Un exemple de code ainsi construit est donné dans la table A, figure 2A pour fv = 5 et c= 4. La table A comprend pour chaque symbole a; de la colonne 13-A, une colonne 11-A comprenant les classes Ci, une colonne 12-A comprenant les mots de code associés à chaque classe, une colonne 14-A comprenant les nombres Ni de mots de code par classe, une colonne 15-A comprenant les probabilités i associé à chaque classe, une colonne 16-A comprenant un état q de chaque mot de code d'une classe. Dans cet exemple, les symboles a; comprennent 4 éléments de l'alphabet. Une variante de code construit est donnée dans la table B, figure 2B pour fv = 2 et c = 3. Cette table B définit un code multiplexé binaire, c'est-à-dire un code multiplexé tel que pour tout symbole a;, le cardinal N; de la classe d'équivalence associé est une puissance entière de 2. En notant 1, cette puissance, le cardinal N, de la classe d'équivalence vérifie E(ll). La table B comprend pour chaque symbole a; de la colonne 13-B, une colonne 11-B comprenant les classes Ci, une colonne 12-B comprenant les mots de code associés à chaque classe, une colonne 14-B comprenant les nombres Ni de mots de code par classe. Dans cet exemple, la variable d'état q n'existe pas mais d'autres indications sont précisées et leur utilité sera plus largement comprise à la lecture de la description : une colonne 15-B comprend les probabilités i associées chacune à une classe, une colonne 18-B comprend un nombre Di de bits pouvant être stockés, Di étant associé à chaque classe, une colonne 17-B comprend un jeu U1de Di bits pour chaque mot de code d'une classe. Dans cet exemple, les symboles a; comprennent 4 éléments de l'alphabet avec i prenant les valeurs de 1 à 4. La condition (El 1) sur les cardinaux des classes d'équivalence mène au fait que le choix d'un mot de code au sein d'une classe d'équivalence permet de stocker un nombre de bit entier égal au logarithme en base 2 du cardinal de la classe d'équivalence. Ce nombre de bits Di peut donc s'écrire selon (E12). Di représente une capacité de multiplexage d'un symbole donné. Les tables A et B sont des tables de codage, appelées aussi tables de mots de code multiplexés ou table de code multiplexé. Selon une troisième variante de réalisation, un code multiplexé binaire peut également être construit à partir d'un arbre binaire de codage associé à un préfixe de mot de code, ce préfixe étant de longueur variable et inférieure à une longueur maximale étant la hauteur de l'arbre, tel que le code de Huffman présenté sur la figure 7. La relation "inférieure" est à prendre dans le sens "inférieur ou égal". L'arbre se divise d'abord en deux branches prenant respectivement la valeur 1 et la valeur 0. De manière récurrente, chaque branche de l'arbre est divisée en deux branches prenant respectivement la valeur 0 et la valeur 1. Le paramètre c est donné par la hauteur de l'arbre, c'est-à-dire par la longueur du préfixe le plus long (dans l'exemple c = 3) de l'arbre. Une classe d'équivalence Ci est définie par un ensemble de mots de code de longueur fixe ayant chacun une première partie en commun, appelée préfixe commun. Ce préfixe commun est la partie du mot de code à longueur variable utilisée pour représenter le symbole a; et symbolisée sur la figure 7 par le trajet formé par les branches successives en trait plein. Pour certains trajets en trait plein représentant un symbole ai, il reste un certain nombre de trajet en trait tireté représentant chacun une deuxième partie du mot de code appelée suffixe. Le suffixe d'un mot de code définit le jeu de bit Ui comme indiqué sur la figure par une flèche. Ainsi, l'arbre de codage est défini comme un module de codage, mettant en correspondance les symboles du flux de données prioritaire et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole. Ces mots de code sont de longueur fixe et comprennent une première et une deuxième partie de mot de code, par exemple un préfixe et un suffixe de longueurs variables. Dans une variante, la première et la deuxième partie de mot de code peuvent correspondre respectivement au suffixe et au préfixe du mot de code, De manière plus générale, un mot de code peut comprendre plusieurs parties de code. Les figures 2 et 3 illustrent le procédé de codage, appelé également d'encodage. Le processus d'encodage se décompose de la manière suivante: - étapes 1 : flux de données d'importance moindre SL de l'étape 1-1 est encodé en une suite binaire b = (b1, b2, ..., bKB) en utilisant un encodage réversible à l'étape 1-2. A cet effet, un codeur réversible de type Huffman ou codeur arithmétique (non restrictif) peut être utilisé. Cela aboutit à la génération d'une suite de bits, notée b à l'étape 1-3. - étapes 2 : de la séquence de symboles S1, S2,... , s du flux SH à l'étape 2-1 et de la lecture de table des mots de code multiplexés à l'étape 2-2, on déduit les valeurs n1, n2 ,... , n associées à l'étape 2-3. Par exemple, pour un symbole S1 correspondant au symbole a; d'une table de mots de codes multiplexés, n1 prend la valeur de Ni correspondant à la réalisation du symbole a;. - étapes 3 : en déduit la valeur A, ici selon l'expression (E7) à l'étape 3-1. On calcule le nombre K'B de bits qui vont pouvoir être stockés en utilisant la redondance intrinsèque des codes multiplexés, selon l'expression (E8) à l'étape 3-2. Ce nombre K'B de bits représente la capacité de multiplexage du flux SH pour ce processus d'encodage. - étapes 4 : condition que KB derniers bits du flux binaire en une variable globale. Si la condition KB - étapes 5 : valeur y permet alors de calculer les états qt , 1 # t # KH (étape 5-2), en utilisant par exemple une méthode de décomposition euclidienne généralisée (étape 5-1), comme illustré dans l'algorithme (Al) annexé. Il s'agit d'une génération de flux d'états qt, qt étant une variable multivaluée. - étapes 6 : tout t tel que 1 # t # KH , la connaissance du symbole St et de l'état qt calculé à l'étape précédente permet de choisir le mot de code dans la table des mots de codes multiplexés (étape 6-1). On obtient le flux multiplexé m comprenant les mots de code ml à m (étape 6-2). - étapes 7 : les KB - K'B bits du flux d'importance moindre (étape 7-1) sont alors concaténés à la séquence de mots de codes multiplexés précédemment construite (étape 7-2) pour former le flux transmis (étape 7-3). Au moins l'étape 3 est mise en oeuvre par la fonction de calcul du module de traitement. Les étapes 4,5 et 6 au moins sont mises en oeuvre par la fonction d'extraction du module de traitement. De façon générale, pour un procédé d'encodage, un processus de décodage associé est effectué en procédant aux opérations inverses de celles de l'encodage. Une variante du procédé d'encodage est illustrée sur la figure 4 et permet d'éviter les calculs sur entiers longs. Lavariante du processus d'encodage se décompose de la manière suivante: - étapes 21 : elles correspondent aux étapes 1 de la figure 3. - étapes 22 : elles correspondent aux étapes 2 de la figure 3. - étapes 23 : nombre total de fois où chaque facteur premier fj apparaît dans l'ensemble des décompositions en facteurs de la séquence de variables nt est alors déterminée à partir de la table dite "alpha" (étapes 23-1 et 23-2). Il est noté d dans la suite, et représente le nombre de variables fj-valuées qui peuvent être multiplexées avec le flux SH. Ainsi, pour chaque facteur premier fj, dj représente la somme des [alpha]t,j de la séquence de variables nt. - étapes 24 : choisit alors les transformations qui vont être utilisées pour transformer le train binaire en ces variables fj-valuées (étape 24-1). Ces transformations dépendent de la valeur de fv choisie. Les transformations utilisées pour fv = 5 sont présentées dans la table C de la figure 5. Elles se présentent sous la forme illustrée dans les expressions (E10) annexées. Ainsi, chaque transformation Tz prend uTz bits en entrée (que l'on notera par la suite uT par simplification pour un z donné) et les transforment en respectivement vT,l , vT,2 ,..., vT,v variables 2,3, 5,... , fv -valuées. Dans l'exemple de la table C pour fv = 5, chaque transformation Tz de la colonne 31 prend uT bits de la colonne 32 en entrée et les transforment en respectivement vT,l , VT,2, vT3 variables 2, 3, 5 -valuées des colonnes 33, 34, 35. Or le nombre requis de variables de chaque type est connu : chaque type de variable fj, il est dj (cf. étape 23-2). L'algorithme A2 annexé peut être utilisé pour calculer le nombre gTz de fois que la transformation T z doit être utilisée (étape 24-2), et ceci pour une variable z allant de 0 à zmax.(Les transformations sont supposées être classées dans l'ordre décroissant de leur pertinence dans la table). - étape 25 : KB,, le nombre de bits multiplexés, est calculé en effectuant le produit du nombre de fois gTz qu'une transformation Tz doit être utilisée avec le nombre de bits uT en entrée de la transformation et en additionnant ces produits pour toutes les transformations z utilisées. Ce nombre K'B de bits représente la capacité de multiplexage du flux SH pour ce processus d'encodage. Cette étape 25 correspond aux étapes 3 de la figure 3. Les étapes suivantes 26-1, 26-2, 26-3, et 26-11 correspondent aux étapes 4-1, 4-2, 4-3 et 4-11 de la figure 3. - étapes 27 : choisi le nombre de transformations de chaque type qui seront utilisées, on les applique à la fin du flux binaire b (étape 27-1). Pour chaque transformation Tz, les uT bits en entrée sont vus comme la représentation binaire d'un entier e. Cet entier est alors décomposé en plusieurs variables f. -valuées, comme précisé dans les expressions (E10). On note er,j ces variables, où : j indique que la valeur obtenue est la réalisation d'une variable fj-valuée, et r indique le numéro de variable . -valuée. Les valeurs des er,j peuvent s'obtenir à partir de e avec le procédé de l'algorithme A3. Cet algorithme est réitéré un nombre gTz de fois pour chaque transformation Tz. A l'issue de cette étape 27-1, les résultats obtenus se présentent sous la forme des expressions (E10) et sont concaténés de manière à obtenir v séquences de variables disponibles (étape 27-2): - la première, noté F1, est une séquence de longueur dl de variables 2-valuée (bits), - la j-ème, noté Fj, est une séquence de longueur dj de variables fj-valuée. Des pointeurs de positions, appelés tj, sont associés aux séquences, ils sont initialement positionnés sur le début de chaque séquence. - étapes 28 : partir de ces variables, on calcule le flux d'état (étape 28-1) dont le résultat est (étape 28-2) : q = ( q1, q2 ,..., qKH ). Pour effectuer ce calcul, on peut procéder de la manière suivante : - pour tout t tel que 1 # t # KH , et ainsi pour chaque symbole St, la décomposition en facteurs premiers de nt permet de déterminer le nombre [alpha]t,j de variables de chaque type (2- valuées,...,f-valuées,...,f-valuées, j variant de 1 à v). Chaque séquence Fj précédemment obtenue est divisée en KH segments successifs comprenant [alpha]t,j bits pour t variant de 1 à KH. Le procédé est réitéré pour j variant de 1 à v. Chaque variable nt valuée (q, ) est obtenue par le procédé réciproque de la décomposition euclidienne itérative, appliquée aux segments Ft,j de variables fj- valuées. Un exemple de l'implémentation de ce procédé est décrit par l'algorithme A4. Notons qu'à la fin de ces étapes 28, toutes les variables des flux Fj ont été utilisées. - étapes 29 : tout t tel que 1 # t # KH , la connaissance du symbole St et de l'état qt calculé à l'étape précédente permet de choisir le mot de code dans la table des mots de codes multiplexés (étapes 29-1). Le flux multiplexé m est alors obtenu (étape 29-2). - étapes 30 : lesKH - K'H bits du flux d'importance moindre (étapes 30-1) sont alors concaténés à la séquence de mots de codes multiplexés précédemment évaluée (étape 30-2). On obtient le flux transmis (étape 30-3). Au moins l'étape 25 est mise en oeuvre par la fonction de calcul du module de traitement. Au moins l'étape 27 est mise en oeuvre par la fonction d'extraction du module de traitement. Les procédés d'encodage présentés en référence aux figures 2, 3 et 4 peuvent être généralisés selon le procédé d'encodage de la figure 8 : - à partir de la table de mots de code multiplexés et de la séquence de symboles SH, les valeurs n1, n2 ,... , n associées sont calculées de manière à calculer la capacité de multiplexage K'B de la séquence de symboles SH à l'étape I. - le flux b pré-encodé est divisé en deux parties b' et b" à l'étape II en fonction de la capacité de multiplexage K'B, - la partie b' du flux est transformée en une suite d'états q en utilisant les valeurs n1, n2 ,... , n à l'étape V - à partir de cette suite d'états q et de la table de mots de codes multiplexés, les mots de code multiplexés sont choisis à l'étape VII, - ces mots de code sont assemblés pour former un flux multiplexé m à l'étape VIII, - la partie concaténée b" du flux b est concaténée avec le flux multiplexé m à l'étape IX. Au moins l'étape 1 est mise en oeuvre par la fonction de calcul du module de traitement. L'étape II au moins est mise en oeuvre par la fonction d'extraction du module de traitement. Un exemple de création d'une capacité de stockage selon l'invention est illustré sur la figure 5. Ainsi, pour chaque symbole s, du flux de données SH est attribuée une classe correspon- dante Ct et les mots de code associés Ct,q en fonction d'une table de codage. Chaque état qt d'un flux de données q peut être conjointement stocké après le choix du mot de code Ct,qt dans la table de mots de code multiplexés. Dans le cas de la conversion du train binaire de priorité moindre, la variante du procédé d'encodage avec fv = 2 peut être utilisée. Une autre variante décrite ci-après en référence à la figure 9 peut avantageusement être utilisée. La table B de la figure 2B est utilisée dans cet exemple. La partie du procédé de conversion du train binaire se résume donc aux étapes suivantes : - étape 40 : correspond aux étapes 1 de la figure 3. - étape 42 : de la lecture du symbole st et de la lecture de table de codes multiplexsé binaires, on déduit la valeur Dt associée. Cette valeur Dt correspond au nombre de bits qui peuvent être conjointement codés avec st. Dt est une capacité de multiplexage d'un symbole donné. - étape 44 : lesDt prochains bits du train binaire b pré-encodé sont lus. Il est noté que le train binaire est lu au fur et à mesure en fonction d'un pointeur de positionnement. Ces Dt prochains bits sont notés ut et jouent le même rôle que les états (qt). - étape 46 : mot de code Cst,ut est choisi dans la table des codes multiplexés binaires en fonction du symbole s, et des bits U, . la table étant indexée par ai et Ut . Ce mot de code est émis sur le canal, - étape 48 : chaque symbole St du flux SH, t variant de 1 à KH les étapes 42 à 46 sont effectuées. Au moins l'étape 42 est mise en oeuvre par la fonction de calcul du module de traitement. L'étape 44 au moins est mise en oeuvre par la fonction d'extraction du module de traitement. A titre d'exemple d'application du procédé de la figure 9, on considère la séquence de plus haute priorité à transmettre sH = aH a2 az a3 a2 a2 a4 al a2 , de longueur KH = 10, et le train binaire pré-encodé de faible priorité b = 0101010101010. Le nombre de bits qui peuvent être multiplexés avec chaque réalisation de sH est donné, pour t variant de 1 à KH, par (dt ) = (1,2, 2,0, 2, 1, 2, 0, 1, 2). Le nombre de bits dt du train binaire b est lu au fur et à mesure pour t variant de 1 à KH de manière à obtenir les séquences Ut de bits ( ul , U KH ) = (0, 10, 10, #, 10, 1, 01, #, 0, 10). Alors, pour tout t, le couple (at, ut ) indexe un mot de code dans la table des codes multiplexés binaires. Le train binaire effectivement transmis est 000 100 100 110 100 001011 111000 100. En variante, le procédé de la figure 9 peut également utilisé l'arbre de codage. Dans cette variante, les étapes 42 à 46 se présente sous la forme suivante : - étape 42 : la lecture du symbole St et de la lecture de l'arbre binaire de codage, on obtient le préfixe du mot de code pour le symbole st . Du nombre de bits de ce préfixe, on déduit le nombre de bits Dt qui peuvent être conjointement codés avec s, pour former une suite de bits d'une longueur totale égale à la hauteur de l'arbre de codage. Dt est une capacité de multiplexage d'un symbole donné. - étape 44 : lesDt prochains bits du train binaire b pré-encodé sont lus. Il est noté que le train binaire est lu au fur et à mesure en fonction d'un pointeur de positionnement. Ces Dt prochains bits sont notés ut . - étape 46 : mot de code émis sur le canal résulte de la concaténation du préfixe du mot de code pour le symbole St et des bits ut du train binaire b. Ainsi, l'utilisation du train binaire b permet de faire un choix parmi les mots de code possibles indiqués en trait tiretés sur l'arbre de codage de la figure 7 pour un symbole donné. L'étape 44 au moins est mise en oeuvre par la fonction d'extraction du module de traitement. A titre d'exemple, en utilisant la séquence SH et le train binaire b indiqués précédemment dans le cas de la figure 10 et l'arbre de codage de la figure 7 pour déterminer les préfixes des mots de code, il est obtenu le flux mt de mots de code par concaténation des préfixes et des suffixes ut. De manière générale, l'arbre de codage permet de définir un préfixe de mots de code pour chaque symbole du flux SH, ce qui revient à définir plusieurs mots de code possibles pour certains symboles. Le choix parmi ces mots de code possibles sera fait une fois faites la lecture du code binaire pour la détermination du suffixe du mot de code et la formation du mot de code par concaténation du préfixe et du suffixe. Le calcul de la somme de l'ensemble des Dt associés aux symboles formant le flux SH permet de déterminer la capacité de multiplexage du flux SH. D'autres variantes du procédé d'encodage sont illustrées ci-après en référence aux figures 11 et 12. Il peut être intéressant de considérer de créer un code multiplexé non pas sur l'alphabet, mais sur un "alphabet produit". On appelle "alphabet produit", un alphabet constitué non pas de symboles mais de séquences de symboles. Dans l'exemple de la figure 11, la source SH 50 comprend K symboles. Elle est convertie en une source de C-uplet notée H (de longueur K /C ), ces C-uplets se dénommant Hl, H2, H3, ...H et respectivement numérotés 51, 52, 53 et 55. Tout C-uplet de symboles a la probabilité d'apparition (E13). Il en est déduit le calcul de la distribution de probabilité H associé aux C-uplets. La création de l'arbre binaire de codage (appelé "arbre binaire de codage produit") est effectuée en considérant, pour chaque C-uplet, les probabilités d'apparition de chaque séquence de longueur C données en (E13). Le préfixe du mot de code associé à une séquence de symboles est lu sur l'arbre de codage. D'après la figure 11, pour chaque séquence de symboles, la fonction de multiplexage 62 regroupe un certain nombre de fonctions effectuant les étapes correspondant au procédé en variante de la figure 9. Dans chaque étape, le "symbole" est remplacé par une "séquence de symboles ". Ainsi, le procédé d'encodage utilisant un arbre de codage est appliqué directement sur les réalisations de C-uplets de la source H. Si la taille de l'alphabet A est trop importante pour pouvoir utiliser un arbre de codage , il est également possible de remplacer "l'arbre de codage produit" par un code arithmétique comme illustré sur la figure 12. Ainsi, la source SH 70 est découpée en C-uplets, ce qui conduit à un nombre de C-uplets égal à K/C . Ces C-uplets peuvent être relativement longs et sont encodés par des codeurs arithmétiques (non restrictif) indépendants. Dans l'exemple de la figure 12, chaque C-uplet est encodé par un codeur arithmétique distinct 71, 72, 73 et 75. La sortie des ces codeurs arithmétiques sont des suites Hl, H2, HK/C de bits de longueur variables numérotés 81-1, 82-1, 85-1. La longueur c des mots de codes correspond à la plus longue suite de bits Ht possible en sortie des codeurs arithmétiques. Chaque suite de bits est alors vue comme un préfixe d'un mot de code. Pour chaque préfixe de longueur inférieure strictement à la longueur c, il existe plusieurs mots de code de longueur c correspondant au même symbole. La formation d'un mot de code est la même que dans la variante de "l'alphabet produit". Ainsi, le flux binaire encodé b numéroté 90 est lu au fur et à mesure pour former les suffixes 81-2, 82-2, 85-2 de façon à compléter les préfixes 81-1,82-1, 85-1 et former les mots de code multiplexés. Si le nombre K/C n'est pas un entier, les C' = K-C [K/C] derniers symboles forment un C'-uplet qui est encodé arithmétiquement. Comme indiqué pour la figure 9, du nombre de bits d'un préfixe, on déduit le nombre de bits Dt (1 Dt associés aux séquences de symboles formant la source H permet de déterminer la capacité de multiplexage du flux SH. De manière générale, un codeur arithmétique ou un arbre de codage permet d'établir un préfixe de mots de code pour chaque séquence de symboles, ce qui revient à définir plusieurs mots de code possibles pour certaines séquences de symboles. Le choix parmi ces mots de code possibles sera fait une fois faites la lecture du code binaire pour la détermination du suffixe du mot de code et la formation du mot de code par concaténation du préfixe et du suffixe. Ainsi, l'invention permet le multiplexage de deux flux de données SH et SL, afin de diminuer la sensibilité aux erreurs de l'un d'eux SH, désigné comme plus important ou prioritaire. Ces deux flux peuvent être distingués dans la même source de signaux, notamment comme dans les quelques exemples suivants de sources SH et SL : - basses fréquences et hautes fréquences extraites par décomposition multi-résolution (par bancs de filtres, transformées en ondelettes) d'un signal, - information de texture (ex : coefficients DCT, coefficients ondelettes) et information de mouvement, - bits de poids forts et bits de poids faibles des coefficients ondelettes ou des échantillons quantifiés d'un signal. Bien entendu, l'énumération ci-dessus n'a aucun caractère exhaustif. Par ailleurs, dans la mesure où les mots de code sont de longueur fixe (ou bien si l'on utilisait des marqueurs de synchronisation), l'invention permet la création d'un code multiplexé permettant de décrire conjointement deux flux, dont un au moins bénéficie d'une synchronisation parfaite. Annexe 1 - Formules (El) ,A = al, ... , az, ... , a} (E2) i P(ai) (E3) #i = 2c/2c-#M 2 (E4) Ni = (2C - [lm) * [Li (E5) #i#A Ni = 2c (E6) 02>. (si R'3) (E7) # = #t=1KH nt (E8) K'B = [log2(#)] (E9) 'Y = K i bT+xB-xB2T i. v-r,i variables 2-valuée, el,l, e2,1, ... , evTl,l (E10) uTbits vT,2 variables 3-valuée, el,2, e2,2, .. -, ev-r 2,2 'u-7- variables /-valuée, el,,, e2,", ... , Ev.- v,y (Ell) di E 1..52, li E 1 Ni = 2li (El2) Di = 1092 (Ni) = c - li (E13) P(StSt+1 ... St+c-i) = P(St)P(St+1/ St) P(St+c-d St+C-2) Annexe 2 - Algorithmes If 1 ='y Pour t = 1 : KH Al qt = y' modulo nt 1 -y-qt Fin pour z = 0 % Tant qu'il reste des variables fj-valuées à obtenir Tant que sum(dj) > 0 % Calcul du nombre de fois que la transformation Tz est utilisée 9rz = floor(min(d-1 où vTz =1= 0 A2 % Calcul du nombre de variables fj-valuée % qui n'ont pas été transformées par la transformation T Pour chaque j entre 1 et v dj = dj - 9rz * V7-.,j % Essaie la transformation suivante z=z-I-1 el = Pour j = 1 : v Pour r = 1 : v7-,j A3 er,j = e' modulo fj el-er3 fi Fin pour Fin pour Pour j = 1 : v tj = 1 Fin pour Pour t = 1 : KH qt = 0 A4 Pour j = v : 1 par -1 Pour r = 1 : #t,J 9t = 4't * ,h - F, (t ) tj=tj+1 Fin pour Fin pour Fin pour Revendications 1. Codeur de compression de données numériques, caractérisé en ce qu'il comprend: - une entrée pour un premier flux de données (SH), et un second flux de données (SL), - un module de codage, établissant une correspondance entre des symboles du premier flux de données et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole, et - un module de traitement pour coder les symboles du premier flux de données d'après la correspondance, en choisissant parmi les mots redondants, en fonction d'une partie au moins du second flux de données. 2. Codeur selon la revendication 1, caractérisé en ce que les mots de code sont de longueur fixe. 3. Codeur selon l'une des revendications 1 et 2, caractérisé en ce que le module de traitement comprend: - une fonction de calcul de la capacité de multiplexage courante du premier flux de données (SH), au vu du module de codage, et - une fonction d'extraction, dans le second flux de données (SI), d'une partie multiplexée, déterminée d'après la capacité de multiplexage courante, pour être portée par lesdits mots redondants. 4. Codeur selon l'une des revendications précédentes, caractérisé en ce qu'il comprend une transformation d'un flux binaire en un flux de variable multi-valuée. 5. Codeur selon la revendication 4, caractérisé en ce qu'il comprend une transformation d'un flux binaire en un flux de variable multi-valuée, en particulier en utilisant les transforma- tions décrites dans la table C. 6. Codeur selon la revendication 5, caractérisé en ce qu'il comprend une transformation d'un flux binaire en un flux de variable multi-valuée, en particulier en utilisant une décomposi- tion euclidienne généralisé à partir d'une variable globale donnée par la relation (E9). 7. Codeur selon l'une des revendications 1 et 2, caractérisé en ce que le module de codage comprend une table de codage et en ce que le module de traitement comprend: - une fonction de lecture d'une capacité de multiplexage de chaque symbole courant du premier flux de données (SH) au vu de la table de codage, et - une fonction d'extraction d'une partie du second flux de données (SL) déterminée d'après la capacité de multiplexage, pour être portée par lesdits mots redondants. 8. Codeur selon la revendication 7, caractérisé en ce que la table de codage comprend pour chaque symbole, un nombre de mots de code associé égal à une puissance de 2. 9. Codeur selon l'une des revendications 1 et 2, caractérisé en ce que le module de codage comprend un arbre binaire de codage contenant, pour chaque symbole du premier flux de données, une première partie de mot de code, de longueur variable et inférieure à une longueur maximale, et en ce que le module de traitement comprend: - une fonction de calcul de la capacité de multiplexage pour chaque symbole courant du premier flux de données (SH) au vu de la première partie de mot de code de chaque symbole, - une fonction d'extraction d'une partie du second flux de données (SL) déterminée d'après la capacité de multiplexage, pour être portée par lesdits mots redondants. 10. Codeur selon la revendication 9, caractérisé en ce que chaque symbole comprend une séquence de symboles. 11. Codeur selon l'une des revendications 1 et 2, caractérisé en ce que chaque symbole comprend une séquence de symboles, en ce que le module de codage comprend un codeur arithmétique propre à calculer, pour une séquence de symboles du premier flux de données, une première partie de mot de code, de longueur variable et inférieure à une longueur maximale, et en ce que le module de traitement comprend: - une fonction de calcul de la capacité de multiplexage pour chaque symbole courant du premier flux de données (SH) au vu de la première partie de mot de code de chaque symbole, - une fonction d'extraction d'une partie du second flux de données (SI) déterminée d'après la capacité de multiplexage pour chaque symbole, pour être portée par lesdits mots redondants. 12. Codeur selon l'une des revendications 9 et 11, caractérisé en ce que ladite partie du second flux de données est concaténée à la première partie de mot de code jusqu'à la longueur maximale du mot de code. 13. Codeur selon l'une des revendications précédentes, caractérisé en ce que le second flux de données est préalablement encodé. 14. Codeur selon l'une des revendications précédentes, caractérisé en ce que le reste du second flux de données est concaténé aux données transmises. 15. Décodeur, propre à effectuer les opérations inverses de celle du codeur de l'une des revendications précédentes. 16. Procédé de compression de données numériques, caractérisé par les étapes suivantes: a. établir une correspondance entre des symboles du premier flux de données et des mots de code, où, pour certains symboles, il existe plusieurs mots, dits redondants, correspondant au même symbole, et b. coder les symboles d'un premier flux de données d'après la correspondance de l'étape a., en choisissant parmi les mots redondants, en fonction d'une partie au moins d'un second flux de données. 17. Procédé selon la revendication 16, caractérisé par des sous-fonctions conformes à l'une des revendications 1 à 14. 18. Procédé de décompression de données numériques, caractérisé par les étapes réciproques de celles du procédé selon l'une des revendications 16 et 17.