Sunteți pe pagina 1din 6

Codarea

(Compresia) datelor fara pierderi. Codul Huffman


Cuprins
Codarea (Compresia) datelor fara pierderi. Codul Huffman ................................................................... 1
1. Breviar teoretic ............................................................................................................................. 1
2. Codul Huffman .............................................................................................................................. 2
3. Codarea Huffman in Matlab. ........................................................................................................ 3
4. Creearea si decodarea unui cod Huffman ..................................................................................... 4
5. Aplicatii ......................................................................................................................................... 5

1. Breviar teoretic

Codarea surselor discrete se face urmarind doua scopuri distincte : fie in scopul cresterii eficientei
transmisiei prin reducerea redundantei, respective prin micsorarea numarului de simboluri in fiecare cuvant de
cod, fie cu scopul imbunatatirea stabilitatii la perturbatii prin introducerea unei redundante, respective prin
adaugarea de simboluri de control, care sa permite corectia sau detectia erorilor. In vederea realizarii primului
obiectiv se folosesc coduri cu lungime medie a cuvintelor cat mai mica, numite si coduri optimale, obtinute
prin codare compacta (subiectul prezentei lucrari de laborator), iar pentru realizarea celui de-al doilea obiectiv
se utilizeza coduri detectoare sau corectoare de erori (subiectul lucrarii urmatoare).

Codarea presupune atasarea unor cuvinte de cod simbolurilor unei surse (denumita si sursa primara)
obtinandu-se astfel o noua sursa, secundara, a carei entropie sa fie mai mare decat cea a sursei primare,
reducandu-se astfel redundanta acesteia.

Sursa primara are alfabetul = ! . . ! , setul de probabilitati ! = [ ! ! ] iar
surs secundara este caracterizata de alfabetul de lungime D, = ! . . ! . Literele alfabetului [ X]
formeaza cuvintele de cod, corespunzatoare simbolurilor. In continuare tratam numai codurile unic
decodabile, adica acele coduri unde unei secvente a cuvintelor de cod ii corespunde o succesiune unica de
simboluri ale sursei.


Se defineste lungimea medie a unui cuvant de cod:


!

(! )!

=
!!!


unde ! reprezinta numarul de litere din cuvantul de cod corespunzator simbolului ! . In plus se poate
demonstra ca lungimea medie a unui cuvant de cod este
! =

()

()


Avand in vedere obiectivul codarii si anume maximizarea entropiei sursei secundare, valoarea maxima
a acesteia se atingandu-se pentru probabilitati egale
!"# = log
lungimea medie devine minima :
!"# =

()

log


Cu alte cuvinte un cod bun este cel care minimizeaza lungimea medie. Eficienta unui cod fiind
caracterizata de raportul dintre lungimea medie minima si lungimea medie:
=

!"#

un cod absolut optimal este cel cu eficienta egala cu unitatea.



Un cod optimal este cel pentru care se obtine cea mai mica lungime medie posibila. Absolut
optimalitatea este data de setul de probabilitati al sursei si nu de cod. Adica exista seturi de probabilitati
pentru care nu exista cod absolut optimal.
Practica foloseste coduri optimale. O metoda de codare optimala este cea a lui Huffman. Codul Huffman
devine absolut optimal daca setul de probabilitati al sursei primare continue numai valori de tipul !! , .
De asemenea un cod ireductibil satisface inegalitatea Kraft Mc Millan:
!

!!! 1
!!!

Un cod optimal trebuie sa indeplineasca relatia:

2. Codul Huffman


Este o metoda de compresie care face conversia simbolurilor sursei in siruri de caractere de
lungime variabila. Caracterele care apar frecvent sunt convertite in siruri de biti scurte; simbolul cel
mai putin frecvent i se atribuie cel mai lung sir de caractere.


Codarea Huffman foloseste o metoda specifica in a alege reprezentarea fiecarui simbol
rezultatul fiind un cod fara prefix, asta insemnand ca sirul de biti reprezentand un simbol particular
nu e niciodata prefixul altui sir de biti ce reprezinta oricare alt simbol.

Datele codate folosind aceasta metoda sunt unic decodabile, asta deoarece codurile Huffman
satisfac o proprietate importanta numita proprietatea de prefix. Aceasta insusire garanteaza ca nici
un cuvant de cod nu este prefixul altui cuvant de cod. De exemplu 10 si 101 nu pot fi simultan cuvinte
de cod valide deoarece primul este prefixul celui de al doilea. De aceea orice flux de biti este unic
decodabil folosind un cod Huffman. Pentru a intelege de ce proprietatea de prefix este esentiala,
analizati cuvintele de cod prezentate mai jos in care e este codat folosind 110 care la randul lui este
prefix pentruf.
caracter

cuvant de cod

101

100

111

110

1100


Decodarea sirului de caractere 11000100110 este ambigua:
11000100110- face
11000100110-eaace

3. Codarea Huffman in Matlab.


In Matlab dictionarul codului Huffman asociaza fiecare simbol al sursei cu un cuvant de cod.
Are proprietatea ca nici un cuvant de cod din dictionar nu este prefixul altui cuvant de cod. Functiile
huffmandict, huffmanenco, huffmandeco realizarea codarea si decodarea.
Creeare unui dictionar de cod Huffman
dict=huffmandict(simbols,p)
Codarea Huffman necesita informatii statistice despre sursa ce a generat simbolurile ce urmeaza a fi
codate. In particular argumentul p al functiei contine probabilitatile cu care sursa emite fiecare simbol
din alfabet.
De exemplu considerand o sursa de date ce emite 1 cu probabilitatea 0.1, 2 cu probabilitatea 0.1
si 3 cu probabilitatea 0.8. Etapa de calcul cea mai importanta in codarea datele emise de sursa
folosind un cod Huffman este de a crea un dictionar ce asociaza fiecarui simbol un cuvant de cod.
Comanda de mai jos creeaza un astfel de dictionar si apoi intoarce vectorul cuvintelor de cod asociat
unei valori anume din datele sursei.

clear all
symbols=[1 2 3]; % simbolurile emise

de sursa;

p=[0.1 0.1 0.8]; % probabilitatile fiecarui simbol;


[dict,avglen] = huffmandict(symbols,p) % creaza dictionarul
display ('primul simbol')
cuvcod=dict{1,2} % afiseaza prima linie a dictionarului.
display ('al-2lea

simbol')

cuvcod=dict{2,2} % afiseaza a doua


display ('al-3lea

linie a dictionarului.

simbol')

cuvcod=dict{3,2} % afiseaza a treia linie a dictionarului.


Rezultatul de mai jos arata ce cel mai probabil simbol al datelor, 3, este asociat cu un cuvant
de cod de un digit in timp ce simbolurile cu probabilitatea cea mai mica de aparitie sunt associate
unor cuvinte de cod de 2 digiti. Rezultatul releva de asemenea ca un codor Huffman ce primeste
simbolul 1 ar trebui sa inlocuiasca secventa cu 11.
dict =
[1]
[1x2 double]
[2]
[1x2 double]
[3]
[
0]
avglen =
1.2000
primul simbol
cuvcod =
1
1
al-2lea simbol
cuvcod =
1
0
al-3lea simbol
cuvcod =0

4. Creearea si decodarea unui cod Huffman


Exemplul de mai jos realizeaza codarea si decodarea Huffman folosind functiile huffmanenco si
huffmandeco. Este folosita o sursa al carei alfabet este compus din 3 simboluri. Functile mentionate
folosesc dictionarul pe care huffmandict l-a creat.
sig=repmat([ 3 3 1 3 3 3 3 3 3 2 3],1,50);% Datele ce urmeaza a fi codate
simbols=[1 2 3];% Simbolurile distincte emise de sursa
p=[0.1 0.1 0.8];% probabilitatea de aparitie a fiecarui simbol
dict=huffmandict(simbols, p); % creeaza dictionarul
hcode=huffmanenco(sig,dict); %codeaza datele
dhsig=huffmandeco(hcode,dict); %decodeaza codul.

5. Aplicatii
TEMA 1
Fie o sursa ce emite 5 simboluri cu urmatoarele probabilitati:
Simbol

Probabilitatea

S0

0.4

S1

0.2

S2

0.2

S3

0.1

S4

0.1

1.
Construiti codul Huffman pentru
mesaj si identificati cuvantul de cod alocat
fiecarui simbol.
2. Scrieti codul Matlab pentru a
realiza codarea Huffman a simbolurilor
date.
3. Calculati eficienta codului obtinut.


TEMA 2
Construiti codul Huffman pentru sursa X ce emite simboluri cu probabilitatile de mai jos:
Simbol Probabilitatea

Determinati:
a) Cuvantul de cod pentru fiecare
simbol.

0.4

0.1

0.06

0.3

0.1

c) Scrieti codul Matlab pentru a


obtine codul Huffman al sursei
date.

0.04

d) Calculati eficienta codului obtinut.

b) Numarul mediu de digiti transmis


per cuvant de cod.

TEMA 3
Identificati codul Huffman binar pentru sursa cu probabilitatile [ 1/3,1/5,1/5,2/15,2/15]. Argumentati
de ce codul obtinut este de asemenea optimal pentru sursa cu probabilitatile [1/5,1/5,1/5,1/5,1/5].
TEMA 4 Se considera o sursa ce emite 6 simboluri cu probabilitatile [0.05,0.1,0.3,0.25,0.1,0.2]. Sa se
determine un cod compact folosind procedeul de codare Huffman daca alfabetul codului este
X=[0 1] si daca alfabetul codului este X=[0 1 2]. Pentru cele doua coduri sa se calculeze lungimea
medie a unui cuvant de cod si eficienta codului.



TEMA 5 Entropia relativ este costul codrii inadecvate
Fie variabila aleatoare X care ia cinci valori posibile {1, 2, 3, 4, 5}. Se consider dou distributii ale
acestei variabile aleatoare, p si q.

1/16



a) Calculati H(p), H(q).
b ) Ultimele dou coloane ale tabelului contin coduri pentru variabila X. Verificati c lungimea medie a
codului C1 sub distributia p este egal cu entropia H(p). Asadar, C1 este absolut optimal pentru p.
Verificati c C2 este un cod optimal pentru q.
c) Se presupune acum c se utilizeaz codul C2 cnd distributia este p. Care este lungimea medie a
cuvntului de cod? Cu ct este mai mare aceasta fat de entropia H(p)?
d) Care este pierderea dac este folosit codul C1 cnd distributia este q?

Concluzii asupra algoritmilor de codare optimala:
1) Codurile rezultate prin aplicarea algoritmilor de codare optimala nu sunt unice, inversarea lui 0 cu
1 si reciproc (pt codurile binare) conduce la coduri suplimentare. In plus, cazul unor mesaje cu
probabilitati egale determina alegerea cuvintelor de cod corespunzatoare in mod arbitrar. Ca atare,
desi codul nu este unic, toate codurile realizate cu acelasi algoritm asigura aceeasi lungime medie,
respectiv aceeasi eficienta!
2. Lungimea ultimelor D cuvinte de cod este aceeasi.
3. Atat codarea Shannon Fano cat si Huffman genereaza coduri instantanee, adica nici un cuvand de
cod nu este prefixul altui cuv de cod.
4. Codarea Huffman, simbol cu simbol, duce la scaderea eficientei codului in cazul particular in care
probabilitatea cea mai mare este apropiata ca valoare de 1. Dezavantajul poate fi ideparata prin
codarea Huffman a sirurilor de simboluri, informatia fiind organizata in blocuri de lungime fixa, care
apoi sunt codate Huffman.
5. COdarea Huffman este folosita uzual ca ultima etapa in cateva schema de compresie.

S-ar putea să vă placă și