FR2992458A1 - Method for compression and decompression of audio, involves providing fast Fourier transform or cosine modified discrete transformed, and taking local redundancies such as successive and non-successive repetitions into account - Google Patents
Method for compression and decompression of audio, involves providing fast Fourier transform or cosine modified discrete transformed, and taking local redundancies such as successive and non-successive repetitions into account Download PDFInfo
- Publication number
- FR2992458A1 FR2992458A1 FR1201759A FR1201759A FR2992458A1 FR 2992458 A1 FR2992458 A1 FR 2992458A1 FR 1201759 A FR1201759 A FR 1201759A FR 1201759 A FR1201759 A FR 1201759A FR 2992458 A1 FR2992458 A1 FR 2992458A1
- Authority
- FR
- France
- Prior art keywords
- frame
- bit
- compression
- successive
- account
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000006835 compression Effects 0.000 title claims description 68
- 238000007906 compression Methods 0.000 title claims description 68
- 230000006837 decompression Effects 0.000 title claims description 7
- 238000004891 communication Methods 0.000 claims description 10
- 238000005259 measurement Methods 0.000 claims description 5
- 238000010276 construction Methods 0.000 claims description 2
- 239000013598 vector Substances 0.000 description 11
- 230000003044 adaptive effect Effects 0.000 description 7
- 239000000872 buffer Substances 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000005670 electromagnetic radiation Effects 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 230000036316 preload Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000001755 vocal effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
- G10L19/0017—Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
Description
- 1 - La présente invention concerne l'addition de méthodes de compression avec perte et sans perte à des méthodes de compression de flux audio utilisant le domaine des fréquences, comme la transformation de Fourier rapide (FF T, Fast Fourier Transform en Anglais) ou la transformée en cosinus discrète modifiée (MDCT, Modified Discrete Cosine Transform en Anglais). Ces méthodes additionnelles permettent d'atteindre des taux de compression très élevés donc des débits très bas. Cette étude vise particulièrement les téléphones portables et tous les appareils utilisant les rayonnements électro-magnétiques pour transmettre les données audio contenant la voix. L'utilité de la compression n'est pas discutable dans le domaine de l'audio. L'utilité de compresser outre mesure les données audio contenant la voix est de moins en moins discutable si on considère que les téléphones portables et les autres appareils similaires, actuellement très répandus, utilisent les rayonnements électromagnétiques pour transmettre les données. Moins il y a de données à émettre, plus ces appareils pourront réduire leurs rayonnements électro-magnétiques. La compression additionnelle avec perte exploite les redondances locales lors des conversation vocales (silences, répétitions successives et répétitions non successives des trames), en proposant des codes beaucoup plus courts pour représenter les trames audio. On estime par exemple que dans une conversation normale, il y a plus de 50% de silence.The present invention relates to the addition of lossy and lossless compression methods to frequency domain audio stream compression methods, such as Fast Fourier Transform (FF T, Fast Fourier Transform). the Modified Discrete Cosine Transform (MDCT). These additional methods make it possible to achieve very high compression rates and therefore very low flow rates. This study is particularly aimed at mobile phones and all devices using electro-magnetic radiation to transmit audio data containing the voice. The usefulness of compression is not debatable in the field of audio. The usefulness of over-compressing audio data containing voice is less and less debatable considering that mobile phones and other similar devices, currently widespread, use electromagnetic radiation to transmit data. The less data to be transmitted, the more these devices can reduce their electromagnetic radiation. Lossy additional compression exploits local redundancies during voice conversations (silences, successive repetitions and non-sequential repetitions of frames), by proposing much shorter codes to represent audio frames. For example, it is estimated that in a normal conversation, there is more than 50% silence.
La compression additionnelle sans perte utilise le codage par dictionnaire adaptatif pour compresser efficacement les magnitudes et les fréquences (positions), ou les magnitudes, les fréquences (positions) et les phases en cas d'utilisation des phases. Ces codages ne sont pas efficaces sur des trames de courte longueur. On utilisera des dictionnaires regroupant plusieurs trames tout en émettant les données compressées trame 25 par trame. Les méthodes les plus répandues actuellement utilisent le codage prédictif linéaire (LPC) dans le domaine temps pour la voix et la transformée en cosinus discrète modifiée (MDCT) dans le domaine des fréquences pour la musique. La compression par dictionnaire adaptatif est couramment utilisée dans la compression des 30 fichiers ZIP et GZIP. Elle est aussi couramment utilisée pour compresser les images GIF, TIFF et PNG. - 2 - Récemment, une étude basée sur FFT et ne prenant en compte que les points de plus grande magnitude et les bandes les plus énergétiques a donné des taux de compression très élevés avec peu de calculs (brevet Français numéro 06 07091 délivré en 2008). Dans cette étude, dans le cas général, on utilise les magnitudes, les fréquences et les phases, avec un recouvrement de 50% ou moins des trames. Dans un cas particulier très optimisé pour la voix, on utilise seulement les pics locaux, les magnitudes et les fréquences, avec des trames indépendantes qui ne se recouvrent pas. Cette étude ne tient compte ni des redondances locales, ni des trames de silence, ni de la compression sans perte. Les trames codées sont de taille fixe. Des valeurs tirées de cette étude seront utilisées dans nos exemples. Un flux audio contenant la voix (flux vocal) est très redondant. En reconnaissance vocale, on segmente les mots en phonèmes. Un phonème est une unité de base de la parole. C'est le plus petit son identifiable. On considère qu'en Français il y a 36 phonèmes (16 voyelles et 20 consonnes), tandis qu'en Anglais il y a 49 phonèmes (25 voyelles et 24 consonnes). Un mot comme ABRACADABRA peut être reçu par exemple comme : AAAABBRRAAAACCAAAADDAAAA13BRRAAAA Un travail préliminaire important consiste à enlever les répétitions dans les phrases prononcées, à l'aide par exemple de modèles de phonèmes.Lossless additional compression uses adaptive dictionary coding to efficiently compress magnitudes and frequencies (positions), or magnitudes, frequencies (positions) and phases when using phases. These encodings are not effective on short frames. Dictionaries combining several frames will be used while transmitting the compressed data frame 25 per frame. The most widely used methods currently use Time Domain Linear Predictive Coding (LPC) for voice and Modified Discrete Cosine Transform (MDCT) in the frequency domain for music. Adaptive dictionary compression is commonly used in the compression of ZIP and GZIP files. It is also commonly used to compress GIF, TIFF and PNG images. - 2 - Recently, a study based on FFT and taking into account only the points of greatest magnitude and the most energetic bands gave very high compression rates with few calculations (French patent number 06 07091 issued in 2008) . In this study, in the general case, magnitudes, frequencies and phases are used, with overlap of 50% or less of the frames. In a particular case highly optimized for the voice, only local peaks, magnitudes and frequencies are used, with independent frames that do not overlap. This study does not take into account local redundancies, frames of silence, or lossless compression. Coded frames are of fixed size. Values from this study will be used in our examples. An audio stream containing the voice (voice stream) is very redundant. In voice recognition, words are segmented into phonemes. A phoneme is a basic unit of speech. It's the smallest identifiable sound. We consider that in French there are 36 phonemes (16 vowels and 20 consonants), while in English there are 49 phonemes (25 vowels and 24 consonants). A word like ABRACADABRA can be received for example as: AAAABBRRAAAACCAAAADDAAAA13BRRAAAA An important preliminary work is to remove the repetitions in the pronounced sentences, for example using phoneme models.
Les trames des flux vocaux ne sont pas des phonèmes, mais le même phénomène existe à leur niveau. Cette étude tient compte de ce phénomène en prenant en compte les répétions de trames successives et non successives dans les flux vocaux. On estime qu'il y a plus de 50% de silence dans une conversation vocale normale. Dans notre en-tête général, nous proposerons un bit pour signaler la présence ou non d'une trame de silence et nous n'émettrons pas de trame vide (trame silence) après un en-tête général. Des méthodes de compression classiques sans perte par dictionnaire adaptatif existent. On peut citer par exemple : - LZ77 : dans cet algorithme, les motifs rencontrés sont remplacés par une référence à leur 30 première apparition. - Deflate : cet algorithme utilise LZ77 puis la compression avec les codes Huffman. -3- - LZ78 : cet algorithme utilise un dictionnaire implicite construit de la même manière par le compresseur et le décompresseur. - LZW : est une amélioration de LZ78. Le dictionnaire est initialisé avec l'ensemble des caractères de l'alphabet. Ces algorithmes sont très utiles pour les fichiers et les images mais ne peuvent pas être appliqués pour coder la redondance des trames lors de communications vocales en direct car les temps de latence ne peuvent pas être respectés. Pour prendre en compte les redondances locales (répétitions successives et non 10 successives), nous utilisons des nombres et des numéros pour représenter les trames. Pour prendre en compte les répétitions locales successives, nous présentons un méthode simple que nous appelons crédit de répétitions. L'émetteur envoie une trame avec un nombre donné de crédit de répétitions. Le récepteur répète cette trame tant que le crédit n'est pas épuisé et tant qu'il ne reçoit pas une autre trame contenant le nombre de crédit 15 valide ou le nombre de crédit restant à annuler. Le crédit de répétitions peut être codé sur un nombre quelconque de bits, par exemple 8 bits (crédit maximum alloué : 255) , 7 bits (crédit maximum alloué : 127) ou 5 bits (crédit maximum alloué : 31). Si émet des trames de 32 millisecondes sans recouvrement, il y a environ 31 trames par seconde. Un crédit de 255 représente 8 secondes et un crédit de 31 représente 1 seconde. 20 Nous prendrons 5 bits pour le crédit de répétitions dans notre en-tête général. Un en-tête doit comporter un nombre de bits de crédit à allouer et un nombre de bits identique de crédit à valider ou à annuler, par exemple : Premiers bits. Crédit à annuler pour la trame précédente. 25 Nouveau crédit alloué pour la trame courante. Si on se met d'accord à l'avance sur un nombre de crédit à allouer automatiquement, on peut ne pas émettre le nombre de crédit à allouer. Dans ce cas, on aura : Premiers bits. Crédit à annuler pour la trame précédente. 30 Pour nous fixer les idées, soit à coder la séquence de 16 trames suivantes : T1 TT2 T2 TTTT3 TTTTT1 TITIS où S représente une trame silence. - 4 - Pour des trames de 17 octets (1 octet d'en-tête et 16 octets de corps), sans le crédit de répétitions, on doit émettre : 16x 17 x 8 = 2176 bits.The frames of the vocal flows are not phonemes, but the same phenomenon exists at their level. This study takes this phenomenon into account by taking into account repetitions of successive and non-successive frames in the vocal streams. It is estimated that there is more than 50% silence in a normal voice conversation. In our general header, we will propose a bit to indicate the presence or absence of a silence frame and we will not emit an empty frame (silence frame) after a general header. Traditional lossless adaptive dictionary compression methods exist. For example: LZ77: in this algorithm, the patterns encountered are replaced by a reference to their first appearance. - Deflate: this algorithm uses LZ77 then the compression with the Huffman codes. -3- - LZ78: This algorithm uses an implicit dictionary built in the same way by the compressor and the decompressor. - LZW: is an improvement of LZ78. The dictionary is initialized with all the characters of the alphabet. These algorithms are very useful for files and images but can not be applied to encode frame redundancy during live voice communications because latency can not be maintained. To take into account local redundancies (successive and non-successive repetitions), we use numbers and numbers to represent the frames. To take into account successive local repetitions, we present a simple method that we call repetition credit. The sender sends a frame with a given number of rehearsal credits. The receiver repeats this frame until the credit is exhausted and until it receives another frame containing the valid credit number or the number of credits remaining to be canceled. The repetition credit can be encoded on any number of bits, for example 8 bits (maximum credit allocated: 255), 7 bits (maximum credit allocated: 127) or 5 bits (maximum credit allocated: 31). If 32-millisecond frames are sent without overlap, there are about 31 frames per second. A credit of 255 represents 8 seconds and a credit of 31 represents 1 second. 20 We will take 5 bits for rehearsal credit in our general header. A header must include a number of credit bits to be allocated and an identical number of bits of credit to be validated or canceled, for example: First bits. Credit to cancel for the previous frame. 25 New credit allocated for the current frame. If you agree in advance on a number of credits to be allocated automatically, you may not issue the number of credits to be allocated. In this case, we will have: First bits. Credit to cancel for the previous frame. To fix the ideas, either to code the sequence of 16 following frames: T1 TT2 T2 TTTT3 TTTTT1 TITIS where S represents a silence frame. - 4 - For frames of 17 bytes (1 byte of header and 16 bytes of body), without the credit of repetitions, one must emit: 16x 17 x 8 = 2176 bits.
En supposant un en-tête général de 8 bits, avec un crédit de répétitions sur 5 bits, 1 bit pour indiquer qu'une trame complète suit ou non l'en-tête général, 1 bit pour indiquer une trame de silence ou non, 1 autre bit pour indiquer une réinitialisation ou non (reset en Anglais), on émet successivement : Bit 1 - Bit 2 - Bit 3 - 0 -Ti (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 0 crédit à m'ululer, trame T1) Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, trame T) Bit 1 - Bit 2 - Bit 3 - 30 - T2 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, trame T2) Bit 1 - Bit 2 - Bit 3 - 29 - T (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 29 crédits à annuler, trame T) Bit 1 - Bit 2 - Bit 3 - 28 - T3 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 28 crédits à annuler, trame T3) Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, trame T) Bit 1 - Bit 2 - Bit 3 - 27 - T1 (Bit là 1, Bit 2 à 1, Bit 3 à 0, 27 crédits à annuler, trame T1) Bit 1 - Bit 2 - Bit 3 - 28 - S (Bit 1 à 0, Bit 2 à 0, Bit 3 à 0, 28 crédits à annuler, 0 trame) soit : (7 x (17 + 1) x 8) + (1 x 8) = 1016 bits Dans les zones de silence, on émet un en-tête général de 1 octet (8 bits) toutes les 32 trames, soit toutes les secondes si on émet 31 trames par seconde.Assuming a general 8-bit header, with a 5-bit repetition credit, 1 bit to indicate whether or not a complete frame follows the general header, 1 bit to indicate a silence frame or not, 1 other bit to indicate a reset or not (reset in English), one emits successively: Bit 1 - Bit 2 - Bit 3 - 0 -Ti (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 0 credit to move me, T1 frame) Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 30 credits to cancel, Frame T) Bit 1 - Bit 2 - Bit 3 - 30 - T2 (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 30 credits to cancel, Frame T2) Bit 1 - Bit 2 - Bit 3 - 29 - T (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 29 credits to cancel, frame T) Bit 1 - Bit 2 - Bit 3 - 28 - T3 (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 28 credits to cancel, Frame T3 ) Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 30 credits to cancel, Frame T) Bit 1 - Bit 2 - Bit 3 - 27 - T1 ( Bit 1, Bit 2 to 1, Bit 3 to 0, 27 cr edits to be canceled, T1 frame) Bit 1 - Bit 2 - Bit 3 - 28 - S (Bit 1 to 0, Bit 2 to 0, Bit 3 to 0, 28 credits to cancel, 0 bit) Or: (7 x (17 + 1) x 8) + (1 x 8) = 1016 bits In the silence zones, a general byte of 1 byte (8 bits) is transmitted every 32 frames, ie every second if 31 frames are transmitted by second.
Pour prendre en compte les répétitions locales non successives, on définit un code simple sur un nombre quelconque mais fixe de bits. Au lieu d'envoyer une trame complète, on envoie un code k qui indique que la trame courante est identique à la trame située à la position k à l'arrière de la trame courante, la position de la trame courante valant O. La taille de la zone de redondance est déterminée par le nombre maximum de bits alloués au codage du code k (taille de 255 si on prend 8 bits). La prise en compte des redondances non successives nécessite un tampon mémoire proportionnel à la taille de la zone de redondance. Une taille de la zone de redondance de 255 (8 bits de l'en-tête général, 8 secondes si on émet 31 trames par seconde) nous semble être une bonne valeur générique.To take into account non-successive local repetitions, a simple code is defined on any fixed number of bits. Instead of sending a complete frame, a code k is sent which indicates that the current frame is identical to the frame located at the position k at the rear of the current frame, the position of the current frame being O. The size of the redundancy area is determined by the maximum number of bits allocated to the coding of the code k (size of 255 if 8 bits are taken). Taking into account non-successive redundancies requires a memory buffer proportional to the size of the redundancy zone. A size of the redundancy area of 255 (8 bits of the general header, 8 seconds if we send 31 frames per second) seems to be a good generic value.
Après les calculs FFT en double précision, les trames audio ne sont jamais rigoureusement nulles (silence) ou identiques. Pour parler de trames nulles ou voisines ou identiques, il est nécessaire de faire un calcul de distance entre les trames à comparer. - 5 - Plusieurs mesures sont disponibles dans la littérature : - La distance euclidienne : Pour chaque fréquence (position), on calcule le carré de la différence des magnitudes. On calcule la somme totale de ces carrés. La distance euclidienne est la racine carrée de cette somme totale. - La somme des carrés des différences : (SSD, Sum of Squared Differences en Anglais). On calcule la somme totale des carrés des différences des magnitudes pour toutes les fréquences (positions). - La somme des valeurs absolues des différences : (SAD, Sum of Absolute Differences en Anglais). On calcule la somme totale des valeurs absolues des différences des magnitudes pour toutes les fréquences (positions).After double-precision FFT calculations, audio frames are never strictly zero (silence) or the same. To speak of zero or neighboring or identical frames, it is necessary to make a calculation of distance between the frames to be compared. - 5 - Several measurements are available in the literature: - The Euclidean distance: For each frequency (position), we calculate the square of the difference of the magnitudes. The total sum of these squares is calculated. The Euclidean distance is the square root of this total sum. - The sum of the squares of the differences: (SSD, Sum of Squared Differences). The sum of the squares of the magnitudes differences for all frequencies (positions) is calculated. - The sum of the absolute values of the differences: (SAD, Sum of Absolute Differences). The sum of the absolute values of the magnitudes differences for all frequencies (positions) is calculated.
Cette dernière mesure est très rapide et est couramment utilisée dans la compression vidéo. Ces trois types de mesure tiennent beaucoup compte des magnitudes. Nous savons que les variations de magnitude jouent peu sur la qualité de la voix comparativement à des changements de positions (fréquences). Nous préconisons l'indice de similarité qui tient plus compte de la similarité des trames que des magnitudes. Cet indice peut éventuellement être utilisé en conjonction avec toute mesure de distance, notamment, la distance euclidienne, la somme des carrés des différences ou la somme des valeurs absolues des différences. L'indice de similarité peut être changé dynamiquement côté émetteur en cours de communication. - L'indice de similarité : Indice de Similarité = cosinus(Angle) = (Vecteur A x Vecteur B) / (Norme de A x Norme de B) Dans cette formule : - A désigne un vecteur contenant les magnitudes de la première trame à comparer. - B désigne un vecteur contenant les magnitudes de la seconde trame à comparer. - Norme désigne la norme euclidienne. - Angle désigne l'angle entre les vecteurs A et B. - 6 - Si Ai et Bi désignent des éléments des vecteurs A et B à la position i (fréquence i), l'indice de similarité peut s'écrire : Indice de Similarité = (somme des Ai x Bi) / (racine carrée de la somme des Ai au carré x 5 racine carrée de la somme des Bi au carré). Un indice de 0 indique une similarité minimale. Un indice de 1 indique une similarité maximale. Pour accélérer les calculs, on peut éliminer les trames qui ont une faible similarité en utilisant l'indice de Tanimoto qui suppose des attributs binaires (toutes les magnitudes 10 valent 0 ou 1) : Indide de Tanimoto = (Vecteur A x Vecteur B) / (Norme de A au carré + Nonne de B au carré - (Vecteur A x Vecteur B)) La norme de A se réduit à la somme des éléments de A. La norme de B se réduit à la somme des éléments de B. 15 Le produit des vecteurs A et B vaut la somme des Ai x Bi. L'indice de similarité, appelée aussi similarité cosinus ou mesure cosinus (cosine normalized distance en Anglais), est utilisée couramment pour la recherche de documents. Pour toutes ces mesures, plus il y a de points nuls, moins il y a de calculs. Une sélection fine des points en prendre en compte n'est pas inutile (par exemple les points de 20 plus grande magnitude et les bandes les plus énergétiques). L'indice de similarité, couplé éventuellement avec toute mesure de distance comme la distance euclidienne, la somme des carrés des différences ou la somme des valeurs absolues des différences peut être utilisé pour décider si deux trames audio sont identiques ou non. Cet indice peut être ajusté dynamiquement pour modifier le rapport qualité de 25 l'audio / débit des communications en laissant passer plus ou moins de trames identiques. Une mesure de distance peut être utilisée pour décider si une trame est nulle ou non (trame de silence). On réserve un bit dans l'en-tête général pour signaler ou non une trame de silence et on n'émet pas de trame de silence derrière l'en-tête général. Il ne faut pas qu'il y ait d'effet de bord à traiter. Pour FIT, dans le cas général 30 (magnitudes, fréquences et phases) il y a un recouvrement partiel de 50% ou moins et dans le cas particulier optimisé pour la voix (magnitudes et fréquences), l'utilisation du sinus en décompression annule les effets de bord. Pour MDCT, il y a un recouvrement de 50%. 2 9 9 2 4 5 8 - 7 - Nous réservons un bit dans notre en-tête général pour indiquer on non un point de reprise. En cas de reprise, tous les compteurs doivent être remis à zéro et on ne peut plus faire référence à une trame antérieure. Le nombre de trames à émettre avant un point de reprise peut être plus ou moins grand suivant la qualité de la transmission. Un mécanisme peut être mis en place pour qu'il y ait lieu à la demande du récepteur. En enregistrement sur un support physique (disque dur ou carte mémoire), les points de reprise peuvent être éliminés.This last measurement is very fast and is commonly used in video compression. These three types of measurement take much account of magnitudes. We know that the magnitude variations play little on the quality of the voice compared to changes of positions (frequencies). We recommend the similarity index, which takes into account the similarity of the frames rather than the magnitudes. This index can possibly be used in conjunction with any measure of distance, in particular, the Euclidean distance, the sum of the squares of the differences or the sum of the absolute values of the differences. The similarity index can be dynamically changed on the transmitter side during communication. - The similarity index: Similarity index = cosine (Angle) = (Vector A x Vector B) / (Norm of A x Standard of B) In this formula: - A denotes a vector containing the magnitudes of the first frame to compare. B denotes a vector containing the magnitudes of the second frame to be compared. - Standard means the Euclidean norm. - Angle denotes the angle between the vectors A and B. - 6 - If Ai and Bi designate elements of vectors A and B at position i (frequency i), the similarity index can be written: Similarity index = (sum of Ai x Bi) / (square root of sum of Ai squared x 5 square root of sum of Bi squared). An index of 0 indicates a minimum similarity. An index of 1 indicates maximum similarity. To speed up computations, frames with low similarity can be eliminated by using the Tanimoto index which assumes binary attributes (all magnitudes 10 are 0 or 1): Tanimoto's Ind = (Vector A x Vector B) / (Standard of A squared + B squared - (Vector A x Vector B)) The norm of A is reduced to the sum of the elements of A. The norm of B is reduced to the sum of the elements of B. The product of vectors A and B is the sum of Ai x Bi. The similarity index, also called cosine similarity or cosine normalized distance (cosine normalized distance in English), is commonly used for document retrieval. For all these measures, the more zero points there are, the fewer calculations. A fine selection of points to take into account is not useless (for example the points of greatest magnitude and the most energetic bands). The similarity index, possibly coupled with any measure of distance such as the Euclidean distance, the sum of the squares of the differences or the sum of the absolute values of the differences can be used to decide whether two audio frames are identical or not. This index may be dynamically adjusted to alter the quality of the audio / rate of communications by allowing more or fewer identical frames to pass. A distance measurement can be used to decide whether a frame is null or not (silence frame). We reserve a bit in the general header to signal or not a frame of silence and we do not issue silence frame behind the general header. There must be no edge effect to deal with. For FIT, in the general case (magnitudes, frequencies and phases) there is a partial overlap of 50% or less and in the particular case optimized for the voice (magnitudes and frequencies), the use of the decompressing sinus cancels the side effects. For MDCT, there is a 50% overlap. 2 9 9 2 4 5 8 - 7 - We reserve a bit in our general header to indicate no one checkpoint. In case of recovery, all the counters must be reset and no longer can reference to a previous frame. The number of frames to be transmitted before a checkpoint can be larger or smaller depending on the quality of the transmission. A mechanism can be set up for it to take place at the request of the receiver. When recording on a physical medium (hard disk or memory card), the checkpoints can be eliminated.
Nous avons déjà introduit des algorithmes de codage sans perte par dictionnaire adaptatif (LZ77, Deflate, LZ78 et LZW). Ces algorithmes sont difficilement applicables au niveau de la redondance des trames (problèmes de latence en communication) mais sont applicables pour coder chaque trame séparément. Mais compte-tenu du fait que les trames semi-compressées (non encore compressées avec une méthode de compression sans perte) contiennent relativement peu de données, les taux de compression qu'on peut espérer ne sont pas importants. Nous allons décrire une méthode efficace qui permet de concaténer plusieurs trames successives pour avoir plus de données tout en ne modifiant pas les temps de latence. Cette méthode est efficace aussi bien pour la voix optimisée que pour la musique, en communication ou en diffusion (streaming en Anglais).We have already introduced adaptive dictionary lossless coding algorithms (LZ77, Deflate, LZ78 and LZW). These algorithms are hardly applicable at the level of frame redundancy (latency problems in communication) but are applicable to code each frame separately. But given that the semi-compressed frames (not yet compressed with a lossless compression method) contain relatively little data, the compression rates that can be expected are not important. We will describe an efficient method that concatenates several successive frames to have more data while not changing the latency. This method is effective for optimized voice as well as for music, in communication or broadcasting (streaming in English).
Pour bien comprendre notre choix et notre méthode, nous commençons par décrire un peu plus les méthodes de compression sans perte précédemment citées. - LZ77 : cet algorithme a été proposé en 1977. Il utilise une fenêtre glissante ou coulissante (équivalent à un dictionnaire) à gauche et une fenêtre de taille plus petite à droite. Cette dernière fenêtre est appelée tampon et contient les données à compresser. Les octets sont progressivement introduits dans la fenêtre glissante par la droite de celle-ci. La fenêtre glissante, de taille fixe, ne contient pas l'ensemble des données. Le dictionnaire est constitué de toutes les chaînes de caractères présentes dans la fenêtre glissante. Dans cet algorithme, les motifs rencontrés sont remplacés par une référence à la première apparition, cette référence est typiquement une paire (position, longueur). Les séquences 30 de caractères à compresser sont codées par trois informations : la position, la longueur de la séquence et le premier mot du tampon qui diffère de la séquence de caractères compressés. - 8 - Une amélioration de LZ77 appelée LZSS propose d'utiliser un triplet (marqueur, position, longueur) quand les caractères sont compressés et un couple (marqueur, caractère non compressé) s'il n'y a pas de compression, le marqueur étant codé sur 1 bit. - Deflate : la méthode de compression Deflate utilise LZ77 puis une compression supplémentaire avec les codes Huffman. La méthode Deflate est utilisée notamment pour compresser les fichiers ZIP et GZIP, les fichiers compressés du système de fichiers NTFS et les images PNG. La librairie ZLIB permet d'utiliser cette méthode de compression. - LZ78 : cet algorithme a été proposé en 1978. Il utilise un dictionnaire implicite construit de la même manière par le compresseur et le décompresseur. Il n'y a pas de fenêtre glissante mais le dictionnaire se construit de manière progressive. Au lieu d'avoir une fenêtre de taille limitée, il construit un dictionnaire à partir de tous les symboles déjà rencontrés dans le flux d'entrée. Les séquences de caractères à compresser sont codées par deux informations : la position et le premier mot qui diffère de la séquence de caractères compressés. - LZW: cet algorithme a été proposé en 1984. Il est basé sur LZ78. Il commence par charger les premiers mots du dictionnaire (vocabulaire minimum). Le reste se construit au fur et à mesure que la compression ou la décompression avance. On n'émet plus une suite (code, caractère), mais seulement une suite de codes. LZW permet d'ajuster le codage pendant la compression et ainsi de créer un dictionnaire de taille adaptative. La méthode LZW et ses variantes sont notamment utilisées dans le programme Compress (Unix), dans la norme V.42bis (modems) et pour compresser les images TIEti et GIE. Les méthodes de compression sans perte par dictionnaire adaptatif ont besoin de temps avant de gagner de la place : c'est la phase d'apprentissage. Une compression par 25 trame n'est pas efficace et peut même augmenter le nombre d'octets après compression. Les magnitudes codées avec le logarithme ou l'échelle corrigée (voir le texte du brevet cité en introduction) sont sur 4 bits ou plus et sont très redondantes, surtout pour les points de l'arrière plan. En outre, les grandes valeurs sont rarement atteintes. Les déplacements sont rendus le plus redondant possible pour la voix optimisée ou s'il y a 30 beaucoup de points dans le cas général, en faisant un chaînage (calcul des différences de deux positions consécutives). - 9 - Les phases, si elles sont prises en compte, peuvent être considérées comme aléatoires, mais on peut y trouver quelques motifs qui se répètent. Nous avons choisi LZW dans cette étude car il n'y a pas de dictionnaire à échanger et la 5 compression commence dès le départ. Notre compression additionnelle sans perte est basée sur LZW et la variante utilisée pour la compression des images GIF, avec notamment : - La compression de taille variable. On commence avec une taille de compression de N+1, N étant le nombre initial de bits par 10 code. A chaque fois qu'on émet le plus grand code, on augmente la taille de compression de 1. Par exemple, si N vaut 8, les codes initiaux sont sur 8 bits. On commence par une taille de compression de 9. Dès qu'on arrive au code 511, on passe à une taille de compression de 10. - L'utilisation de 2 codes spéciaux : 15 - <CC> ou Clear Code en Anglaisn pour réinitialiser le dictionnaire et la taille de compression, si la taille maximale de compression est atteinte. - <EOI> ou End of Information en Anglais, pour signaler la fin de la compression. Toutes les trames émises après le départ ou après un code de réinitialisation sont prises en compte pour la construction du dictionnaire. 20 A la fin de la compression de chaque trame, on émet tous les codes qu'il faut pour qu'il n'y ait pas besoin d'une trame antérieure ou future pour la décompression de la trame. Il n'y a pas donc de prise en compte des motifs qui se trouvent uniquement entre deux trames. On considère la trame semi-compressée (n'utilisant pas encore la compression sans perte 25 supplémentaire) comme une suite d'octets (8 bits), les éléments identiques étant regroupés ensemble et chaque groupe commençant sur un nouvel octet (par exemple, toutes les magnitudes, puis toutes les fréquences puis toutes les phases). Il faut donner la priorité au codage des nombres sur 4 bits ou sur 8 bits puis sur 6 bits. Dans tous les cas le regroupement doit être effectué. 30 Le dictionnaire est initialisé avec les 256 premiers codes (0 à 255) plus deux codes pour <CC> et <EOI> (256 et 257). - 10 - Dans le compression des images GIF, l'unité n'est pas l'octet (8 bits), mais le nombre de bits par pixel de l'image. Dans le compression des images TLFF, l'unité est l'octet (8 bits), il y a regroupement des pixels. Envisager un dictionnaire séparé par élément, donc 2 ou 3 dictionnaires différents en parallèle, est plus gourmand en mémoire et en calculs et ne permet pas de prendre en compte les motifs semblables qui existent entre les différents éléments. Dans le compression des images GIF, la taille de compression maximum est de 12 bits (4096 entrées maximum dans le dictionnaire). Ce nombre doit pouvoir être ajusté avant le début des communications ou des diffusions. On n'émet pas un code spécial à la fin de chaque trame car cela diminuerait inutilement le taux de compression surtout à très bas débit. Le code <CC> est émis à chaque fois qu'on souhaite avoir un point de reprise, même si la taille maximale de compression n'est pas atteinte. L'en-tête général et l'en-tête d'une trame ne sont pas compressés. Il n'y a pas de changement côté décompression. La méthode de compression sans perte par dictionnaire adaptatif LZW peut être vue 20 comme une méthode de préchargement total de dictionnaire d'ordre 1 (le dictionnaire est initialisé avec tous les caractères possibles sans concaténation). Nous ajoutons une variante appelée préchargement partiel de dictionnaire d'ordre N, qui est l'ajout systématique de tous les codes correspondant à tous les arrangements des N caractères d'une séquence mise dans le dictionnaire. 25 Par exemple, pour un préchargement partiel d'ordre 2, si mon met la séquence AB dans la base (avec un code), on met aussi la séquence BA (avec un code). Pour un préchargement partiel d'ordre 3, si mon met la séquence ABC (avec un code) dans la base, on met aussi les séquence ACB, BAC, BCA, CAB et CBA (avec un code pour chaque séquence). 30 Pour ne pas avoir de dictionnaire à échanger, le compresseur et le décompresseur doivent se mettre d'accord sur l'ordre N de préchargement partiel et sur l'ordre exact des permutations.To fully understand our choice and method, we begin by describing a little more lossless compression methods previously mentioned. - LZ77: This algorithm was proposed in 1977. It uses a sliding or sliding window (equivalent to a dictionary) on the left and a window of smaller size on the right. This last window is called a buffer and contains the data to be compressed. The bytes are gradually introduced into the sliding window by the right of it. The sliding window, of fixed size, does not contain all the data. The dictionary consists of all strings present in the sliding window. In this algorithm, the patterns encountered are replaced by a reference to the first appearance, this reference is typically a pair (position, length). The character sequences to be compressed are encoded by three pieces of information: the position, the length of the sequence and the first word of the buffer which differs from the sequence of compressed characters. - 8 - An improvement of LZ77 called LZSS proposes to use a triplet (marker, position, length) when the characters are compressed and a couple (marker, uncompressed character) if there is no compression, the marker being coded on 1 bit. - Deflate: the Deflate compression method uses LZ77 then additional compression with Huffman codes. The Deflate method is used in particular to compress ZIP and GZIP files, NTFS file system compressed files and PNG images. The ZLIB library allows you to use this compression method. - LZ78: this algorithm was proposed in 1978. It uses an implicit dictionary built in the same way by the compressor and the decompressor. There is no slippery window but the dictionary is built progressively. Instead of having a window of limited size, it builds a dictionary from all the symbols already encountered in the input stream. The character sequences to be compressed are encoded by two pieces of information: the position and the first word which differs from the sequence of compressed characters. - LZW: this algorithm was proposed in 1984. It is based on LZ78. It begins by loading the first words of the dictionary (minimum vocabulary). The rest is built as compression or decompression progresses. We no longer issue a sequence (code, character), but only a series of codes. LZW adjusts the encoding during compression and thus creates an adaptive-sized dictionary. The LZW method and its variants are notably used in the Compress program (Unix), in the V.42bis standard (modems) and to compress the TIEti and GIE images. Adaptive dictionary lossless compression methods need time to gain space: this is the learning phase. Frame compression is not efficient and may even increase the number of bytes after compression. The magnitudes coded with the logarithm or the corrected scale (see the text of the patent cited in the introduction) are on 4 bits or more and are very redundant, especially for the points of the background. In addition, great values are rarely achieved. The displacements are made as redundant as possible for the optimized voice or if there are many points in the general case, by chaining (calculating the differences of two consecutive positions). The phases, if taken into account, can be considered as random, but we can find some repeating patterns. We chose LZW in this study because there is no dictionary to exchange and 5 compression starts from the beginning. Our additional lossless compression is based on LZW and the variant used for compression of GIF images, including: - Variable size compression. We start with a compression size of N + 1, where N is the initial number of bits per code. Each time the largest code is sent, the compression size is increased by 1. For example, if N is 8, the initial codes are 8 bits long. We start with a compression size of 9. As soon as we get to code 511, we go to a compression size of 10. - The use of 2 special codes: 15 - <CC> or Clear Code in English to reset the dictionary and the compression size, if the maximum compression size is reached. - <EOI> or End of Information in English, to signal the end of compression. All frames sent after the start or after a reset code are taken into account for the construction of the dictionary. At the end of the compression of each frame, all the codes are emitted so that there is no need for an earlier or future frame for the decompression of the frame. There is therefore no consideration of the reasons that are only between two frames. The semi-compressed frame (not yet using the additional lossless compression) is considered as a sequence of bytes (8 bits), the identical elements being grouped together and each group starting on a new byte (for example, all the magnitudes, then all the frequencies then all the phases). Priority must be given to coding numbers on 4 bits or 8 bits and then on 6 bits. In all cases the grouping must be done. The dictionary is initialized with the first 256 codes (0 to 255) plus two codes for <CC> and <EOI> (256 and 257). In the compression of GIF images, the unit is not the byte (8 bits), but the number of bits per pixel of the image. In the compression of the TLFF images, the unit is the octet (8 bits), there is grouping of the pixels. Considering a dictionary separated by element, so 2 or 3 different dictionaries in parallel, is more greedy in memory and in calculations and does not allow to take into account the similar reasons which exist between the various elements. In GIF image compression, the maximum compression size is 12 bits (maximum 4096 entries in the dictionary). This number must be adjustable before the start of communications or broadcasts. We do not issue a special code at the end of each frame because this would unnecessarily decrease the compression rate especially at very low bit rate. The code <CC> is issued each time you want to have a checkpoint, even if the maximum size of compression is not reached. The general header and the header of a frame are not compressed. There is no change on the decompression side. The LZW adaptive dictionary lossless compression method can be viewed as a total preload method of the first order dictionary (the dictionary is initialized with all possible characters without concatenation). We add a variant called partial N-order dictionary preloading, which is the systematic addition of all the codes corresponding to all the N-character arrangements of a sequence put in the dictionary. For example, for a partial preload of order 2, if I put the sequence AB in the base (with a code), we also put the sequence BA (with a code). For a partial preload of order 3, if I put the sequence ABC (with a code) in the base, one also puts the sequences ACB, BAC, BCA, CAB and CBA (with a code for each sequence). In order not to have a dictionary to be exchanged, the compressor and the decompressor must agree on the order N of partial preloading and on the exact order of the permutations.
Le préchargement partiel d'ordre N peut être plus efficace si on vide tous les codes à la fin de la compression d'une trame, ou si on a une suite aléatoire ou avec des séquences peu répétitives, et peut être utilisé.Partial N-order preloading can be more efficient if all codes are empty at the end of the compression of a frame, or if there is a random sequence or with little repetitive sequences, and can be used.
Considérons le pseudo-code suivant pour la compression LZW standard : w = nul tant que (lecture d'un caractère c) faire si (wc existe dans le dictionnaire) alors w wc sinon ajouter wc au dictionnaire écrire le code de w w = c fin si fin tant que écrire le code de w Dans ce pseudo-code : - nul signifie le vide ou l'absence de caractère. - wc est la concaténation du préfixe w et du caractère c. - Le préfixe w désigne 0, 1 ou plusieurs caractères concaténés. - Le caractère c n'est pas nécessairement sur 8 bits. Il désigne simplement un nombre sur N bits. - 12 - On émet obligatoirement un ou deux codes à la fin de chaque trame. Le pseudo-code devient : w = nul tant que (lecture d'un caractère c) faire si (c est le dernier caractère de la trame) alors si (wc existe dans le dictionnaire) alors écrire le code de wc Po sinon écrire le code de w écrire le code de c fin si w = nul 15 sinon si (wc existe dans le dictionnaire) alors sinon ajouter wc au dictionnaire 20 écrire le code de w w = c fin si fin si fin tant que 25 écrire le code de w - 13 - Une réalisation pratique peut être faite en mettant en place l'en-tête global suivant de 2 octets (16 bits) : Bit 1 --- Bit 2 --- Bit 3 --- Bit 4 à Bit 8 --- Bit 9 à Bit 16 Bit 1 à 0 : il n'y a pas de trame audio suivant l'en-tête global. Bit 1 à 1: il y a une trame audio suivant l'en-tête global. Bit 2 à 0 : trame de silence et il n'y a pas de trame audio suivant l'en-tête global. Bit 2 à 1: il ne s'agit pas d'une trame de silence. Bit 3 à O: il ne s'agit pas d'une trame de réinitialisation.Consider the following pseudo-code for the standard LZW compression: w = null as long as (reading a character c) do if (wc exists in the dictionary) then w wc otherwise add wc to the dictionary write the code of ww = c end so fine as to write the code of w In this pseudo-code: - null means the void or the absence of character. - wc is the concatenation of the prefix w and the character c. - The prefix w is 0, 1 or more concatenated characters. - The character c is not necessarily 8 bits. It simply designates a number on N bits. - 12 - One or two codes must be sent at the end of each frame. The pseudo-code becomes: w = null while (reading a character c) do if (c is the last character of the frame) so if (wc exists in the dictionary) then write the code of wc Po otherwise write the code of w write the code of c end if w = null 15 otherwise if (wc exists in the dictionary) then otherwise add wc to dictionary 20 write the code of ww = c end if end if end as 25 write the code of w - 13 - A practical realization can be made by setting up the following global header of 2 bytes (16 bits): Bit 1 --- Bit 2 --- Bit 3 --- Bit 4 to Bit 8 - - Bit 9 to Bit 16 Bit 1 to 0: There is no audio frame following the global header. Bit 1 to 1: There is an audio frame following the global header. Bit 2 to 0: silence frame and there is no audio frame following the global header. Bit 2 to 1: it is not a silent plot. Bit 3 to O: This is not a reset frame.
Bit 3 à 1: il s'agit d'une trame de réinitialisation (il n'y aura plus de référence à des trames antérieures). Bit 4 à Bit 8 : sur un total de 5 bits, nombre de crédit de répétitions à annuler. Un crédit de répétitions de 31 est automatiquement donné. On peut annuler un nombre de crédit de répétitions de 31 au maximum.Bit 3 to 1: This is a reset frame (there will be no reference to previous frames). Bit 4 to Bit 8: out of a total of 5 bits, the number of repetition credits to cancel. A rehearsal credit of 31 is automatically given. You can cancel a number of rehearsal credits of up to 31.
Bit 9 à Bit 16: sur un total de 8 bits, numéro de trame similaire situé en arrière. Un total de 255 numéros peut être adressé. Suivant la valeur du premier bit, l'en-tête général est suivi ou non d'une trame semicompressée (n'utilisant pas la compression sans perte supplémentaire) ou compressée (utilisant la compression sans perte supplémentaire). Une trame qui suit un en-tête général possède un en-tête propre et un corps de taille fixe ou variable. Si les capacités de calcul sont limitées, pour des problèmes de performance ou si les débits sont suffisants, on peut ne pas mettre en oeuvre la compression sans perte. L'en-tête général est encore bon. S'il n'y a pas beaucoup de mémoire, si les capacités de calcul sont limitées ou si la compression sans perte est suffisante, on peut ne pas mettre en oeuvre la notion de trames similaires non successives. L'en-tête général se réduit à un octet. Avec une trame silence, on envoie qu'un octet (il n'y a pas besoin de numéro de trame similaire). - 14 - Si on sait qu'il y a beaucoup de silence d'un côté ou de l'autre de la transmission, moyennant quelques hypothèses, on peut utiliser 14 bits pour le crédit de répétitions : - L'en-tête général comporte toujours 2 octets. - Il n'y a pas de réinitialisation avec une trame de silence. - On ajoute le bit prévu pour la réinitialisation et les 8 bits prévus pour le numéro de trame similaire aux bits prévus pour le crédit de répétitions. - Une trame normale qui suit immédiatement une trame de silence ne doit pas servir à la réinitialisation. - Une trame similaire ne peut pas suivre immédiatement une trame de silence, autrement dit, le second octet ne doit pas être considéré comme un numéro de trame similaire (tous les 14 bits requis servant à annuler le crédit non utilisé). Dans cette réalisation, on considère un exemple découlant de l'étude utilisant FFT, les points de plus grande magnitude et les bandes les plus énergétiques : cas optimisé pour la voix, pics locaux seuls, décimation simple, pas de phase, pas de recouvrement. On choisit 8 points et 4 bandes par trame. Pour une fréquence d'échantillonnage de 8 Khz, il y a un total de 8 points dans les bandes, soit un total de 16 points. Une trame semi-compressée est composée d'un octet d'en-tête 20 et de 16 octets de corps. L'avant plan est constitué de 10 octets (6 octets pour les fréquences et 4 octets pour les magnitudes), l'arrière plan est constitué de 3 octets (positions des bandes) et de 3 autres octets (magnitudes dans les bandes). Un chaînage est réalisé pour réduire le codage des positions de l'avant plan. La taille des tampons FFT est de 256. Enfin les magnitudes sont codées à l'aide du logarithme à base 10 ou de l'échelle 25 corrigée à base 2. Avec ces valeurs on a un taux de compression de 1 /30 et un taux de bits de 4,3 Kbps (kilo bits par seconde). Remarques : - On peut avoir encore de meilleurs taux de compression en prenant moins de points et ou 30 de bandes. - 15 - - Pour une fréquence d'échantillonnage de 16 Khz, il y a un total de 16 points dans les bandes, soit un total de 24 points. La taille des tampons FIT est de 512. Une trame est constituée d'un octet d'en-tête et de 18 octets de corps. Avec ces valeurs, on a un taux de compression de 1 /53 et un taux de bits de .4,7 Kbps. Il y a plus de points à trier mais la qualité d'échantillonnage joue peu sur les débits. Soit à coder la suite des trames suivantes : T1TT2 T2 TTTT3 TTTTT1 TITIS 10 où S représente une trame silence. Il y a 16 trames en tout. Une valeur possible de la tailles des trame semi-compressées (ne faisant pas appel aux méthodes additionnelles décrites dans ce document) de l'étude citée en exemple est 17 octets (1 octet d'en-tête et 16 octets de corps). En utilisant cette valeur, le nombre de bits 15 nécessaires pour compresser ces trames est : 16* 17 * 8 = 2176 bits En utilisant les redondances locales, sans les compressions sans perte, on émet successivement : Bit 1 - Bit 2 - Bit 3 - 0 -Ti (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 0 crédit à annuler, trame T1) 20 Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, trame T) Bit 1 - Bit 2 - Bit 3 - 30 - T2 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, trame T2) Bit 1 - Bit 2 - Bit 3 -29 - 3 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 29 crédits à annuler, comme la 3ème trame située en arrière). Bit 1 - Bit 2 - Bit 3 - 28 - T3 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 28 crédits à annuler, trame T3) 25 Bit 1 - Bit 2 - Bit 3 -30 -2 (Bit 1 à 1, Bit 2 à 1, Bit 3 à 0, 30 crédits à annuler, comme la 2ème trame située en arrière). Bit 1 - Bit 2 - Bit 3 -27-12 (Bit là 1, Bit 2 à 1, Bit 3 à 0, 27 crédits à annuler, comme la 12ème trame située en arrière). Bit 1 - Bit 2 - Bit 3 - 28 - S (Bit 1 à 0, Bit 2 à 0, Bit 3 à 0, 28 crédits à annuler, trame de 30 silence, aucune trame derrière l'en-tête général qui se réduit à un octet). Soit : (2 + 17) * 4 + 2 * 3 + l= 83 octets = 664 bits - 16 - Avec l'exemple ci-dessus, si on utilise la compression additionnelle sans perte par dictionnaire adaptatif, on divise en moyenne la taille des trames par plus de 2, on aura au maximum : (2 + 9) * 4 + 2 * 3 + 1 = 51 octets = 408 bits Avec l'exemple ci-dessus, si les trames Ti, T2 et T3 se trouvent le tampon local (les 255 dernières trames), le nombre de bits nécessaires pour compresser toutes les trames est : 2 x 7 + 1 = 15 octets = 120 bits. L'efficacité de la compression augmente de façon sensible s'il y a beaucoup de répétitions et de trames de silence. Comme on sait qu'une conversation normale contient plus de 50% 10 de silence, des débits moyens très bas sont garantis. La taille des trames étant variable, on ne peut pas donner des chiffres très précis sur les taux de compression ou les débits. On peut juste vérifier que les taux de compression moyens sont très élevés ou que les débits moyens sont très bas. Les trois paramètres importants du codec (compression / décompression) final 15 dérivé du codec cité en introduction deviennent : le nombre de points de l'avant plan, le nombre de bandes de l'arrière plan et l'indice de similarité. Le nombre de points et de bandes doivent être fixés en début de communication tandis que l'indice de similarité peut être changé dynamiquement côté émetteur en cours de communication.Bit 9 to Bit 16: a total of 8 bits, similar frame number located behind. A total of 255 numbers can be addressed. Depending on the value of the first bit, the general header is followed by a semicompressed frame (not using compression without additional loss) or compressed (using compression without additional loss). A frame that follows a general header has its own header and a fixed or variable size body. If computational capabilities are limited, for performance issues or if the rates are sufficient, lossless compression may not be implemented. The general header is still good. If there is not a lot of memory, if the computational capacities are limited or if the lossless compression is sufficient, one can not implement the concept of similar non-successive frames. The general header is reduced to one byte. With a silence frame, only one byte is sent (there is no need for a similar frame number). - 14 - If we know that there is a lot of silence on one side or the other of the transmission, with some assumptions, we can use 14 bits for the repetition credit: - The general header contains always 2 bytes. - There is no reset with a silence frame. - The bit provided for the reset is added and the 8 bits provided for the frame number similar to the bits provided for the repetition credit. - A normal frame immediately following a silence frame should not be used for resetting. - A similar frame can not immediately follow a silence frame, that is, the second byte should not be considered as a similar frame number (all 14 bits required to cancel the unused credit). In this realization, we consider an example resulting from the study using FFT, the points of greatest magnitude and the most energetic bands: case optimized for the voice, local peaks only, simple decimation, no phase, no recovery. We choose 8 points and 4 bands per frame. For a sample rate of 8 Khz, there is a total of 8 points in the bands, for a total of 16 points. A semi-compressed frame is composed of a header byte 20 and 16 bytes of body. The foreground consists of 10 bytes (6 bytes for the frequencies and 4 bytes for the magnitudes), the background consists of 3 bytes (positions of the bands) and 3 other bytes (magnitudes in the bands). Chaining is performed to reduce the coding of foreground positions. The size of the FFT buffers is 256. Finally, the magnitudes are coded using the base-based logarithm 10 or the base-2 corrected scale. With these values we have a compression ratio of 1/30 and a rate bits of 4.3 Kbps (kilobits per second). Notes: - One can still have better compression rates by taking fewer points and or 30 bands. - 15 - - For a sampling frequency of 16 Khz, there is a total of 16 points in the bands, for a total of 24 points. The size of the FIT buffers is 512. A frame consists of a header byte and 18 bytes of body. With these values, we have a compression ratio of 1/53 and a bit rate of .4.7 Kbps. There are more points to sort, but the quality of the sampling plays little on the flows. Either to code the sequence of the following frames: T1TT2 T2 TTTT3 TTTTT1 TITIS 10 where S represents a silence frame. There are 16 frames in all. A possible value of the size of the semi-compressed frames (not using the additional methods described in this document) of the example study is 17 bytes (1 byte of header and 16 bytes of body). Using this value, the number of bits needed to compress these frames is: 16 * 17 * 8 = 2176 bits Using local redundancy, without the lossless compressions, one emits successively: Bit 1 - Bit 2 - Bit 3 - 0 -Ti (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 0 Credit to cancel, T1 Frame) 20 Bit 1 - Bit 2 - Bit 3 - 30 - T (Bit 1 to 1, Bit 2 to 1 , Bit 3 to 0, 30 credits to cancel, frame T) Bit 1 - Bit 2 - Bit 3 - 30 - T2 (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 30 credits to cancel, Frame T2) Bit 1 - Bit 2 - Bit 3 -29 - 3 (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 29 credits to cancel, like the 3rd frame behind). Bit 1 - Bit 2 - Bit 3 - 28 - T3 (Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 28 credits to cancel, Frame T3) 25 Bit 1 - Bit 2 - Bit 3 -30 -2 ( Bit 1 to 1, Bit 2 to 1, Bit 3 to 0, 30 credits to cancel, like the 2nd frame behind). Bit 1 - Bit 2 - Bit 3 -27-12 (Bit there 1, Bit 2 to 1, Bit 3 to 0, 27 credits to cancel, like the 12th frame behind). Bit 1 - Bit 2 - Bit 3 - 28 - S (Bit 1 to 0, Bit 2 to 0, Bit 3 to 0, 28 credits to cancel, frame to 30 silence, no frame behind the general header which is reduced one byte). Let: (2 + 17) * 4 + 2 * 3 + l = 83 bytes = 664 bits - 16 - With the example above, if we use the additional compression without loss by adaptive dictionary, we divide on average the size Frames by more than 2, we will have at most: (2 + 9) * 4 + 2 * 3 + 1 = 51 bytes = 408 bits With the example above, if the frames Ti, T2 and T3 are the local buffer (the last 255 frames), the number of bits needed to compress all the frames is: 2 x 7 + 1 = 15 bytes = 120 bits. The effectiveness of compression increases significantly if there are many repetitions and frames of silence. Since it is known that a normal conversation contains more than 50% silence, very low average rates are guaranteed. The size of the frames being variable, one can not give very precise figures on the rates of compression or the flows. One can just check that the average compression rates are very high or that the average flow rates are very low. The three important parameters of the final codec (compression / decompression) derived from the codec cited in the introduction become: the number of points in the foreground, the number of background bands and the similarity index. The number of points and bands must be fixed at the beginning of communication while the similarity index can be changed dynamically on the transmitter side during communication.
20 Les compressions additionnelles proposées permettent d'atteindre de très bas débits moyens. Des débits moyens de moins de mille bits par seconde (1 Kbps) peuvent être atteints facilement. On peut envisager des débits de quelques centaines de bits par seconde à quelques dizaines de bits par seconde si la grande qualité n'est pas primordiale, en jouant sur l'indice de similarité.The additional compressions proposed make it possible to reach very low average flow rates. Average bit rates of less than one thousand bits per second (1 Kbps) can be easily achieved. We can consider rates of a few hundred bits per second to a few tens of bits per second if the high quality is not paramount, playing on the similarity index.
25 Ces méthodes sont destinées à toutes les communications vocales bidirectionnelles (via Internet ou les téléphones portables par exemple), aux diffusions audio (comme la radio sur Internet) et au stockage des données audio (comme les fichiers sur disque dur ou sur carte mémoire). Les très bas débits obtenus vont permettre de réduire les bandes passantes et les espaces de stockage nécessaires de manière significative. En outre, les 30 appareils utilisant les ondes électro-magnétiques pour transmettre les données (comme les téléphones portables) pourront tirer profit de ces très bas débits pour réduire sensiblement leurs émissions d'ondes.These methods are intended for all two-way voice communications (via the Internet or cell phones, for example), audio broadcasts (such as Internet radio) and audio data storage (such as hard disk or memory card files). . The very low bit rates obtained will make it possible to reduce the bandwidths and the storage spaces required significantly. In addition, devices using electromagnetic waves to transmit data (such as mobile phones) will be able to take advantage of these very low rates to substantially reduce their wave emissions.
Claims (7)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1201759A FR2992458B1 (en) | 2012-06-21 | 2012-06-21 | ADDITIONAL AUDIO COMPRESSION METHODS AT VERY LOW RATE UTILIZING LOCAL REDUNDANCES AND USING ADAPTIVE DICTIONARY CODING |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1201759A FR2992458B1 (en) | 2012-06-21 | 2012-06-21 | ADDITIONAL AUDIO COMPRESSION METHODS AT VERY LOW RATE UTILIZING LOCAL REDUNDANCES AND USING ADAPTIVE DICTIONARY CODING |
FR1201759 | 2012-06-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2992458A1 true FR2992458A1 (en) | 2013-12-27 |
FR2992458B1 FR2992458B1 (en) | 2018-03-02 |
Family
ID=47664318
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR1201759A Active FR2992458B1 (en) | 2012-06-21 | 2012-06-21 | ADDITIONAL AUDIO COMPRESSION METHODS AT VERY LOW RATE UTILIZING LOCAL REDUNDANCES AND USING ADAPTIVE DICTIONARY CODING |
Country Status (1)
Country | Link |
---|---|
FR (1) | FR2992458B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3093600A1 (en) | 2019-03-10 | 2020-09-11 | Georges Samake | Methods of using phases to reduce bandwidths or to transport data with multimedia codecs using only magnitudes or amplitudes |
-
2012
- 2012-06-21 FR FR1201759A patent/FR2992458B1/en active Active
Non-Patent Citations (3)
Title |
---|
ADIL BENYASSINE ET AL: "ITU-T RECOMMENDATION G.729 ANNEX B: A SILENCE COMPRESSION SCHEME FOR USE WITH G.729 OPTIMIZED FOR V.70 DIGITAL SIMULTANEOUS VOICE AND DATA APPLICATIONS", IEEE COMMUNICATIONS MAGAZINE, IEEE SERVICE CENTER, PISCATAWAY, US, 1 September 1997 (1997-09-01), pages 64 - 73, XP002109011, ISSN: 0163-6804 * |
MATIAS Y ET AL: "Delayed-dictionary compression for packet networks", INFOCOM 2005. 24TH ANNUAL JOINT CONFERENCE OF THE IEEE COMPUTER AND CO MMUNICATIONS SOCIETIES. PROCEEDINGS IEEE MIAMI, FL, USA 13-17 MARCH 2005, PISCATAWAY, NJ, USA,IEEE, PISCATAWAY, NJ, USA, vol. 2, 13 March 2005 (2005-03-13), pages 1443 - 1454, XP010829241, ISBN: 978-0-7803-8968-7, DOI: 10.1109/INFCOM.2005.1498371 * |
SCHMIDT DOLBY LABORATORIES F DE BONT PHILIPS ELECTRONICS S DOEHLA FRAUNHOFER IIS J KIM LG ELECTRONICS INC M: "RTP Payload Format for MPEG-4 Audio/Visual Streams; rfc6416.txt", RTP PAYLOAD FORMAT FOR MPEG-4 AUDIO/VISUAL STREAMS; RFC6416.TXT, INTERNET ENGINEERING TASK FORCE, IETF; STANDARD, INTERNET SOCIETY (ISOC) 4, RUE DES FALAISES CH- 1205 GENEVA, SWITZERLAND, 18 October 2011 (2011-10-18), pages 1 - 35, XP015081317 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3093600A1 (en) | 2019-03-10 | 2020-09-11 | Georges Samake | Methods of using phases to reduce bandwidths or to transport data with multimedia codecs using only magnitudes or amplitudes |
Also Published As
Publication number | Publication date |
---|---|
FR2992458B1 (en) | 2018-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8473301B2 (en) | Method and apparatus for audio decoding | |
RU2326450C2 (en) | Method and device for vector quantisation with reliable prediction of linear prediction parameters in voice coding at variable bit rate | |
WO2005083889A1 (en) | Dimensional vector and variable resolution quantisation | |
US8983831B2 (en) | Encoder, decoder, and method therefor | |
EP1692689B1 (en) | Optimized multiple coding method | |
JP4779098B2 (en) | Method and apparatus for performing variable size vector entropy coding | |
US11722148B2 (en) | Systems and methods of data compression | |
EP2769378B1 (en) | Improved hierarchical coding | |
EP2260486A1 (en) | Reduced-complexity vector indexing and de-indexing | |
WO2005066936A1 (en) | Transcoding between the indices of multipulse dictionaries used for coding in digital signal compression | |
EP2080194A2 (en) | Attenuation of overvoicing, in particular for generating an excitation at a decoder, in the absence of information | |
EP2652735B1 (en) | Improved encoding of an improvement stage in a hierarchical encoder | |
EP2591556A1 (en) | Method of determining at least one parameter of an error correcting code implemented on transmission, corresponding device and computer program | |
FR2992458A1 (en) | Method for compression and decompression of audio, involves providing fast Fourier transform or cosine modified discrete transformed, and taking local redundancies such as successive and non-successive repetitions into account | |
EP2203915B1 (en) | Transmission error dissimulation in a digital signal with complexity distribution | |
EP1525663B1 (en) | Digital data compression robust relative to transmission noise | |
JP2006003580A (en) | Device and method for coding audio signal | |
WO2011086900A1 (en) | Encoding device and encoding method | |
US10613797B2 (en) | Storage infrastructure that employs a low complexity encoder | |
WO2010001020A2 (en) | Improved coding/decoding by bit planes | |
WO2011144863A1 (en) | Encoding with noise shaping in a hierarchical encoder | |
Akilan et al. | Research on the effectiveness of noise reduction when encoding a lossless speech signal | |
Amro | Speech Compression Exploiting Hamming Correction Code Compressor | |
CN118136030A (en) | Audio processing method, device, storage medium and electronic equipment | |
FR2842670A1 (en) | Device and method for an improved compression of digital data, comprises input of two data flows and coding of symbols by use of table and by selecting redundant words |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PLFP | Fee payment |
Year of fee payment: 4 |
|
PLFP | Fee payment |
Year of fee payment: 5 |
|
PLFP | Fee payment |
Year of fee payment: 6 |
|
PLFP | Fee payment |
Year of fee payment: 7 |
|
PLFP | Fee payment |
Year of fee payment: 9 |
|
PLFP | Fee payment |
Year of fee payment: 10 |
|
PLFP | Fee payment |
Year of fee payment: 11 |
|
PLFP | Fee payment |
Year of fee payment: 12 |
|
PLFP | Fee payment |
Year of fee payment: 13 |