Généralités
La compression est une opération qui consiste à réduire la taille occupée par les données numériques, audio ou audio-visuelles. Son principe général consiste à éliminer les informations redondantes et non significatives des données. La problématique de la compression résulte de la taille limitée de la bande passante du réseau Internet qui n'était pas conçu à la base pour recevoir un flot incessant d'image, de données audio visuels et de communications téléphoniques. Les critères d'évolution des méthodes de compression sont:
- La qualité de la reconstitution de la donnée source
- Le taux de compression.
- La rapidité du codeur/décodeur (codec).
Les problèmes liés à la compression
Le contrôle de débit
A débit constant, il peut y avoir un risque de débordement si une crise de fluidité intervient dans le réseau.
A débit variable, il peut y avoir un risque de conflit entre le codeur et le décodeur.
Les pertes dans le réseau
La perte de certaines données comme les en-têtes peuvent avoir des conséquences grammatiques sur le comportement du décodeur.
Run Lenght Encoding : RLE
C'est le plus simple des algorithmes de compression, il consiste à quantifier un seuil S0 fixé.
Exemple
Soit le texte source (P) suivant: [AAAAALBBCCCCDE] taille de (p)=14
- Fixons le seuil S0=3, on aura compress_P=[A(5)LBBC(4)DE]
taille[compress_P] = 9.
Taux de compression = [taille(P)-taille(compress_p)]/taille(P)
Taux de compression = (14-9)/14 = 35% - Fixons Seuil: S0=2
On aura compress_P = [A(5)LB(2)C(4)DE].
Taille[compress_P] = 9
Taux de compression = 35%
Exercice:
Décompressez [C(p)], Si C(P)=[00010(00101)01011(0011)10010(00100)10101(00011)11010(00100)]
Solution:
P = [B(5)K(3)R(4)U(3)Z(4)]
P = [BBBBKKKKKKKRRRUUUZZZZ]
Taux de compression = (23-10)/23 = 13/23 = 56,5%
Compression de HUFFMAN
C'est un algorithme de codage utilisé pour la compression des données (caractères, mots) son principe:
- Connaitre la taille totale du volume des données
- Affecter des codes inversement proportionnels à la fréquence des caractères contenus dans les données (haute fréquence implique codage souple)
Exemple
Texte source:
T : [aaakea befafm afakfk kfkede mdakfm]
taille(T) = 30
Fréquence:
a = 8/30 = 27%
k = 6/30 = 20%
e = 4/30 = 13%
b = 1/30 = 3,3%
f = 6/30 = 20%
m = 3/30 = 10%
d = 2/30 = 6,66%
On classe par fréquence croissante:
Compression de HUFFMAN pour les caractères
Soit le texte à compresser: T = [COMMENT_ÇA_MARCHE]
On ava supposer que les caractères de T sont données en ACII, méthode de HUFFMAN:
- On classe les caractères par fréquence décroissante
- On divise la liste ainsi obtenue en 2 sous groupes S1 et S2 dont la somme des fréquences internes respectives:
Application:
Caractères |
Apparitions |
Fréquences |
c |
2 |
11,6% |
O |
1 |
5,88% |
M |
3 |
17,64% |
E |
2 |
11,76% |
N |
1 |
5,88% |
T |
1 |
5,88% |
_ |
2 |
11,76% |
A |
2 |
11,75% |
R |
1 |
5,88% |
H |
1 |
5,88% |
Ç |
1 |
5,88% |
- Construisons une partition en 2 variables:
Le caractère à plus haute fréquence (M) n'a pas le plus petit codage, car il n'a pas été initialisé dans le sous groupe de moindre poids.
M = [COMMENT_ÇA_MARCHE]
Taux de compression de M:
Chaque caractère codé en ASCII occupe 8 bits.
Chaque caractère du texte source a la taille suivante:
X |
& |
Taille unitaire |
Taille totale |
X1 |
C |
1 |
2 |
X2 |
O |
4 |
4 |
X3 |
M |
1 |
3 |
X4 |
E |
2 |
4 |
X5 |
N |
4 |
4 |
X6 |
T |
4 |
4 |
X7 |
_ |
2 |
4 |
X8 |
Ç |
4 |
4 |
X9 |
A |
3 |
6 |
X10 |
R |
4 |
4 |
X11 |
H |
4 |
4 |
Taille (en binaire) du texte source 17x8=136bits
Théorème de l'entropie
Exemple
Soit le texte en clair "Le_codage_des_informations_utilise_du_binaire"
- Classer par ordre d'apparition chaque caractère du texte
- Déterminez l'entropie de chaque caractère.
Solution
Classons par ordre d'apparition chaque caractère du texte.
L |
E |
_ |
C |
O |
D |
A |
G |
S |
I |
N |
F |
R |
M |
T |
U |
B |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|||||
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|||||||||
1 |
1 |
1 |
||||||||||||||
1 |
1 |
1 |
||||||||||||||
1 |
1 |
Taille totale (en décimal): 45
Donnons l'entropie de chaque caractère:
Entropie totale:
Soit (T) un texte en claire utilisant P caractères (X1, X2, X3,... XP) d'occurrence respective n1, n2, n3, ... nP alors l'entropie totale du texte (nombre total de digits qu'occupera le texte après compression).
Taux moyen de compression
Application:
- Déterminez le taux de compression de l'exercice précédent
- Déterminez les codes de chacun des caractères (ressortir l'arbre pour sortir les codes)
Solution:
Compression et décompression d'une matrice : méthode de RLE (Run Lengle Ending)
Objectif
On souhaite décompresser une information en binaire correspondant à une matrice 16x4 (rouge, noir, gris, blanc)
Le wagon chiffrant une case de la matrice est un double mot de 16 bits codé en binaire et divisé en 5 labels ou étiquettes.
Etiquette (A): bit (0)
Bit de fin de texte.
A=0 ; le caractère lu est dernier du texte
Etiquette (B): bit 2
Position du caractère sur la colonne de la matrice. Il faut prendre 16 valeurs de 0000 à 1111.
Etiquette (L): bits (6) et bit(7)
Indique la ligne du caractère lu, prend 4 valeurs: L1=00 (première ligne) ; L2=01 ; L4=11
Etiquette (C) : bit(8) et (9)
Indique la couleur du caractère lu, prend =4 valeurs: noir=00 ; blanc=01 ; gris=10 et rouge=11
Etiquette (R) : bits (10) à (14)
Indique le nombre de répartition du caractère lu en allant vers la droite de la ligne considérée et recommençant à gauche de la ligne suivante (LK+1).
Il peut prendre 32 valeurs de (00000) à (11111).
Etiquette (E): bits (15)
Pour les caractères d'ordre 2K-1 on a E=1. Pour les caractères d'ordre 2K on a E=0 et lorsque A=0, on a toujours E=0.
Il indique le nouveau caractère.
Exercice d'application
Soit le train d'information, comprenant un tableau en couleur (4lignes*16colonnes).
NB: On lit ce tableau de bas vers le haut.
26 |
0111 1111 |
0000 0010 |
||
24 |
1010 0011 |
1100 0110 |
1010 1011 |
0000 0111 |
22 |
1010 0011 |
1000 0010 |
1001 0111 |
1100 0111 |
20 |
1001 0011 |
1000 0010 |
1000 1011 |
1100 0101 |
18 |
1010 1010 |
0000 1000 |
1001 0110 |
1000 0111 |
16 |
1010 1010 |
0000 0110 |
1001 0110 |
1000 0011 |
14 |
1001 0110 |
1100 0110 |
1001 0010 |
1000 0011 |
12 |
1000 1010 |
1100 0100 |
1011 1001 |
0000 1001 |
10 |
1010 1101 |
1000 0110 |
1010 1001 |
0000 0011 |
8 |
1001 0101 |
1000 1010 |
1000 1001 |
1100 0101 |
6 |
1010 1000 |
0000 1000 |
1011 0100 |
1000 0111 |
4 |
1010 1000 |
0000 0110 |
1001 0100 |
1000 1011 |
2 |
1000 1000 |
0100 0100 |
1000 0000 |
0000 0101 |
Remplir la matrice originale (M)
L1 |
N |
N |
B |
B |
G |
G |
G |
G |
G |
N |
N |
N |
G |
G |
G |
|
L2 |
R |
R |
G |
G |
G |
G |
G |
N |
G |
G |
G |
N |
N |
|||
L3 |
N |
N |
R |
|||||||||||||
L4 |