Procédé de compression de données numériques Digital data compression method
Dans différents secteurs industriels (par exemple la fabrication de calculateurs moteur ou de téléphones portables), des données numériques sont classiquement transmises par une liaison série entre un serveur et une unité de programmation d'une mémoire non volatile sur une ligne de fabrication ou lors de phases de mise à jour (comme la reprogrammation en garage de calculateurs de véhicules automobiles). La transmission de ces données occupe une bande passante importante sur le réseau de transmission, de plus le temps de programmation de la mémoire est souvent inférieur au temps de transmission sur le réseau. Ce problème est d'autant plus présent que la taille des mémoires non volatiles et des données/programmes qui y sont mémorisées s'accroît considérablement.In different industrial sectors (for example the manufacture of engine computers or mobile phones), digital data is conventionally transmitted by a serial link between a server and a programming unit of a non-volatile memory on a production line or when update phases (such as reprogramming garage motor vehicle calculators). The transmission of these data occupies an important bandwidth on the transmission network, moreover the programming time of the memory is often lower than the transmission time on the network. This problem is all the more present as the size of the non-volatile memories and the data / programs stored therein increases considerably.
Des algorithmes de compression /décompression de données numériques, tels que RLE (Run Length Encoding), ZIP, Hufman or LZW (Lempel-Ziv-Welch) (marques déposées), sont largement diffusés pour l'informatique grand public.Numeric data compression / decompression algorithms, such as Run Length Encoding (RLE), ZIP, Hufman or LZW (Lempel-Ziv-Welch) (registered trademarks), are widely distributed for consumer computing.
Ces algorithmes nécessitent généralement beaucoup de mémoire vive pour gérer des données dans une table de correspondance, un dictionnaire ou un arbre binaire. Lors d'un processus de programmation, on doit souvent stocker dans une quantité limitée de mémoire vive des routines de dialogue, de tests, de programmation et de compression. Ce logiciel de décompression ne doit donc pas être trop volumineux (arbre binaire) et ne doit pas nécessiter une puissance de calcul trop importante (compression arithmétique). Si de tels logiciels présentent des taux de compression intéressants, ils sont cependant peu adaptés à être exécutés sur des machines présentant des capacités de traitement réduites et n'exploitant pas des spécificités liées à une famille de processeur.These algorithms usually require a lot of RAM to handle data in a lookup table, dictionary, or binary tree. During a programming process, dialogue, test, programming and compression routines often need to be stored in a limited amount of RAM. This decompression software must not be too large (binary tree) and must not require too much computing power (arithmetic compression). If such software have interesting compression rates, however, they are poorly suited to be run on machines with reduced processing capabilities and not exploiting specificities related to a family of processor.
Il existe donc un besoin pour un procédé de compression d'un train de données binaires, comprenant les étapes consistant à : -dans un train binaire à compresser, déterminer une séquence de référence, répétée plusieurs fois dans la suite du train binaire;There is therefore a need for a method of compressing a binary data stream, comprising the steps of: in a bit stream to be compressed, determining a reference sequence, repeated several times in the sequence of the bitstream;
-générer un train de données compressé à partir du train de données à compresser, en remplaçant chaque répétition de la séquence de référence par un vecteur définissant directement un renvoi à cette séquence de référence. Selon une variante, le procédé comprend les étapes consistant à :generating a compressed data stream from the data stream to be compressed, replacing each repetition of the reference sequence with a vector defining directly a reference to this reference sequence. According to one variant, the method comprises the steps of:
-déterminer des séquences binaires à ne pas compresser ;-determine binary sequences not to compress;
-générer le train de données compressé en insérant avant chaque séquence binaire à ne pas compresser un vecteur identifiant que la séquence suivante n'est pas compressée ; -générer le train de données compressé en insérant un vecteur identifiant une commande suivie d'une séquence de commande au début du train binaire à compresser.
Selon encore une variante, chaque vecteur présente un champs identifiant sa longueur, et au moins deux autres champs dont la combinaison de valeurs identifie le type et les valeurs de ce vecteur.-generate the compressed data stream by inserting before each binary sequence not to compress a vector identifier that the following sequence is not compressed; generating the compressed data stream by inserting a vector identifying a command followed by a command sequence at the beginning of the bit stream to be compressed. According to another variant, each vector has a field identifying its length, and at least two other fields whose combination of values identifies the type and the values of this vector.
Selon une autre variante, la génération du train de données compressé comprend en outre l'insertion de vecteurs de commande suivis de séquences de commande en des endroits appropriés du train binaire à compresser, les séquences de commande définissant la structure des vecteurs ultérieurs, définissant la taille respective des champs des vecteurs ultérieurs, définissant des valeurs seuil de champs des vecteurs ultérieurs, contenant des informations sur le fichier compressé ou contenant des bits de vérification de l'intégrité du fichier compressé.According to another variant, the generation of the compressed data stream further comprises the insertion of control vectors followed by control sequences at appropriate places of the bit stream to be compressed, the control sequences defining the structure of the subsequent vectors, defining the respective size of the subsequent vector fields, defining threshold values of fields of the subsequent vectors, containing information on the compressed file or containing bits of verification of the integrity of the compressed file.
Selon encore une autre variante, le vecteur identifiant une séquence suivante non compressée comprend un champs définissant la taille de ladite séquence suivante.According to yet another variant, the vector identifying an uncompressed next sequence comprises a field defining the size of said next sequence.
La taille du champs définissant la taille de la séquence suivante peut être définie dans une séquence de commande insérée dans le train binaire compressé. Le vecteur de renvoi peut comprendre un champs définissant la taille de la séquence de référence et un champs définissant la position de la séquence de référence.The size of the field defining the size of the following sequence can be defined in a command sequence inserted into the compressed bit stream. The return vector may comprise a field defining the size of the reference sequence and a field defining the position of the reference sequence.
Selon une variante, la taille du champs définissant la taille de la séquence de référence et la taille du champs définissant la position de la séquence de référence sont définies automatiquement dans une séquence de commande insérée dans le train binaire compressé.According to one variant, the size of the field defining the size of the reference sequence and the size of the field defining the position of the reference sequence are automatically defined in a control sequence inserted in the compressed bitstream.
Selon encore une variante, la position de la séquence de référence est définie par la distance, dans le fichier à compresser, entre la séquence de référence et la répétition remplacée par le vecteur.According to another variant, the position of the reference sequence is defined by the distance, in the file to be compressed, between the reference sequence and the repetition replaced by the vector.
L'invention porte également sur un procédé de décompression d'un train binaire compressé, le train binaire compressé comprenant une séquence de référence et des vecteurs de renvoi à la séquence de référence remplaçant des répétitions de la séquence de référence, et le procédé comprenant une étape consistant à générer un train binaire décompressé en remplaçant les vecteurs de renvoi par la séquence de référence à laquelle ils renvoient. Selon une variante, la génération du train binaire comprend la génération à la volée du train binaire décompressé lors de la lecture du train binaire compressé.Also disclosed is a method of decompressing a compressed bit stream, the compressed bit stream comprising a reference sequence and reference vectors to the reference sequence replacing repetitions of the reference sequence, and the method comprising a step of generating an uncompressed bit stream by replacing the return vectors with the reference sequence to which they return. According to one variant, the generation of the bitstream comprises the on-the-fly generation of the decompressed bitstream during the reading of the compressed bitstream.
Selon encore une variante, la génération à la volée du train binaire décompressé est effectuée par mémorisation progressive du train binaire décompressé dans une mémoire non volatile ; lors de la lecture d'un vecteur de renvoi à une séquence de référence dans le train binaire compressé, la séquence de référence est récupérée dans la partie du train binaire déjà mémorisée dans la mémoire non volatile et le train binaire est complété en recopiant la séquence de référence récupérée.
Selon une autre variante:According to another variant, the on-the-fly generation of the decompressed bit stream is performed by progressive storage of the decompressed bit stream in a non-volatile memory; when reading a reference vector to a reference sequence in the compressed bit stream, the reference sequence is recovered in the part of the bitstream already stored in the non-volatile memory and the bitstream is completed by copying the sequence reference number recovered. According to another variant:
-le train binaire compressé comprend un vecteur de commande suivi d'une séquence de commande ;the compressed bit stream comprises a control vector followed by a control sequence;
-la génération du train binaire décompressé comprend l'exécution de la séquence de commande et la suppression du vecteur de commande et de la séquence de commande dans le train binaire décompressé.the generation of the uncompressed bitstream comprises the execution of the control sequence and the deletion of the control vector and the control sequence in the decompressed bitstream.
Selon une variante:According to a variant:
-le train binaire compressé comprend un vecteur identifiant une séquence binaire non compressée suivi de la séquence binaire non compressée ; -la génération du train binaire décompressé comprend la suppression de ce vecteur et la recopie de la séquence binaire non compressée dans le train binaire décompressé.the compressed bit stream comprises a vector identifying an uncompressed binary sequence followed by the uncompressed binary sequence; the generation of the uncompressed bitstream comprises the deletion of this vector and the copying of the uncompressed binary sequence into the decompressed bitstream.
L'invention porte encore sur un support de stockage mémorisant un logiciel compressé selon un tel procédé de compression. L'invention porte en outre sur un support de stockage mémorisant un logiciel de compression susceptible de mettre en œuvre un tel procédé de compression.The invention also relates to a storage medium storing compressed software according to such a compression method. The invention also relates to a storage medium storing a compression software capable of implementing such a compression method.
L'invention porte par ailleurs sur un support de stockage mémorisant un logiciel de décompression susceptible de mettre en œuvre un tel procédé de décompression.The invention also relates to a storage medium storing a decompression software capable of implementing such a decompression method.
L'invention sera mieux comprise à la lecture de la description qui suit, accompagnée des dessins annexés qui représentent :The invention will be better understood on reading the description which follows, accompanied by the appended drawings which represent:
-Figure 1 , un algorithme simplifié d'un procédé de compression de données selon l'invention ;FIG. 1, a simplified algorithm of a data compression method according to the invention;
-Figure 2, un algorithme simplifié d'un procédé de décompression de données selon l'invention ; -Figure 3, une représentation d'un exemple de vecteur générique ;FIG. 2, a simplified algorithm of a data decompression method according to the invention; FIG. 3, a representation of an example of a generic vector;
-Figure 4, la représentation d'un exemple de vecteur de données directes ;FIG. 4, the representation of an example of a direct data vector;
-Figure 5, la représentation d'un exemple de vecteur de recopie ;FIG. 5, the representation of an exemplary copy vector;
-Figure 6, la représentation d'un exemple de vecteur de commande ;FIG. 6, the representation of an example of a control vector;
-Figure 7, la représentation d'une portion d'un train binaire à compresser ; -Figure 8, la représentation d'une portion du train binaire compressé selon une variante de l'invention.FIG. 7, the representation of a portion of a bit stream to be compressed; FIG. 8, the representation of a portion of the compressed bitstream according to a variant of the invention.
L'invention propose ainsi de compresser un train binaire de la manière suivante : on détermine dans le train binaire des séquences de référence qui présentent chacune des répétitions dans la suite du train binaire. On génère ensuite un train binaire compressé en remplaçant chaque répétition de la séquence de référence par un vecteur renvoyant à cette séquence de référence.
Le remplacement d'une répétition par un vecteur de renvoi de taille sensiblement inférieure permet ainsi de compresser le train binaire.The invention thus proposes to compress a bit stream in the following manner: reference sequences are determined in the bit stream which each have repetitions in the remainder of the bit stream. A compressed bit stream is then generated by replacing each repetition of the reference sequence with a vector returning to that reference sequence. The replacement of a repetition by a substantially smaller vector of return makes it possible to compress the bit stream.
Selon une variante facilitant la décompression, d'autres types vecteurs sont utilisés : Avant de générer le train binaire compressé, on peut déterminer des séquences dont la compression par un vecteur de renvoi présente peu d'intérêt. C'est notamment le cas pour les séquences courtes ou ne présentant pas ou peu de répétitions dans les données déjà décompressées du train binaire. Lors de la génération du train binaire compressé, on insère un vecteur de données directes avant de telles séquences. Les séquences non compressées sont ainsi identifiées et les données transmises.According to a variant facilitating decompression, other vector types are used: Before generating the compressed bit stream, it is possible to determine sequences whose compression by a return vector is of little interest. This is particularly the case for short sequences or with no or little repetition in the data already decompressed bit stream. When generating the compressed bit stream, a direct data vector is inserted before such sequences. The uncompressed sequences are thus identified and the data transmitted.
Des vecteurs de commande peuvent également être insérés dans le train binaire compressé. Ces vecteurs de commande précèdent des commandes dont des exemples seront donnés par la suite. Les commandes sont destinées à être traitées durant la décompression. On insère notamment un vecteur de commande au début du train binaire afin de définir certains paramètres de compression ou le nom du fichier par exemple.Control vectors may also be inserted into the compressed bit stream. These control vectors precede commands whose examples will be given later. The commands are intended to be processed during decompression. In particular, a control vector is inserted at the beginning of the bit stream in order to define certain compression parameters or the name of the file for example.
Lors de la décompression, le train binaire décompressé est généré de la façon suivante : les séquences de commande sont exécutées, les séquences de référence sont recopiées à chaque lecture d'un vecteur de renvoi correspondant et les vecteurs sont éliminés. Le train binaire compressé renvoyant directement à des séquences de référence du train binaire en cours de décompression, la décompression n'implique pas la lecture d'une table annexe.During decompression, the decompressed bit stream is generated as follows: the control sequences are executed, the reference sequences are copied each time a corresponding reference vector is read and the vectors are eliminated. Since the compressed bitstream returns directly to reference sequences of the bitstream being decompressed, the decompression does not imply the reading of an appendix.
La figure 1 illustre un exemple d'algorithme de compression pouvant être mis en œuvre. Lors d'une étape 101 , un compresseur récupère un train binaire à compresser, se présentant par exemple sous la forme d'un fichier. Lors de l'étape 102, le compresseur lit le contenu du train binaire et répertorie des séquences de référence présentant des répétitions. Le compresseur peut ainsi détecter la première occurrence de séquences binaires et détecter les répétitions ultérieures. Le compresseur mémorise l'emplacement et la taille de la séquence de référence et des répétitions. A l'étape 103, le compresseur effectue de façon connue en soi un traitement statistique à partir des informations mémorisées. Le compresseur détermine alors les séquences pour lesquelles une compression s'avère avantageuse. A l'étape 104, le compresseur génère un train binaire compressé à partir du train à compresser. Pour cela, le compresseur remplace les répétitions de séquences sélectionnées par un vecteur renvoyant directement à leur séquence de référence. Le vecteur indique notamment la taille et l'emplacement de cette séquence de référence. Le compresseur n'a donc pas à inclure dans le train compressé une table annexe définissant les renvois aux séquences de référence. Le compresseur place également des vecteurs de données directes et de commande le cas échéant.
Les vecteurs de commande peuvent contenir des informations sur le fichier compressé (par exemple le CRC, le nom de fichier) des paramètres définissant la compression (par exemple des tailles de vecteurs associés à différents codes, des positions de pivots dans les vecteurs, des valeurs seuil pour des champs des vecteurs, des multiplicateurs des valeurs des champs des vecteurs, des zones à ne pas programmer...) ou des informations de commande (indication d'un début de fichier ou de sous-fichier, indication de fin de fichier ou de sous-fichier, nom de fichier ou de sous- fichier, bits de vérification CRC, clé de codage...).Figure 1 illustrates an example of a compression algorithm that can be implemented. During a step 101, a compressor recovers a bit stream to be compressed, for example in the form of a file. In step 102, the compressor reads the contents of the bitstream and lists reference sequences with repetitions. The compressor can thus detect the first occurrence of binary sequences and detect subsequent repetitions. The compressor stores the location and size of the reference sequence and repetitions. In step 103, the compressor performs in a manner known per se statistical processing from the stored information. The compressor then determines the sequences for which compression is advantageous. In step 104, the compressor generates a compressed bit stream from the train to be compressed. For this, the compressor replaces the repetitions of sequences selected by a vector returning directly to their reference sequence. The vector indicates in particular the size and the location of this reference sequence. The compressor therefore does not have to include in the compressed train an appendix table defining the references to the reference sequences. The compressor also places direct and control data vectors as needed. The control vectors may contain information about the compressed file (e.g., the CRC, the file name) of the parameters defining the compression (e.g., vector sizes associated with different codes, pivot positions in the vectors, values threshold for vector fields, multipliers of values of vector fields, areas not to be programmed, etc.) or control information (indication of a start of file or subfile, indication of end of file or subfile, filename or subfile, CRC check bits, encryption key ...).
On notera que ce procédé de compression est conservatif, c'est à dire qu'il n'y a pas de perte de données entre le train binaire à compresser et le train binaire décompressé.It will be noted that this compression method is conservative, ie there is no loss of data between the bit stream to be compressed and the decompressed bit stream.
En outre, le procédé de compression permet d'obtenir des taux de compression intéressants. Un logiciel mettant en œuvre un tel procédé a notamment permis d'obtenir les performances de compression suivantes :In addition, the compression method makes it possible to obtain interesting compression ratios. Software implementing such a method has in particular made it possible to obtain the following compression performances:
La figure 2 illustre un exemple d'algorithme de décompression associé.Figure 2 illustrates an example of an associated decompression algorithm.
L'algorithme traite le train binaire compressé en parallèle à sa réception (il n'y a potentiellement pas de stockage ou d'attente de données dans le flux binaire). Lors de l'étape 201 , le décompresseur attend la réception d'un vecteur complet. Lors de l'étape 202, il décode le type de vecteur (commande, direct, copie de référence).The algorithm processes the compressed bit stream in parallel with its reception (there is potentially no storage or waiting of data in the bit stream). In step 201, the decompressor waits for the reception of a complete vector. In step 202, it decodes the vector type (command, direct, reference copy).
On passe à l'étape 203 pour un vecteur de commande qui va, si nécessaire, récupérer des paramètres dans le flux de données arrivant. Ce vecteur de commande est exécuté durant l'étape 204. Après le traitement du vecteur, on repasse à l'étape 201.We go to step 203 for a control vector that will, if necessary, retrieve parameters in the incoming data stream. This control vector is executed during step 204. After the vector processing, we go back to step 201.
On passe à l'étape 213 pour un vecteur de données directe : à partir des données, on décode dans le vecteur la taille de la zone directe. Dans l'étape 214, on récupère dans
le flux de données les données directes qui sont immédiatement recopiées dans la mémoire à remplir. Après le traitement du vecteur, on repasse à l'étape 201.Go to step 213 for a direct data vector: from the data, the size of the direct area is decoded in the vector. In step 214, we recover in the data flow the direct data which are immediately copied into the memory to be filled. After the treatment of the vector, we go back to step 201.
On passe à l'étape 223 pour un vecteur de copie de référence : on décode à partir des données dans le vecteur la taille et la position de la référence. Dans l'étape 224, on copie la zone de référence en faisant une recopie des données déjà écrites dans la mémoire à remplir (processus généralement très rapide). Après traitement du vecteur, on repasse à l'étape 201.Go to step 223 for a reference copy vector: the size and position of the reference is decoded from the data in the vector. In step 224, the reference area is copied by copying the data already written in the memory to be filled (generally a very fast process). After treatment of the vector, we go back to step 201.
Le procédé de décompression associé peut être mis en œuvre avec des moyens simples comprenant essentiellement des registres à décalage et des masques grâce a la structure originale des vecteurs. Le procédé de décompression associé permet également d'utiliser au minimum la mémoire vive du dispositif de décompression (le stockage d'une table en mémoire vive n'est plus indispensable). Ce procédé de décompression est particulièrement adapté aux mémoires non volatiles. En effet, les vecteurs de recopie sont utilisés pour recopier directement des données déjà mémorisées dans une séquence de référence de la mémoire non volatile. L'accès à des données de la mémoire non volatile lors de la recopie ne ralentit pas excessivement le procédé de décompression.The associated decompression method can be implemented with simple means essentially comprising shift registers and masks through the original vector structure. The associated decompression method also makes it possible to use at least the random access memory of the decompression device (storing a table in random access memory is no longer essential). This decompression process is particularly suitable for nonvolatile memories. Indeed, the copying vectors are used to directly copy data already stored in a reference sequence of the non-volatile memory. Access to nonvolatile memory data during copying does not overly slow down the decompression process.
Bien que l'on puisse considérer que le temps de compression nécessaire est relativement long, il faut noter que le procédé de décompression associé nécessite une mémoire vive réduite, est très rapide et est utilisable avec des processeurs de capacités limitées.Although it may be considered that the necessary compression time is relatively long, it should be noted that the associated decompression method requires a reduced RAM, is very fast and can be used with processors of limited capacity.
La figure 3 illustre un exemple de vecteur utilisable pour les différents types de vecteurs inclus dans le train binaire compressé. Le vecteur présente un premier champs 31 dans lequel on identifie sa longueur. Différents modes d'identification de la longueur seront illustrés par la suite. Le second champ 32 est utilisé pour définir une dimension de séquence binaire, un emplacement de données à copier ou le type de vecteur. Le champFIG. 3 illustrates an example of a vector that can be used for the different types of vectors included in the compressed bitstream. The vector has a first field 31 in which its length is identified. Different ways of identifying the length will be illustrated later. The second field 32 is used to define a bit sequence size, a data location to be copied or the type of vector. Field
33 est utilisé pour définir la taille d'une séquence à copier ou le type de vecteur. Le pivot33 is used to define the size of a sequence to copy or the type of vector. The pivot
34 sert à définir la séparation entre le champs 32 et le champs 33. En connaissant la position du pivot, le décompresseur saura de lui-même délimiter les champs 32 et 33.34 is used to define the separation between the field 32 and the field 33. Knowing the position of the pivot, the decompressor will itself delimit the fields 32 and 33.
La figure 4 illustre un exemple de structure d'un vecteur de données directes 4. Le champ 41 comprend une combinaison de bits 01 indiquant que le vecteur 4 occupe 16 bits. Le champ 42 définit la taille de la séquence non compressée qui suit le vecteur 4. Le champs 43 comprend une valeur nulle. La combinaison des champs 42 et 43 permet au décompresseur d'identifier le vecteur 4 comme un vecteur de données directes. En effet, le décompresseur identifiera une valeur non nulle dans le champs 42 et une valeur nulle dans le champs 43, cette combinaison désignant dans l'exemple un vecteur de données directes.
La figure 5 illustre un exemple de structure d'un vecteur de recopie 5. Le champ 51 comprend une combinaison de bits 01 indiquant que le vecteur 5 occupe 16 bits. Le champ 52 définit l'emplacement des données à recopier dans le train binaire décompressé. Le champ 53 définit la taille des données à recopier à l'emplacement indiqué.FIG. 4 illustrates an exemplary structure of a direct data vector 4. The field 41 comprises a combination of bits 01 indicating that the vector 4 occupies 16 bits. The field 42 defines the size of the uncompressed sequence that follows the vector 4. The field 43 comprises a zero value. Combining the fields 42 and 43 allows the decompressor to identify the vector 4 as a direct data vector. Indeed, the decompressor will identify a non-zero value in the field 42 and a zero value in the field 43, this combination designating in the example a vector of direct data. FIG. 5 illustrates an exemplary structure of a copy vector 5. The field 51 comprises a combination of bits 01 indicating that the vector 5 occupies 16 bits. The field 52 defines the location of the data to be copied in the uncompressed bitstream. Field 53 defines the size of the data to be copied to the indicated location.
La figure 6 illustre un exemple de structure d'un vecteur de commande 6. Le champ 61 comprend la valeur 00 qui définit que le vecteur 6 occupe 8 bits. Les champsFIG. 6 illustrates an exemplary structure of a control vector 6. The field 61 comprises the value 00 which defines that the vector 6 occupies 8 bits. The fields
62 et 63 prennent une valeur nulle. Le décompresseur identifiera les valeurs nulles des champs 62 et 63 et déterminera que le vecteur 6 est un vecteur de commande suivi d'un type et des paramètres de la commande.62 and 63 take a value of zero. The decompressor will identify the null values of the fields 62 and 63 and determine that the vector 6 is a control vector followed by a type and parameters of the command.
Dans l'exemple, le vecteur de commande n'indique pas de taille pour la séquence de commande qui suit. On pourra alors utiliser une taille prédéterminée des séquences de commandes en fonction de leur type.In the example, the control vector does not indicate size for the following control sequence. It will then be possible to use a predetermined size of the command sequences according to their type.
La figure 7 illustre une portion de train binaire à compresser présentant successivement trois séquences D1 , une séquence D2 et une séquence D1. Le compresseur identifie les redondances et crée un train binaire compressé dont une portion est illustrée à la figure 8. Ce train binaire comprend un premier vecteur de commande VC1 , suivi de sa commande et de ses paramètres C1. Pour la séquence de référence de la séquence D1 , le compresseur place ensuite un vecteur de données directes VD1 suivi de la séquence D1 dans le train binaire. Le compresseur place ensuite un vecteur de recopie Vr1 *2 indiquant un décalage de huit bits et la recopie de 16 bits (le vecteur Vr1*2 permet ainsi la recopie des deux premières répétitions de D1). Le compresseur place ensuite un vecteur de données directes VD2, la séquence D2, puis un vecteur de recopie Vr1*1 indiquant un décalage de 16 bits et la recopie de huit bits. L'algorithme de compression utilisé peut utiliser un certain nombre de méthodes statistiques connues pour déterminer si des répétitions doivent être compressées ou non.FIG. 7 illustrates a portion of bit stream to be compressed having successively three D1 sequences, a D2 sequence and a D1 sequence. The compressor identifies the redundancies and creates a compressed bitstream, a portion of which is illustrated in FIG. 8. This bitstream comprises a first control vector VC1, followed by its command and its parameters C1. For the reference sequence of the sequence D1, the compressor then places a direct data vector VD1 followed by the sequence D1 in the bit stream. The compressor then places a copy vector Vr1 * 2 indicating an offset of eight bits and the copying of 16 bits (the vector Vr1 * 2 thus allows the copying of the first two repetitions of D1). The compressor then places a direct data vector VD2, the sequence D2, then a copy vector Vr1 * 1 indicating a shift of 16 bits and the copy of eight bits. The compression algorithm used may use a number of known statistical methods to determine whether repetitions should be compressed or not.
On peut notamment prévoir de comparer la taille d'une séquence répétée à la taille du vecteur de recopie envisagé pour déterminer si cette séquence doit être remplacée par ce vecteur de recopie. On peut ainsi noter que la taille nécessaire au champ 52 sera variable en fonction du décalage entre la séquence de référence et sa répétition. Cette taille sera par exemple fixée par une commande de positionnement de pivot décrite ultérieurement.In particular, it is possible to compare the size of a repeated sequence with the size of the copying vector considered in order to determine whether this sequence should be replaced by this copying vector. It can thus be noted that the size required for the field 52 will be variable as a function of the difference between the reference sequence and its repetition. This size will be fixed for example by a pivot positioning control described later.
Le codage de la taille des vecteurs peut être effectué de la manière suivante. Dans les exemples simplifiés qui suivent, on admettra que les vecteurs présentent une dimension de 8, 16, 32 ou 64 bits. Dans l'exemple des figures 4 à 6, la taille du vecteur est codée sur deux bits dans les champs 41 , 51 et 61. La combinaison 00 identifie un vecteur d'une taille de δbits, 01 un vecteur de 16 bits, 10 un vecteur de 32 bits et 11 un vecteur de 64 bits.
Une seconde possibilité consiste à détecter la position du premier bit à 1 du champThe coding of the size of the vectors can be done in the following manner. In the following simplified examples, it will be assumed that the vectors have a size of 8, 16, 32 or 64 bits. In the example of FIGS. 4 to 6, the size of the vector is coded on two bits in the fields 41, 51 and 61. The combination 00 identifies a vector of size δbits, 01 a vector of 16 bits, 10 a 32-bit vector and 11 a 64-bit vector. A second possibility is to detect the position of the first bit at 1 of the field
31. Ainsi, un bit à 1 en première position identifie un vecteur de 8bits, un bit à 1 en seconde position un vecteur de 16 bits, un bit à 1 en troisième position un vecteur de 32 bits et un bit à 1 en quatrième position un vecteur de 64 bits. Le champ définissant la taille du vecteur peut ainsi présenter une longueur variable en fonction de la taille du vecteur.31. Thus, a bit at 1 in the first position identifies a vector of 8 bits, a bit at 1 in second position a vector of 16 bits, a bit at 1 in third position a vector of 32 bits and a bit at 1 in fourth position a 64-bit vector. The field defining the size of the vector may thus have a variable length depending on the size of the vector.
Une troisième possibilité consiste à détecter la position du premier bit à 0 dans le champs 31. Un bit à 0 en première position identifie un vecteur de 8 bits et ainsi de suite.A third possibility is to detect the position of the first bit at 0 in the field 31. A bit at 0 in the first position identifies an 8-bit vector and so on.
Pour détecter la position du premier bit à 0 ou 1 , on peut utiliser des instructions assembleurs présentes sur la plupart des processeurs qui font ce type de détection. On peut prévoir que la position du pivot soit prédéfinie en fonction de la taille des vecteurs. La position du pivot peut aussi être initialisée et adaptée dynamiquement au fur et à mesure du train binaire, en fonction des conditions de compression rencontrées, avec des vecteurs de commande.To detect the position of the first bit at 0 or 1, assembly instructions can be used on most processors that do this type of detection. It can be predicted that the position of the pivot is predefined according to the size of the vectors. The position of the pivot can also be initialized and adapted dynamically as the bit stream, depending on the compression conditions encountered, with control vectors.
Plusieurs perfectionnements permettent de coder un maximum d'informations avec des vecteurs ayant des tailles aussi réduites que possible.Several improvements make it possible to encode as much information as possible with vectors having as small a size as possible.
Ainsi, on peut prévoir que le compresseur et le décompresseur associent une valeur différente à la valeur du champ 42 ou 52. La valeur associée sera par exemple la somme de la valeur du champ et d'une valeur seuil. Ainsi, si la valeur du champ 42 ou 52 est 11 et si la valeur seuil vaut 1 , la valeur associée vaudra 12. En effet, la distance minimale entre la séquence de référence et sa répétition n'est jamais nulle : on ne code ainsi que des distances supérieures à 1 avec un tel vecteur de recopie 5.Thus, it can be provided that the compressor and the decompressor associate a different value to the value of the field 42 or 52. The associated value will be for example the sum of the field value and a threshold value. Thus, if the value of the field 42 or 52 is 11 and if the threshold value is 1, the associated value will be equal to 12. Indeed, the minimum distance between the reference sequence and its repetition is never zero: this is not coded than distances greater than 1 with such a copying vector 5.
De façon analogue, la taille d'une séquence directe n'est jamais nulle : on ne code ainsi que des tailles de séquence supérieures à 1 avec un tel vecteur de données directes 4.Similarly, the size of a direct sequence is never zero: thus, only sequence sizes greater than 1 are encoded with such a direct data vector 4.
La valeur du seuil définit ainsi respectivement la distance minimum de la séquence de référence et la taille minimum de la séquence directe.The value of the threshold thus defines respectively the minimum distance of the reference sequence and the minimum size of the direct sequence.
De façon similaire, on pourra associer des valeurs de seuil distinctes en fonction de la taille des vecteurs. Ci-dessous un exemple pratique : On dispose de vecteurs 4 et 5 respectivement de 8 bits et 16 bits, dont les champsSimilarly, it will be possible to associate distinct threshold values as a function of the size of the vectors. Here is a practical example: We have vectors 4 and 5 respectively of 8 bits and 16 bits, whose fields
42 et 52 comportent 4 et 8 bits. Avec une valeur de seuil de 1 , les valeurs associées au vecteur 4 iront de 1 à 16.42 and 52 have 4 and 8 bits. With a threshold value of 1, the values associated with the vector 4 will be from 1 to 16.
Le vecteur 5 sur 16bits fournira un gain moindre que le vecteur 4 sur 8 bits pour des valeur de 1 a 16. On peut donc fixer le seuil du vecteur 5 à 17 , les valeurs associées au vecteur 5 iront donc de 17 à 272.
The vector 5 on 16 bits will provide a gain less than the vector 4 on 8 bits for values from 1 to 16. It is therefore possible to set the threshold of the vector 5 to 17, the values associated with the vector 5 will therefore be from 17 to 272.