0% ont trouvé ce document utile (0 vote)
123 vues9 pages

Codage et Décodage Huffman en Matlab

Transféré par

benzedira yasmine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
123 vues9 pages

Codage et Décodage Huffman en Matlab

Transféré par

benzedira yasmine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITÉ DE BADJI MOKHTAR ANNABA

TP n°2
CODAGE HUFFMAN

BENZEDIRA YASMINE

L’année universitaire
2023/2024
Objectif du TP :
- Cordage et décodage d'une chaine de symboles numériques en utilisant l'algorithme de Huffman.

- Comprendre et utiliser quelques fonctions Matlab pour le codage Huffman : huffmandict, huffmanenco
et huffmandeco

Manipulation 1 :
>> Symbols={'C','A','B','F','G','E','D','H'}; %Définition des symboles à coder
>> p=[0.3 0.2 0.18 0.1 0.07 0.06 0.05 0.04]; %Définition des probabilités associées à chaque symbole
>> msg={'F','A','C','H','E','G','A','D'}; %Définition du msg à encoder
>> dict=huffmandict(Symbols,p); %Création du dictionnaire de codage de Huffman
>> msg_encoded=huffmanenco(msg,dict)

msg_encoded =
Columns 1 through 22

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

>> [dict,avglen]=huffmandict(Symbols,p) %Création du dictionnaire de codage de Huffman


avec calcul de la longueur moyenne de codage

dict =

'C' [1x2 double]


'A' [1x2 double]
'B' [1x3 double]
'F' [1x3 double]
'G' [1x4 double]
'E' [1x4 double]
'D' [1x4 double]
'H' [1x4 double]

avglen =
comp =
2.7200

Columns 1 through 22

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1
1. Calcul de l’entropie H :
% Définir l’alphabet et les probabilités

Alphabet = {‘C’, ‘A’, ‘B’, ‘F’, ‘G’, ‘E’, ‘D’, ‘H’} ;


P = [0.3 0.2 0.18 0.1 0.07 0.06 0.05 0.04] ;
% Calculer l’entropie

For i = 1 :length(p)
H = –∑(p(i) * log2(p(i))) ;
End
% Afficher l’entropie

Résultat : H = 2.67 bits/symbole

Construction du dictionnaire de Huffman :

Dict=huffmandict(Symbols,p) ; %Création du dictionnaire de codage de Huffman


[dict,avglen]=huffmandict(Symbols,p) %Création du dictionnaire de codage de
Huffman avec calcul de la longueur moyenne de codage
Dict =
‘C’ [1x2 double]
‘A’ [1x2 double]
‘B’ [1x3 double]
‘F’ [1x3 double]
‘G’ [1x4 double]
‘E’ [1x4 double]
‘D’ [1x4 double]
‘H’ [1x4 double]
Dictionnaire de Huffman :
C : 01
A : 10
B : 000
F : 110
G : 0010
E : 0011
D : 1110
H : 1111

L’arbre de Huffman:

4-Calcul de la longueur moyenne de code L :

% Calculer la longueur moyenne de code


L=0;
For i = 1 :length(alphabet)
L = L + p(i) * length(codes{i}) ;
End
% Afficher la longueur moyenne de code :
Résultat :. L = 2.72bits/symbole

5- Comparaison de deux codes (analytique et avec Matlab):


>> Les codes obtenues analytiquement et avec Matlab sont identiques
Manipulation2 :
>> Symbols={'C','A','B','F','G','E','D','H'}; %Définition des symboles à coder
>> p=[0.3 0.2 0.18 0.1 0.07 0.06 0.05 0.04]; %Définition des probabilités associées à chaque
symbole
>> msg={'F','A','C','H','E','G','A','D'}; %Définition du msg à encoder
>> dict=huffmandict(Symbols,p); %Création du dictionnaire de codage de Huffman
>> msg_encoded=huffmanenco(msg,dict)

msg_encoded =
Columns 1 through 22

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

Columns 23 through 25
1 1 0

>> comp=huffmanenco(msg,dict) %Compression du msg


comp =

Columns 1 through 22
1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

Columns 23 through 25
1 1 0

>> deco=huffmandeco(comp,dict)
comp = %Décompression du msg
deco =
Columns
'F' 'A'1 through
'C' 'H'22 'E' 'G' 'A' 'D'

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

Columns 23 through 25

1 1 0

>> deco=huffmandeco(comp,dict)
[Link] du message :

% Définir le message
Msg = « FACHEGAD » ;
% Encoder le message avec le dictionnaire de Huffman
Dict = huffmandict (alphabet, p) ; [Dict,avglen]=huffmandict(alphabet,p)
% Afficher le code de Huffman :

Résultats :

Code de Huffman : 1101001011000001110100011000100


[dict,avglen]=huffmandict(alphabet,p)
Dict =
‘C’ [1x2 double]
‘A’ [1x2 double]
‘B’ [1x3 double]
‘F’ [1x3 double]
‘G’ [1x4 double]
‘E’ [1x4 double]
‘D’ [1x4 double]
‘H’ [1x4 double]
Avglen =
2.7200
2. Décodage du message :

% Décoder le message avec le dictionnaire de Huffman


Message_decode = huffmandict(Dict, alphabet, p) ;
% Afficher le message décodé :
Résultat :. Message décodé : FACHEGAD

[Link] des tailles :

% Taille du message initial


Taille_originale = length(msg) * 8 ;
Taille_originale= 64
% Taille du code de Huffman
Taille_huffman = length(code_huffman) ;
Taille_huffman= 25

[Link] :

Le code de Huffman permet de compresser le message de manière significative.


La taille du message compressé est de 25 bits, ce qui représente une réduction de
60.9375 % par rapport à la taille originale de 64 bits.
[Link] du taux de compression:
Taux_compression = (1 – (taille_huffman / taille_originale)) * 100 ;
% Afficher le taux de compression :

Résultat : Taux de compression : 60.9375 %


•Le taux de compression obtenu est élevé car le message contient plusieurs
répétitions de caractères. Le codage de Huffman est particulièrement efficace
pour compresser des messages avec des répétitions.

Programme de manipulation 2:
>> Symbols={'C','A','B','F','G','E','D','H'};

>> p=[0.3 0.2 0.18 0.1 0.07 0.06 0.05 0.04];

>> msg={'F','A','C','H','E','G','A','D'}; %Définition du msg à encoder

>> dict=huffmandict(Symbols,p);

>> [dict,avglen]=huffmandict(Symbols,p)

dict =

'C' [1x2 double]

'A' [1x2 double]

'B' [1x3 double]

'F' [1x3 double]

'G' [1x4 double]

'E' [1x4 double]


'D' [1x4 double]

'H' [1x4 double]

avglen =

2.7200

>> msg_encoded=huffmanenco(msg,dict)

msg_encoded =

Columns 1 through 22

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

Columns 23 through 25

1 1 0

>> comp=huffmanenco(msg,dict) %Compression du msg

comp =

Columns 1 through 22

1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1

Columns 23 through 25
1 1 0

>> deco=huffmandeco(comp,dict) %Décompression du msg

deco =

'F' 'A' 'C' 'H' 'E' 'G' 'A' 'D'

>> taille_originale = length(msg)*8

taille_originale =

64

>> taille_huffman= length(msg_encoded)

taille_huffman =

25

>> Taux_de_compression=(1-(taille_huffman/taille_originale))*100

Taux_de_compression = 60.9375 %

Vous aimerez peut-être aussi