Sunteți pe pagina 1din 8

Lucrarea 4

Procedeul de codare Human


4.1 Obiectivul lucrrii

n aceast lucrare este studiat codarea surselor de informaie discrete pentru canale fr pertur-
baii prin procedeul Human. Vor  analizate codurile Human binare i n-are i se va studia,
de asemenea, aplicarea algoritmului Human pentru compresia datelor.

4.2 Introducere teoretic

Algoritmul de codare Human este un algoritm optimal de codare a surselor discrete de infor-
maie, n sensul c prin niciun alt algoritm nu se poate obine o lungime a cuvintelor de cod
mai mic. Comparativ cu algoritmul Shannon-Fano, util numai pentru codarea surselor care
genereaz simboluri ale cror probabiliti sunt puteri negative ale lui 2, procedeul lui Human
este aplicabil pentru orice distribuie de probabiliti ale simbolurilor sursei de informaie. El
permite obinerea unui cod ale crui cuvinte au lungimi variabile, fr prex. Proprietatea co-
durilor fr prex este aceea c niciun cuvnt de cod nu este un prex pentru un alt cuvnt de
cod.
Un cod fr prex este un cod instantaneu, n cazul cruia decodarea unui cuvnt se efectueaz
pe msura recepionrii lui, fr a  necesar examinarea cuvntului urmtor.
n cazul codrii surselor pentru canale fr perturbaii, sursa de informaie primar genereaz
un numr de simboluri sau mesaje care alctuiesc alfabetul sursei a crui dimensiune este N :

(4.1)
 
[S] = s1 s2 ... sN .
Aceste mesaje si sunt puse n coresponden biunivoc cu tot attea cuvinte de cod ci avnd
lungimile li . Lungimea li a unui cuvnt de cod ci este dat de numrul de simboluri xi din
structura sa. Pentru construcia acestor cuvinte de cod se folosesc literele xi ale unei surse
secundare, care aparin alfabetului ce conine D litere:

(4.2)
 
[X] = x1 x2 ... xD
cu probabilitile P [X] = p (x1 ) p (x2 ) . . . p (xD ) .
 

Pentru a evalua performanele codului

(4.3)
 
[C] = c1 c2 ... cN

1
2 Lucrarea 4

se denete lungimea medie a cuvintelor de cod:


N
(4.4)
X
l= p (si ) li .
i=1

Valoarea minim a acestei mrimi, pentru o distribuie dat a probabilitilor sursei primare,
se obine atunci cnd probabilitile simbolurilor sursei secundare sunt egale ntre ele; ea este
dat de relaia:
H (S)
lmin = . (4.5)
log2 D
unde H (S) reprezint entropia sursei, calculat cu formula:
N
(4.6)
X
H (S) = p (si ) log2 p (si ).
i=1

Este de dorit ca lungimea medie l s e ct mai apropiat de lmin i, n consecin, eciena


unui cod este denit ca:
lmin
= . (4.7)
l
Atunci cnd eciena unui cod are valoarea 1, se spune c acesta este absolut optimal, iar
dac eciena sa are valoarea maxim posibil, dar este subunitar, se spune c este optimal.
n cazul general, al unei distribuii oarecare de probabiliti ale simbolurilor sursei primare,
prin procedeul Human se obine un cod optimal, iar dac aceste probabiliti sunt puteri ne-
gative ale lui 2, se obine un cod absolut optimal.
Redundana unui cod este dat de relaia:
= 1 . (4.8)
Pentru ca un cod fr prex s existe, trebuie s e ndeplinit inegalitatea Kraft-McMillan:
N
(4.9)
X
K= Dli 1.
i=1

Aceast relaie exprim condiia sucient pentru un cod fr prex i condiia necesar
pentru un cod unic decodabil.
Dac relaia este ndeplinit cu inegalitate, atunci codul are redundan, iar dac este ndepli-
nit cu egalitate, atunci codul este un cod fr redundan. Dac inegalitatea nu este indeplinit,
atunci codul nu este unic decodabil.
Un cod optimal fr prex are urmtoarele proprieti:
1. Simbolurile cu probabilitatea cea mai mare vor corespunde cuvintelor de cod cele mai
scurte. Pentru p (si ) > p (sj ) , rezult li lj .
2. Ultimele D simboluri cu cea mai mic probabilitate vor corespunde unor cuvinte de cod de
lungime egal.
Codul Human se creeaz dup urmtorul algoritm:
Procedeul de codare Human 3

1. Se ordoneaz simbolurile sursei primare n ordine descresctoare a probabilitilor: p (s1 )


p (s2 ) . . .
2. Ultimele D simboluri (unde D este dimensiunea alfabetului codului) cu cele mai mici
probabilti se grupeaz ntr-un simbol articial ce are probabilitatea egal cu suma pro-
D
babilitilor simbolurilor grupate: p (r1 ) = p(si ).
P
i=1

3. Fiecrui simbol din grupul anterior r1 i se atribuie un simbol din alfabetul codului.
4. Se obine o surs restrns cu N D + 1 simboluri.
5. Se repet paii 1 i 2 pentru sursele restrnse astfel obinute, pn cnd se obine o surs
restrns cu D simboluri.
6. Cuvntul de cod pentru ecare simbol este obinut prin parcurgerea simbolurilor atribuite
grupurilor, n sens opus restrngerii (echivalent cu parcurgerea unui arbore de la nodul
rdcin ctre frunze).
Exemplu: Se consider o surs discret de informaie cu urmtoarea distribuie de proba-
biliti:
 
P (S) = 0.3 0.1 0.05 0.25 0.2 0.1 .
Sursa va  codat cu ajutorul algoritmului Human binar (D = 2) si Human ternar (D = 3).
a. Codarea binar (D = 2)

Sursa primar Sursa R1 Sursa R2


si p (si ) ci si p (si ) ci si p (si ) ci
s1 0.3 00 s1 0.3 00 s1 0.3 00
s4 0.25 01 s4 0.25 01 s4 0.25 01
s5 0.2 11 s5 0.2 11 r2 0.25 10
s2 0.1 101 r1 0.15 100 s5 0.2 11
s6 0.1 1000 s2 0.1 101
s3 0.05 1001

Sursa R3 Sursa R4
si p (si ) ci si p (si ) ci
r3 0.45 1 r4 0.55 0
s1 0.3 00 r3 0.45 1
s4 0.25 01
Tabelul 4.1: Codarea Human binar

n exemplul anterior, simbolurile ngroate sunt cele care se combin pentru a forma simbolul
articial ri , aat subliniat.
Entropia sursei este calculat cu ajutorul relaiei (4.6):
H (S) = 2.366 [biti/simbol].
4 Lucrarea 4

Lungimea medie a cuvintelor de cod, calculat cu formula (4.4) este:

l = 2.40 [biti],

iar lungimea medie minim, calculat cu relaia (4.5) este:

lmin = 2.366 [biti].

n aceste condiii, eciena codului este, conform relaiei (4.7):

= 0.956.

n acest caz, relaia Kraft-McMillan (4.9) este ndeplinit cu egalitate:

K = 1.

ntruct relaia Kraft-McMillan este ndeplinit cu egalitate, codul este optimal, i niciun alt
algoritm nu poate obine o eciena mai ridicat.

b. Codarea ternar (D = 3)
Pentru a realiza codarea ternar i, n general, codarea n-ar, trebuie ca ultima surs restrns
s genereze exact D simboluri. Dup n pai de restrngere, o surs va genera N nD + n
simboluri.
Dac dup n restrngeri, sursa trebuie s genereze D simboluri, atunci trebuie s e ndeplinit
urmtoarea relaie:

D = (N nD) + n,

de unde rezult urmtoarea relaie:

N D
n= . (4.10)
D1

n mod evident, numrul de restrngeri este ntotdeauna natural (n N).


Pentru a ndeplini aceast condiie, n cazul codrii n-are poate  necesar adugarea de
simboluri articiale sursei primare, astfel nct s e ndeplinit aceast condiie.
Pentru sursa propus, se cunoate N = 6, D = 3. Atunci:

63 3
n= = / N.
31 2

Se va aduga un simbol articial s7 cu probabilitatea p (s7 ) = 0, astfel nct N = 7, i atunci:

73
n= = 2 N.
31
Procedeul de codare Human 5

Sursa primar Sursa R1 Sursa R2


si p (si ) ci si p (si ) ci si p (si ) ci
s1 0.3 1 s1 0.3 1 r2 0.45 0
s4 0.25 2 s4 0.25 2 s1 0.3 1
s5 0.2 00 s5 0.2 00 s4 0.25 2
s2 0.1 02 r1 0.15 01
s2 0.1 010 s2 0.1 02
s6 0.05 011
s7 0 012
Tabelul 4.2: Codarea Human ternar

Pentru a analiza performanele codului, se vor calcula aceleai mrimi ca n cazul codrii
binare.
Entropia sursei primare rmne neschimbat, ea depinznd doar de probabilitile simbolurilor
sursei:

H (S) = 2.366 [biti/simbol].


Lungimea medie a cuvintelor de cod, calculat cu formula (4.4), va :
l = 1.95 [biti],
iar lungimea medie minim, calculat cu relaia (4.5) este:
lmin = 1.493 [biti].

Eciena codului, calculat conform relaiei (4.7) este:


= 0.765.

Din relaia (4.9) rezult c ecuaia Kraft-McMillan este egal cu:


K = 0.667.

Pentru codarea ternar, ecuaia Kraft-McMillan este indeplinit cu inegaliate, ceea ce n-


seamn c acest cod are redundan.

4.3 Desfurarea lucrrii

n continuare vor  exemplicate i analizate performanele codurilor Human binare i ternare.


Cu ajutorul programului MATLAB se va naviga n directorul aplicaiei, unde se a funciile
necesare. Aplicaia va consta n 3 etape:
1. Crearea dicionarului cuvintelor de cod i analiza performane-lor codului (funcia huffman_table.m)
2. Codarea unui ir de caractere sau a unui semnal generat aleator cu ajutorul dicionarului
creat la pasul anterior (funcia huffman_encode.m)
3. Decodarea irului recepionat cu ajutorul dicionarului creat la primul pas (funcia huffman_decode.m)
Pentru modul de utilizare al ecrei funcii, se va rula n consola MATLAB comanda help ...
nume_functie.
6 Lucrarea 4

4.3.1 Codarea Human binar


1. Se va rula funcia huffman_table pentru urmtoarele exemple:

 
1/2 1/4 1/8 1/16 1/16

huffman_table ( [1/2 , 1/4 , 1/8 , 1/16 , 1/16] );


 
14 5 12 7 12 10 20

huffman_table ( [14 , 5, 12 , 7, 12 , 10 , 20] );

'ana are mere'

huffman_table ( ' ana a r e mere ' );

Numele si prenumele dvs.

huffman_table ( ' nume prenume ' );

Pentru ecare exemplu se va urmri formarea codului i se va completa urmtorul tabel:

si p (si ) ci li H (S) l lmin Kraft-McMillan

Tabelul 4.3: Codarea Human binar

2. Pentru ecare cod obinut, se va realiza o codare, folosind functia huffman_encode, astfel:
Pentru primele dou exemple se va genera un sir aleator cu lungimea de 10 caractere.

[ s i g , enc_s , enc_v , dict ] = huffman_encode ( [1/2 , 1/4 , 1/8 , 1/16 , ...


1/16] ) ;

[ s i g , enc_s , enc_v , dict ] = huffman_encode ( [14 , 5, 12 , 7, 12 , 10 , ...


20] ) ;

Se va rula al doilea exemplu pentru un semnal aleator cu lungime de 50 de caractere


i se vor vizualiza rezultatele.

[ s i g , enc_s , enc_v , dict ] = huffman_encode ( [14 , 5, 12 , 7, 12 , 10 , ...


2 0 ] , 2 , 50 ) ;

Pentru exemplele 3 i 4 se va folosi sirul de caractere utilizat pentru crearea diciona-


rului.

[ sig , enc_s , enc_v , dict ] = huffman_encode ( ' ana a r e mere ' );

[ sig , enc_s , enc_v , dict ] = huffman_encode ( ' nume prenume ' );


Procedeul de codare Human 7

3. Decodarea irului obinut la pasul anterior se va face cu ajutorul funiei huffman_decode.


Se va verica n acest fel c mesajul original poate  reconstruit ct timp dicionarul codului
este cunoscut att de emitor ct i de receptor.
Pentru ecare exemplu de la pasul 2 se va executa funcia huffman_decode cu urmtorii
parametri:

[ dec_s , dec_v ] = huffman_decode ( enc_v , dict );

4.3.2 Codarea Human ternar


Pentru codarea ternar se vor repeta paii urmai n cazul codrii binare i se vor nota rezultatele.

si p (si ) ci li H (S) l lmin Kraft-McMillan

Tabelul 4.4: Codarea Human ternar

Pentru a rula codarea ternar, funcia huffman_table va  apelat astfel:

huffman_table ( [1/2 , 1/4 , 1/8 , 1/16 , 1/16] , 3 );

huffman_table ( [14 , 5, 12 , 7, 12 , 10 , 20] , 3 );

huffman_table ( ' ana a r e mere ' , 3 );

huffman_table ( ' nume prenume ' , 3 );

Pentru a aa irul codat, se va folosi funcia huffman_encode, iar pentru vericare se va
folosi funcia huffman_decode:

[ s i g , enc_s , enc_v , d i c t ] = huffman_encode ( [ 1 / 2 , 1/4 , 1/8 , 1/16 , 1/16] , 3 );


[ dec_s , dec_v ] = huffman_decode ( enc_v , d i c t ) ;

[ s i g , enc_s , enc_v , d i c t ] = huffman_encode ( [ 1 4 , 5, 12 , 7, 12 , 10 , 20] , 3 );


[ dec_s , dec_v ] = huffman_decode ( enc_v , d i c t ) ;

[ s i g , enc_s , enc_v , d i c t ] = huffman_encode ( ' ana a r e mere ' , 3 );


[ dec_s , dec_v ] = huffman_decode ( enc_v , d i c t );

[ s i g , enc_s , enc_v , d i c t ] = huffman_encode ( ' nume prenume ' , 3 );


[ dec_s , dec_v ] = huffman_decode ( enc_v , d i c t ) ;

4.4 ntrebri i exerciii

1. Care sunt proprietile codurilor Human?


2. n ce fel este realizat compresia datelor folosind algoritmul Human? Exemplicai.
3. Ce informaie ofer inegalitatea Kraft-McMillan despre codul format?
8 Lucrarea 4

4. Din valorile obinute pentru inegalitatea Kraft-McMillan, ce concluzie putei trage despre
codurile Human?
5. Se poate obine, printr-un alt algoritm, un cod cu o ecien mai bun dect codul Human
binar (considernd codarea simbol cu simbol)? Dar dect cel ternar? Explicai.
6. Se poate obine un cod binar cu ecien egal cu 1 ( = 1)? n ce condiii? Dar un cod
ternar?

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