Aplicatii Tci

Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 88

Gheorghe M.

Panaitescu

Aplicatii la disciplina
TRANSMITEREA ŞI CODAREA
INFORMATIEI

Universitatea Petrol-Gaze Ploiesti


2009

1
2
CUVÂNT ÎNAINTE

Volumul acesta este o colectie de aplicatii dezvoltate/propuse în sprijinul


întelegerii depline a disciplinei Transmiterea si codarea informatiei predate
anului II de la specializarea Electronică.

În parte, aplicatiile sunt produse de subsemnatul. Partea majoritarǎ însǎ este


preluatǎ din literaturǎ. Au fost consultate câteva sute de probleme destinate
studentilor de pe alte meridiane, unele au fost retinute si au fost traduse si
adaptate pentru studentii pe care îi instruiesc.

Unele solutii la enunturile de împrumut – un împrumut fǎcut de cele mai multe


ori cu acordul autorilor de origine – sunt si ele împrumutate. Altele îmi apartin
sau le-am adaptat. Cum probabil cititorul se asteaptǎ, interventia mea în
rezolvǎri este de la caz la caz în proportii diferite si de aceea greu de cuantificat.
Dar acesta este un fapt cu totul secundar.

Unele aplicatii selectate/propuse se pot trata/rezolva pe cale exclusiv analiticǎ.


Altele necesitǎ recursul la calculator. De aceea sunt propuse ici si colo unele
secvente sau chiar programe/scrípturi Matlab în ideea ca studentii sǎ nu
risipeascǎ prea mult timp cu elaborarea unor programe proprii, ci sǎ se
concentreze mai curând asupra problemei si asupra solutiilor obtinute. Cu toate
acestea, nu este interzis ci recomandat ca secventele de program din aceastǎ
lucrare sǎ fie ameliorate sau chiar înlocuite cu altele noi, mai performante.

Multe aplicatii au solutii complete. Altele au solutiile numai schitate. Sunt si


aplicatii care sunt prezente în acest volum numai ca enunturi. Ofer astfel
studentilor sansa de a rezolva prin forte proprii probleme în domeniul acesta
atât de cuprinzǎtor al transmiterii si codǎrii informatiei.

Suportul teoretic in extenso poate fi gǎsit si consultat pe site-ul catedrei


Automaticǎ si calculatoare: http://ac.upg-ploiesti.ro/gpanaitescu/tci.pdf . Tot
acolo sunt fǎcute si alte trimiteri bibliografice care completeazǎ si adâncesc
unele subiecte.

Asa cum am spus, lucrarea este dedicatǎ studentilor de anul II de la Electronicǎ.


Consider însǎ cǎ este utilǎ si studentilor de la specializarea Automaticǎ si de la
specializarea Calculatoare. Sper cǎ si ei o vor gǎsi utilǎ.

Autorul

3
4
CUPRINSUL

APLICATII DIN TEORIA PROBABILITǍTILOR 7

SURSE DE INFORMATIE 18

Lucrarea 1
Tema 1: Entropia surselor de informatie fără memorie.
Tema 2: Entropia surselor duble de informatie
Lucrarea 2
Tema: Entropia surselor de informatie markoviene.
Lucrarea 3
Tema: Entropia surselor de informatie Markov binare.

CANALE DE TRANSMITERE A INFORMATIEI 41

Lucrarea 4
Tema: Transinformatia si capacitatea canalelor.

CODAREA PENTRU CANALE FĂRĂ PERTURBATII 49

Lucrarea 5. Codarea Huffman


Tema 1: Algoritmul Huffman pentru coduri compacte
Tema 2: Un cod Huffman în acţiune
Lucrarea 6.
Tema: Codarea Aritmetică

CRIPTAREA 67

Lucrarea 7
Tema 1: Criptarea RSA
Tema 2: Criptarea cu curbe eliptice

CODAREA PENTRU CANALE CU PERTURBATII 75

Lucrarea 8
Tema 1: Codurile Hamming (corectoare de o eroare)
Tema 2: Codul Hamming (7,4) în acţiune

5
6
APLICATII DIN TEORIA PROBABILITǍTILOR

Problema 1.

Se alege la întâmplare o lunǎ a anului. Apoi, tot la întâmplare se alege o zi din


acea lunǎ (se admite cǎ anul nu este bisect).
c. Descrieti toate rezultatele (lunǎ, zi) care formeazǎ spatiul probelor pentru
acest experiment aleator.
d. Care este probabilitatea ca luna sǎ fie de 31 de zile?
e. Care este probabilitatea ca ziua aleasǎ sǎ fie între a zecea (inclusiv) si a
douǎzecea (inclusiv)?
f. Care este rǎspunsul la punctul c. dacǎ anul este bisect?
Solutie.
a. Se enumerǎ datele calendaristice sub formǎ de perechi lunǎ-zi (l, z).
b. Prin raportarea numǎrului de luni de 31 de zile (7) la numǎrul de luni ale
unui an, rezultǎ 7/12
c. Formula probabilitǎtii totale duce la rezultat:
Pr(10 ≤ z ≤ 20) = (11 / 28)(1 / 12) + (11 / 30)(4 / 12) + (11 / 31)(7 / 12)
Primul termen este pentru februarie, urmǎtorul pentru lunile de 30 de zile,
ultimul pentru lunile de 31 de zile.
d. Se modificǎ contributia lunii februarie: în loc de (11 / 28)(1 / 12) se pune
(11 / 29)(1 / 12) .

Problema 2.

Fie A, B evenimente produse de un acelasi experiment aleator. Dacǎ


probabilitatea ca cel putin unul din cele douǎ evenimente sǎ se producǎ este 0,7
si dacǎ probabilitatea ca cel putin unul din cele douǎ evenimente sǎ nu se
producǎ este 0,6, calculati probabilitatea ca exact unul dintre cele douǎ
evenimente sǎ se producǎ.
Solutie. Este de calculat
Pr(A∆B) = Pr[(A – B) ∪ (B – A)] = Pr(A) + Pr(B) – 2Pr(A ∩ B)
pentru diferenta simetricǎ A∆B.
Se scriu relatiile
Pr(A ∪ B) = Pr(A) + Pr(B) – Pr(A ∩ B) = 0,7
Pr( A ∪ B ) = Pr( A ) + Pr( B ) − Pr( A ∩ B ) = 0,6
Prin adunare se obtine
Pr( A) + Pr( A ) + Pr( B ) + Pr( B ) − Pr( A ∩ B ) − Pr( A ∩ B ) = 1,3

7
ceea ce echivaleazǎ cu
1 + 1 – Pr(A ∩ B) – Pr( A ∪ B ) = 1,3 (de Morgan)
si apoi
1 + 1 – Pr(A ∩ B) – (1 – Pr(A ∪ B)) = 1,3 (probabilitatea contrarului)
si mai departe
Pr(A ∩ B) = 2 – (1 – 0,7) – 1,3 = 0,4
Revenind la prima formulǎ (si la a doua) se obtine
Pr(A∆B) = Pr(A) + Pr(B) – Pr(A ∩ B) – Pr(A ∩ B) =
= Pr(A ∪ B) – Pr(A ∩ B) = 0,7 – 0,4 = 0,3

Problema 3.

Trei evenimente A, B, C asociate cu un anumit experiment aleator satisfac


relatiile urmǎtoare:
 P(A) = 0,25; P(B) = 0,2; P(C) = 0,25
 P(A ∩ B) = 0,1; P(A ∩ B ∩ C) = 0,05; P(A ∩ C) = 2P(B ∩ C)
 Probabilitatea ca cel putin douǎ din evenimentele A, B, C sǎ se producǎ este
0,3
a. Calculati probabilitatea ca nici unul dintre cele trei evenimente sǎ nu se
producǎ.
b. Calculati probabilitatea ca sǎ se producǎ exact unul dintre cele trei
evenimente
Solutie. Propozitia a treia a enuntului spune cǎ
P[A ∩ B) ∪ (A ∩ C) ∪ (B ∩ C)] = 0,3
Dezvoltatǎ, aceastǎ relatie conduce la
P(A ∩ B) + P(A ∩ C) + P(B ∩ C) – 2P(A ∩ B ∩ C) = 0,3 (v.figura)

A B

Fig.1. O posibilitate de a judeca cu arii în loc de probabilitǎti

Prin înlocuirea datelor numerice se obtine


P(A ∩ C) + P(B ∩ C) = 0,3 – 0,1 + 2.0,05 = 0,3
care alǎturi de
P(A ∩ C) = 2P(B ∩ C)
permite evaluarea lui P(A ∩ C) = 0,2 si a lui P(B ∩ C) = 0,1.
Acum se poate trece la evaluǎrile cerute de problemǎ.

8
a. Trebuie calculatǎ probabilitatea
P ( A ∩ B ∩ C ) = P( A ∪ B ∪ C ) = 1 − P ( A ∪ B ∪ C )
Dar probabilitatea
P(A ∪ B ∪ C) = P(A) + P(B) + P(C) – P(A ∩ B) – P(A ∩ C) – P(B ∩ C) +
+ P(A ∩ B ∩ C)
este deplin calculabilǎ din datele problemei.
b. Trebuie calculatǎ probabilitatea
P[(A – B ∪ C) ∪ (B – A ∪ C) ∪ (C – A ∪ B)]
pentru o reuniune de evenimente douǎ câte douǎ mutual incompatibile.
Rezultatul este suma probabilitǎtilor celor trei evenimente. Se evalueazǎ ca
exemplu una din ele
P ( A − B ∪ C ) = P[ A ∩ ( B ∪ C )] =
= P[ A ∩ ( B ∩ C )] = P( A ∩ B ∩ C ) = P ( A ∪ B ∪ C )
Calculul probabilitǎtii de mai sus trece prin relatia cunoscutǎ (si de la
punctul a.)
P( A ∪ B ∪ C) = P( A ) + P(B) + P(C) – P( A ∩ B) – P( A ∩ C) – P(B ∩ C) +
+ P( A ∩ B ∩ C)
Dar
P( A ∩ B) + P(A ∩ B) = P(B)
din motive de incompatibilitate mutualǎ a celor douǎ evenimente A ∩ B, A
∩ B si pentru cǎ ( A ∩ B) ∪ (A ∩ B) = B. În relatia ultimǎ existǎ un singur
termen necunoscut: P( A ∩ B).
Analog se evalueazǎ P( A ∩ C) si P( A ∩ B ∩ C) care, ca si P( A ∩ B) se
înlocuiesc în fromula pentru P ( A ∪ B ∪ C ) .
Rezultǎ imediat P ( A ∪ B ∪ C ) .
Asemǎnǎtor se evalueazǎ si ceilalti termeni din probabilitatea cerutǎ.

Problema 4.

Se aruncǎ douǎ zaruri, unul corect, altul incorect. Cel incorect are probabilitǎtile
fetelor 1, 2, 3, 4, 5, 6 nu egale ci în relatia P(1) = P(2) = P(3) = 2P(4) = 2P(5) =
2P(6). Fie X variabila aleatoare care ia valorile de pe zarul corect si Y variabila
aleatoare care ia valori conform zarului incorect.
a. Scrieti un program Matlab care sǎ genereze doi vectori x, y, fiecare cu câte
10.000 de elemente obtinute prin simularea variabilelor X respectiv Y.
b. Fie Z variabila aleatoare Z = X – Y. Valorile posibile ale lui Z sunt 0, ±1, ±2,
±3, ±4, ±5. Utilizati vectorul z = x – y si functia Matlab “mean” pentru a
aproxima probabilitǎtile P(Z = 0), P(Z = ±1), P(Z = ±2), P(Z = ±3), P(Z =
±4), P(Z = ±5). Faceti o diagramǎ P(Z = z) cu z în abscisǎ, pentru z = 0, ±1,
±2, ±3, ±4, ±5.
c. Fie S o secventǎ de 36 de perechi (i, j), cu i = 1, 2, 3, 4, 5, 6 valori ale
variabilei aleatoare X, cu j = 1, 2, 3, 4, 5, 6 valori ale variabilei aleatoare Y.

9
În altǎ exprimare X(i, j) = i, Y(i, j) = j pentru oricare din perechile (i, j) ∈ S.
Fie evenimentul Z = 4. Scrieti toate rezultatele (i, j) care formeazǎ
evenimentul Z = 4. Calculati prin rationament probabilitatea P(Z = 4) si
comparati cu aproximarea pentru P(Z = 4) obtinutǎ la punctul b. prin
Matlab.
Solutie. Mai întâi, dacǎ fetele zarului corect sunt echiprobabile, toate fetele
având aceeasi probabilitate de 1/6, la zarul incorect se rezolvǎ ecuatia 2x + 2x +
2x + x + x + x = 1 din care rezultǎ probabilitǎtile pentru fiecare fatǎ: 2/9, 2/9,
2/9, 1/9, 1/9, 1/9, respectiv pentru Y = 1, 2, 3, 4, 5, 6.
a. Aici se scrie programul Matlab. Nu sunt dificultǎti majore.
b. Probabilitǎtile cerute se evalueazǎ prin inventarierea efectivǎ a
cazurilor. De pildǎ, Z = ±4 se obtine în cazul perechilor (1, 5’), (2, 6’) (5,
1’) si (6, 2’) (cifrele fǎrǎ accent sunt obtinute pe zarul corect, cele cu accent
pe zarul incorect). Probabilitǎtile perechilor sunt respectiv (1/6)(1/9), (1/6)
(1/9), (1/6)(2/9), (1/6)(2/9) ca produs de probabilitǎti ale unor evenimente
independente. Probabilitatea P(Z = ±4) este suma acestor probabilitǎti
(perechile enumerate sunt mutual incompatibile), adicǎ 1/9. La fel se
calculeazǎ si alte probabilitǎti cerute prin enunt.
c. La acest punct se recomandǎ iarǎsi apelul la facilitǎtile Matlab-ului.

Problema 5.

Fie o secventǎ de date {x1, x2, …, xn} în care fiecare xi provine din multimea {1,
2, 3, 4}. Din aceste date se poate construi un asa-numit model predictiv care
constǎ în 16 probabilitǎti conditionate p(j/i), i, j = 1, 2, 3, 4 calculate în modul
descris mai jos. Pentru fiecare pereche (i, j) fie N(i) numǎrul de întregi 1 ≤ m ≤
n – 1 pentru care xm = i, si fie N(i, j) numǎrul de întregi 1 ≤ m ≤ n – 1 astfel
încât (xm, xm+1) = (i, j). Probabilitatea conditionatǎ cǎutatǎ este
N (i, j )
p( j / i) =
N (i )
a. Fie x o secventǎ de date pseudoaleatoare de lungime 1000 generatǎ de
urmǎtorul script Matlab:

a=0; b=0;
x=[ ];y=[ ];
for i=1:1000
sample=ceil(4*rand(1,1));
if sample==1
w1=0;w2=1;w3=1;w4=1;
elseif sample==2
w1=1;w2=0;w3=1;w4=1;
elseif sample==3
w1=1;w2=1;w3=0;w4=1;
else
w1=1;w2=1;w3=1;w4=0;
end
if a+w3<b+w4

10
xtemp=[x 1];
else
xtemp=[y 2];
end
if a+w1<b+w2
xtemp=[x 3];
else
xtemp=[y 4];
end
x=xtemp;
y=ytemp;
atemp=min(a+w1,b+w2);
btemp=min(a+w3,b=w4);
a=atemp;
b=btemp;
end

(Nu are pentru moment importantǎ semnificatia acestui script. El


implementeazǎ o tehnicǎ de codare denumitǎ “cuantizarea codatǎ trellis”).
Utilizati Matlab-ul pentru a calcula modelul predictiv p(j|i) pentru secventa
x. Exprimati rǎspunsul ca o matrice de probabilitǎti conditionate 4×4, cu
suma pe fiecare linie egalǎ cu unitatea.
b. Pentru modelul predictiv p(j|i) stabilit la punctul anterior, care este cel mai
probabil j dacǎ i = 1? Care este cel mai probabil j dacǎ i = 2? Care este cel
mai probabil j dacǎ i = 3? Care este cel mai probabil j dacǎ i = 4? (Indicatie:
la punctul b. se încearcǎ a se gǎsi valori pentru fiecare linie a matricei 4×4
de la a. care este cea mai mare valoare în acea linie).
c. Fie din nou x = (x1, x2, …, x1000) secventa generatǎ la a. Se presupune cǎ se
utilizeazǎ modelul predictiv în modul descris mai jos pentru a ajunge la
secventa de predictie pentru termenii din x, ( xˆ1 , xˆ 2 ,, xˆ1000 ) . Se ia prima
predictie ca fiind xˆ1 = x1 . Pentru 1 < m ≤ 1000, se iau predictiile x̂ m pentru
xm ca j ∈ {1, 2, 3, 4} pentru care p(j|xm – 1) este cea mai mare (vezi b.).
Utilizati Matlab pentru a genera secventa de predictii ( xˆ1 , xˆ 2 ,, xˆ1000 )
potrivit cu aceastǎ regulǎ de predictie. Calculati probabilitatea empiricǎ a
erorii de predictie. (Cu alte cuvinte, numǎrati pentru câti de m, 1 < m ≤ 1000
este adevǎrat cǎ x̂ m ≠ xm si apoi împǎrtiti cu 1000).

Problema 6.

Fie Y o variabilǎ aleatoare caracterizatǎ astfel: Pr(Y = 1) = 0,25, Pr(Y = 2) =


0,25, Pr(Y = 3) = 0,50.
a. Reprezentati grafic asa-numita functie de probabilitate pY(y).
b. Calculati Pr(Y < 1), Pr(Y ≤ 1), Pr(Y > 2) si Pr(Y ≥ 2).
c. Calculati Pr(1 ≤ Y ≤ 3), Pr(1 ≤ Y < 3), Pr(1 < Y ≤ 3) si Pr(1 < Y < 3).

11
Problema 7.

Comutatoarele 1, 2, 3 opereazǎ corect cu probabilitǎtile 0,88, 0,92, respectiv


0,90. Ele opereazǎ independent.
a. Aflati probabilitatea ca un curent sǎ circule de la A la B în circuitul de mai
jos.

A 1 B

b. Aflati probabilitatea ca un curent sǎ circule de la A la B în circuitul de mai


jos.

1 2

A B

Problema 8. Formula lui Bayes.

O companie producǎtoare de automobile produce marca Lǎstun 2009 în patru


locatii diferite: I, II, III si IV. Se presupune cǎ 20% din acestea sunt produse la
fabrica I, 23% sunt produse la fabrica II, 27% sunt produse la fabrica III si
restul la fabrica IV. Se presupune de asemenea cǎ 5% din masinile produse în
locatia I trebuie recuperate pentru remedieri, la fel 6% din cele produse în
locatia II, 3% din cele produse în locatia III si 8% din cele produse în locatia
IV.
a. Care este probabilitatea ca un Lǎstun 2009 ales la întâmplare sǎ fie
rechemat pentru remedieri?
b. Stiind cǎ un automobil a fost rechemat pentru remedieri, calculati
probabilitatea conditionatǎ ca el sǎ fie produs la fabrica I (II, III sau IV)
c. Stiind cǎ un automobil nu trebuie rechemat pentru remedieri, calculati
probabilitatea conditionatǎ ca el sǎ fie produs la fabrica I (II, III sau IV)

12
Problema 9.

Se dau douǎ cutii. Cutia 1 contine 10 cǎrti din care 3 sunt marcate fiecare cu
numǎrul “1” si celelalte 7 sunt narcate cu numǎrul “2”. Cutia 2 contine 15 cǎrti
din care 9 sunt marcate cu “1”, iar restul de 6 sunt marcate cu “2”.
Se executǎ urmǎtorul experiment aleator, în trei pasi. La pasul 1 se alege aleator
echiprobabil o cutie si apoi se alege aleator o carte din acea cutie; numǎrul de
pe carte (1 sau 2) este înregistrat – sǎ-i spunem numǎrul N1. La pasul 2, se alege
la întâmplare o carte din cutia N1 si numǎrul de pe carte este notat – fie acesta
N2. La pasul 3 se alege tot aleator din cutia N2 si numǎrul de pe carte se noteazǎ
– fie acela N3. Se considerǎ ca spatiu al esantioanelor pentru acest experiment
multimea tuturor valorilor triple (N1, N2, N3). Sunt 8 rezultate posibile în spatiul
esantioanelor. Folositi teorema multiplicǎrii ca ajutor în a calcula probabilitatea
fiecǎruia din cele 8 rezultate, în cazurile urmǎtoare:
a. În cazul când cartea este totdeauna pusǎ înapoi în cutia din care a fost aleasǎ
înainte de alegerea unei alte cǎrti.
b. În cazul când o carte este totdeauna pusǎ înapoi, dar în cealaltǎ cutie.
c. Sǎ presupunem cǎ primul caz (a.) prevaleazǎ. Calculati probabilitǎtile Pr(N3
= 1) si Pr(N3 = 2).

Problema 10.

Se presupune cǎ pachetele de biti sosesc la un server Internet de rutare la o ratǎ


medie de 2,3 pachete pe milisecundǎ.
a. Fie X numǎrul de pachete de mesaje care sosesc într-un interval de 10
milisecunde. Calculati probabilitǎtile Pr(X ≥ 22) si Pr(17 ≤ X ≤ 25)
(Indicatie: X este o variabilǎ aleatoare poissonianǎ).
b. Se presupune cǎ serverul de rutare ruteazǎ pachetele pe care le primeste în
modul urmǎtor: mai întâi intervalul este fragmentat în 10 subintervale de o
milisecundǎ; apoi primul pachet sosit (dacǎ soseste vreunul) în fiecare
subinterval de o milisecundǎ este rutat si pachetele sosite rǎmase nu sunt
rutate (sunt distruse, de pildǎ). Fie Y numǎrul total de pachte rutate de server
în intervalul de 10 milisecunde. Calculati Pr(Y = 8) si Pr(6 < Y < 10).
(Indicatie: Y nu are o distributie Poisson ci are o distributie binomialǎ).
c. Se presupune cǎ serverul de rutare ruteazǎ pachetele pe care le primeste în
10 milisecunde în modul urmǎtor: mai întâi intervalul este fragmentat în 10
subintervale de o milisecundǎ; apoi primul si al doilea pachet care sosesc
(dacǎ sosesc) în fiecare milisecundǎ sunt rutate, iar celelalte pachete care
sosesc (dacǎ sosesc) sunt distruse. Fie Z numǎrul total de pachete rutate de
server îtr-un interval de 10 milisecunde. Estimati Pr(Z = 16) si Pr(14 ≤ Z ≤
18) utilizând 10.000 de observatii asupra lui Z simulate (Matlab). (Vor fi
numai niste valori estimate).

13
Problema 11.

Mary, Bill si Joe joacǎ jocul urmǎtor cu o monedǎ corectǎ (cel ce pierde dǎ un
rând de beri): mai întâi Mary aruncǎ moneda – dacǎ obtine cap câstigǎ jocul;
altminteri Bill aruncǎ si el moneda – dacǎ obtine cap câstigǎ jocul; altminteri
Joe aruncǎ si el moneda – dacǎ obtine cap câstigǎ jocul. Dacǎ nimeni nu câstigǎ
jocul la primul tur de aruncǎri se procedeazǎ la alte tururi identice cu primul
pânǎ când cineva câstigǎ jocul.
a. Fie Z o variabilǎ aleatoare geometricǎ cu parametrul p = 1/2. Stabiliti o
partitie de întregi pozitivi în trei submultimi E1, E2, E3 astfel încât
probabilitǎtile evenimentelor {Z ∈ E1}, {Z ∈ E2}, {Z ∈ E3} sǎ mǎsoare
sansele ca jocul sǎ fie câstigat de Mary, de Bill, respectiv de Joe.
b. Calculati probabilitǎtile ca Mary sǎ câstige jocul, ca Bill sǎ câstige jocul, ca
Joe sǎ câstige jocul (respectiv) uzând de distributia geometricǎ.

Problema 12. Functii de repartitie

Se genereazǎ un tabel de valori ale unei functii de repartitie si se utilizeazǎ


pentru a calcula eficient probabilitǎti.
a. Rulati programul Matlab care urmeazǎ pentru a genera un vector de valori
ale functiei de repartitie pentru o variabilǎ aleatoare X distribuitǎ binomial
cu parametrii n = 13 si p = 0,3.
s=1;
n=13;
p=0.3;
for i=1:n
v1=[0 s];
v2=[s 0];
s=p*v1+(1-p)*v2;
end
cdf_values=cumsum(s);

Afisati sub formǎ de tabel cele 14 valori ale functiei de repartitie FX(x)
pentru x = 0, 1, 2, …, 13. Calculati probabilitatea Pr(X > 2) printr-o singurǎ
cǎutare în tabel. Calculati probabilitatea Pr(2 ≤ X ≤ 5) prin numai douǎ
cǎutǎri în tabel.
b. Executati programul Matlab urmǎtor pentru a genera un vector cu primele
18 valori ale functiei de repartitie a variabilei aleatoare Y distribuitǎ dupǎ o
lege Poisson cu parametrul λ = 5,7.
lambda=5.7;
s(1)=1;
for k=1:17
s(k+1)=lambda*s(k)/k;
end
y=exp(-lambda)*s;
cdf_values=cumsum(y);

14
Afisati sub formǎ de tabel cele 18 valori ale functiei FY(y) pentru y = 0, 1, 2,
…, 17. Calculati probabilitatea Pr(X ≥ 4) printr-o singurǎ cǎutare în tabel.
Calculati probabilitatea Pr(2 < X < 5) prin numai douǎ cǎutǎri în tabel.

Problema 13.

Fie U o variabilǎ aleatoare distribuitǎ uniform pe intervalul [2, 13]. Utilizând


sintaxa Matlab, se poate defini o variabilǎ aleatoare Z astfel:
Z = (U < 4) + (U < 7) + (U < 8) + (U < 11)
Z este o variabilǎ aleatoare discretǎ care ia valorile 0, 1, 2, 3, 4. Stabiliti functia
de probabilitate pentru variabila Z (calculati pZ(z) pentru z = 0, 1, 2, 3, 4).

Problema 14. Distributia exponentialǎ si distributia gaussianǎ

a. Fie X o variabilǎ aleatoare distribuitǎ exponential cu parametrul λ = 0,5.


Calculati Pr(1 ≤ X ≤ 2) si Pr(X ≥ 1,5) prin integrarea functiei densitate de
probabilitate.
b. Se dǎ o variabilǎ aleatoare normalǎ (gaussianǎ) T cu media 10 si dispersia
225. Calculati Pr(T > 32), Pr(T < 0) si Pr(T > 60) în douǎ moduri: (i) prin
utilizarea tabelelor cu valori ale functiei de repartitie gaussiene; (ii) prin
utilizarea functiei Matlab erf.

Problema 15. Cuantizor

Fie X o variabilǎ aleatoare continuǎ cu densitatea de probabilitate fX(x) de forma


C (3− | x |) − 3 ≤ x ≤ 3
f X ( x) = 
 0 în rest
cu C o constantǎ pozitivǎ. Forma generalǎ a unui cuantizor pentru X, Q(x), pe
douǎ niveluri este
− B − 3≤ x ≤ 0
Q(x) = 
 B 0< x≤ 3
cu B o constantǎ între 0 si 3.
a. Determinati valoarea unicǎ C care face din fX(x) o densitate de probabilitate.
b. Se pune în cuantizorul Q(x), B = 1,5 (astfel B este punctul median al
intervalului [0, 3] si Q(x) se numeste cuantizorul uniform pe douǎ niveluri
pentru X). Calculati E[(X – Q(x))2| – 3 ≤ X ≤ 0], E[(X – Q(x))2| 0 < X ≤ 3] si
E[(X – Q(x))2]. (Cantitatea ultimǎ este eroarea de cuantizare medie
pǎtraticǎ rezultatǎ la utilizarea lui Q(x) pentru a cuantiza pe X.).
c. Calculati E[(X | 0 < X ≤ 3]. Acum luati B = E[(X | 0 < X ≤ 3] în cuantizorul
Q(x). Calculati E[(X – Q(x))2| – 3 ≤ X ≤ 0], E[(X – Q(x))2| 0 < X ≤ 3] si E[(X
– Q(x))2]. Este eroarea de cuantizare E[(X – Q(x))2] mai micǎ decât cea
calculatǎ la punctul b.? (Ar trebui sǎ fie).

15
Problema 16.

Fie X o variabilǎ aleatoare binomialǎ cu n = 45 si p = 1/3 si fie Y o variabilǎ


aleatoare poissonianǎ cu λ = 10. Se presupune cǎ cele douǎ variabile sunt
corelate într-un mod necunoscut (adicǎ X si Y nu sunt independente). Se
presupune cǎ din suficient de multe observatii ale valorilor X si Y s-a stabilit cu
un înalt grad de încredere cǎ Var(X + Y) = 200.
a. Care sunt mediile si dispersiile pentru fiecare din variabilele aleatoare X si
Y?
b. Calculati E(XY). (Indicatie: Se scrie Var(X + Y) = E[(X + Y)2] – [E(X) +
E(Y)]2 etc.)

Problema 17.

O variabilǎ aleatoare R are functia densitate de repartitie urmǎtoare (distributia


Rayleigh)
 re − r / 2 r ≥ 0
2

f R (r ) = 
 0 în rest
Media si dispersia sunt date de relatiile E[R] = π / 2 , Var[R] = 2 – π/2.
a. Dacǎ U este o variabilǎ aleatoare uniform distribuitǎ între 0 si 1, stabiliti o
transformare R = φ(U) astfel încât R sǎ aibǎ densitatea de probabilitate fR(r).
b. Utilizând transformarea de la punctul a., scrieti un program Matlab simplu
care sǎ genereze un vector de 10.000 observatii simulate ale valorilor lui R.
Utilizati functiile Matlab mean si var pe vectorul generat pentru a obtine
estimatii ale mediei E[R] si dispersiei Var[R] date mai sus. Sunt estimǎrile
obtinute estimǎri bune?
c. Se cunoaste cǎ dacǎ variabilele aleatoare X, Y sunt repartizate normal cu
media 0 si dispersia 1, atunci R = X 2 + Y 2 are densitatea de probabilitate
fR(r). Uzând de acest fapt, scrieti un alt program simplu Matlab care sǎ
genereze un vector de 10.000 de observatii simulate asupra lui R. Utilizati
functiile Matlab mean si var pe vectorul generat pentru a obtine estimatii
ale mediei E[R] si dispersiei Var[R] date mai devreme. Probabil aceste
estimǎri vor fi cam aceleasi cu cele de la punctul b.

Problema 18. Varabile aleatoare mixte

Fie D o variabilǎ aleatoare mixtǎ, cu D = 0 o valoare cu probabilitate proprie α


(0 < α < 1) si cu o densitate de probabilitate exponentialǎ pentru D > 0, nulǎ
pentru D < 0.
Calculati E(D) si Var(D).
Indicatie: Calea cea mai facilǎ de a rezolva aceastǎ problemǎ trece prin
formulele
E[D] = E[D|D = 0]Pr(D = 0) + E[D|D > 0]Pr(D > 0)

16
E[D2] = E[D2|D = 0]Pr(D = 0) + E[D2|D > 0]Pr(D > 0)

17
SURSE DE INFORMATIE

Lucrarea 1

Tema 1: Entropia surselor de informatie fără memorie.

Sursele studiate au un alfabet care poate cuprinde de la 2 la 15 simboluri si


numărul n al simbolurilor este limitat prin program.
Alegerea numărului de simboluri se face intervenind în program: linia în care se
poate face modificarea este marcată cu un comentariu potrivit. Se poate
interveni si asupra limitelor 2, 15, dar această interventie nu aduce în discutie
aspecte noi si de aceea nu este recomandată în mod special.
Simbolurile sursei sunt considerate a fi chiar numerele de la 1 la n.
În prima fază este evaluată entropia maximă a unei surse cu un alfabet alcătuit
din n simboluri, entropie care se atinge atunci când simbolurile sunt
echiprobabile.
În faza a doua se generează o listă de probabilitati asociate celor n simboluri
arbitrară. Cum este de asteptat, entropia sursei este totdeauna inferioară
entropiei maxime.
Diferenta dintre entropia maximă si cea efectivă este redundanta sursei.
Programul evaluează entropia efectivă si redundanta sursei.
Asupra sursei se fac succesiv unele modificări (trei).
Prima modificare: Se aleg la întâmplare două simboluri ale sursei. Uzual
acestea au probabilităti de aparitie diferite. Se face o medie aritmetică a celor
două probabilităti si se atribuie ca valori noi probabilitătilor celor două
simboluri selectate. Prin aceasta se aduce o uniformizare (partială) în lista de
probabilităti. Efectul: cresterea entropiei.
A doua modificare: Se reduce numărul de simboluri de la n la n – 1. Penultimul
simbol din sursa originară se comasează cu ultimul si probabilitătile lor se
adună. Penultimul simbol devine ultimul. Efectul: scăderea entropiei.
A treia modificare: Se adaugă la lista de n – 1 simboluri ale sursei precedente
un nou simbol, al n-lea, cu probabilitatea de aparitie nulă. Efectul: entropia
rămâne aceeasi.
Programul apelează ocazional functia entropie, dată si ea în listingul alăturat.
Functia aceata nu este altceva decât transcrierea în Matlab a formulei
binecunoscute pentru entropia unei surse simple fără memorie.
Se recomandă executarea repetată a programului, cu acelasi număr n de
simboluri, cu valori n diferite. A se observa entropiile, redundantele, efectele
unor particularităti ale sursei.

18
clear
n=8; % numarul de simboluri ale sursei
if n>15
n=15;
end % o limitare a numarului de simboluri
if n<2
n=2;
end % o alta limitare a numarului de simboluri
simb=1:n; % simbolurile sursei
prob=(1/n)*ones(1,n);
entropia_maxima=entropie(prob)
prob=rand(1,n); % generarea a n numere aleatoare intre 0 si 1
prob=prob/sum(prob); % normaliarea listei de n numere; suma =
1
simboluri=simb
probabilitati=prob
h=entropie(prob);
entropia_efectiva=h
redundanta_sursei=entropia_maxima-entropia_efectiva
display('*** Uremaza o egalizare a probabilitatilor a doua
simboluri ***')
display('*** Pentru continuare apasati Enter! ***')
pause
r=ceil(n*rand(1,2)) % se genereaza doua numere de la 1 la n
med=(prob(r(1))+prob(r(2)))/2; % se mediaza probabilitatile
prob(r(1))=med;
prob(r(2))=med;
simboluri=simb
probabilitati=prob
h=entropie(prob);
entropia_noua=h
display('*** Uremaza o reducere a numarului de simboluri ***')
display('*** Pentru continuare apasati Enter! ***')
pause
prob(n-1)=prob(n-1)+prob(n); % se pun laolalta ultimele doua
simboluri
simboluri=simboluri(1:(n-1))
probabilitati=prob(1:(n-1))
h=entropie(prob(1:(n-1)));
entropia_noua=h
display('*** Uremaza adaugarea unui simbol cu probabilitate nula
***')
display('*** Pentru continuare apasati Enter! ***')
pause
prob(n)=0; % se adauga un simbol cu probabilitatea nula
simboluri=[simboluri n]
probabilitati=prob
h=entropie(prob);
entropia_noua=h

function entropie=ent(s)
% s este vectorul (linie) al probabilitatilor
[n,m]=size(s);
ent=0;

19
for i=1:m
if s(i)>0
ent=ent-s(i)*log(s(i));
end
end
ent=ent/log(2);
entropie=ent;

Tema 2: Entropia surselor duble de informatie

Programul Matlab care urmează se ocupă de caracterizarea surselor de


informatie pereche de surse simple (A, B), notate si A×B, independente sau
dependente una de cealaltă. Sursele acestea privite unitar generează simboluri
proprii, perechi ordonate de simboluri (a, b), unul din alfabetul sursei A, altul
din alfabetul sursei B.
Dacă sursele simple componente sunt independente, atunci probabilitătile
simbolurilor (a, b) se obtin prin multiplicarea probabilitătilor asociate
simbolurilor din pereche. Dacă sursele A, B sunt dependente atunci intră în rol
formula probabilitătilor conditionate. Pentru calculul probabilitătii unei perechi
(a, b), se multiplică probabilitatea lui a cu probabilitatea lui b conditionată de a
sau se multiplică probabilitatea lui b cu probabilitatea lui a conditionată de b.
Toate aceste relatii se pot regăsi în programul alăturat.
Programul începe cu alocarea dimensiunilor m si n ale celor două multimi de
simboluri (multimi alfabetice) pentru cele două surse A si B.
În prima parte a programului, sursele A si B sunt considerate independente.
Rezultatul calculelor este: entropia sursei A×B este egală cu suma entropiilor
surselor A si B.
În partea a doua, sursele A si B se fac dependente. Sursa A se mentine în forma
initializată în partea introductivă a programului. Sursa B nu mai poate fi
arbitrară, cea deja utilizată. Sursa B, chiar dacă numărul de simboluri rămâne
neschimbat are o listă de probabilităti care rezultă din conditionarea
(dependenţa) mutuală a celor două surse simple. Rezultatul ultim al calculelor
este: entropia sursei A×B este mai mică decât suma entropiilor surselor A si B
luate separat.

clear
m=7;
n=5; % se alege numarul simbourilor generate de cele doua
surse
proa=rand(1,m); % generarea a m numere aleatoare intre 0 si 1
proa=proa/sum(proa); % normaliarea listei de m numere; suma =
1
prob=rand(1,n); % generarea a n numere aleatoare intre 0 si 1
prob=prob/sum(prob); % normaliarea listei de n numere; suma =
1
disp(' ')
s='Surse independente, probabilitati, entropii';
disp(s)

20
A=proa
B=prob
a=entropie(proa); % entropia sursei A
b=entropie(prob); % entropia sursei B
Entropii=[a b]
Suma_entropiilor=a+b % suma entropiilor
prod=proa'*prob; % probabilitatile perechilor (a,b), A, B
independente
AXB=prod
for i=1:m
entrl(i)=entropie(prod(i,:));
end
entropie_AXB=sum(entrl) % entropia sursei duble AXB, A, B
independnete
disp(' ')
s='Surse dependente, probabilitati, entropii';
disp(s)
cond=rand(m,n);
for i=1:m
cond(i,:)=cond(i,:)/sum(cond(i,:));
end % generarea probabilitatilor conditionate P(b/a)
disp(' ')
s='Matricea de conditionare b/a';
disp(s)
cond
for i=1:n
prod(:,i)=proa'.*cond(:,i);
end % calculul probabilitatilor pe perechi (a,b), A, B
dependente
prob=sum(prod); % calculul probabilitatilor pentru sursa B
B=prob
b=entropie(prob) % entropia sursei B
Entropii=[a b]
Suma_entropiilor=a+b % suma entropiilor
AXB=prod
for i=1:m
entrl(i)=entropie(prod(i,:));
end
entropie_AXB=sum(entrl) % entropia sursei duble AXB, A, B
independente

Lucrarea 2

Tema: Entropia surselor de informatie markoviene.

Sursele Markov propuse spre studiu au de la 2 la 8 stări si numărul n al stărilor


este limitat prin program.
Alegerea numărului de stări se face intervenind în program: linia în care se
poate face modificarea este marcată cu un comentariu potrivit. Se poate
interveni si asupra limitelor 2, 8, dar această interventie nu aduce aspecte noi si
de aceea nu se recomandă în mod special.

21
Se generează aleator o matrice a probabilitătilor de tranzitie din cele n stări în
cele n stări ale sursei. Matricea p nu poate fi decât pătrată, n×n, cu suma liniilor
egală cu unitatea.
Starea initială s a sursei este precizată uzual printr-un vector (linie) de
probabilităti, cu suma componentelor egală cu 1. În program, starea initială
poate fi modificată în linia/liniile unde ea este definită, marcată si ea cu un
comentariu. Starea initială, ca si oricare altă stare ulterioară este caracterizată de
o entropie care este evaluată cu functia entropie reprodusă într-un listing
aparte, la finalul acestor câteva pagini de îndrumare. Functia entropie nu este
altceva decât transcrierea în Matlab a formulei binecunoscute pentru entropia
unei surse simple (fără memorie).
Înainte de prima pauză în executia programului, se afisează matricea de
tranzitie, starea initială si entropia corespunzătoare.
Apoi se simulează o evolutie a sursei (10 pasi). De regulă, sursa evoluează către
o stare stationară. Se afisează stările succesive si entropiile asociate. Se poate
observa o convergentă către o stare numită si stare stationară. Această stare nu
este explicită, este numai bănuită din evolutia sursei. Lucrurile devin ceva mai
clare dacă se extinde evolutia la mai mult de 10 pasi, prin modificarea limitei
superioare a instructiunii “for k=1:10”.
După următoarea pauză în executie se calculează efectiv starea stationară.
Rezultatele afisate diferă întrucâtva de ultima stare din secventa evolutivă
anterioară. De regulă, starea stationară este descrisă printr-un vector de
probabilităti cu toate componentele nenule. Se zice în aceste cazuri că sursa este
ergodică. Uneori, un vector al unei stări stationare contine componente nule
(stări excluse pe termen lung) sau o componentă unitară si celelalte nule (stări
absorbante). Aceste situatii caracterizează surse neergodice.
Se recomandă executarea repetată a programului, cu acelasi număr n de stări
sau cu valori ale lui n diferite. A se observa evolutia sursei, stările si entropiile
asociate, starea stationară.

clear
n=4; % numarul de stari ale sursei
if n>8
n=8;
end % o limitare a numarului de stari
if n<2
n=2;
end % o alta limitare a numarului de stari
p=rand(n);
for i=1:n
suml=sum(p(i,:));
p(i,:)=p(i,:)/suml;
end % crearea unei matrici a tranzitiilor
matricea_tranzitiilor=p
s=zeros(1,n);
s(2)=1; % starea initiala
starea_initiala_si_entropia=[s entropie(s)]
display('*** Uremaza o evolutie a sursei Markov (10 pasi) ***')

22
display('*** Pentru continuare apasati Enter! ***')
pause
for k=1:10
s=s*p;
starea_curenta_si_entropia=[s entropie(s)]
end
display('*** Uremaza calculul starii stationare a sursei Markov
***')
display('*** Pentru continuare apasati Enter! ***')
pause
a=p-eye(n);
a=a';
ap=zeros(n-1);
for i=1:n
k=0;
for j=1:n
if j~=i
k=k+1;
ap(1:(n-1),k)=a(2:n,j);
end
end
compl(i)=(-1)^i*det(ap);
end % evaluarea starii stationare
s=compl/sum(compl); % probabilitatile starii stationare
starea_stationara=s
starea_stationara=s*p % verificarea starii stationare
starea_stationara_si_entropia=[starea_stationara entropie(s)]

function entropie=ent(s)
% s este vectorul (linie) al probabilitatilor
[n,m]=size(s);
ent=0;
for i=1:m
if s(i)>0
ent=ent-s(i)*log(s(i));
end
end
ent=ent/log(2);
entropie=ent;

Lucrarea 3

Tema: Entropia surselor de informatie Markov binare.

Sursele Markov binare studiate au 2, 4, 8 sau 16 stări, numărul stărilor n este


totdeauna o putere a lui 2 si este limitat prin program. Exponentul este ordinul
sursei.
Alegerea ordinului se face intervenind în program: linia în care se poate face
modificarea este marcată de un comentariu adecvat. Se poate interveni si asupra
limitelor 2 si 16, dar această interventie nu aduce aspecte noi si de aceea nu este
recomandată special.

23
Se generează aleator o matrice a probabilitătilor de tranzitie din cele n stări în
cele n stări ale sursei. Matricea p nu poate fi decât pătrată, n×n, cu suma liniilor
egală cu unitatea. Multe elemente în această matrice pot fi si chiar sunt nule. De
fapt, pe fiecare linie numai două elemente sunt nenule deoarece numai două
tranzitii sunt posibile, din starea de plecare în numai alte două stări care se obtin
prin deplasarea spre stânga a expresiei binare a stării curente si înlocuirea
ultimului bit cu 0 sau 1. De pildă, din starea curentă 101 nu se poate ajumge
decât în stările 010 sau 011 (s-a subliniat de fiecare dată partea rămasă din
expresia binară a stării curente după deplasarea la stânga cu pierderea primului
bit). O trecere din starea 101 în alte stări, de pildă în starea 110, nu este posibilă
într-un singur pas.
Starea initială s a sursei este precizată printr-un vector (linie) de probabilităti,
cu suma componentelor egală cu 1. În program, starea initială poate fi
modificată în linia/liniile unde ea este definită, marcată dealtfel cu un
comentariu. Starea initială, ca si oricare altă stare ulterioară este caracterizată de
o entropie care este evaluată cu functia entropie, dată si ea în listingul
alăturat. Functia aceasta nu este altceva decât transcrierea în Matlab a formulei
binecunoscute pentru entropia unei surse simple (fără memorie).
Înainte de prima pauză în executia programului, se afisează matricea de
tranzitie, starea initială si entropia corespunzătoare.
Apoi se simulează o evolutie a sursei (10 pasi). De regulă, sursa evoluează către
o stare stationară. Se afisează stările succesive si entropiile asociate. Se poate
observa o convergentă către o stare numită si stare stationară. Această stare nu
este explicită, este numai bănuită din evolutia sursei. Lucrurile devin ceva mai
clare dacă se extinde evolutia la mai mult de 10 pasi, prin modificarea limitei
superioare pentru k în instructiunea “for k=1:10”.
După următoarea pauză în executie se calculează efectiv starea stationară.
Rezultatele afisate diferă întrucâtva de ultima stare din secventa evolutivă
anterioară. De regulă, starea stationară este descrisă printr-un vector de
probabilităti cu toate componentele nenule. Se zice în aceste cazuri că sursa este
ergodică. Uneori, un vector al unei stări stationare contine componente nule
(stări excluse pe termen lung) sau o componentă unitară si celelalte nule (stări
absorbante). Aceste situatii caracterizează sursele neergodice.
Se recomandă executarea repetată a programului, pentru surse de acelasi ordin
sau de ordine diferite. A se observa evolutia sursei, stările si entropiile asociate,
starea stationară.

clear
ordin=2; % ordinul sursei
n=2^ordin; % numarul de stari ale sursei
if n>16
n=16;
end % o limitare a numarului de stari
if n<2
n=2;
end % o alta limitare a numarului de stari

24
for i=1:n
s=dec2bin(i-1,ordin);
stari(i,:)=s;
starin(i)=i-1;
end
stari
p=zeros(n);
for i=1:n
m=mod(2*(i-1),n);
m1=m;
m2=mod(m+1,n);
p(i,m1+1)=rand;
p(i,m2+1)=rand;
end
for i=1:n
suml=sum(p(i,:));
p(i,:)=p(i,:)/suml;
end % crearea unei matrici a tranzitiilor
matricea_tranzitiilor=p
s=zeros(1,n);
s(1)=1; % starea initiala
starea_initiala_si_entropia=[s entropie(s)]
display('*** Uremaza o evolutie a sursei Markov (10 pasi) ***')
display('*** Pentru continuare apasati Enter! ***')
pause
for k=1:10
s=s*p;
starea_curenta_si_entropia=[s entropie(s)]
end % evolutia sursei
display('*** Uremaza calculul starii stationare a sursei Markov
***')
display('*** Pentru continuare apasati Enter! ***')
pause
a=p-eye(n);
a=a';
ap=zeros(n-1);
for i=1:n
k=0;
for j=1:n
if j~=i
k=k+1;
ap(1:(n-1),k)=a(2:n,j);
end
end
compl(i)=(-1)^i*det(ap);
end % evaluarea starii statinare
s=compl/sum(compl); % probabilitatile starii stationare
starea_stationara=s
starea_stationara=s*p % verificarea starii stationare
starea_stationara_si_entropia=[starea_stationara entropie(s)]

function entropie=ent(s)
% s este vectorul (linie) al probabilitatilor
[n,m]=size(s);

25
ent=0;
for i=1:m
if s(i)>0
ent=ent-s(i)*log(s(i));
end
end
ent=ent/log(2);
entropie=ent;

Problema 19.

O monedǎ perfectǎ este aruncatǎ succesiv pânǎ apare prima stemǎ. Fie X
numǎrul de aruncǎri necesare.
a. Aflati entropia H(X) în biti. Expresiile urmǎtoare pot fi utile în evaluarea
cerutǎ:
∞ ∞
r r
∑n= 1 r n = 1 − r , ∑n= 1 nr n = (1 − r ) 2
b. Potrivit acestei scheme se genereazǎ o variabilǎ aleatoare X. Stabiliti o
secventǎ eficientǎ de întrebǎri cu rǎspunsuri da-nu, de forma “Este X
continut în multimea S?”. Comparati H(X) cu numǎrul mediu de întrebǎri
necesare pentru a determina X.
Solutie.
a. La prima aruncare, probabilitatea de a încheia experimentul este 1/2.
Probabilitatea de a încheia experimentul la a doua aruncare este 1/4.
Probabilitatea de a obtine prima oarǎ stemǎ la a n-a aruncare este (1/2)n.
Variabila aleatoare X este de tip discret cu probabilitǎtile asociate
numerelor naturale egale cu puterile succesive ale lui 1/2. Entropia cerutǎ
este datǎ de formula
∞ ∞ n
1  1 1/ 2
H(X) = ∑ n log 2 n = ∑ n  = = 2
n= 1 2 n= 1  2  (1 − 1 / 2) 2
b. Ideea este a obtine maximum de informatie la fiecare întrebare. Fie a un
numǎr care partitioneazǎ prin ordine (n ≤ a, n > a) multimea numerelor
naturale în multimea S si multimea N – S. Întrebarea “Este X continut în
k
1 1
multimea S?” poate avea rǎspunsul “da” cu probabilitatea ∑ n = 1 − k ,
n= 1 2 2

1 1
“nu” cu probabilitatea ∑ n = k (a – 1 < k ≤ a).
n= k + 1 2 2
Informatia medie obtinutǎ la o întrebare de acest gen este
 1   1  1 1
−  1 − k  log 1 − k  − k log k
 2   2  2 2
etc.

26
Problema 20. Regula grupǎrii pentru entropie.

Fie p = (p1, p2, …, pm) o distributie de probabilitǎti pentru m elemente, adicǎ un


vector de m numere nenegative care însumate dau unitatea. Se defineste o
distributie nouǎ, q pentru m – 1 elemente conform schemei q1 = p1, q2 = p2, …,
qm – 2 = pm – 2 si qm – 1 = pm – 1 + pm, cu alte cuvinte distributia nouǎ este aceeasi cu
cea initialǎ pentru indici de la 1 la m – 2 si probabilitatea qm – 1 se obtine prin
însumarea ultimelor douǎ valori din lista de probabilitǎti initialǎ. Arǎtati cǎ
 pm− 1 pm 
H ( p ) = H (q ) + ( p m− 1 + p m ) H 2  , 
 pm− 1 + pm pm− 1 + pm 
unde H2(a, b) = – a log a – b log b.

Problema 21.

Fie X o variabilǎ aleatoare discretǎ. Arǎtati cǎ entropia unei functii de X este


inferioarǎ cel mult egalǎ cu entropia lui X prin justificarea pasilor urmǎtori:
H ( X , g ( X )) = H ( X ) + H ( g ( X ) / X ) = H ( X )
H ( X , g ( X )) = H ( g ( X )) + H ( X / g ( X )) ≥ H ( g ( X ))
prin urmare H ( g ( X )) ≤ H ( X ) .
Solutie:
H(X, g(X)) = H(X) + H(g(X)|X) rezultă din simpla utilizare a unei formule
pentru entropii discutate la curs.
H(g(X)|X) = 0 deoarece pentru orice valoare a lui X, g(X) este univoc
deteminată asa încât H(g(X)|X) = Σxp(x)H(g(X)|X = x) = Σx 0 = 0.
H(X, g(X)) = H(g(X)) + H(X|g(X)) rezultă tot asa prin simpla utilizare a aceleiasi
formule pentru entropii discutată la curs.
H(X|g(X)) ≥ 0, cu egalitate dacă si numai dacă X este o functie de g(X), cu alte
cuvinte functia g(∙) este o corespondentă biunivocă. Asadar, H(X, g(X)) ≥
H(g(X)).
Prin combinarea afirmatiilor a doua si a patra, se obtine H(g(X)) ≤ H(X).

Problema 22. Functii

a. Fie Y = X 5, cu X o variabilă aleatoare care ia valori pozitive si valori


negative. Care este relatia între entropiile H(X) si H(Y)?
b. Dar dacă Y = X 2?
c. Dar dacă Y = tgX?
Solutie: Din problema precedentă, se stie că prin trecerea unei variabile
aleatoare printr-o functie nu se poate decât reduce entropia sau poate fi, în cazul
biunivocitătii, mentinută la aceeasi valoare. Ea niciodată nu creste. Asadar,
H(g(X)) ≤ H(X), pentru orice functie g. Ratiunea este simplă: dacă functia g nu
este biunivocă, atunci ea pune laolaltă unele stări si prin aceasta reduce
entropia.

27
Solutia acestei probleme rezidă în a determina de la caz la caz dacă este vorba
sau nu de o aplicatie bijectivă. De observat că bijectivitatea se referă exclusiv la
suportul variabilei X, adică la acele valori x pentru care p(x) > 0.
a. Y = X 5 este o bijectie, asadar entropia este o functie numai de parobabilităti
(si nu de valorile rezultatelor observate) si de aceea nu se schimbă: H(X) =
H(Y).
b. Y = X 2 este o functie pară si, în consecintă, nu este o corespondentă
biunivocă cu exceptia cazului în care suportul variabilei X nu contine
simultan valori x si opusele lor – x.
c. Ca si la punctul a., Y = tgX este o bijectie (ca functie pe întregi) si H(X) =
H(Y).
În general, pentru punctul b., H(Y) ≤ H(X). Pentru acest caz este posibil a se da
o margine superioară pentru H(X): deoarece X poate lua numai două valori la
orice Y dat, H(X|Y) ≤ log2 = 1. Asadar
H(Y) ≤ H(X) = H(X, Y) = H(Y) + H(X|Y) ≤ H(Y) + 1

Problema 23. Bytes (octeti)

Entropia, Ha(X) = – Σp(x)logap(x) se exprimă în biti dacă logaritmul este în baza


2 si în bytes (octeţi) dacă logaritmul este în baza 256. Care este relaţia între
H2(X) si H256(X)?
Solutie:
log 2 p ( x ) log 256 2
H 2 ( X ) = − ∑ p( x) log 2 p ( x) = − ∑ p ( x) =
log 256 2
log 256 p ( x ) 1 H (X )
= − ∑ p ( x) = − ∑ p( x) log 256 p ( x ) = 256
log 256 2 log 256 2 log 256 2
Astfel
H2(X) = 8H256(X)

Problema 24. Cântărirea monedelor

Se admite existenţa a n monede între care una ar putea fi contrafăcută, falsă.


Dacă există o monedă falsă, ea poate fi sau mai grea, sau mai usoară decât
celelalte. Monedele urmează a fi cântărite cu o balanţă.
a. Numărati stările în care pot fi cele n monede si numărati rezultatele
cântăririlor în număr de k. Prin comparare, evaluaţi o limită superioară a
numărului de monede n astfel încât prin k operaţii de cântărire să se
găsească moneda falsă (dacă ea există) si să se precizeze dacă ea este mai
grea sau este mai usoară.
b. (Mai dificil, deci optional) Care este strategia potrivită pentru k = 3 cântăriri
si n = 12 monede?
Solutie:
a. Pentru n monede, sunt 2n + 1 situatii posibile sau stări.
 Una din cele n monede este mai grea;

28
 Una din cele n monede este mai usoară;
 Toate au aceeasi greutate.
Fiecare cântărire poate avea unul din trei rezultate posibile: egalitate, talerul
din stânga mai greu sau talerul din dreapta mai greu. În k operaţii de
cântărire, sunt posibile 3k rezultate ceea ce face posibilă distincţia între cel
mult 3k “stări” diferite. Asadar, 2n + 1 ≤ 3k, sau n ≤ (3k – 1)/2.
Din punct de vedere al informaţiei, fiecare cântărire aduce cel mult log23
biti de informatie. Sunt 2n + 1 “stări” posibile, cu un maxim de entropie de
log2(2n + 1) biti. În consecinţă, în această situaţie sunt necesare cel puţin
log2(2n + 1)/log23 cântăriri pentru a extrage suficientă informatie despre
moneda falsă. Se observă, rezultatul este acelasi ca acela de mai devreme.
b. Această problemă cunoaste mai multe abordări posibile. Una din ele se
bazează pe sistemul de numeratie ternar.
Numerele {–12, –11, …, –1, 0, 1, …, 12} se pot exprima într-un sistem de
numeratie ternar cu alfabetul {–1, 0, 1}. De pildă numărul 8 este (–1)01
deoarece (–1)×30 + 0×31 + 1×32 = 8. Se formează o matrice cu coloanele
reprezentând numere pozitive

1 2 3 4 5 6 7 8 9 10 11 12
30 1 –1 0 1 –1 0 1 –1 0 1 –1 0 Σ1 = 0
31 0 1 1 1 –1 –1 –1 0 0 0 1 1 Σ2 = 2
32 0 0 0 0 1 1 1 1 1 1 1 1 Σ3 = 8

Se observă că nu toate sumele pe linii sunt nule. Se pot nega(tiviza) unele


coloane pentru a face suma pe linii nulă. De exemplu, prin schimbarea de
semn a coloanelor 7, 9, 11 si 12 se obtine

1 2 3 4 5 6 7 8 9 10 11 12
3 0
1 –1 0 1 –1 0 –1 –1 0 1 1 0 Σ1 = 0
31 0 1 1 1 –1 –1 1 0 0 0 –1 –1 Σ2 = 0
32 0 0 0 0 1 1 –1 1 –1 1 –1 –1 Σ3 = 0

Acum se plasează monedele pe balantă porivit regulii următoare: pentru


cântărirea numărul i, se plasează moneda n
 pe talerul stâng dacă ni = –1;
 alături dacă ni = 0;
 pe talerul din dreapta dacă ni = 1.
Rezultatul celor trei cântăriri va stabili moneda diferită (dacă există una) si
va spune dacă este mai grea sau mai usoară. Rezultatul fiecărei cântăriri este
0 dacă cele două talere sunt în echilibru, –1 dacă talerul stâng este mai greu,
1 dacă talerul drept este mai greu. Atunci cele trei cântăriri dau dezvoltarea
ternară a indicelui monedei cu defect de greutate. Dacă dezvoltarea aste
aceeasi cu aceea din matrice, ea indică faptul că moneda este mai grea.
Dacă dezvoltarea este de semn contrar, atunci moneda este mai usoară. De

29
exemplu, 0(–1)(–1) conduce la 0×30 + (–1)×31 + (–1)×32 = –12 ceea ce
indică moneda numărul 12 ca fiind mai grea, 10(–1) indică moneda numărul
8 ca fiind mai usoară, 000 indică absenta monedei cu defect.
De ce această schemă lucrează? Ea este un cod Hamming corector de o
eroare pentru alfabetul ternar (v.capitolul dedicat subiectului). Urmează
câteva detalii.
De observat mai întâi câteva proprietăţi ale matricii de mai sus care este
folosită în schemă. Toate coloanele sunt distincte si nici o pereche de
coloane adunate nu dau vectorul nul. Totodată, dacă o monedă este mai
grea, ea va produce secventa de cântăriri care se potriveste cu coloana ei din
matrice. Dacă moneda este mai usoară, produce ca secventă de cântăriri
negativa coloanei ei. Prin combinarea tuturor acestor fapte, se poate vedea
că orice monedă (unică) diferită ca greutate va produce o secventă de
cântăriri (unică) si moneda poate fi determinată din acea secventă.
Una din întrebările care se pot formula este dacă limita stabilită la punctul
(a) este realmente accesibilă. De pildă, se pot tria 13 monede prin trei
cântăriri? Desi nu se poate cu o schemă ca aceea de mai sus, se poate în
ipoteza în care s-a extras limita de mai devreme. Limita nici nu interzice
împărtirea monedelor în două submultimi, nici nu exclude existenta unei
alte monede cunoscută ca normală. În oricare din aceste condiţii, este
posibil a găsi moneda diferită dintre cele 13 prin 3 cântăriri.

Problema 25. Exemplu de entropie combinată

Fie probabilitătile p(x, y) date de tabelul alăturat.

Y
0 1
X
0 1/3 1/3
1 0 1/3

Stabiliti:
a. H(X) si H(Y)
b. H(Y|X) si H(X|Y)
c. H(Y, X)
d. H(Y) – H(Y|X)
Solutie:
a. H(X) = (2/3)log(3/2) + (1/3)log3 ≈ 0,918 biti. Aceeasi entropie pentru Y.
b. H(X|Y) = (1/3)H(X|Y = 0) + (2/3)H(X|Y = 1) ≈ 0,667 biti. Rezultat identic si
pentru H(Y|X).
c. H(X,Y) = 3(1/3)log3 ≈ 1,585 biti.
d. H(Y) – H(Y|X) ≈ 0,251 biti.

30
Problema 26.

Arǎtati cǎ dacǎ H(Y/X) = 0 atunci Y este o functie de X, adicǎ pentru orice x cu


p(x) > 0 existǎ numai o valoare posibilǎ pentru y cu p(x, y) > 0.

Problema 27.

În sporturile de echipǎ sunt campionate care se încheie cu o serie de sapte


jocuri. Seria se încheie când una din echipe câstigǎ patru jocuri. Fie X variabila
aleatoare care reprezintǎ rezultatul seriei de jocuri dintre echipele A si B;
valorile posibile ale lui X sunt AAAA, BABABAB, BBBAAAA etc. Fie Y
numǎrul de jocuri efectiv jucate, numǎr între 4 si 7. Admitând cǎ echipele A si
B sunt egale ca tǎrie si cǎ jocurile sunt independente unul de altul, sǎ se
calculeze H(X), H(Y), H(Y/X) si H(X/Y).

Problema 28.

Fie X si Y douǎ variabile aleatoare care iau valorile x1, x2, …, xr, respectiv y1, y2,
…, ys si fie Z = X + Y.
a. Sǎ se verifice prin calcul direct cǎ H(Z/X) = H(Y/X). Pe baza acestui fapt,
argumentati cǎ dacǎ X si Y sunt independente, atunci H(Y) ≤ H(Z).
(Indicatie: informatia este totdeauna nenegativǎ)
b. Dati un exemplu în care H(X) > H(Z) si H(Y) > H(Z). (Indicatie: încercati sǎ
faceti H(Z) = 0)
c. În ce conditii are loc relatia H(Z) = H(X) + H(Y)?

Problema 29.

Arǎtati cǎ entropia pentru distributia probabilisticǎ (p1, …, pi, …, pj, …, pm) este
mai redusǎ decât cea a distributiei (q1, …, qm) în care qi = qj = (pi + pj)/2 si qk =
pk pentru orice k diferit de i si j. (Indicatie: calculati Hp – Hq uzând de relatia de
definitie). Observati cǎ acest rezultat particular este legat de un adevǎr general:
împingerea unei distributii spre uniformitate are ca efect cresterea entropiei.
Solutie. Entropia sursei în forma originarǎ este
m
H p = − ∑ p k log p k
k= 1
Entropia sursei modificate este
m
H q = − ∑ q k log q k
k=1
În cele douǎ sume cei mai multi termeni sunt identici si anume aceia de indice k
diferit de i si de j. Asadar, diferenta celor douǎ entropii este
(p + pj) (p + pj)
Hq − H p = − 2 i log i + pi log pi + p j log p j =
2 2

31
 1 1  1 1   1 1 
= 2  −  pi + pi  log pi + pi  −  − pi log pi − p j log p j  
 2 2  2 2   2 2 
Pe baza convexitǎtii functiei –xlogx, rezultǎ pozitivitatea diferentei. Ceea ce
trebuia demonstrat.

Problema 30. Entropie diferentială

Evaluati entropia diferentială h(X) = – ∫ f ln f pentru:


a. Densitatea exponentială, f(x) = λ e– λx, x ≥ 0
b. Densitatea Laplace, f(x) = (1/2)λ e– λ|x|
c. Suma variabilelor aleatoare independente X1 si X2 distribuite normal cu
mediile µi si dispersiile σi2, i = 1, 2.

Problema 31.

Fie p(x) o functie de probabilitate. Dovediti cǎ pentru orice d ≥ 0


1
Pr{ p ( x) ≤ d } log ≤ H ( X )
d
(Inegalitatea lui Markov).
Solutie. Probabilitǎtile sunt numere pozitive, asadar
p(x) ≤ d ⇒ 1/p(x) ≥ 1/d.
Expresia entropiei variabilei X este

1
H(X) = ∫ p ( x) log dx
−∞
p( x)
Relatia aceasta combinatǎ cu inegalitatea de mai devreme conduce la

1 1
H(X) ≥ log ∫ p ( x)dx = log
d −∞ d
Deoarece orice probabilitate este un numǎr nenegativ subunitar,
1 1
log ≥ Pr{ p ( x) ≤ d } log
d d
De unde inegalitatea din enunt.

Problema 32. Entropia unui amestec disjunct

Fie X1 si X2 variabile aleatoare discrete extrase conform functiilor de


probabilitate p1(.) si p2(.) pe multimile X1 = {1, 2, …, m} si X2 = {m + 1, …, n}.
Cele două multimi nu se intersectează, după cum usor se observă. Fie
X cu probabilitatea α
X=  1
X
 2 cu probabilitatea 1 − α
a. Exprimati H(X) în functie de H(X1), H(X2) si α.

32
b. Maximizati în raport cu α pentru a arăta că 2 H ( X ) ≤ 2 H ( X 1 ) + 2 H ( X 2 ) si
interpretati utilizând notiunea după care 2H(X) este dimensiunea efectivă a
alfabetului.
c. Fie X1 si X2 distribuite uniform pe multimile lor alfabetice. Care este
valoarea α care maximizează entropia H(X) asociată.
Solutie:
a. Această problemă poate fi rezolvată prin scrierea relatiei de definitie a
entropiei si prin dezvoltarea termenilor diversi pe care aceasta în contine.
Dar aici se utilizează algebra legată de entropii pentru o demonstratie mai
simplă. Deoarece X1 si X2 au multimi de definitie disjuncte, se poate scrie
 X cu probabilitatea α
X=  1
 X 2 cu probabilitatea 1 − α
Se defineste o functie de X
 1 pentru X = X 1
θ = f (X ) = 
 2 pentru X = X 2
Apoi, ca în problema 1,
H(X) = H(X,f(X)) = H(θ) + H(X|θ) =
= H(θ) + p(θ = 1)H(X|θ = 1) + p(θ = 2)H(X|θ = 2) =
= H(α) + αH(X1) + (1 – α)H(X2)
cu H(α) = – αlogα – (1 – α)log(1 – α).
b. Punând F(α) = H(α) + αH(X1) + (1 – α)H(X2), se observă că F este o functie
concavă de a asa încât ea este maximă în punctul de anulare a derivatei.
Rezolvând
F’(α) = – logα + log(1 – α) + H(X1) – H(X2) = 0
se obtine succesiv
2H ( X1 )
α * = H ( X1 )
2 + 2H ( X 2 )
( )
F (α * ) = log 2 H ( X 1 ) + 2 H ( X 2 ) .
Asadar,
H(X) = H(α) + αH(X1) + (1 – α)H(X2) = F(α) ≤ F (α ) = log 2 1 + 2 2 (* H(X )
)
H(X )

În final,
2H ( X ) ≤ 2H ( X1 ) + 2H ( X 2 )
c. Deoarece X1 si X2 sunt uniforme pe multimile lor alfabetice, entropiile lor
sunt date de cardinalele acestor multimi. Astfel, H(X1) = log|X1| = logm si
H(X2) = log|X2| = log(n – m). Prin înlocuirea acestor valori în expresia lui α*
de la punctul anterior, se obtine
2H ( X1 ) 2log m m m
α * = H ( X1 ) = log( n − m )
= =
2 + 2 H(X2 )
2 log m
+ 2 m + ( n − m) n

Problema 33. Entropie maximǎ

33
Aflati densitatea de maximǎ entropie f care satisface relatiile EX = α1, Elnx =
α2. În altǎ formulare, stabiliti
max{h(f)}
în conditiile
∫ xf ( x)dx = α 1 , ∫ (ln x) f ( x)dx = α 2
Ce familie de densitǎti de probabilitate este aceasta?
Solutie. Distributia de maximǎ entropie supusǎ la restrictiile din enunt este de
forma
f ( x) = e λ 0 + λ 1x + λ 2 ln x = cx λ 2 e λ 1x
care face parte din familia distributiilor Gamma. Constantele se aleg pentru a
satisface relatiile restrictive.

Problema 34. Random walk într-un cub

O pasăre zboară din încăpere în încăpere într-un cub 3×3×3 (egal probabil prin
fiecare perete interior). Care este rata entropiei?
Solutie: Rata entropiei unei deplasări aleatoare (random walk) într-un graf este
dată de relatia
 E E 
H ( X ) = log(2 E ) − H  1 ,..., m 
 2E 2E 
Un cub are 8 vârfuri, 12 muchii, 6 fete si un centru. Vârfurile au 3 arce,
muchiile au 4 arce, fetele au 5 arce si centrele au 6 arce. Asadar numărul total
de arce este E = 54. Astfel,
 3 3   4 4 
H (X ) = log108 + 8 log  + 12 log +
 108 108   108 108 
 5 5   6 6 
+ 6 log  + 1 log  = 2,03 biti.
 108 108   108 108 

Problema 35. Entropia grafurilor

Se consideră o deplasare aleatoare (random walk) într-un graf (conex) cu 3


arce.
a. Care graf are cea mai scăzută rată a entropiei? Care este acea rată?
b. Care graf are cea mai înaltă rată a entropiei?
Solutie: Sunt posibile trei grafuri cu trei arce, ca în figura alăturată.

34
Graful 1 Graful 2 Graful 3

Grafuri cu trei arce

Rata entropiei este dată de


wi
H = − ∑ µ i ∑ pij log pij = ∑ log wi
i j i w

Pentru graful 1, {wi} ={2, 2, 2} de unde rezultă H = 3[(2/6)log2] = 1.


Pentru graful 2, {wi} ={1, 1, 1, 3} de unde rezultă H = (3/6)log3 ≈ 0,79.
Pentru graful 3, {wi} ={1, 2, 2, 1} de unde rezultă H = 2[(2/6)log2] ≈ 0,667.
Asadar, graful 1 are cea mai mare entropie, graful 3 are cea mai mică entropie.

Problema 36. Entropia unui arbore aleator

Se consideră următoarea metodă de generare aleatoare a unui arbore binar cu n


noduri. Mai întâi se dezvoltă nodul rădăcină:

Apoi se dezvoltă unul din cele două noduri terminale la întâmplare:

La pasul k, se alege unul din cele k – 1 noduri terminale potrivit unei distributii
uniforme si se dezvoltă acel nod. Se continuă până când se generează n noduri
terminale. Astfel, o secventă care conduce la cinci noduri poate arăta astfel:

35
Surprinzător, metoda următoare de generare de arbori aleatori produce aceeasi
distributie probabilistică pe arbori cu n noduri terminale. Mai întâi se alege un
întreg N1 uniform distribuit pe multimea {1, 2, …, n}. Se obtine imaginea:

N1 n – N1

Apoi se alege un întreg N2 uniform distribuit pe {1, 2, …,N1 – 1} si,


independnent un alt întreg N3 uniform distribuit peste {1, 2, …, (n – N1) – 1}.
Figura se modifică astfel:

N1 N1 – N2 N3 n – N1 – N3

Se continuă procesul până când nu se mai pot face alte subdiviziuni.


(Echivalenta celor două scheme de generare decurge, de pildă, din modelul
urnei datorat lui Polya).
Se notează acum cu Tn un arbore aleator cu n noduri generat ca mai sus.
Distributia probabilistică a acestor arbori pare dificil de descris, dar se poate
afla entropia acestei distributii în formă recursivă.
Mai întâi câteva exemple.
Pentru n = 2, există un singur arbore. Asadar, H(T2) = 0.
Pentru n = 3, sunt doi arbori posibili, egal probabili: entropia este H(T3) = log2.
Pentru n = 4, sunt posibili cinci arbori, cu probabilitătile 1/3, 1/6, 1/6, 1/6, 1/6.
Acum, pentru o relatie de recurentă, fie N1(Tn) numărul de noduri terminale ale
arborelui Tn în jumătatea din dreapta a acelui arbore. Justificati fiecare din pasii
următori:
H (Tn ) = H ( N1 , Tn )
= H ( N1 ) + H (Tn | N1 )
= log(n − 1) + H (Tn | N1 )
1 n− 1
= log(n − 1) + ∑ [ H (Tk ) + H (Tn − k )]
n − 1 k=1
2 n− 1
= log(n − 1) + ∑ H (Tk )
n − 1 k=1
Utilizati succesiunea de egalităti de mai sus pentru a arăta că
(n – 1)Hn = nHn – 1 + (n – 1)log(n – 1) – (n – 2)log(n – 2)

36
sau
H n H n− 1
= + cn
n n− 1
cu adaosul cn potrivit definit. Deoarece Σcn = c < ∞, s-a dovedit prin aceasta că
H(Tn)/n tinde către o constantă. Astfel, numărul mediu statistic de biti necesari
pentru a descrie arborele aleator Tn creste liniar cu n.
Solutie:
Prin conditionarea în lant a entropiilor si pentru că N1 este o functie de Tn,
H(Tn,N1) = H(Tn) + H(N1|Tn) = H(Tn) + 0.
Prin conditionarea în lant a entropiilor, H(Tn,N1) = H(N1) + H(Tn|N1).
H(N1) = log(n – 1) deoarece N1 este uniform pe {1, 2, …, n – 1}.
Prin definitia entropiei conditionate,
n− 1
1 n− 1
H (Tn | N1 ) = ∑ p ( N1 = k ) H (Tn | N1 = k ) = ∑ H (Tn | N1 = k )
k=1 n − 1 k=1
Deoarece conditionat de N1, subarborele din stânga si subarborele din dreapta
sunt alegeri independente, H(Tn|N1 = k) = H(Tk,Tn – k|N1 = k) = H(Tk) + H(Tn – k)
asa încât
1 n− 1
H (Tn | N1 ) = ∑ [ H (Tk ) + H (Tn − k )]
n − 1 k=1
Printr-o simplă schimbare de variabile,
n− 1 n− 1


k=1
H (Tn − k ) = ∑
k=1
H (Tk )

Dacă punem Hn = H(Tn),


n− 1
(n − 1) H n = ( n − 1) log(n − 1) + 2∑ H k
k=1
n− 2
(n − 2) H n − 1 = (n − 2) log(n − 2) + 2∑ H k
k=1
Prin scăderea relatiei din urmă din cea anterioară se obtine
(n – 1)Hn – (n – 2)Hn – 1 = (n – 1)log(n – 1) – (n – 2)log(n – 2) + 2Hn – 1
sau
H n H n − 1 log(n − 1) (n − 2) log(n − 2) H n − 1
= + − = + Cn
n n− 1 n n(n − 1) n− 1
Asupra termenului Cn se mai poate lucra:
log(n − 1) ( n − 2) log(n − 2) log(n − 1) log(n − 2) 2 log(n − 2)
Cn = − = − +
n n(n − 1) n n− 1 n(n − 1)
Substituind ecuatia pentru Hn – 1 în ecuatia pentru Hn si procedând recursiv, se
obtine o sumă telescopică
Hn n
H n
2 log(i − 2) 1
n
= ∑i = 1 Ci + 22 = ∑i= 3 i (i − 1)
+ log(n − 1)
n
Deoarece limita când n → ∞ a ultimului termen din expresia din urmă este nulă

37
Hn ∞
2 log(i − 2) ∞
2 log(i − 1) ∞
2
lim n → ∞
n
= ∑
i= 3 i (i − 1)
≤ ∑ i= 3 (i − 1) 2
= ∑
i= 2 i
2
log i

Pentru i suficient de mare, log i ≤ i de unde rezultă că ultima serie este


convergentă (este majorată de seria cu termenul general i – (3/2), convergentă la
rândul ei).
Limita de mai devreme există. O evaluare pe calculator arată că ea are valoare
aproximativă de 1,736 biti.
Asadar, numărul de biti necesari pentru a descrie un arbore binar aleator cu n
noduri creste liniar cu n.

Problema 37. Lanţ Markov

Se dă matricea
 1 / 2 1 / 4 1 / 4
P = [ Pij ] =  1 / 4 1 / 2 1 / 4
 1 / 4 1 / 4 1 / 2
Fie X1 distribuit uniform pe stările {0, 1, 2}. Fie {Xi}1∞ un lanţ Markov cu
matricea de tranzitie P, astfel încât Pr(Xn + 1 = j|Xn = i) = Pij, i, j ∈ {0, 1, 2}.
a. Este {Xn} stationar?
b. Aflati limn → ∞ H(X1, …, Xn).
Considerati acum procesul derivat Z1, Z2, …, Zn în care
Z1 = X1
Zi = Xi – Xi – 1 (mod 3), i = 2, 3, …, n
Asadar, Zn face o codare a tranzitiilor, nu a stărilor.
c. Aflati H(Z1, Z2, …, Zn).
d. Aflati H(Zn) si H(Xn) pentru n ≥ 2.
e. Aflati H(Zn|Zn – 1) pentru n ≥ 2.
f. Sunt, pentru n ≥ 2, Zn – 1 si Zn independente?
Solutie:
a. Fie µn functia de probabilitate la momentul n. Deoarece µ1 = (1/3, 1/3, 1/3)
si µ2 = µ1P = µ1, µn = µ1 = (1/3, 1/3, 1/3) pentru orice n si {Xn} este
stationar.
Alternativ, observatia că P este dublu stochastică conduce la aceeasi
concluzie.
b. Deoarece {Xn} este un proces Markov stationar
2
lim n → ∞ H ( X 1 ,..., X n ) = H ( X 2 | X 1 ) = ∑
k= 0
P( X 1 = k ) H ( X 2 | X 1 = k ) =

1  1 1 1 3
= 3⋅
⋅ H , ,  =
3  2 4 4 2
c. Deoarece secventele (X1, …, Xn) si (Z1, …, Zn) sunt în corespondentă
biunivocă, prin regula conditionărilor succesive ale entropiilor si din
markovianism

38
n
H(Z1, …, Zn) = H(X1, …, Xn) = ∑k=1
H ( X k | X 1 ,..., X k − 1 ) =
n
3
= H ( X1) + ∑
k= 2
H ( X k | X k − 1 ) = H ( X 1 ) + (n − 1) H ( X 2 | X 1 ) = log 3 +
2
(n − 1)

Ca alternativă, se pot utiliza rezultatele de la punctele următoare, (d), (e) si


(f). Deoarece Z1, …, Zn sunt independente si Z2, …, Zn sunt distribuite
identic, cu functia de probabilitate (1/2, 1/4, 1/4),
3
H(Z1, …, Zn) = H(Z1) + … + H(Zn) = H(Z1) + (n – 1)H(Z2) = log 3 + ( n − 1)
2
d. Deoarece {Xn} este un proces Markov stationar cu µn = (1/3, 1/3, 1/3),
H(Xn) = H(X1) = H(1/3, 1/3, 1/3) = log3.
Pentru n ≥ 2
 0 cu probabiltatea 1 / 2
Z n =  1 cu probabiltatea 1 / 4
 2 cu probabiltatea 1 / 4
Asadar,
H(Zn) = H(1/2, 1/4, 1/4) = 3/2.
e. Datorită simetriei lui P, Pr[Zn|Zn–1] = Pr[Zn] pentru orice n ≥ 2. Astfel, H[Zn|
Zn–1] = H[Zn] = 3/2.
Ca demonstratie alternativă, utilizând rezultatul de la punctul (f), se poate
ajunge elementar la aceeasi concluzie.
f. Fie k ≥ 2. Se observă din simetria lui P că Zk+1 = Xk+1 – Xk este independent
de Xk. Acum din
Pr[Zk+1|Xk, Xk–1] = Pr[Xk+1 – Xk|Xk, Xk–1] = Pr[Xk+1 – Xk|Xk] =
= Pr[Xk+1 – Xk] = Pr[Zk+1]
rezultă că Zk+1 este independent de (Xk, Xk–1) si este deci independent si de Zk
= Xk – Xk–1. Pentru k = 1, din nou din simetria lui P rezultă imediat că Z2 este
independent de Z1 = X1.

Problema 38. Markov de ordinul doi

Fie {Xn}, Xn ∈ {0, 1} un proces stochastic binar. Fie Xn + 1 = Xn ⊕ Xn – 1 ⊕ Zn + 1,


cu ⊕ operatorul de adunare modulo 2 si {Zn} un proces Bernoulli(p). Care este
rata entropiei pentru {Xn}? Ar putea fi util a redefini acest proces Markov de
ordinul doi ca un proces Markov de primul ordin.
Solutie: Fie Yi = (Xi, Xi–1) pentru orice i. Este usor de văzut că limn→∞H(Xn)/n =
limn→∞H(Yn)/n, si că {Yi} este un proces Markov de ordinul 1. Asadar rata
entropiei pentru {Xn} este aceeasi cu rata entropiei procesului {Yn}. Deoarece
{Yn} este un proces Markov de ordinul întâi, are loc
1 1 n 1 n
lim n → ∞ H (Yn ) = lim n → ∞ ∑ H (Yi | Yi − 1 ) = lim n → ∞ ∑ H ( p ) = H ( p)
n n i= 1 n i= 1
Se poate conchide că {Xn} are rata entropiei H(p).

39
Alternativ, se poate ataca direct rata entropiei unui proces Markov de ordinul 2
{Xn} astfel
1 1 n
lim n → ∞ H ( X n ) = lim n → ∞ ∑ H ( X i | X i − 1 ) =
n n i= 1
1 n
= lim n → ∞ ∑ H ( X i | X i − 1, X i − 2 ) → H ( p)
n i= 1
în ultima egalitate se evidentiază ordinul procesului, 2, iar limita provine din
faptul că H ( X n | X n − 1 , X n − 2 ) = H ( p ) pentru orice n ≥ 3 (Cesáro).

CANALE DE TRANSMITERE A INFORMATIEI

Lucrarea 4

40
Tema: Transinformatia si capacitatea canalelor.

Canalul are un alfabet de intrare alcătuit din n simboluri. Alfabetul observat la


iesire este compus din m simboluri.
Matricea de probabilităti conditionate care caracterizează canalul este o matrice
n×m cu sumele elementelor fiecărei linii egale cu unitatea. În program, această
matrice este generată aleator.
Sursa de informatie care debitează la intrarea canalului este caracterizată de un
vector (linie) cu n elemente, probabilitătile de aparitie ale simbolurilor sursei.
Vectorul acesta este generat, de asemenea, aleator. Se evaluează o entropie a
sursei numită si entropie apriori.
Probabilitătile simbolurilor sursei observate la iesirea canalului rezultă prin
multiplicarea vectorului asociat sursei cu matricea canalului. Rezultatul acestei
operatii este un vector cu m componente care însumate dau tot unitatea.
Entropia acestei surse secundare este uzual diferită de entropia apriori datorită
“lucrării” canalului asupra informatiei generate de sursă.
În conditiile observării unui anumit simbol/caracter la iesire se pot evalua
probabilităti conditionate de acest eveniment pentru fiecare simbol al sursei.
Este ceea ce se face în program în secventa mediană, acolo unde se calculează
matricea pab. Coloanele acestei matrici sunt tocmai probabilitătile conditionate
mentionate. Suma lor este unitară si se calculează o entropie aposteriori a sursei
în fiecare caz, pentru fiecare din cele m observatii posibile la iesirea canalului.
O medie a acestor entropii care ia în considerare probabilitătile simbolurilor la
iesire produce o entropie a sursei de la intrare conditionată de sursa de la iesirea
canalului.
Diferenta dintre entropia (apriori) a sursei si entropia conditionată evaluată
astfel poartă numele de transinformatie sau de informatie mutuală si este
cantitatea de informatie transmisă prin canal.
Transinformatia este variabilă pentru surse diferite care debitează la intrarea
canalului. Variabilitatea se referă numai la lista probabilitătilor de aparitie a
simbolurilor sursei si nu la modificarea vreuneia din cele două multimi
alfabetice, de intare si de iesire, cu care lucrează canalul.
Transinformatia este o mărime simetrică: dacă se schimbă intrarea cu iesirea, se
consideră intrare sursa observată până acum ca iesire, iar matricile de
probabilităti conditionate se schimbă între ele, pab în loc p, se obtine aceeasi
valoare a transinformatiei. Un canal lucrează la fel de bine (sau de rău) si într-
un sens si în celălalt. Se propune studentilor realizarea unei variante a
programului capabilă a evalua informatia mutuală prin canal în situatia aceasta
modificată.
Există o limită superioară a transinformatiei, care nu poate fi depăsită. Această
transinformatie maximă se numeste capacitatea canalului. Capacitatea
canalului se poate evalua analitic rezolvând o problemă de extrem supus la
legături/restrictii, pe o multime de n variabile, probabilitătile simbolurilor de la
intare, supuse la legătura/restrictia unică de sumă generală egală cu unitatea.

41
În program s-a preferat numai o explorare a limitei pentru transinformatie prin
generarea aleatoare a mai multor surse cu n simboluri si prin evaluarea de
fiecare dată a informatiei mutuale. Se poate observa o cea-mai-mare-valoare a
transinformatiei între aceste “realizări” posibile, care se apropie de capacitatea
canalului.

clear
n=3;
m=4;
p=rand(n,m);
for i=1:n
suml=sum(p(i,:));
p(i,:)=p(i,:)/suml;
end % crearea unei matrici a canalului
matricea_canalului=p
a=rand(1,n);
a=a/sum(a); % probabilitati sursa de intrare
b=a*p; % probabilitati sursa observata la iesire
probabilitatile_simbolurilor_de_intrare=a
ha=entropie(a); % entropia apriori
entropia_apriori=ha
probabilitatile_simbolurilor_de_iesire=b
hb=entropie(b);
entropia_sursei_observate_la_ieisre=hb
pab=zeros(n,m);
for i=1:n
for j=1:m
pab(i,j)=p(i,j)*a(i)/b(j);
end
end
probabilitati_intrare_condiditionate_de_iesiri=pab
for j=1:m
enap(j)=entropie((pab(:,j))');
end % entropii aposteriori
entropii_aposteriori=enap
entropia_conditionata_de_iesirea_observata=b*enap'
transinformatia=ha-b*enap'
display('*** Uremaza o cautare aleatoare a capacitatii canalului
***')
display('*** Pentru continuare apasati Enter! ***')
pause % cautarea aleatoare a capacitatii canalului
for k=1:20
a=rand(1,n);a=a/sum(a);b=a*p;
ha=entropie(a);
for i=1:n
for j=1:m
pab(i,j)=p(i,j)*a(i)/b(j);
end
end
for j=1:m
enap(j)=entropie((pab(:,j))');
end
sursa_la_intrare_si_transinformatia=[a ha-b*enap']

42
end

Problema 39.

Arǎtati cǎ un canal de transmitere a informatiei caracterizat de matricea


 2 / 3 1/ 3 0 
P =  1 / 3 1 / 3 1 / 3 
 0 1 / 3 2 / 3
are o capacitate care este atinsǎ la o intrare care are un simbol de probabilitate
nulǎ. Care este capacitatea acestui canal? Gǎsiti o explicatie intuitivǎ a faptului
cǎ una din literele alfabetului de intrare nu este folositǎ.

Problema 40.

Se considerǎ un canal cu intrǎri binare care are si erori si stergere (stergere =


aparitia la iesire a unui al treilea simbol, neuzual). Fie α probabilitatea erorii si
fie ε probabilitatea stergerii astfel încât canalul este reprezentat de graful din
figurǎ:

Aflati capacitatea acestui canal.


Particularizati pentru cazul canalului binar simetric (ε = 0).
Particularizati pentru cazul canalului binar cu stergere (α = 0).

Problema 41.

Se considerǎ un canal cu alfabet binar care preia simboluri de doi biti si produce
la iesire simboluri de doi biti conform asocierii urmǎtoare: 00 → 01, 01 → 10,
10 → 11 si 11 → 00. Astfel, dacǎ secventa de doi biti 01 este introdusǎ în
canal, iesirea este 10 cu probabilitatea 1. Fie X1, X2 douǎ simboluri la intrare si
Y1, Y2 simbolurile de iesire corespunzǎtoare.
Calculati informatia mutualǎ I(X1, X2 ; Y1, Y2) ca functie de distributia la intrare
a celor patru perechi de intrare posibile.
Arǎtati cǎ pentru transmiterea în perechi capacitatea acestui canal este de 2 biti.
Arǎtati cǎ la maximizare prin distributia la intrare, I(X1 ; Y1) = 0.

43
Asadar, distributia secventelor de intrare care atinge capacitatea canalului nu
maximizeazǎ în mod necesar informatia mutualǎ între simboluri individuale si
corespunzǎtoarele lor la iesire.

Problema 42. Canal sumǎ

Se considerǎ douǎ canale fǎrǎ memorie (X1, p(y1/x1),Y1) si (X2, p(y2/x2),Y2) cu


capacitǎtile C1, respectiv C2. Se defineste un canal nou astfel: alfabetul de
intrare este reuniunea celor douǎ multimi alfabetice X1 si X2, alfabetul de iesire
este reuniunea celor douǎ multimi alfabetice Y1 si Y2 si matricea de probabilitǎti
de tranzitie este p(y/x) = p(y1/x1) dacǎ x ∈ X1 si p(y/x) = p(y2/x2) dacǎ x ∈ X2.
Asadar, canalul are la dispozitie ambele canale simple, dar acestea sunt utilizate
alternativ. Arǎtati cǎ acest canal sumǎ are capacitatea
C = log(2 C1 + 2 C2 )
Utilizati acest rezultat pentru a calcula capacitatea canalului urmǎtor:

1–p
0 0
p
p
1 1
1–p

1
2 2

Problema 43. Capacitatea canalelor

Calculati capacitatea canalelor de mai jos, caracterizate de multimile alfabetice


specificate si de matricile de tranzitie alǎturate:
 1/ 3 1/ 3 1 / 3
X = Y = {0, 1, 2}, p ( y | x) =  1 / 3 1 / 3 1 / 3
 1 / 3 1 / 3 1 / 3
1/ 2 1/ 2 0 
X = Y = {0, 1, 2}, p ( y | x ) =  0 1 / 2 1 / 2
 1 / 2 0 1 / 2
 p 1− p 0 0 
1 − p p 0 0 
X = Y = {0, 1, 2, 3}, p ( y | x) =  0 0 q 1 − q
 0 0 1− q q 

Problema 44. Capacitatea canalelor

Care sunt capacitătile canalelor

44
1 p 1− p 0 0 1
2 0 p 1− p 0 2
X Y
3 0 0 p 1 − p 3
 
 4 1− p 0 0 p 4
 1 p 1− p 0 1

X2 0 p 1 − p 2 Y ?
 3 1 − p 0 p 3

Problema 45. Canal cu stergere

Fie {X, p(y|x), Y} un canal discret fără memorie de capacitate C. Se admite că


acest canal este conectat imediat în cascadă cu un canal cu stergere {Y, p(s|y),
S} care sterge fractia α din simboluri.
Mai precis, S = {y1, y2, …, ym, e} si Pr[S = y|X = x] = (1 – α)p(y|x) pentru y ∈ Y
si Pr[S = e|X = x] = α.
Evaluati capacitatea acestui canal.

Problema 46. Informatia mutuală între fetele unei monede

a. Se consideră o aruncare a unei monede corecte. Care este informatia


mutuală între fata de deasupra si fata de dedesubt a monedei?
b. Un zar corect cu 6 fete este făcut să se rostogolească. Care este informatia
mutuală între fata de deasupra si fata de dedesubt?
c. Care este informatia mutuală între faţa de deasupra a unui zar si faţa din faţă
(cea mai vizibilă pentru experimentator)?
Solutie:
a. Se observă că
I(T; B) = H(B) – H(B|T) = log2 = 1
deoarece B ~ Bernoulli(1/2) si B este o functie de T. Aici B si T sunt
prescurtări pentru “bottom” si “top”.
b. Se observă că fata de dedesubt B este din nou functie de fata de deasupra T
(B + T = 7) si sunt sase posibilităti egal probabile pentru B. Asadar,
I(T; B) = H(B) – H(B|T) = log6 = log3 + 1
c. Se observă că având rezultatul relativ la faţa din faţă F, rămân patru
posibilităţi egal probabile pentru faţa de deasupra T. Asadar,
I(T; F) = H(B) – H(B|F) = log6 – log4 = log3 – 1
deoarece T este repatizat uniform pe {1, 2, …, 6}.

Problema 47. Dubla privire

Comparati informatia mutuală I(X; Y1, Y2) pe care (Y1, Y2) o furnizează despre X,
cu suma informatiilor mutuale I(X; Y1) si I(X; Y2) pentru fiecare din cele două
functii de probabilitate de mai departe.
a. Două priviri independente:

45
p(x, y1, y2) = p(x)p(y1|x)p(y2|x)
b. O privire la două observatii independente:
p(x, y1, y2) = p(y1)p(y2)p(x|y1, y2)
Solutie:
a. Două priviri independente:
I(X; Y1, Y2) = H(Y1, Y2) – H(Y1,Y2|X) =
= [H(Y1) + H(Y2) – I(Y1;Y2)] – H(Y1,Y2|X) =
= [H(Y1) + H(Y2) – I(Y1;Y2)] – [H(Y1|X) + H(Y2|X)] =
= I(X;Y1) + I(X;Y2) – I(Y1;Y2) ≤ I(X;Y1) + I(X;Y2)
În succesiunea de relatii de mai sus s-au utilizat: relatia de definitie a
informatiei mutuale, formula pentru calculul entropiei surselor compuse,
absenta conditionării între Y1 si Y2 când este dat X si nenegativitatea informatiei
mutuale.
b. O privire la două observatii independente:
I(X; Y1, Y2) = H(Y1, Y2) – H(Y1,Y2|X) =
= [H(Y1) + H(Y2)] – H(Y1,Y2|X) =
= [H(Y1) + H(Y2)] – [H(Y1|X) + H(Y2|X) – I(Y1;Y2|X)] =
= I(X;Y1) + I(X;Y2) + I(Y1;Y2|X) ≥ I(X;Y1) + I(X;Y2)
Aici s-au folosit: relatia de definitie a informatiei mutuale, independenta între
Y1 si Y2, identitatea pentru entropia H(Y1,Y2|X), din nou relatia de definitie a
informatiei mutuale si nenegativitatea informatiei mutuale.

Problema 48. Rata entropiei pentru secvente restrictionate

În cazul înregistrǎrilor magnetice, mecanismul de înregistrare si de redare a


bitilor impune restrictii asupra secventei de biti care pot fi înregistrati. De pildǎ,
pentru a asigura sincronizarea adecvatǎ, este necesar adesea a limita lungimea
secventelor de zerouri între doi de unu. De asemenea pentru a reduce
interferenta între simboluri, poate fi necesar a cere cel putin un zero între doi de
unu. Se aratǎ în continuare un exemplu simplu de astfel de restrictie.
Se presupune cǎ se cere ca într-o secventǎ, între doi de 1 sǎ fie cel putin un 0 si
cel mult doi de zero. Astfel, secvente de genul 101001 si 0101001 sunt valide,
dar 0110010 si 0000101 nu sunt. Se urmǎreste calculul numǎrului de secvente
valide de lungime n.
a. Arǎtati cǎ multimea de secvente restrictionate este aceeasi cu multimea
cǎilor permise în diagrama de stare alǎturatǎ.

1 2 3

46
b. Fie Xi(n) numǎrul de cǎi valide de lungime n cu finalul în starea i.
Argumentati cǎ X(n) = [X1(n) X2(n) X3(n)]T verificǎ relatia de recurentǎ de
mai jos:
 X 1 (n)   0 1 1  X 1 (n − 1) 
 X 2 (n) =  1 0 0  X 2 (n − 1) = AX(n − 1)
 X (n)   0 1 0  X (n − 1) 
 3   3 
T
cu conditia initialǎ X(1) = [1 1 0] .
c. Apoi, prin inductie are loc
X(n) = AX(n – 1) = A2X(n – 2) = … = An–1X(1)
Utilizând descompunerea lui A dupǎ valorile proprii, pentru cazul valorilor
proprii distincte, se poate scrie A = U –1ΛU, cu Λ matricea diagonalǎ a
valorilor proprii. Atunci An–1 = U –1Λn–1U. Arǎtati cǎ se poate scrie
n− 1
X(n) = λ 1n − 1 Y1 + λ n2− 1 Y2 + λ 3 Y3
în care Y1, Y2, Y3 nu depind de n. Pentru n mare, aceastǎ sumǎ este
dominatǎ de termenul cel mai mare. Demonstrati cǎ pentru i = 1, 2, 3 are loc
1
log X i (n) → log λ
n
cu λ valoarea proprie (pozitivǎ) ce mai mare. Astfel, pentru n mare,
numǎrul de secvente de lungime n creste ca λn. Calculati λ pentru matricea
A de mai sus (cazul în care valorile proprii nu sunt distincte poate fi
manipulat în mod similar).
d. Se abordeazǎ acum o tratare diferitǎ. Se considerǎ lantul Markov cu
diagrama de stare datǎ la punctul a. dar cu probabilitǎtile tranzitiilor
arbitrare. Prin urmare matricea de tranzitie a lantului Markov este
0 α 1
P = 1 0 0
 0 1 − α 0
Arǎtati cǎ distributia stationarǎ a lantului Markov este
T
 1 1 1− α 
µ = 
 3 − α 3 − α 3 − α 
e. Maximizati rata entropiei lantului Markov în raport cu α. Care este entropia
maximǎ a lantului?
f. Comparati rata maximǎ a entropiei obtinutǎ la punctul e. cu log λ de la
punctul c. De ce cele douǎ rǎspunsuri sunt identice?

Problema 49. Un canal de comunicatie

Figura alǎturatǎ reprezintǎ sumar un asa-numit canal de comunicatie.

47
Z

X=±A + Y=X+Z

Intrarea este fie X = A, fie X = – A, cu A o amplitudine de stabilit în cursul


rezolvǎrii problemei. Canalul are zgomotul aditiv Z, gaussian cu media 0 si
dispersia 100.
a. Gǎsiti constanta K astfel încât
Pr(– A – K ≤ Y < – A + K|X = – A) = 0,90
Pr(A – K ≤ Y ≤ A + K|X = A) = 0,90
Valoarea K se poate calcula chiar dacǎ A nu a fost încǎ evaluat.(Indicatie: se
utilizeazǎ faptul cǎ dacǎ X = – A atunci distributia conditionatǎ a lui Y este
gaussianǎ cu media – A si cu dispersia 100 si dacǎ X = A atunci distributia
conditionatǎ a lui Y este gaussianǎ cu media A si cu dispersia 100).
b. Acum, alegeti un A cel mai mic numǎr real pozitiv astfel ca evenimentele {–
A – K ≤ Y < – A + K} si {A – K ≤ Y ≤ A + K} sǎ nu se poatǎ produce
simultan.
c. Se presupune cǎ pentru numerele K si A stabilite mai devreme, se formeazǎ
din observatiile Y estimatia X̂ a intrǎrii X a canalului conform relatiei
Xˆ =  − AA − A − K ≤altfel
Y < − A+ K

Intuitiv, estimarea X̂ a lui X ar trebui sǎ fie corectǎ în cel putin 90% din
cazuri. Verificati aceastǎ posibilitate dupǎ procedura care urmeazǎ:
 Utilizati Matlab-ul pentru a alege pseudoaleator un vector x de 10.000
de intrǎri ale canalului simulate, astfel încât fiecare intrare aleasǎ la
întâmplare sǎ fie din multimea {– A, A}.
 Utilizati Matlab-ul pentru a alege pseudoaleator un vector z de 10.000
de valori ale componentei de zgomot al canalului simulate, cu functia
Matlab randn.
 Formati vectorul y = x + z de 10.000 de iesiri simulate.
 Formati un vector xhat de 10.000 de estimǎri ale intrǎrilor canalului,
fiecare formatǎ din componenta y potrivit regulei Y → X̂ de mai sus.
 Estimati probabilitatea Pr(X = X̂ ) prin calculul frecventei cu care
termenii din x sunt egali cu termenii corespunzǎtori din xhat.

48
CODAREA PENTRU CANALE FĂRĂ PERTURBATII

Lucrarea 5.

Tema 1. Algoritmul Huffman pentru coduri compacte

Se consideră o sursă fără memorie generatoare a n simboluri, 2 ≤ n ≤ 15.


Simbolurile pot fi chiar numerele naturale de la 1 la n.
Programul Matlab care urmează este implementarea algoritmului Huffman în
cazul binar si se disting cu usurintă câteva etape de calcul.
Se alege mai întâi numărul n de simboluri, printr-o modificare în linia a doua a
programului.
Se generează aleator n numere subunitare, probabilitătile de aparitie a celor n
simboluri. Probabilitătile se ordonează descrescător, asa cum cere algoritmul
Huffman.
Se parcurge partea directă a algoritmului când se realizează succesiv sursele
reduse, cu grija de a fi si ordonate. Se ajunge în cele din urmă la o sursă redusă
cu numai două simboluri.
Urmează parcursul invers în cadrul căruia se atribuie efectiv, pas cu pas, coduri
simbolurilor sursei.
Se afisează cuvintele alocate ale codului alături de probabilitătile simbolurilor
asociate.
Se evaluează lungimea medie a codului si entropia sursei. Se poate face astfel o
comparatie între lungimea medie a codului cu entropia sursei.
Se recomandă repetarea executării calculelor pentru surse diferite între ele prin
lista de probabilităti si/sau prin numărul n de simboluri generate.
Orice ameliorare a programului propus este apreciată.

clear
n=15; % numarul de simboluri ale sursei
if n>15
n=15;
end % o limitare a numarului de simboluri
if n<2
n=2;
end % o alta limitare a numarului de simboluri
simb=1:n; % simbolurile sursei
prob=rand(1,n); % generarea a n numere aleatoare intre 0 si 1
prob=prob/sum(prob); % normaliarea listei de n numere; suma=1
%prob=(1/n)*ones(1,n); % prin decomentare, probabilitatile se
fac egale
i=zeros(n,n);
lun=i;
num=i;
y=i;
[y(1,:),i1]=sort(prob,'descend'); % ordonarea probabiltatilor
for j=1:n

49
simb1(j)=simb(i1(j));
end
simboluri=simb
probabilitati=prob
simboluri_ordonate=simb1
probabilitati_ordonate=y(1,:)
i(1,:)=1:n;
for j=2:(n-1)
y(j,:)=y(j-1,:);
y(j,n-j+1)=y(j-1,n-j+2)+y(j-1,n-j+1);
y(j,n-j+2)=0;
[y(j,1:(n-j+1)),i(j,1:(n-j+1))]=sort(y(j,1:(n-
j+1)),'descend');
end % secventa directa a algoritmului Huffman
lun(n-1,1)=1;lun(n-1,2)=1;
num(n-1,1)=0;num(n-1,2)=1;
for j=(n-1):(-1):2
[l,m]=max(i(j,:));
%[l m]
i2=0;
for k=1:(n-j+1)
if k~=m
i2=i2+1;
lun(j-1,i2)=lun(j,k);
num(j-1,i2)=num(j,k);
end
end
lun(j-1,l)=lun(j,m)+1;
lun(j-1,l+1)=lun(j,m)+1;
num(j-1,l)=2*num(j,m);
num(j-1,l+1)=2*num(j,m)+1;
end % secventa inversa a algoritmului Huffman
lungimi_cuvinte_de_cod=lun(1,:) % afisarea lungimilor
cuvintelor de cod
cuvinte_de_cod='';
for j=1:n
cuvinte_de_cod=[cuvinte_de_cod,'
',dec2bin(num(1,j),lun(1,j))];
end
cuvinte_de_cod % afisarea cuvintelor de cod Huffman
entropia_sursei=-y(1,:)*log((y(1,:))')/log(2) % entropia
sursei
lungimea_medie_a_codului=lun(1,:)*(y(1,:))' % lungimea medie
a codului

Tema 2. Un cod Huffman în acţiune

Se selectează un fisier de un tip anumit. Numele lui (si calea dacă este cazul)
sunt înlocuite în linia a doua a programului. În varianta alăturată, este trecut

50
sirul 'TCI5.doc' care presupune că fisierul este în acelasi folder/director cu
programul.
Se citeste fisierul ales ca o succesiune de octeti (bytes). Se face statistica
fisierului considerat sursă de informatie, sursă de simboluri ASCII
corespunzătoare unor numere de la 0 la 255. Frecventele relative sunt
considerate probabilităti. Fisierul este considerat “fără memorie’.
Se aplică algoritmul Huffman care duce la alocarea unor cuvinte de cod fiecărui
cod ASCII.
Se calculează lungimea medie a codului, se calculează eficienta codului.
Se recomandă executarea programului pentru mai multe fisiere de acelasi tip
(aceeasi extensie), pentru fisiere de tipuri variate. Se compară eficienta
codurilor în cazurile studiate, se compară si cu eficienta comprimării fisierelor
cu programele de comprimare comerciale.

clear
idf=fopen('TCI5.doc'); % se creaza un identificator pentru
fisierul ales
[a,n]=fread(idf); % se citeste fisierul ca o secventa de n
bytes
st=fclose(idf); % se inchide fisierul
p=zeros(256,256);
f=zeros(1,256);iper=f;
for i=1:n % se calculeaza frecventele absolute
f(a(i)+1)=f(a(i)+1)+1;
end
sf=sum(f);
f=f/sf; % se calculeaza frecventele relative
h=0; % se calculeaza entropia
for i=1:256
if f(i)>0
h=h-f(i)*log(f(i));
end
end
h=h/log(2);
% incepe comprimarea Huffman
[y,in]=sort(-f);
p(:,1)=-y';
for k=2:255 % se realizeaza "redusele" (parcursul
direct)
z=p(258-k,k-1)+p(257-k,k-1);
p(257-k,k)=z;
p(258-k,k)=0;
p(1:256-k,k)=p(1:256-k,k-1);
[y,inc]=sort(-p(:,k));
p(:,k)=-y;
ina=(1:256)';
iper(k)=1;
for i=1:257-k % se localizeaza simbolul rezultat din alte
doua
if ina(i)==inc(i)
iper(k)=i+1;

51
end
iper(k)=min(iper(k),257-k);
end
end
% parcursul invers
lcod=zeros(256,1);
lcod(1)=1;lcod(2)=1;nc=1;
for k=254:(-1):1
nc=nc+1;
lcper=lcod(iper(k+1));
for i=1:nc
if i>iper(k+1)
lcod(i-1)=lcod(i);
end
end
lcod(nc)=lcper+1;
lcod(nc+1)=lcod(nc);
end
lmed=lcod'*p(:,1);
'Entropia si lungimea medie a codului (biti):',h,lmed
'eficienta codului (%):',efi=100*h/lmed

Lucrarea 6. Codarea Aritmetică

Suportul teoretic al codǎrii aritmetice si multe aspecte de ordin practic ale


acestui gen de codare sunt foarte bine explicate în lucrarea Arithmetic Coding
revealed. A guided tour from theory to praxis de E.Bodden, M.Clasen si
J.Kneis. Lucrarea este afisatǎ în traducere partialǎ, în acelasi loc unde se aflǎ
postat si prezentul volum de aplicatii. Tot acolo, în Anexele lucrǎrii este datǎ si
o implementare în C++ a codǎrii aritmetice.
Anexele acestea sunt reproduse în continuare, cu singura deosebire cǎ aproape
toate comentariile din sectiunile programului propus de autorii mentionati au
fost traduse în româneste.
Lectura lucrǎrii citate si parcurgerea Anexelor ei reprezintǎ o invitatie la a
experimenta si a aprofunda tema atât de generoasǎ a codǎrii aritmetice.

Anexe. O implementare de referintǎ în C++

Aceastǎ implementare ar trebui sǎ prezinte întregul algoritm într-un mod lipsit


de ambibuitǎti pentru a rǎspunde oricǎror întrebǎri deschise relativ la detaliile
implementǎrii. S-a utilizat un model simplu de ordinul 0 adaptiv. În consecintǎ,
rata de compresie este destul de scǎzutǎ, dar modelul poate fi oricând schimbat
prin dezvoltarea unuia nou din modelul de bazǎ.

A.1 Codor aritmetic (header)

#ifndef __ARITHMETICCODERC_H__
#define __ARITHMETICCODERC_H__
#include <fstream>

52
using namespace std;
class ArithmeticCoderC
{
public:
ArithmeticCoderC();
void SetFile( fstream *file );
void Encode( const unsigned int low_count,
const unsigned int high_count,
const unsigned int total );
void EncodeFinish();
void DecodeStart();
unsigned int DecodeTarget( const unsigned int total );
void Decode( const unsigned int low_count,
const unsigned int high_count );
protected:
// bit operations
void SetBit( const unsigned char bit );
void SetBitFlush();
unsigned char GetBit();
unsigned char mBitBuffer;
unsigned char mBitCount;
// in-/output stream
fstream *mFile;
// encoder & decoder
unsigned int mLow;
unsigned int mHigh;
unsigned int mStep;
unsigned int mScale;
// decoder
unsigned int mBuffer;
};
#endif

A.2 Codor aritmetic

#include "ArithmeticCoderC.h"
#include "tools.h"
// constante pentru divizarea spatiului de numere intregi
// reprezentabile pe 32 biti
// bitul cel mai semnificativ este mentinut liber pentru
// a preveni depasirile
const unsigned int g_FirstQuarter = 0x20000000;
const unsigned int g_ThirdQuarter = 0x60000000;
const unsigned int g_Half = 0x40000000;
ArithmeticCoderC::ArithmeticCoderC()
{
mBitCount = 0;
mBitBuffer = 0;
mLow = 0;
mHigh = 0x7FFFFFFF;
// se lucreaza cu 31 de biti, cei mai putin semnificativi
mScale = 0;
mBuffer = 0;
mStep = 0;

53
}
void ArithmeticCoderC::SetFile( fstream *file )
{
mFile = file;
}
void ArithmeticCoderC::SetBit( const unsigned char bit )
{
// se adauga un bit la buffer
mBitBuffer = (mBitBuffer << 1) | bit;
mBitCount++;
if(mBitCount == 8) // bufferul plin
{
// scriere
mFile-
>write(reinterpret_cast<char*>(&mBitBuffer),sizeof(mBitBuffer));
mBitCount = 0;
}
}
void ArithmeticCoderC::SetBitFlush()
{
// se umple bufferul cu zerouri pana la urmatorul byte
while( mBitCount != 0 )
SetBit( 0 );
}
unsigned char ArithmeticCoderC::GetBit()
{
if(mBitCount == 0) // bufferul gol
{
if( !( mFile->eof() ) ) // fisierul citit complet?
mFile-
>read(reinterpret_cast<char*>(&mBitBuffer),sizeof(mBitBuffer));
else
mBitBuffer = 0; // se ataseaza zerouri
mBitCount = 8;
}
// se extrage un bit din buffer
unsigned char bit = mBitBuffer >> 7;
mBitBuffer <<= 1;
mBitCount--;
return bit;
}
void ArithmeticCoderC::Encode( const unsigned int low_count,
const unsigned int high_count,
const unsigned int total )
// total < 2ˆ29
{
// se partitioneaza spatiul numerelor in pasi unici
mStep = ( mHigh - mLow + 1 ) / total;
// interval deschis superior => +1
// se actualizeaza limita superioara
mHigh = mLow + mStep * high_count - 1;
// interval deschis superior => -1
// se actualizeaza limita inferioara
mLow = mLow + mStep * low_count;

54
// se aplica scalari E1/E2
while( ( mHigh < g_Half ) || ( mLow >= g_Half ) )
{
if( mHigh < g_Half )
{
SetBit( 0 );
mLow = mLow * 2;
mHigh = mHigh * 2 + 1;
// se executa scalari E3
for(; mScale > 0; mScale-- )
SetBit( 1 );
}
else if( mLow >= g_Half )
{
SetBit( 1 );
mLow = 2 * ( mLow - g_Half );
mHigh = 2 * ( mHigh - g_Half ) + 1;
// se executa scalari E3
for(; mScale > 0; mScale-- )
SetBit( 0 );
}
}
// E3
while( ( g_FirstQuarter <= mLow ) && ( mHigh <
g_ThirdQuarter ) )
{
// se retin scalarile E3 necesare
mScale++;
mLow = 2 * ( mLow - g_FirstQuarter );
mHigh = 2 * ( mHigh - g_FirstQuarter ) + 1;
}
}
void ArithmeticCoderC::EncodeFinish()
{
// exista doua posibilitati de distribuire pentru mLow and
// mHigh, ceea ce inseamna ca doi biti sunt suficienti pentru
// a le deosebi
if( mLow < g_FirstQuarter )
// mLow < FirstQuarter < Half <= mHigh
{
SetBit( 0 );
for( int i=0; i<mScale+1; i++ ) // se executa scalarea E3
SetBit(1);
}
else // mLow < Half < ThirdQuarter <= mHigh
{
SetBit( 1 );
// zerouri adaugate automat de decodor;
// nu este necesar a le trimite
}
// se goleste bufferul de iesire
SetBitFlush();
}
void ArithmeticCoderC::DecodeStart()

55
{
// se umple bufferul cu biti din fluxul de intrare
for( int i=0; i<31; i++ )
// se utilizeaza numai 31 de biti, cei mai putin semnificativi
mBuffer = ( mBuffer << 1 ) | GetBit();
}
unsigned int ArithmeticCoderC::DecodeTarget( const unsigned int
total )
// total < 2ˆ29
{
// se partitioneaza spatiul numerelor in pasi unici
mStep = ( mHigh - mLow + 1 ) / total;
// interval deschis superior => +1
// se returneaza valoarea curenta
return ( mBuffer - mLow ) / mStep;
}
void ArithmeticCoderC::Decode( const unsigned int low_count,
const unsigned int high_count )
{
// se actualizeaza limita superioara
mHigh = mLow + mStep * high_count - 1;
// interval deschis superior => -1
// se actualizeaza limita inferioara
mLow = mLow + mStep * low_count;
// scalare E1/E2
while( ( mHigh < g_Half ) || ( mLow >= g_Half ) )
{
if( mHigh < g_Half )
{
mLow = mLow * 2;
mHigh = mHigh * 2 + 1;
mBuffer = 2 * mBuffer + GetBit();
}
else if( mLow >= g_Half )
{
mLow = 2 * ( mLow - g_Half );
mHigh = 2 * ( mHigh - g_Half ) + 1;
mBuffer = 2 * ( mBuffer - g_Half ) + GetBit();
}
mScale = 0;
}
// scalare E3
while( ( g_FirstQuarter <= mLow ) && ( mHigh <
g_ThirdQuarter ) )
{
mScale++;
mLow = 2 * ( mLow - g_FirstQuarter );
mHigh = 2 * ( mHigh - g_FirstQuarter ) + 1;
mBuffer = 2 * ( mBuffer - g_FirstQuarter ) + GetBit();
}
}

A.3 Model Base Class (header)

56
#ifndef __MODELI_H__
#define __MODELI_H__
#include "ArithmeticCoderC.h"
enum ModeE
{
MODE_ENCODE = 0,
MODE_DECODE
};
class ModelI
{
public:
void Process( fstream *source, fstream *target, ModeE mode );
protected:
virtual void Encode() = 0;
virtual void Decode() = 0;
ArithmeticCoderC mAC;
fstream *mSource;
fstream *mTarget;
};
#endif

A.4 Model Base Class

#include "ModelI.h"
void ModelI::Process( fstream *source, fstream *target, ModeE
mode )
{
mSource = source;
mTarget = target;
if( mode == MODE_ENCODE )
{
mAC.SetFile( mTarget );
// codare
Encode();
mAC.EncodeFinish();
}
else // MODE_DECODE
{
mAC.SetFile( mSource );
mAC.DecodeStart();
// decodare
Decode();
}
};

A.5 Model Order 0 (Header)

#ifndef __MODELORDER0C_H__
#define __MODELORDER0C_H__
#include "ModelI.h"
class ModelOrder0C : public ModelI
{

57
public:
ModelOrder0C();
protected:
void Encode();
void Decode();
unsigned int mCumCount[ 257 ];
unsigned int mTotal;
};
#endif

A.6 Model Order 0

#include "ModelOrder0C.h"
ModelOrder0C::ModelOrder0C()
{
// se initializeaza probabilitatile cu 1
mTotal = 257; // 256 + simbolul escape pentru incheiere
for( unsigned int i=0; i<257; i++ )
mCumCount[i] = 1;
}
void ModelOrder0C::Encode()
{
while( !mSource->eof() )
{
unsigned char symbol;
// se citeste un simbol
mSource->read( reinterpret_cast<char*>(&symbol),
sizeof( symbol ) );
if( !mSource->eof() )
{
// frecventele de cumuleaza
unsigned int low_count = 0;
for( unsigned char j=0; j<symbol; j++ )
low_count += mCumCount[j];
// se codeaza simbolul
mAC.Encode( low_count, low_count + mCumCount[j], mTotal );
// se actualizeaza modelul
mCumCount[ symbol ]++;
mTotal++;
}
}
// se scrie simbolul escape pentru incheiere
mAC.Encode( mTotal-1, mTotal, mTotal );
}
void ModelOrder0C::Decode()
{
unsigned int symbol;
do
{
unsigned int value;
// se citeste o valoare
value = mAC.DecodeTarget( mTotal );
unsigned int low_count = 0;
// se determina simbolul

58
for( symbol=0; low_count + mCumCount[symbol] <= value; symbol+
+ )
low_count += mCumCount[symbol];
// se scrie simbolul
if( symbol < 256 )
mTarget->write( reinterpret_cast<char*>(&symbol), sizeof( char )
);
// se adapteaza decodorul
mAC.Decode( low_count, low_count + mCumCount[ symbol ] );
// se actualizeaza modelul
mCumCount[ symbol ]++;
mTotal++;
}
while( symbol != 256 );
// pana la citirea simbolului de incheiere
}

A.7 Tools

#ifndef __TOOLS_H__
#define __TOOLS_H__
int inline min( int a, int b )
{
return a<b?a:b;
};
#endif

A.8 Main

#include <iostream>
#include <fstream>
using namespace std;
#include "ModelOrder0C.h"
// signature: "ACMC" (0x434D4341, intel byte order)
// (magic number for recognition of encoded files)
const int g_Signature = 0x434D4341;
int __cdecl main(int argc, char *argv[])
{
cout << "Arithmetic Coding" << endl;
if( argc != 3 )
{
cout << "Syntax: AC source target" << endl;
return 1;
}
fstream source, target;
ModelI* model;
// se alege modelul, aici tocmai modelul de ordinul 0
model = new ModelOrder0C;
source.open( argv[1], ios::in | ios::binary );
target.open( argv[2], ios::out | ios::binary );
if( !source.is_open() )
{
cout << "Cannot open input stream";

59
return 2;
}
if( !target.is_open() )
{
cout << "Cannot open output stream";
return 3;
}
unsigned int signature;
source.read(reinterpret_cast<char*>(&signature),sizeof(signature
));
if( signature == g_Signature )
{
cout << "Decoding " << argv[1] << " to " << argv[2] << endl;
model->Process( &source, &target, MODE_DECODE );
}
else
{
cout << "Encoding " << argv[1] << " to " << argv[2] << endl;
source.seekg( 0, ios::beg );
target.write( reinterpret_cast<const char*>(&g_Signature),
sizeof(g_Signature) );
model->Process( &source, &target, MODE_ENCODE );
}
source.close();
target.close();
return 0;
}

Problema 50. Coduri nepotrivite

Care din codurile următoare nu pot fi coduri Huffman, oricare ar fi valorile


probabilitătilor?
a. {1, 01, 00}
b. {00, 01, 10, 110}
c. {01, 10}
Solutie: Codurile Huffman sunt coduri compacte. Ele satisfac relatia (Shannon)
H(X) ≤ L < H(X) + 1
sau
0 ≤ L – H(X) < 1
cu L lungimea medie a codului si cu H(X) entropia sursei codate.
a. Se admite că probabilitătile asociate simbolurilor sursei sunt [p, (1 – p)/2 +
α, (1 – p)/2 – α], cu un α care să nu facă probabilitătile numere negative
sau supraunitare. Se evaluează lungimea medie
L = 1∙p + 2∙[(1 – p)/2 + α] + 2∙[(1 – p)/2 – α]= 2 – p
si entropia
H(X) =
= – plogp – [(1 – p)/2 + α]log[(1 – p)/2 + α] – [(1 – p)/2 – α]log[(1 – p)/2 – α]

60
Ultimii doi termeni însumati produc un rezultat maximal atunci când α = 0,
adică atunci când cele două simboluri sunt echiprobabile, astfel că pentru un
p dat, entropia maximă este
Hmax(X) = – plogp – 2[(1 – p)/2]log[(1 – p)/2] =
= – plogp – (1 – p)log(1 – p) + 1 = 1 + H(p)
Prima parte a dublei inegalităti Shannon modificate devine în cazul critic
Hmax(X)
L – Hmax(X) = 1 – p – H(p) ≥ 0
Pentru valorile extreme, p = 0, p = 1, functia în p de mai sus devine 1,
respectiv 0 si inegalitatea este satisfăcută.
Derivata aceleiasi expresii este
– 1 – log[(1 – p)/p]
si este negativă pentru orice p. Functia de p este monotonă si scăzătoare de
la 1 la 0 si inegalitatea primă este satisfăcută pentru p oarecare.
Pentru inegalitatea a doua trebuie identificată tot asa situatia ce mai
defavorabilă. Aceasta se produce pentru α = (1 – p)/2. Entropia este în acest
caz
Hmin(X) = – plogp – (1 – p)log(1 – p) = H(p)
Se testează acum inegalitatea
L – H(X) ≤ L – Hmin(X) = 2 – p – H(p) < 1
La extreme, p = 0, p = 1, expresia în p ia valorile 2, respectiv 1. Nici una nu
satisface a doua parte a inegalitătii lui Shannon. Monotonia functiei în p nu
aduce cazuri noi. Codul nu poate fi de tipul Huffman pentru orice set de
probabilităti.
b. La fel poate fi tratat si acest punct al problemei. Există însă o cale mai
directă de tratare. Se observă că proprietatea de lungime medie minimă a
codului propus nu este îndeplinită. De pildă, pentru orice probabilitate a
ultimului dintre simboluri nenulă, codul {00, 01, 10, 11} este mai scurt în
medie fată de codul dat. Codul nu este compact si de aceea nu poate fi un
cod Huffman oricare ar fi probabilitătile simbolurilor.
c. Aici lungimea medie este Lc = 2. Dubla inegalitate a lui Shannon, 1 ≤ Lc < 2
nu este satisfăcută. Există totdeauna un cod de lungime medie mai mică
decât 2, de pildă codul {0, 1}. Codul propus nu este un cod Huffman pentru
toate probabilitătile posibile ale simbolurilor deoarece nu este compact.

Problema 51. Codarea Huffman

Se consideră variabila aleatoare


X =  1
x x2 x3 x4 x5 x6 x7 
 0,50 0, 26 0,11 0,04 0 ,04 0,03 0,02 
a. Găsiti un cod binar Huffman pentru X.
b. Găsiti lungimea medie a cuvântului de cod pentru codul stabilit. Comparati
cu entropia.
c. Găsiti un cod ternar Huffman pentru aceeasi variabilă aleatoare X.

61
Indicatie: Punctele a. si b. se rezolvă aplicând algoritmul Huffman pentru
coduri binare, binecunoscut. Punctul c. se rezolvă adaptând algoritmul la cazul
ternar: simbolurile din coada clasamentului probabilistic la fiecare etapă se
grupează câte trei, sursa redusă finală trebuie să aibă trei simboluri în caz
contrar se adaugă la sursa initială simboluri (fictive) de probabilitate nulă în
număr strict necesar (unul sau două).

Problema 52. Coduri

Fie variabilele X1, X2, …, i.i.d.1 cu


 1 cu probabilitatea 1 / 2
X =  2 cu probabilitatea 1 / 4
 3 cu probabilitatea 1 / 4
Se consideră atribuirea următorului cod
 0 dacã x = 1
C ( x) =  01 dacã x = 2
 11 dacã x = 3
a. Este acest cod nesingular?
b. Este unic decodabil?
c. Este instantaneu?
d. Care este rata entropiei procesului
Z1Z2Z3… = C(X1)C(X2)C(X3)… ?
(Exemplu: x = 2311… produce procesul codat zn = 011100….)
n

Problema 53. Coduri de cost minim

Cuvinte ca Run!, Help! sau Fire! sunt scurte nu pentru că sunt utilizate frecvent,
ci, probabil, pentru că timpul este pretios în situatiile în care aceste cuvinte sunt
necesare. Se presupune că X = i cu probabilitatea pi, i = 1, 2, …, m. Fie li
numărul de simboluri binare în cuvântul de cod asociat cu X = i si fie ci costul
pe literă de cod în aceeasi situatie. Astfel, costul mediu C al descrierii lui X este
m
C= ∑
i= 1
pi cili .

a. Minimizati costul mediu C pe toate lungimile l1, l2, …, lm astfel încât


∑ 2− li ≤ 1 . Ignorati orice restrictie referitoare la lungimile li care ar trebui să
fie întregi. Evidentiati valorile l1*, l2*, …, lm* care fac costul C = C* minim.
b. Cum ati folosi procedura de obtinere a unui cod Huffman pentru a minimiza
costul mediu C peste toate codurile unic decodabile? Fie CHuffman acest
minim.
c. Arătati că
m
*
C ≤ CHuffman ≤ C + *
∑i= 1
pi ci

1
i.i.d. – variabile aleatoare independente si identic distribuite.

62
Problema 54. Entropia relativă este costul codării inadecvate

Fie variabila aleatoare X care ia cinci valori posibile (1, 2, 3, 4, 5}. Se consideră
două distributii ale acestei variabile (v.tabelul).

Simbol p(x) q(x) C1(x) C2(x)


1 1/2 1/2 0 1
2 1/4 1/8 10 100
3 1/8 1/8 110 101
4 1/16 1/8 1110 110
5 1/15 1/8 1111 111

a. Calculati H(p), H(q), D(p||q) si D(q||p).


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 optimal pentru p. Verificati că C2 este un cod
optimal pentru q.
c. Se presupune acum că se utilizează codul C2 când distributia este p. Care
este lungimea medie a cuvântului de cod? Cu cât este mai mare aceasta fată
de entropia H(p)?
d. Care este pierderea dacă este folosit codul C1 când distributia este q?

Problema 55. Inegalitatea lui Kraft

a. Gǎsiti un cod binar (D = 2) liber de prefix pentru sursa cu probabilitǎtile


(1/3, 1/5, 1/5, 2/15, 2/15).
b. Gǎsiti codul liber de prefix optimal, adicǎ acel cod cu lungimea medie
minimǎ. (Indicatie: Optimizati lungimea medie cu conditia la frontierǎ a
(in)egalitǎtii lui Kraft pentru acea sursǎ si construiti un cod cu lungimile
codului optimal rezultat)
c. Este acest cod optimal, tot optimal si pentru sursa cu probabilitǎtile (1/5,
1/5, 1/5, 1/5, 1/5)? Expuneti rationamentul folosit. (Indicatie: Orice cod
liber de prefix trebuie sǎ satisfacǎ inegalitatea lui Kraft).

Problema 56.

Se considerǎ o variabilǎ aleatoare care ia echiprobabil m valori. Se stie cǎ


entropia acestei surse de informatie este log2 m biti.
a. Pentru ce valori ale lui m lungimea medie a cuvântului de cod egaleazǎ
entropia H = log2 m?
Solutie: Este necesar a fi satisfǎcutǎ egalitatea

63
m
1

i= 1 m
li = log 2 m

echivalentǎ succesiv cu
1 m m m


m i= 1
li = log 2 m , ∑ li = m log 2 m , ∑i= 1 li
i= 1 2 = mm
.
Suma lungimilor cuvintelor de cod este totdeauna un numǎr întreg pozitiv.
Ultima egalitate impune ca m sǎ fie o putere întreagǎ si pozitivǎ a lui 2.
b. Se stie cǎ pentru orice distributie probabilisticǎ, lungimea medie a codului
optim si entropia sunt în relatia L < H + 1. Se defineste ca redundantǎ a unui
cod diferenta ρ = L – H. Pentru ce valori ale lui m, 2k ≤ m ≤ 2k+1, redundanta
codului optim este maximǎ? Care este valoarea limitǎ a acestei redundante
maxime, pentru m → ∞?
Solutie: Pentru valorile extreme, 2k si 2k+1, redundantele sunt nule. Pentru
valorile intermediare, cuvintele codului optim/compact au lugimile de k sau de
k + 1 biti. Nu pot fi toate de lungime k deoarece cuvintele ar fi prea putine,
codul n-ar mai fi unic decodabil. Pot fi toate de lungime k + 1 dar sunt prea
multe cuvinte. Dupǎ atribuire, sunt cuvinte ale codului diferite de unul din
cuvintele în surplus prin numai un bit. Cuvintele de cod care au pereche în
surplusul de cuvinte lungi de k + 1 biti si care diferǎ prin numai un bit de acelea
pot fi scurtate cu acel bit si incluse în cod. Codul rǎmâne unic decodabil dar
este si optimal (algoritmul Huffman poate confirma acest adevǎr). Dupǎ cum m
excede limita 2k cu 1, 2, …, 2k – 1 unitǎti, cuvintele de cod de lungime k + 1
sunt în numǎr de 2, 4, …, 2k+1 – 2, adicǎ 2(m – 2k), iar cuvintele de cod de
lungime k sunt în numǎr de m – 2, m – 4, …, m – 2k+1 + 2, adicǎ m – 2(m – 2k) =
2k+1 – m.
Lungimea medie a codului este
L=
m
(
1 k+1
(2 − m) k + 2(m − 2 k )(k + 1) )
ceea ce dupǎ prelucrare devine
2k + 1
L=
1
m
( )
m(k + 2) − 2k + 1 = (k + 2) −
m
Pentru 2k < m < 2k+1, redundanta codului este
2k + 1
ρ = L − H = ( k + 2) − − log 2 m
m
Functia
2k + 1
f ( x ) = ( k + 2) − − log 2 x
x
are un extrem (un maxim) în punctul de anulare a derivatei
2k + 1 1
f ′ ( x) = 2 −
x x ln 2

64
adicǎ pentru x = 2k+1ln2. În acest punct functia f(x) ia vloarea 1 – 1/ln2 –
lnln2/ln2 ≈ 0,0861. Pentru x → ∞ aceasta este si limita functiei în discutie.
Aceeasi este si limita cerutǎ de problemǎ deoarece un sir de valori m întregi, în
particular diferite cu mai putin de o unitate de un x real nu poate conduce la altǎ
limitǎ.

Problema 57.

Un cod nu este unic decodabil dacǎ si numai dacǎ existǎ o secventǎ finitǎ de
simboluri ale codului care poate fi interpretatǎ în moduri diferite în secventele
de cuvinte de cod.
În secvenţa
| A1 | A2 | A3 … Am |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| B1 | B2 | B3 … Bn |

unde fiecare Ai si Bi sunt cuvinte de cod, pot apǎrea situatii de acest gen. Se
observǎ cǎ B1 poate fi prefix pentru A1, rezultând si un oarecare sufix
reminiscent. Fiecare sufix reminiscent trebuie sǎ fie la rându-i un prefix sau un
cuvânt de cod, sau sǎ aibǎ un alt cuvânt ca prefix propriu, ceea ce produce un
alt sufix reminiscent. În final, ultimul sufix din secvenţǎ trebuie sǎ fie un cuvânt
de cod. Se poate pune la punct un test de unicǎ decodabilitate (testul Sardinas-
Patterson) în maniera care urmeazǎ:
• Se construieste o multime S care sǎ cuprindǎ toate sufixele reminiscente
posibile
• Codul este unic decodabil dacǎ si numai dacǎ mulţimea S nu contine cuvinte
de cod.
a. Se admite cǎ lungimile cuvintelor de cod sunt li, i = 1, 2, …, m. Gǎsiti o
limitare superioarǎ pentru numǎrul de elemente din S
b. Determinati care din codurile urmǎtoare sunt unic decodabile:
i. {0, 10, 11}
ii. {0, 01, 11}
iii. {0, 01, 10}
iv. {0, 01}
v. {00, 01, 10, 11}
vi. {110, 11, 10}
vii. {110, 11, 100, 00, 10}
c. Pentru fiecare din codurile unic decodabile de mai sus, construiti, dacǎ este
posibil, o secventǎ infinitǎ codatǎ cu un punct de început cunoscut, astfel
încât ea sǎ poatǎ fi interpretatǎ în douǎ moduri. Aceasta aratǎ cǎ dacǎ
cuvintele de cod finite sunt unic decodabile, cuvintele de cod infinite pot sǎ
nu fie unic decodabile.
d. Dovediti cǎ o asemenea secventǎ nu poate apǎrea într-un cod liber de prefix.

65
Problema 58. Codul Shannon

Se considerǎ metoda urmǎtoare de a genera un cod pentru o variabilǎ aleatoare


X care ia m valori {1, 2, …, m} cu probabilitǎtile p1, p2, …, pm. Se presupune cǎ
probabilitǎtile sunt ordonate astfel p1 ≥ p2 ≥ … ≥ pm. Se defineste
i− 1
Fi = ∑
k= 1
pk

suma probabilitǎtilor tuturor simbolurilor de indice mai mic decât i. Cuvântul


de cod asociat lui i este numǎrul Fi ∈ [0,1] rotunjit la li biti cu li partea întreagǎ
a numǎrului log2(1/pi).
• Arǎtati cǎ un cod construit astfel este liber de prefix si lungimea lui medie
satisface relatia
H(X) ≤ L < H(X) + 1
• Construiti codul pentru cazul în care probabilitǎtile sunt {0,5 0,25 0,125
0,125}.

Problema 59. Compresia optimǎ simplǎ pentru o sursǎ Markov

Se considerǎ procesul Markov cu trei stǎri U1, U2, … care are matricea de
tranzitie
U n− 1 \ U n S1 S 2 S3
S1 1/ 2 1/ 4 1/ 4
S2 1/ 4 1/ 2 1/ 4
S3 0 1/ 2 1/ 2
cu probabilitatea tranzitiei din starea S1 în starea S3 nulǎ. Proiectati trei coduri
C1, C2, C3 (unul pentru fiecare stare S1, S2, S3), fiecare cod aplicând elemente din
multimea {S1, S2, S3} pe secvente de valori binare 0 si 1, astfel încât acest
proces Markov sǎ poatǎ fi transmis cu compresie maximǎ prin schema
urmǎtoare:
a. Se observǎ simbolul prezent Si
b. Se selecteazǎ codul Ci
c. Se observǎ simbolul urmǎtor Sj si se trimite cuvântul de cod Cj care
corespunde lui Sj
d. Se repetǎ operatia pentru simbolul urmǎtor.
Care este lungimea medie a mesajului asociat simbolului urmǎtor conditionatǎ
de starea anterioarǎ S = Si utilizând aceastǎ schemǎ de codare?
Care este numǎrul mediu neconditionat de biti pe simbol al sursei?
Puneti în relatie aceastǎ lungime cu rata entropiei H(U) a lantului Markov.

66
CRIPTAREA

Lucrarea 7.

Tema 1: Criptarea RSA

Criptografia urmeazǎ scenarii de genul urmǎtor: douǎ persoane A si B doresc sǎ


comunice desi simt în mediul de comunicare prezenta unei alte persoane
deosebit de curioase E. Se presupune cǎ A vrea sǎ trimitǎ lui B mesajul x.
Criptografia oferǎ solutii în forma urmǎtoare: A calculeazǎ o functie de x, e(x),
utilizând o cheie secretǎ si trimite e(x) pe canalul ascultat si de E. B primeste
mesajul criptat e(x) si utilizând cheia sa (care în criptografia traditionalǎ este
aceeasi cu cheia lui A, dar în criptografia modernǎ nu este aceeasi) calculeazǎ o
functie d(e(x)) = x, recuperând astfel mesajul. Se prezumǎ cǎ E este incapabil sǎ
recupereze pe x din e(x) deoarece nu are cheia necesarǎ.
O metodǎ criptograficǎ clasicǎ este substituirea de litere. A si B cad de acord
asupra unei permutǎri π a literelor A, …, Z si un mesaj m = a1a2…an alcǎtuit din
n litere devine e(m) = π(a1)π(a2)…π(an). În pofida faptului cǎ existǎ cel putin
26! chei posibile (cu referire la limba englezǎ), acesta este un sistem de criptare
foarte slab: el este expus la atacul evident prin frecventa literelor.
Cu concursul calculatoarelor, criptografii pot crea sisteme de criptare în care
sunt substituite blocuri întregi de litere (sau de biti), rezistente astfel la atacul
prin frecvente. Cel mai de succes dintre ele a fost si încǎ este Data Encryption
Standard (DES), o metodǎ de criptare acceptatǎ de guvernul american, propusǎ
de IBM în 1976. DES utilizeazǎ o cheie pe 64 de biti (pentru codarea fisierelor
mai lungi, acestea se sparg în blocuri de 8 biti). Cei care au propus DES pretind
cǎ este un sistem sigur; sunt si detractori care-l suspecteazǎ cǎ la modul subtil
nu este atât de sigur. Dimensiunea cheii de 56 de biti este în general consideratǎ
inadecvatǎ pentru criptografia serioasǎ, deoarece 256 nu mai este un numǎr
mare.
Cam la aceeasi vreme când DES a fost inventat, a fost propusǎ o idee nouǎ
foarte atractivǎ: criptografie cu cheie publicǎ (public-key cryptography). În
comunicare, persoana B ar avea douǎ chei: cheia sa privatǎ kd, cunoscutǎ numai
de el si o a doua cheie publicǎ, kc. Cheia kc este cunoscutǎ tuturor – este de pildǎ
pe pagina gazdǎ a lui B. Cu o metaforǎ mai curând dubioasǎ, este ca si cum ar
exista mai multe cópii ale unui lacǎt cu care oamenii pot închide cutii care
contin mesaje si sunt trimise lui B. Dacǎ cineva, de pilǎ A doreste sǎ trimitǎ un
mesaj x lui B, atunci îl cripteazǎ sub forma e(x) care utilizeazǎ cheia publicǎ. B
îl decripteazǎ folosindu-se de cheia lui privatǎ. Partea inteligentǎ a sistemului
este cǎ: (1) decriptarea este corectǎ, adicǎ d(e(x)) = x; (2) nu se poate calcula
într-un timp rezonabil cheia privatǎ a lui B din cheia lui publicǎ si nici x din
e(x), astfel cǎ protocolul este sigur, cam la fel cum nu existǎ o cale de a imagina
cheia pentru un lacǎt bun.

67
Sistemul RSA – de la intialele a trei cercetǎtori (Ron Rivest, Adi Shamir si Len
Adleman) care l-au inventat – este un mod inteligent de a realiza ideea de cheie
publicǎ. Iatǎ cum lucreazǎ aceasta:
• Generarea cheii. B stabileste douǎ numere prime mari, p si q. (“Mare”
înseamnǎ în zilele noastre câteva sute de digiti zecimali, curând poate va
însemna peste o mie). Pentru a gǎsi asemenea numere, B genereazǎ repetat
intregi din aceastǎ gamǎ si îi supune unui test datorat lui Fermat pânǎ când
douǎ din ele trec testul. Apoi B calculeazǎ n = p.q. De asemenea, B
genereazǎ la întâmplare un întreg e < n, cu singura restrictie de a fi prim cu
(p – 1) si cu (q – 1). Perechea (n, e) este de acum cheia publicǎ a lui B si o
face cunoscutǎ tuturor. Practic, pentru a face codarea mai usoarǎ, e este
adesea luat 3. Desigur, trebuie evitate numerele prime care sunt 1 mod 3.)
Acum B poate genera cheia lui secretǎ. Tot ce are de fǎcut este a calcula
(prin algoritmul lui Euclid) d = e– 1 mod (p – 1)(q – 1). Perechea (n, d) este
cheia privatǎ a lui B.
• Operarea. Ori de câte ori A sau oricine altcineva doreste sǎ-i trimitǎ un
mesaj lui B procedeazǎ astfel:
o Fragmenteazǎ mesajul în siruri de biti de lungime  log n  . (este
vorba aici de mai multe sute de biti). Se codeazǎ fiecare sir de biti
prin algoritmul care urmeazǎ.
o Fie x un astfel de sir de biti si se considerǎ ca fiind un întreg mod n.
A calculeazǎ xe mod n. Acesta aste mesajul codat e(x) pe care A îl
trimite lui B.
o La primirea lui e(x), B calculeazǎ e(x)d mod n. Putinǎ algebrǎ
( apelând la mica teoremǎ a lui Fermat pentru produsul a douǎ
numere prime) produce:

e(x)d = xd.e = x1 + m(p – 1)(q – 1) = x mod n

De observat cǎ aceastǎ secventǎ de egalitǎti stabileste faptul cǎ B decripteazǎ


corect mesajul primit. Prima ecuatie tine seamǎ de definitia lui e(x). A doua
decurge din faptul cǎ d este inversul lui e mod (p – 1)(q – 1) si astfel dacǎ se
multiplicǎ d cu e se obtine 1 plus un multiplu de (p – 1)(q – 1). Ultima egalitate
aminteste de mica teoremǎ a lui Fermat: x(p – 1)(q – 1) = 1 mod n (desigur, cu
exceptia cazului în care x este un multiplu de p sau de q, o posibilitate foarte
putin probabilǎ); astfel, multiplul de (p – 1)(q – 1) din exponent se poate ignora.
Astfel A poate coda folosind cheia publicǎ a lui B. B poate decoda utilizând
cheia privatǎ pe care numai el o stie. Dar ce se poate spune despre “curiosi”?
Dacǎ E preia e(x) = xe mod n, el poate face mai multe lucruri. Poate încerca toti
x-ii posibili, sǎ-i codeze cu cheia publicǎ a lui B si sǎ gǎseascǎ x-ul corect – dar
asta ia mult prea mult timp. Sau, poate sǎ calculeze d = e–1 mod (p – 1)(q – 1) si
din asta e(x)d mod n care este x. Dar pentru a face asta trebuie sǎ stie (p – 1)(q –
1); si dacǎ stie atât p.q cât si (p – 1)(q – 1) stie p si q. Cu alte cuvinte, E ar putea
factoriza pe n, un produs arbitrar de douǎ numere prime mari – nimeni nu stie

68
cum sǎ facǎ asta rapid. Sau, în sfârsit, E si-ar putea utiliza propria ei metodǎ
ingenioasǎ pentru a decoda e(x) fǎrǎ factorizarea lui n – este o convingere largǎ
cǎ nu existǎ o asemenea metodǎ.
Astfel, dupǎ toate dovezile existente, RSA este sigur pentru un n potrivit de
mare.
Programul alǎturat este o ilustrare a modului cum lucreazǎ sistemul de criptare
RSA. Operatiile de criptare si de decriptare sunt puse laolaltǎ, în sucesiunea
fireascǎ. Nu s-a recurs la numere prime p, q foarte mari pentru a nu depǎsi
posibilitǎtile aritmetice curente curente ale pachetului Matlab. Studentii sunt
îndemnati sǎ înlocuiascǎ numerele prime p, q propuse cu altele. Sistemul de
criptare/decriptare va functiona atât timp cât numerele alese îndeplinesc
conditiile precizate mai sus. Se recomandǎ si încercarea si a unor numere p, q
compuse. Se va putea observa în acest caz functionarea defectuoasǎ sau
nefunctionarea sistemului.

clear
p=7;q=13; % se aleg doua numere prime p, q (mari)
n=p*q;
e=5; % cheia publica: (e, n)
cheia_publica=[e n]
d=29; % cheia privata: (d, n)
m=floor(n*rand); % mesajul de criptat (generat aleator)
mesajul_de_criptat=m
b=1;
for i=1:e
b=m*b;
a=floor(b/n);
b=b-a*n;
end % operatia de criptare
m=b; % mesajul criptat
mesajul_criptat=b
cheia_privata=[d n]
b=1;
for i=1:d
b=m*b;
a=floor(b/n);
b=b-a*n;
end % operatia de decriptare
mesajul_decriptat=b % mesajul decriptat

Tema 2: Criptarea cu curbe eliptice

Curbe eliptice peste Zp: Fiind dat un număr prim p, o curbă eliptică peste Zp
este o congruenţă y2 = x3 + ax + b mod p la care se adaugă un punct O la infinit
astfel încât conditia de “nesingularitate” 4a3 + 27b2 ≠ 0 mod p să fie satisfăcută.
Fiind date punctele P1 = (x1, y1) si P2 = (x2, y2) pe curba eliptică se defineste
P1 + P2 = (λ2 – x1 – x2, λ(x1 – x3) – y1)
cu

69
 y2 − y1
 x − x pentru P1 ≠ P2
λ =  2 2 1

 3 x1 + a pentru P1 = P2
 2 y1
Se consideră totodată că (x1, y1) + (x1, –y1) = O si P1 + O = O + P1 = P1. Acesta
este un grup abelian denumit Ep(a, b).
Exemplu: Se consideră curba eliptică y2 = x3 + x + 6 peste Z11*. Pentru a
determina punctele din E, se ia fiecare punct din Z11, se calculează x3 + x + 6 si
apoi se rezolvă ecuatia y2 ≡ x3 + x + 6 mod 11.
Calculul acesta cere evaluarea de radicali modulo 11. Există o formulă explicită
pentru aceasta deoarece 11 ≡ 3 mod 4. De fapt, rădăcinile pătrate ale unui rest
pătratic r sunt ±r(11 + 1)/4 ≡ r3 mod 11. Prin calcul si pentru calcule ulterioare se
completează tabelul următor:

x x3 + x + 6 ∈ QR11? y
0 6 nu
1 8 nu
2 5 da 4, 7
3 3 da 5, 6
4 8 nu
5 4 da 2, 9
6 8 nu
7 4 da 2, 9
8 9 da 3, 8
9 7 nu
10 4 da 2, 9

Curba eliptică are pe ea 13 puncte (x, y), incluzând si punctul de la infinit. Fiind
de ordinul 13 (prim) ea însăsi trebuie să fie un grup ciclic. De pildă, dacă se ia
generatorul α = (2, 7).
Puterile lui α, de pildă (2, 7) + (2, 7), pot fi calculate după cum urmează. Se
evaluează mai întâi λ:
λ = (3∙22 + 1)(2∙7)–1 mod 11 = (2∙3)–1 mod 11 = 2∙4 mod 11 = 8
Asadar x3 = 82 – 2 – 2 = 5 mod 11 si y3 = 8(2 – 5) – 7 = 2 mod 11. Decurge de
aici că (2, 7) + (2, 7) = (5, 2).
Apoi, (2, 7) + (2, 7) + (2, 7) = 2(2, 7) + (2, 7) = (5, 2) + (2, 7).
Sisteme de criptare cu curbe eliptice: Algoritmul foarte general ElGamal se
poate aplica la subgrupul ciclic Z n1 al lui Ep(a, b), dar factorul lui de dezvoltare
este 4 (fată de 2 pentru Zp). În plus, spatiul textelor în clar (plaintext space)
constă din punctele din Ep(a, b) si nu există metodă convenabilă de a genera în
mod determinist puncte din Ep(a, b).

70
Se ia o curbă eliptică Ep care contine un subgrup ciclic H = Z n1 cu algoritm
discret intractabil. Spatiul textelor în clar este Z p × Z p si spatiul textelor cifrate
* *

(ciphertext) este E p × Z p × Z p .
* *

Sistemul Menezes – Vanstone bazat pe curbe eliptice:


Public: α, β ∈ Ep
Privat: a astfel ca β = aα
Criptare: Se alege aleator k ∈ Z n1
(x, k) → E(x, k) = (y0, y1, y2):
y0 = kα, (c1, c2) = kβ
x = (x1, x2), y1 ≡ c1x1 mod p şi y2 ≡ c2x2 mod p
(
Decriptare: (y0, y1, y2) → D(y0, y1, y2) = y1c1− 1 mod p, y2c2− 1 mod p cu)
ay0 = (c1, c2).

Se propune spre studiu si experimentare programul Matlab alăturat.

clear
prime=primes(100); % generare de numere prime
[m,n]=size(prime);
m=unidrnd(n,1,1);
p=prime(m)
p=11
a=1;b=6;
if mod(4*a^3+27*b^2,p)==0
mesaj='Nu merge!'
break
end
x=1:(p-1);
x2=mod(x.^2,p);
y2=mod(x.^3+a*x+b,p);
k=0;
for i=1:(p-1)
for j=1:(p-1)
if y2(i)==x2(j)
k=k+1;
per(k,1:2)=[i j]; % calculul punctelor de pe curba
eliptica
end
end
end
[m,n]=size(per)
n=unidrnd(m,1,1);
n=6
alfa=per(n,:) % alegere dintre punctele de pe curba eliptica
alfa=[2 7]
for i=1:(p-1)
for j=1:(p-1)
if mod(x(i)*x(j),p)==1
invx(i)=x(j);

71
end
end
end
exs=unidrnd(m-1,1,1) % alegere exponent secret
exs=7
la=mod(2*alfa(2),p)
la=invx(la)
la=mod((3*alfa(1)^2+exs)*la,p)
beta=[0 0];
for i=1:la
beta(1)=mod(la^2-alfa(1)-beta(1),p);
beta(2)=mod(la*(alfa(1)-beta(1))-alfa(2),p);
end
beta

Problema 60. Sistem RSA incorect

Se presupune cǎ din eroare sau deliberat cineva alege o valoare pentru n care nu
este un produs de douǎ numere prime, adicǎ n = pq cu p > 1, q > 1 si q este
compus. Ar fi, evident, mai usor de factorizat ceea ce ar pune o problemǎ de
risc sub aspectul securitǎtii. Dar vor functiona operatiile de criptare si de
decriptare cu acest n? Sustineti rǎspunsul.
Solutie: Nu, criptarea/decriptarea nu mai functioneazǎ. Pentru a avea un
contraexemplu, fie n = 45 = 5.9. Dacǎ punem p = 5 si q = 9, atunci pentru o
cheie de criptare (e, 45), am alege o cheie de decriptare (d, 45) pentru care de ≡
1 mod ((5 – 1)(9 – 1)), adicǎ
de ≡ 1 (mod 32)
Astfel, dacǎ e = 5, inversul mod 32 este d = 13. Dar dacǎ criptǎm si decriptǎm
mesajul M = 2, obtinem
(25)13 = 265 ≡ 32 (mod 45).
Mai general, RSA se bazeazǎ pe faptul cǎ (Me)d ≡ 1 (mod n), deoarece aceastǎ
relatie este cea care asigurǎ cǎ decriptarea este inversa criptǎrii. Relatia se va
mentine dacǎ de ≡ 1 (mod ϕ(n)). Dar, dacǎ q este compus, ϕ(n) ≠ (p – 1)(q – 1)
si astfel vom avea propozitia de ≡ 1 mod ((p – 1)(q – 1)) falsǎ. În consecintǎ, în
cazul exemplificat criptarea RSA nu poate lucra.

Problema 61. Spargerea unui sistem RSA

Fie p si q numere prime si N = pq. Arǎtati cum se pot determina p si q fiind date
N si (p – 1)(q – 1). Cu alte cuvinte, fiind datǎ cheia publicǎ (e, N), e exponentul
de criptare si N modulul RSA, precum si valoarea ϕ(N) = (p – 1)(q – 1), este
posibil a calcula p si q prin operatii algebrice simple (în timp polinomial).
Aceasta aratǎ cǎ determinarea lui ϕ(N) este la fel de grea ca si factorizarea.
Solutie: Fiind date pq = N si (p – 1)(q – 1) = ϕ(N), urmeazǎ a afla numerele p si
q. Se poate pune q = N/p dupǎ care o înlocuire în ecuatia a doua produce dupǎ
câteva prelucrǎri algebrice ecuatia în p
p2 + (ϕ(N) – N – 1)p + N = 0

72
care poate fi rezolvatǎ aplicând formula cunoscutǎ. Dacǎ p a fost gǎsit, este usor
a-l gǎsi si pe q.

Problema 62. O problemǎ de criptare cu cadre didactice

a. Se presupune cǎ la un anumită disciplină activeazǎ trei profesori si doi


asistenti. Solutiile la tema de casǎ urmǎtoare sunt criptate printr-o cheie de
criptare în uzul tuturor celor cinci. Cei trei profesori, sau un asistent si un
profesor, sau ambii asistenti trebuie sǎ poatǎ accesa solutiile. Sugerati o
schemǎ de împǎrtire a secretului care sǎ asigure aceste cerinte (Indicatie:
Încercati ponderi.).
Solutie: Utilizati o schemǎ partajatǎ 3-din-7 pentru a genera 7 pǎrti ale acestui
secret. Dati o parte fiecǎrui profesor, si douǎ pǎrti fiecǎrui asistent. Cei trei
profesori laolaltǎ au 3 pǎrti; un profesor si un asistent au împreunǎ 3 pǎrti si cei
doi asistenti au 4 pǎrti; astfel, în orice caz, aceste subseturi au pǎrti suficiente
pentru a recupera secretul.
Mai precis, imaginati-vǎ secretul ca ordonata la origine a unui polinom de
gradul al doilea modular f(x). Fiecǎrui profesor i se dǎ câte un punct pe f(x) si
fiecǎrui asistent câte douǎ puncte pe curba f(x), punctele fiind diferite în
perechi. Pentru a descifra f(x) si ordonata ei la origine sunt necesare cel putin
trei puncte. Acest minim de puncte poate fi cumulat numai de trei profesori, de
un profesor si un asistent si de cei doi asistenti. Acelasi minim nu poate fi
întrunit numai de doi profesori sau numai de un asistent.
b. Se presupune acum cǎ grupa de cursanti este instruitǎ de trei profesori,
fiecare cu doi asistenti proprii. Oricare doi profesori pot accesa datele atât
timp cât unul din asistentii fiecǎrui profesor (un total de cel putin patru
persoane) este de asemenea prezent. Acum cum se procedeazǎ?
Solutie: Utilizati un sistem de partajare a secretului 2-din-3 pentru a genera
pǎrtile s1, s2, s3 ale secretului. Apoi, utilizati o schemǎ de partajare 4-din-5
pentru a genera sub-pǎrtile s1,1, …, s1,5 ale lui s1, tratând s1 ca secretul (unic); se
dau trei sub-pǎrti primului profesor si o subparte fiecǎruia din asistentii lui. Se
procedeazǎ analog cu ceilalti profesori.
Iatǎ o descriere mai exactǎ. Mai întâi se ia la întâmplare un polinom de gradul
1, P(x), astfel încât secretul este P(0). Apoi tot la întâmplare se iau trei
polinoame de gradul 3, Q1(x), Q2(x) si Q3(x), astfel încât Qi(0) = P(i) pentru
oricare i = 1, 2, 3. Cu alte cuvinte, secretul fiecǎrui polinom Qi(x) este una din
pǎrtile derivate din partajarea secretului bazat pe P(x).
Acum pentru fiecare Qi(x) generǎm 5 sub-pǎrti Qi(1), …, Qi(5), atribuind 3 sub-
pǎrti profesorului si câte una asistentilor lui. Atunci, pentru a recupera mesajul,
fiecare profesor i se întruneste cu unul din asistentii sǎi si recupereazǎ secretul
polinomului Qi(x), care este partea lui din secretul polinomului P(x). În final,
doi profesori se pot întruni pentru a recupera P(0).

73
74
CODAREA PENTRU CANALE CU PERTURBATII

Lucrarea 8

Tema 1: Codurile Hamming (corectoare de o eroare)

Codurile Hamming în forma lor originară au cuvintele de lungime n = 2m – 1 cu


m = 3, 4, 5, … Acestea sunt codurile care sunt propuse spre studiu în această
lucrare. Prin urmare, este vorba aici de coduri Hamming (7,4), (15,11), (31,26)
etc. cu primul număr lungimea n a cuvântului de cod, cu numărul al doilea
lungimea n – m a părtii purtătoare de informatie, de regulă separată si usor
separabilă de cei m biti de protectie, biti de paritate, cum mai sunt denumiti
oarecum impropriu.
În linia a doua a programului Matlab alăturat, se face atribuirea pentru m a unei
valori naturale mai mari decât 2. Este singura modificare necesară pentru a
genera coduri Hamming diverse si a le studia functionarea. Programul suportă
valori variate pentru m, dar nu se recomandă depăsirea valorii 5 deoarece
cazurile (7,4), (15,11), (31,26) sunt suficient de concludente si urmărirea
calculelor pe monitor este mult usurată.
La apelarea programului hamm, se generează mai întâi matricea de control-
verificare a codului. Aceasta se obtine foarte simplu: este rezultatul numărării în
binar de la 1 la n.
Pentru a face codul separabil (partea informatională a cuvintelor codului
separată de partea redundantă, de protectie) este necesară o ordonare a matricei
de verificare. Ordonarea deplasează coloanele care contin o singură unitate
binară la una din extremitătile matricei – aici la extremitatea din dreapta –
pentru a constitui acolo o (sub)matrice unitate m×m. Submatricea m×(n – m)
rămasă devine după transpunere matricea generatoare a bitilor de control
(numiti si biti de paritate). Aceasta, alăturată unei (sub)matrici unitate (n –
m)×(n – m) conduce la matricea generatoare a codului.
Odată stabilite aceste matrici specifice codului, se generează aleator un cuvânt
informational de lungime n – m si se face codarea lui. Pentru cuvântul de cod
rezultat se calculează sindromul. Cum este de asteptat, vectorul sindrom are
toate componentele nule.
Se inversează deliberat unul din bitii cuvântului de cod. Această schimbare este
simularea aparitiei unei erori în cuvântul transmis si receptionat astfel, cu
eroare. Sindromul va fi de această dată diferit de vectorul nul asociat exclusiv
cuvintelor receptionate care apartin codului. Se observă că vectorul simdrom se
potriveste pe una din coloanele matricei de verificare. Pozitia coloanei este
aceeasi cu pozitia bitului care trebuie corectat.
Se recomandă executarea repetată a programului cu acelasi m sau cu valori m
diferite.
Sunt încurajate modificările constructive ale programului propus.

% Program hamm pentru codurile Hamming

75
clear
m=4;
n=2^m-1;
s=strcat('Codul Hamming (',int2str(n),',',int2str(n-m),')');
disp(' ')
disp(s)
for i=1:n
a=dec2binvec(i,m);
h1(:,i)=a';
end % generarea matricii de control
h=h1;
matricea_de_control=h
z=sum(h);
j=0;k=0;
for i=1:n
if z(i)>1
j=j+1;
h(:,j)=h1(:,i);
else
k=k+1;
h(:,n-m+k)=h1(:,i);
end
end % ordonarea matricii de control
matricea_de_control_ordonata=h % se afiseaza matricea de
control ordonata
g=[eye(n-m) (h(:,1:(n-m)))']; % construirea matricei
generatoare
matricea_generatoare=g'
for i=1:n
z(i)=binvec2dec(h(:,i)');
end
inf=unidrnd(2,1,n-m)-1; % se genereaza n-m biti
informaationali
biti_de_informatie=inf % se afiseaza bitii informationali
for j=1:m
p(j)=0;
for i=1:n-m
p(j)=bitxor(p(j),bitand(h(j,i),inf(i)));
end
end % se calculeaza cei m biti de protectie
cod=[inf p]; % se genereaza cuvantul de cod
cuvantul_de_cod=cod
b=h*cod';
b=b-2*(floor(b/2));
vectorul_sindrom=b % se afiseaza sindromul
l=unidrnd(n); % se introduce eroare pe bitul l
s=strcat('Se inverseaza bitul de pe pozitia');
disp(s)
disp(int2str(l))
cod(l)=bitxor(1,cod(l));
cuvantul_cu_eroare=cod
b=h*cod';
b=b-2*(floor(b/2));
vectorul_sindrom=b % se afiseaza sindromul

76
Tema 2: Un cod Hamming (7,4) în acţiune

Programul acesta reproduce în bună măsură programul precedent. Este limitat


numai la codul Hamming (7,4).
Programul codează un text relativ scurt, în jur 60 de caractere. După codare,
unul din cuvintele de cod este modificat: un bit este inversat. Se decodează sirul
de biti receptionat cu eroare, textul se afisează, după o decodare simplă prin
separarea părtii de informatie, 4 biti, de surplusul de trei biti, 7 – 4 = 3, adăugati
pentru protectie. Dacă bitul modificat este în zona informatională, efectul erorii
poate fi imediat observat. Dacă bitul eronat este pe una din pozitiile 5, 6 sau 7
în cuvântul receptionat, eroarea nu se observă la afisaj desi ea există.
În faza ultimă, bitul eronat este localizat si corectat. Textul afisat după decodare
este din nou corect.
Se recomandă repetarea executiei programului, eventual pentru alte siruri de
caractere de codat/transmis.

% Program cod_dec_hamm pentru codare-decodare Hamming (7,4)


clear
m=3; % a nu se modifica
n=2^m-1;
disp(' ')
sir='Transmiterea si codarea informatiei: o disciplina
prietenoasa';
disp('Se codeaza textul:')
disp(' ')
disp(sir)
s=strcat('Se utilizeaza codul Hamming
(',int2str(n),',',int2str(n-m),')');
disp(' ')
disp(s)
for i=1:n
a=dec2binvec(i,m);
h1(:,i)=a';
end % generarea matricii de control
h=h1;
z=sum(h);
j=0;k=0;
for i=1:n
if z(i)>1
j=j+1;
h(:,j)=h1(:,i);
else
k=k+1;
h(:,n-m+k)=h1(:,i);
end
end % ordonarea matricii de control
g=[eye(n-m) (h(:,1:(n-m)))']; % construirea matricei
generatoare
aski=double(sir); % codurile ASCII ale caracterelor din sir
[i,nc]=size(aski); % nc este numarul de caractere din sir

77
disp(' ')
s=strcat('Numar de caractere:',num2str(nc));
disp(s)
biti=zeros(1,14*nc);
for i=1:nc
vec=dec2binvec(aski(i),8);
prov=zeros(n-m:n);
for i1=1:n
prov(:,i1)=and(vec(1:4),(g(:,i1))');
end
pro=zeros(1,n);
for i1=1:n
for j=1:(n-m)
pro(i1)=xor(pro(i1),prov(j,i1));
end
end
biti(14*(i-1)+1:14*i-7)=pro;
prov=zeros(n-m:n);
for i1=1:n
prov(:,i1)=and(vec(5:8),(g(:,i1))');
end
pro=zeros(1,n);
for i1=1:n
for j=1:(n-m)
pro(i1)=xor(pro(i1),prov(j,i1));
end
end
biti(14*(i-1)+8:14*i)=pro;
end % se compun cuvintele de cod Hamming
k1=unidrnd(61); % se alege aleator cuvantul de cod purtator
de eroare
k2=unidrnd(7); % se alege aleator pozitia bitului eronat
s=strcat('Se introduce o eroare în cuvantul de
cod:',num2str(k1),' bitul:',num2str(k2));
disp(' ')
disp(s)
biti(14*(k1-1)+k2)=xor(1,biti(14*(k1-1)+k2)); % se inverseaza
un bit
b=zeros(1,nc);
for i=1:nc
a1=[biti(14*(i-1)+1:14*i-7-3) biti(14*(i-1)+8:14*i-3)];
b(i)=binvec2dec(a1);
end
disp(' ')
disp('Textul cu eroarea (eventual observabila):')
disp(' ')
disp(char(b))
for i=1:2*nc
cuv=(biti(7*(i-1)+1:7*i));
si=zeros(3,1);
for k=1:m
pro=and(h(k,:),cuv);
si(k)=mod(sum(pro),2);
end

78
if sum(si)~=0
for j=1:n
prov=xor(si,h(:,j));
if sum(prov)==0
k1=j;
end
end
biti(7*(i-1)+k1)=xor(1,biti(7*(i-1)+k1)); %
corectare!
end
end % se localizeaza eroarea si se corecteaza
b=zeros(1,nc);
for i=1:nc
a1=[biti(14*(i-1)+1:14*i-7-3) biti(14*(i-1)+8:14*i-3)];
b(i)=binvec2dec(a1);
end
disp(' ')
disp('Textul cu eroarea corectata:')
disp(' ')
disp(char(b))
disp(' ')

Problema 63: Algoritmi

Codarea prin metoda run-length este una din cele mai simple sau poate cea mai
simplǎ metodǎ de codare în scopul comprimǎrii fǎrǎ pierdere de informatie a
unui fisier care contine o secventǎ de întregi.
a. Scrieti o procedurǎ simplǎ (în pseudocod) care primeste o secventǎ de
numere naturale a1, …, an si returneazǎ o secventǎ codatǎ de întregi b1, …,
bn. Ideea de bazǎ este a genera secventa codatǎ astfel ca o subsecventǎ din
secventa initialǎ de 3 sau mai multe numere consecutive identice cu o
subsecventǎ de numai douǎ: primul care indicǎ lungimea secventei, al
doilea care este însusi numǎrul repetat. De pildǎ, secventa 6, 2, 3, 4, 4, 4, 5,
6, 7, 7, 7, 7, 8 este codatǎ ca 6, 2, 3, -3, 4, 5, 6, -4, 7, 8. Dupǎ cum se
observǎ, secventa codatǎ este mai scurtǎ decât cea initialǎ.
b. De ce este necesar semnul minus?
c. Scrieti o procedurǎ de decodare care primeste secventa codatǎ si restituie
secventa de dinainte de codare
d. Descrieti tipul de secvente la intrare care produce cel mai rǎu caz de
complexitate temporalǎ pentru combinatia de algoritmi de codare si de
decodare (numǎrati numai operatiile de comparare)
e. Produceti o formulǎ pentru fiecare algoritm, care sǎ exprime numǎrul de
comparatii necesare ca functie de lungimea secventei de intrare n în cazul
cel mai rǎu
f. Utilizati notatia “big-O” pentru a descrie cazul cel mai rǎu pentru algoritmii
utilizati.

Problema 64

79
Informatia generatǎ de o sursǎ se poate reprezenta prin numere binare de
lungime egalǎ cu 7 biti. Se adaugǎ un bit suplimentar, un bit de paritate, prin
care se obtine un cod de paritate constantǎ care include si cuvântul de cod nul.
a. Arǎtati cǎ ponderea Hamming a acestui cod este 2.
b. Arǎtati cǎ acest cod este un cod liniar.

Problema 65

Se dǎ un cod rectangular 3×4 cu dublǎ paritate, se dǎ cuvântul de cod


1 0 1 0
0 1 0 1≡ 1 0 1 0 0 1 0 1 1 1 1 1
1 1 1 1
a. Arǎtati cǎ ponderea Hamming a codului este 4.
b. Scrieti un cuvânt de cod situat la distanta Hamming 4 fatǎ de cuvântul dat.
c. Scrieti matricea de control a codului.
d. Se receptioneazǎ cuvântul
1 0 1 0 1 1 0 1 1 1 1 1
El nu apartine codului deoarece contine o eroare. Corectati eroarea.

Problema 66. Coduri Golay

Detinând cunostinte exclusiv despre codul Hamming (7, 4), Marcel J.E.Golay a
generalizat ideea lui Hamming la coduri perfecte corectoare de o eroare cu baza
orice număr prim. După ce a terminat acest aspect, Golay a îneput să caute
coduri perfecte corectoare de mai multe erori. Unul din codurile Golay este de
interes special deorece a fost utilizat mai târziu pentru a genera pachete în
spatiul 24-dimensional.
Se reaminteste că un cod corector de x erori trebuie să fie caracterizat de o
distantă Hamming minimă de cel putin 2x + 1. Pentru ca un cod să fie perfect,
numărul de vârfuri ale unui n-cub unitar dintr-o sferă de rază x care-l cuprinde
trebuie să fie o putere a lui r, unde r este rădăcina codului. În cazul binar
x


i= 0
Cni = 2 k

pentru un anumit întreg k. Aceasta este suma primilor x + 1 coeficienti/elemente


din linia a n-a a triunghiului lui Pascal. Golay a găsit două asemenea numere
2 3


i= 0
C90i = 212 si ∑
i= 0
i
C23 = 211

În cazul n = 90 Golay a arătat că nu există nici un cod perfect (90, 78) corector
a două erori. Pentru n = 23 Golay a găsit un cod (23, 12) corector de 3 erori si a
si dat o matrice pentru el

80
 1 0 0 1 1 1 0 0 0 1 1 1
 1 0 1 0 1 1 0 1 1 0 0 1
 1 0 1 1 0 1 1 0 1 0 1 0
 1 0 1 1 1 0 1 1 0 1 0 0
 1 1 0 0 1 1 1 0 1 1 0 0
A =  1 1 0 1 0 1 1 1 0 0 0 1
 1 1 0 1 1 0 0 1 1 0 1 0
 1 1 1 0 0 1 0 1 0 1 1 0
 1 1 1 0 1 0 1 0 0 0 1 1
 1 1 1 1 0 0 0 0 1 1 0 1
 0 1 1 1 1 1 1 1 1 1 1 1
Prin atasarea la aceasta a matricii unitate I11, se obtine o matrice de verificare de
aceeasi formă cu acelea pentru codurile corectoare de o eroare.
Pentru a construi codul, din digitii mesajului y1, …, yr se evaluează digitii de
control (de paritate) x1, …, xk astfel încât
12
xi + ∑
j= 1
aij y j ≡ 0 mod 2 , i = 1, 2, …, 11

sau, deoarece codul este binar


12
xi ≡ ∑j= 1
aij y j mod 2 , i = 1, 2, …, 11

Cuvintele de cod au forma y1, …, yr, x1, …, xk cu digitii de paritate plasati în


partea din urmă a cuvântului.
a. Stabiliti ponderea codului.
b. Stabiliti codomeniul unui cuvânt de cod la alegere.

Problema 67. Cod Hamming extins

Se defineste codul Hamming extins H8 de lungime n = 8 ca o multime de


secvente (x0, x1, x2, x3, x4, x5, x6, x7) de 8 valori binare care satisfac (modulo 2)
următorul sistem de ecuatii liniare simultane:
x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 = 0 (1)
x0 + x1 + x2 + x3 = 0 (2)
x0 + x1 + x4 + x5 = 0 (3)
x0 + x2 + x4 + x6 = 0 (4)
S-a demonstrat că acest cod Hamming extins este capabil a corecta cel putin 1
eroare printr-o regulă de decodare explicită (bazată pe un tabel de sindromuri)
capabilă a corecta orice eroare pe un singur bit.
a. Listati toate cuvintele de cod din H8.
b. Determinati o matrice generatoare pentru H8.
c. Determinati o matrice de verificare pentru H8.
d. Determinati dimensiunea si rata codului H8.

Problema 68.

Se ia în considerare din nou codul Hamming extins H8.

81
a. Eliminati prima restricitie, ecuatia (1) si definiti un nou cod H8* alcătuit din
secvente de 8 valori binare care satisfac (doar) restrictiile (2), (3), (4). Care
este dimensiunea si care este rata acestui nou cod? Este (si) H8* capabil a
corecta 1 eroare? Explicati matematic.
b. Eliminati acum restrictia (1) si stergeti bitul x7 pentru a obtine un cod nou
H7 alcătuit din secvente mai scurte, de 7 biti (operatia se numeste perforarea
codului H8). Care sunt dimensiunea si rata noului cod? Este (încă) acest cod
capabil a corecta 1 eroare? Explicati matematic.

Problema 69.

Se consideră din nou codul H7 dezvoltat în problema precedentă. Arătati că


orice secventă posibilă de 7 biti receptionată poate fi convertită într-un cuvânt
de cod prin inversarea a cel mult unuia din bitii ei.

Problema 70.

Fie H7 utilizat pentru un canal cu stergere BEC(p) – binary erasure channel – cu


probabilitatea de stergere satisfăcând conditia 0 < p < 1.
Arătai că H7 este capabil a corecta toate tipurile de erori cu două sau mai putine
stergeri.
Solutie: Codul H7 are matricea de verificare în forma canonică
 1 0 0 1 0 1 1
H =  0 1 0 1 1 0 1
 0 0 1 1 1 1 0
astfel că orice cuvânt de cod verifică ecuatiile de verificare a paritătii
x0 = x3 + x5 + x6
x1 = x3 + x4 + x6
x2 = x3 + x4 + x5
Se admite că stergerile apar în pozitiile xi, xj cu i ≠ j. Indiferent de alegerea
indicilor i si j, există cel putin o ecuatie în care apare xi dar nu xj sau apare xj dar
nu xi. O astfel de ecuatie se foloseste pentru a obtine bitul din acea pozitie
modificat prin stergere. Orice altă ecuatie din cele de verificare a paritătii poate
fi folosită pentru restabilirea celuilalt bit sters. Algoritmul acesta simplu arată
că H7 este capabil a corecta toate cuvintele afectate de două sau mai putine
stergeri.

Problema 71.

Se consideră următoarele matrici 3×6:


 1 0 0 1 1 1
A =  0 1 0 1 0 1
 0 0 1 1 1 0

82
 1 1 0 0 1 0
B =  0 1 1 0 1 1
 1 1 1 1 0 0
 1 0 1 1 0 1
C =  0 1 1 0 1 1
 1 0 0 1 1 0
Este vreuna dintre aceste matrici generatoare a unui cod liniar binar (6, 3)?
Sunt printre ele matrici care generează acelasi cod?
Solutie: Matricea A este în forma canonică. Pentru a aduce pe B în forma
canonică se procedează pas cu pas la: adunarea liniei prime la a treia, adunarea
liniei a doua la prima si, în final, adunarea liniei a treia la prima si la a doua
(eliminarea Gauss):
 1 1 0 0 1 0  1 0 1 0 0 1   1 0 0 1 1 1 
B ~  0 1 1 0 1 1 ~  0 1 1 0 1 1  ~  0 1 0 1 0 1
 0 0 1 1 1 0  0 0 1 1 1 0  0 0 1 1 1 0
Matricea aceasta coincide cu A.
Pentru a aduce pe C la forma canonică se aplică tot eliminarea Gauss: se adună
prima linie la a treia, apoi se adună linia a treia la prima si la a doua:
 1 0 1 1 0 1  1 0 0 1 0 0
C ~  0 1 1 0 1 1 ~  0 1 0 0 0 0
 0 0 1 0 1 1  0 0 1 0 1 1
Forma canonică a matricei C este diferită si de A si de B în forma lor canonică.
Toate cele trei matrici au rangul 3, asadar toate generează coduri (6, 3). A si B
genereză acelasi cod, C generează un cod diferit.

Problema 72.

Se consideră un cod rectangular C construit din H7 astfel:


a. Se aranjează 16 biti informationali într-o matrice 4×4
b. Se face codarea H7 pe fiecare linie, ceea ce conduce la o matrice 4×7
c. Se face acelasi lucru pe fiecare coloană pentru a crea o matrice 7×7
d. Codul C constă în toate matricile 7×7 obtinute în acest mod.
Determinati distanta/ponderea Hamming minimă pentru codul C.
Determinati multimea tuturor parametrilor τc si τd pentru care C este un cod
corector/detector de (τc, τd) erori si τd este cel mai mare posibil pentru un τc ales.

Problema 73.

Pentru fiecare cod de lungime n = 2 la 12, elaborati un tabel al codurilor bloc


liniare sistematice de dimensiune k = 2 cu cea mai bună posibil distantă
Hamming minimă dmin. Tabelul trebuie să includă o matrice generatoare pentru
cod ca si valoarea dmin.

Problema 74.

83
Se consideră C un cod binar [6, 3] cu matricea generatoare
 1 1 0 0 1 0
G =  0 1 1 0 1 1
 1 1 1 1 0 0
Regula de codare c = (a1, a2, a3)G nu este sistematică. Stabiliti un operator
matricial J care să aplice cuvintele de cod (printr-un decodor) pe bitii de
informatie corespunzători (pentru utilizatorul ultim), adică
(a1, a2, a3) = c J

Problema 75.

Fie un cod C care admite următorul decodor optimal (de distantă minimă)

Sindromul Eroarea Sindromul Eroarea


[0000]T 0000000 [0001]T 0000001
[1000]T 0001000 [1001]T 0010100
[0100]T 0000100 [0101]T 0011000
[1100]T 0001100 [1101]T 0010000
[0010]T 0000010 [0011]T 0000011
[1010]T 0001010 [1011]T 0100000
[0110]T 0000110 [0111]T 1000000
[1110]T 0111000 [1111]T 0010010

a. Determinati o matrice generatoare pentru C.


b. Utilizati decodorul pentru a decoda vectorul receptionat r = (1110111).

Problema 76.

Se consideră codul C bloc liniar [7, 3], cu matricea generatoare în formă


sistematică următoare:
 1 0 0 0 1 1 1
G =  0 1 0 1 0 1 1
 0 0 1 1 1 0 1
Acest cod este destinat transmiterii informatiei codate sistematic pe un BSC
(Binary Symmetric Channel) cu probabilitatea încrucisată p. Utilizati matricea

84
standard2 pentru C, dată imediat mai jos, pentru a răspunde la întrebările
privitoare la performantele decodării.

Matricea standard
0000000 1000111 0101011 0011101 1101100 1011010 0110110 1110001
0000001 1000110 0101010 0011100 1101101 1011011 0110111 1110000
0000010 1000101 0101001 0011111 1101110 1011000 0110100 1110011
0000100 1000011 0101111 0011001 1101000 1011110 0110010 1110101
0001000 1001111 0100011 0010101 1100100 1010010 0111110 1111001
0010000 1010111 0111011 0001101 1111100 1001010 0100110 1100001
0100000 1100111 0001011 0111101 1001100 1111010 0010110 1010001
1000000 0000111 1101011 1011101 0101100 0011010 1110110 0110001
0000011 1000100 0101000 0011110 1101111 1011001 0110101 1110010
0000110 1000001 0101101 0011011 1101010 1011100 0110000 1110111
0001100 1001011 0100111 0010001 1100000 1010110 0111010 1111101
0011000 1011111 0110011 0000101 1101100 1000010 0101110 1101001
0001010 1001101 0100001 0010111 1100110 1010000 0111100 1111011
0010100 1010011 0111111 0001001 1111000 1001110 0100010 1100101
0010010 1010101 0111001 0001111 1111110 1001000 0100100 1100011
0111000 1111111 0010011 0100101 1010100 1100010 0001110 1001001

a. Determinati PU(E) probabilitatea nedetectării erorii într-un cuvânt.


b. Determinati P(E) probabilitatea ca decodorul optimal prin distantă minimă
să producă un cuvânt de cod gresit (eroare de decodor).
c. Determinati probabilitatea ca decodorul optimal de distantă minimă să
decodeze incorect toti cei trei biti de informatie.
d. Determinati P(F) probabilitatea ca un decodor de distantă t = 1 limitată să
esueze si să nu producă vreun răspuns (cădere de decodor).

Problema 77.

Examinarea matricei standard din problema precedentă arată că s-au făcut unele
alegeri arbitrare pentru cuvintele lider de comultimi/codomenii (cosets)
(pattern-uri de eroare “corectabilă”) în linia 9 si următoarele. (Posibilitătile
diferite corespund diferentelor în ordonarea elementelor slab-ponderate din lista
de bază (scratch) de la care pornind s-a construit matricea standard.)
a. În linia ultimă, se presupune că 1001001 a fost ales în locul lui 0111000 ca
lider corect. Care va fi ultima linie a noii matrici standard? Calculati P(E)
pentru noul decodor cu noua matrice standard.

2
Matricea standard. În teoria codării, matricea standard (sau matricea slepian) este o matrice
cu dimensiunile qn−k×qk care listează toate elementele unui spatiu vectorial particular Fqn.
Matricea standard se utilizează pentru a decoda codurile liniare, adică pentru stabilirea
cuvântului de cod corespunzător unui vector-mesaj primit. În cazul de fată, dar si în general,
matricea standard are în prima linie cuvintele codului, în prima coloană vectorii eroare lideri de
comultimi/codomenii care se regăsesc pe aceeasi linie. Celelalte elemente se obtin prin
însumarea bit-cu-bit modulo 2 a vectorilor eroare cu cuvintele de cod, pe linia, pe coloana
corespunzătoare.

85
b. Repetati punctul a. dar cu utilizarea lui 1111111 în loc de 0111000 ca lider
de comultime/codomeniu. (De observat că această alegere nu conduce la o
matrice standard! De ce?)

Problema 78.

Un sistem ce comunicatie care utilizează coduri bloc operează continuu.


Ocazional, echipamentul de transmitere greseste fără stirea receptorului. În
asemenea împrejurări, canalul este în esentă un BSC cu p = 1/2. Pentru codurile
următoare, care este probabilitatea ca un decodor de distantă t limitată să
decodeze incorect un sir de biti aleator receptionat ca un cuvânt de cod valid?
a. Codul Hamming [15, 11] cu t = 1
b. Codul liniar binar [23, 12] cu t = 3
c. Codul liniar binar [63, 36] cu t = 6.

Problema 79.

Fie C un cod ciclic de lungime 15 generat cu polinomul generator g(x) = x5 + x4


+ x3 + 1.
a. Verificati că g(x) | x15 + 1.
b. Determinati numărul de cuvinte de cod din C.
c. Determinati matricea generatoare sistematică si matricea de verificare a
paritătii pentru C.
d. Executati codarea sistematică a polinomului mesaj m(x) = x9 + x4 + x2 + 1
utilizând reprezentarea polinomială.
e. Calculati sindromul pentru polinomului mesaj receptionat r(x) = x10
utilizând reprezentarea polinomială.

Problema 80.

Fie c1 si c2 cuvinte de cod din codul liniar C.


a. Exprimati ponderea Hamming a cuvântului c = c1 + c2 în raport cu
ponderile Hamming ale cuvintelor c1 , c2 si c1 ∧ c2 cu ∧ operatorul AND
(ŞI) bit-cu-bit.
b. Arătati că suma a două cuvinte de cod de pondere pară din C este de
pondere pară.
c. Arătati că suma a două cuvinte de cod de pondere impară din C este de
pondere pară.
d. Arătati că suma a două cuvinte de cod de pondere pară si impară din C este
de pondere impară.

86
Problema 81.

Într-un cod liniar, multimea cuvintelor de cod de pondere Hamming pară


formează un cod mai restrâns care este tot liniar (problema anterioară). El este
numit subcodul de pondere pară.
Fie C un cod ciclic de lungime n, de dimensiune k, care are ca generator
polinomul g(x). Se admite că x + 1 nu este factor al polinomului g(x). Arătati că
un cod ciclic generat de (x + 1)g(x) este subcod al lui C, de pondere pară.
(Indicatie: c(x) este de pondere Hamming pară dacă si numai dacă c(1) = 0 mod
2.)

Problema 82.

Două coduri se numesc echivalente dacă se pot permuta coordonatele vectoriale


într-un mod în care cuvintele de cod ale unui cod se transformă în cuvintele de
cod ale celuilalt cod. De pildă codurile generate de matricile
G1 =  10 10 10 1 0  0 1 1 1 0
1 1 si G2 =  1 0 0 1 1

sunt echivalente: primii doi biti sunt schimbati între ei. Performanta codurilor
echivalente este aceeasi pe canalele fără memorie de genul BSC. Explicati cum
codul ciclic generat de g(x) = x3 + x + 1 este echivalent cu un cod H7 definit în
Problema 70, prin stabilirea permutării care schimbă un cod în altul.

Problema 83.

Pentru a genera un cod perfect Golay G23 se pot utiliza două polinoame
generatoare, g1(x) = x11 + x10 + x6 + x5 + x4 + x2 + 1 si g2(x) = x11 + x9 + x7 + x6 +
x5 + x + 1.
a. Arătati că g1(x) si g2(x) sunt polinoame inverse unul altuia.
b. În ce relatie sunt cele două versiuni de G23? Sunt codurile generate de g1(x)
si g2(x) identice? Sunt echivalente? De ce?

Problema 84.

O explozie de erori (error burst) de lungime l este un pattern de eroare e = (e0,


e1, …, en – 1) în care pentru unii indici 0 ≤ i < n erorile sunt legate de pozitiile ei,
e(i + 1) mod n, …, e(i + l – 1) mod n cu ei ≠ 0 si e(i + l – 1) mod n ≠ 0. De pildă, pattern-urile
(0010100) si (1100001) sunt ambele explozii de lungime 3.
Fie g(x) polinomul generator pentru un cod C ciclic [n, k].
a. Arătati că C poate detecta toate erorile explozive de lungime l ≤ n – k.
b. Arătati că nu toate erorile explozive de lungime l = n – k + 1 pot fi
detectate.

87
Problema 85.

Demonstrati următoarele fapte interesante relativ la polinoamele binare:


a. Dacă p(x) este un polinom binar, atunci (p(x))2 = p(x2).
b. Dacă α ∈ GF(2r) este o rădăcină a polinomului binar, atunci tot rărdăcini
sunt si α2, α4, α8 etc.

Problema 86.

Construiti un câmp Galois GF(24) folosind polinoamele ireductibile date mai


jos. Pentru fiecare constructie determinati polinoamele minimale pentru fiecare
element al câmpului. (Indicatie: urmăriti cele două multimi de polinoame din
cele două tabele deoarece ele sunt aceleasi în GF(24)!)
a. g1(x) = x4 + x + 1
b. g2(x) = x4 + x3 + x2 + x + 1

Problema 87.

Fie câmpul Galois GF(24) construit prin adăugarea la câmpul F = {0, 1} de


bază a unei rădăcini α a polinomului primitiv g(x) = x4 + x3 + 1. Exprimati
elementele γ de mai jos în functie de elementele de bază {1, α, α2, α3}.
a. γ = 1 + α – 1 + α – 2 + α – 3
b. γ = (α5(1 – α – 11))/(1 + α – 2)
c. γ = ∑ β
β ∈ GF ( 2 4 )

d.
γ = ∏ β
.
β ∈ GF ( 2 4 ) − {0}

Problema 88.

Se consideră o sursă de informatie binară pentru care iesirea este codată în


blocuri de intrare de 52 de biti prin codul Reed-Soomon în sens restrâns de
lungime 15 si distantă de proiectare 3. Utilizând regula de codare nesistematică
c(x) = m(x)g(x), determinati cuvântul de cod transmis pentru secventa
informatională binară
0001 0000 0000 0000 0000 0000 0000 0000 0000 1001 1110 0000 0101
Exprimati cuvântul de cod la iesire în notatia de la câmpuri finite (adică
folosind elementele câmpului finit al cu α o primitivă), dar si ca o secventă
binară. Fiti expliciti în ceea ce priveste ordinilor bitilor si simbolurilor
cuvântului de cod alese!

88

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