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.
(! )!
=
!!!
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:
=
!"#
!!! 1
!!!
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
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;
simbol')
linie a dictionarului.
simbol')
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
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
0.04
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.