Sunteți pe pagina 1din 20

Lucrarea 5

Coduri grup pentru detect, ia s, i


corect, ia erorilor

5.1 Obiectivul lucr rii


Prezenta lucrare are ca scop introducerea codurilor grup pentru co-
dare în cazul canalelor cu perturbat, ii. Sunt expuse în lucrare aspecte
privind codarea s, i decodarea utilizând codurile grup s, i este construit în
Simulink un model de codare s, i decodare Hamming în vederea reduce-
rii ratei de eroare într-un canal de transmisiune binar simetric. Lucra-
rea se încheie cu exemplicarea codurilor Hamming (7, 4) în transmisia
semnalelor audio.

5.2 Aspecte teoretice


Rolul principal al cod rii de canal are în vedere adaptarea sursei
la canalul de informat, ie s, i protect, ia informatiei transmise. Acest ul-
tim lucru presupune ad ugarea unor bit, i de control mesajului emis de
sursa, în ideea de a înlesni rolul decodorului în vericarea corectitudinii
transmisiei.

În teoria transmisiunii informat, iei, codurile grup reprezint  tipuri


importante de coduri bloc (coduri la care informat, ia este organizat 
în cuvinte, blocuri de n simboluri) folosite în schemele de detect, ie s, i
corect, ie a erorilor.

84
D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
85

Codurile grup sunt folosite la transmiterea simbolurilor (ex. bit, i)


în canalele de comunicat, ie astfel încât erorile ce apar pot  detectate
de receptorul mesajului bloc. Un num r de k biti de informatie este , ,

urmat de un numar de m biti de control, derivati din cei de informatie


, , ,

astfel încat, la receptor, bit, ii de control sunt folosit, i pentru a valida


bit, ii de informat, ie. Un cod de lungime n = m+k transmite blocuri
cont, inând n simboluri.

Unul dintre codurile grup cunoscute este codul Hamming (7, 4),
un cod binar corector de o eroare ce reprezint  4 bit, i - simbolurile de
informat, ie, folosind 7 bit, i, prin ad ugarea simbolurilor de control.

5.2.1 Determinarea num rului de simboluri


Un cuvânt de cod de lungime n are k simboluri de informatie si , ,

m simboluri de control (n = m + k) si poate  reprezentat sub forma


,

unui vector:

v = [a1 , a2 , · · · , an ] (5.1)

Un cod sistematic are simbolurile de informatie i si


simbolurile de controlc grupate compact, de exemplu
v = [a1 , a2 , · · · , am , am+1 , · · · an ] respectiv v = [ci] sau v = [ic],
oferind avantajul unei implementari facile. Pentru codurile nesiste-
matice simbolurile de informat, ie sunt intercalate cu cele de control,
cuvintele de cod având forma v = [c1 , c2 , i3 , c4 , i5 · · · ].
Determinarea num rului de simboluri de informat, ie s, i de control
este detaliat  în continuare. Dac  se foloses, te pentru codare un alfabet
X = [0, 1], pentru transmiterea a N simboluri ale sursei, sunt necesare
k simboluri de informatie, num r care satisface relatia:
, ,

2k ≥ N (5.2)

Fiecare bloc de k biti este codat într-un bloc de n biti (n > k ) prin
, ,

ad ugarea a n − k = m biti de control. Num rul de biti de control m


, ,

este stabilit de marginea Hamming prin relat, ia:

e
X
2m ≥ Cni (5.3)
i=1

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
86

ce reprezint  o condit, ie necesar , dar nu sucient , e ind num rul


de erori pe care codul le poate corecta. În cazul corect, iei unei singure
erori (ec = 1), relat, ia anterioar  devine:

2m − 1 ≥ n (5.4)

5.2.2 Distanta între cuvintele de cod


,

Existent, a unor propriet t, i de corect, ie ale unui cod impune ca, din
mult, imea de cuvinte de n litere, numai o parte s  constituie cuvinte
cu sens. Astfel, se creeaz  în spat, iul cuvintelor o distant,   care a fost
denita de Hamming ca ind egal  cu num rul pozit, iilor prin care
dou  cuvinte difer . Distant, a dintre cuvintele de cod vi si vj reprezint 
ponderea unui cuvant de cod vi . Condit, ia necesar  s, i sucient  pe care
trebuie s  o îndeplineasc  distant, a dintre cuvinte pentru a corecta ec
erori este:

dmin = Pmin = 2 · ec + 1 (5.5)

Pentru detectia a ed erori, distanta minim  este:


, ,

dmin = Pmin = ed + 1 (5.6)

Se poate observa c  un cod corector de ec erori este detector de


2 · ed erori.

Un cod corector sau detector de erori este caracterizat prin matri-


cea de control H(m, n) s, i matricea generatoare G(k, n). Între aceste
dou  matrici exist  relat, ia:

HGT = 0 (5.7)

Orice cuvânt de cod, ind o combinat, ie liniar  a liniior matricii G


satisface relat, ia:

Hv T = 0 (5.8)

Aceasta relat, ie permite determinarea simbolurilor de control când


se cunosc cele de informat, ie, operat, ie efectuat  la codare.

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
87

Relat, ia (5.8) este similar  cu:

v = iG (5.9)

unde v este cuvântul de cod, i mesajul - ce contine simbolurile de


informatie, iar G matricea generatoare.
0 0
Forma canonic  a matricelor G = [P Ik ] s, i H = [Im Q], respectiv
00 00
G = [Ik P ] s, i H = [QIm ] conduce la obt, inerea unor cuvinte de cod
sistematice. Ik siIm reprezint  matricea unitate de ordin k respectiv
m iar matricea P = QT este regula predenit  de codare.
Exemplu 5.1. Fie un cod grup denit de urm toarea matrice de
control:  
1 0 0 1 1
H = 0 1 0 0 1 
0 0 1 1 0
S  se determine:

a) Lungimea cuvintelor de cod, num rul simbolurilor de informat, ie


s, i al celor de control.

b) Relat, iile de codare.

c) Cuvintele de cod obt, inute.

d) Matricea generatoare s, i relat, iile de codare în cazul cod rii cu


matricea G.

a) Dimensiunile matricii de control H(m, n) = H(3, 5) conduc la n = 5


si m = 3, rezultând apoi k = n − m = 2.

b) Deoarce matricea H este în form  canonic  H = [I3 Q] operat, ia de


codare va duce la obt, inerea unui cod sistematic . Primele trei simboluri
ale cuvântului de cod vor  cele de control iar in nal apar cele dou 
simboluri de informat, ie.

v = [c1 , c2 , c3 , i4 , i5 ]

Relat, ia (5.8) contribuie la deducerea simbolurilor de control din


cele de informat, ie.
Hv T = 0

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
88

 
  c1
1 0 0 1 1   c2 

H = 0 1 0 0 1   c3  = 0

0 0 1 1 0  i4 
i5

 c 1 ⊕ i4 ⊕ i 5 = 0

c 2 ⊕ i5 = 0

c 3 ⊕ i4 = 0

Operat, iile modulo 2 conduc la:



 c 1 = i4 ⊕ i 5

c 2 = i5

c 3 = i4

c) Num rul de cuvinte de cod ce se pot obt, ine cu cele dou  simboluri


k
de informat, ie este N = 2 = 4, acestea ind prezentate în Tabelul 5.1.

c1 c2 c3 i4 i5
v1 0 0 0 0 0
v2 1 1 0 0 1
v3 1 0 1 1 0
v4 0 1 1 1 1

Tabel 5.1: Cuvintele de cod aferente Exemplului 5.1.

d) Dimensiunea matricii generatoare este G(k, n) = G(2, 5) forma aces-


T
teia deducându-se din relat, iile Hv = 0 si H = [I3 Q] :
 
1 0 1 1 0
G = [P I2 ] =
1 1 0 0 1
cu P = QT . Codarea cu matricea G foloses, te relat, ia v = iG asa încât:
,
 
  1 0 1 1 0
v = iG = i4 i5 = [i4 + i5 , i5 , i4 , i5 ]
1 1 0 0 1
cu acelas, i rezultat ca la punctul b).

 c 1 = i4 ⊕ i 5

c 2 = i5

c 3 = i4

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
89

5.2.3 Codor si decodor Hamming corector de o


,

eroare

Fie k num rul simbolurilor informat, ionale necesare transmiterii


unei informat, ii. Num rul simbolurilor de control, m, ce trebuie ad u-
gate în scopul corect, iei unei erori, se determin  din relat, ia:

2m − 1 ≥ n (5.10)

Specicitatea codului grup Hamming corector de o eroare este dat 


de forma matricei de control H ale c rei coloane hi reprezint  scrierea
binar  a num rului i pe m biti, cu bitul cel mai semnicativ localizat în
,

prima linie. Drept urmare corectorul z , calculat cu relatia z = Hv 0T , ,

decodat din binar în zecimal, indic  num rul de ordine zecimal al


bitului eronat din cuvântul recept, ionat. Codul este nesistematic s, i
conform acestei reguli matricea de control va avea forma:

 
0 1 0 0 ··· 1
0
 0 0 0 ··· 1 

H = · · · · · · · · · · · ·
 ··· ··· 
 (5.11)
0 1 1 0 ··· 1 
1 0 1 0 ··· 1 (m×n)

Astfel în structura matriceal  a cuvintelor de cod, simbolu-


rile de control sunt plasate pe pozit, iile20 , 21 , 22 , ..., 2m−1 , num -
r toarea efectuându-se de la stânga la dreapta. Cele k sim-
boluri de informat, ie vor ocupa locurile r mase libere, adic :
[v] = [c1 , c2 , i3 , c4 , i5 , i7 , c8 , i9 , · · · , in ]. Codul Hamming este nesiste-
matic.

Determinarea simbolurilor de control, cunoscute ind simbolurile

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
90

informat, ionale, se efectueaz  cu relat, ia Hv T = 0, dup  cum urmeaz :

 
c1
 c2 
 
   i3 
0 1 0 0 ··· 1   c4 

0
 0 0 0 ··· 1  
  i5 
· · · · · · · · · · · · ··· · · · 
 i6  = 0 (5.12)
 

0 1 1 0 ··· 1   i7 

1 0 1 0 ··· 1   
 c8 

· · ·
in

Ecuat, ia matriceal  este echivalent  cu urm torul sistem de ecuat, ii:

c 1 = i3 ⊕ i 5 ⊕ · · · ⊕ in

c 2 = i3 ⊕ i 6 ⊕ · · · ⊕ in
(5.13)
c 4 = i5 ⊕ i 6 ⊕ · · · ⊕ in

·····················

Codorul, care are misiunea de a calcula simbolurile de control, cu-

Fig. 5.1: Codor Hamming (7, 4).

noscute ind simbolurile informat, ionale, va  format dintr-un registru


care cont, ine n circuite basculante bistabile în care se stocheaz  simbo-
lurile informat, ionale în pozit, iile corespunz toare din cuvântul de cod

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
91

s, i o serie de sumatoare modulo 2 care, conform sistemului de ecuat, ii,


calculeaz  simbolurile de control. Simbolurile de control astfel calcu-
late se stocheaz  apoi în pozit, iile în care acestea intervin în cuvântul
de cod.
0T
Decodorul implementeaz  relat, ia z = Hv , unde z se numes, te
0 0 0 0 0 0 0 0 0 0 0
corectorul cuvântului recept, ionat, v = [c1 c2 i3 c4 i5 i6 i7 c8 i9 · · · cn ].

zm = c01 ⊕ i03 ⊕ i05 ⊕ · · · ⊕ i0n

zm−1 = c02 ⊕ i03 ⊕ i06 ⊕ · · · ⊕ i0n


(5.14)
zm−2 = c04 ⊕ i05 ⊕ i06 ⊕ · · · ⊕ i0n

·····················
Structura matriceal  a corectorului este dat  de:

Fig. 5.2: Decodor Hamming (7, 4).

 
z1
 z2 
[z] = 
· · · = αi [hi ] = [hi ]
 (5.15)

zm

Deoarece coloana hi este reprezentarea binar  a num rului i pe


m bit, i, pozit, ia erorii în cuvântul recept, ionat se poate deduce prin

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
92

transcrierea zecimal  a num rul binar corespunz tor componentelor


corectorului.

Decodorul Hamming corector de o eroare va  format dintr-un re-


gistru cu n circuite basculante bistabile în care va  memorat cuvântul
recept, ionat, o serie de sumatoare modulo 2 care, conform sistemului
de ecuat, ii, calculeaz  componentele corectorului s, i un decodicator D
din binar în zecimal cu m intr ri s, i n ies, iri.

5.3 Desf ³urarea lucr rii


Aplicatie 5.1.
, Fie dat un cod bloc C(6, 3) generat de matricea pre-
denit  P:  
0 1 1
P = 1 0 1
1 1 0
1. Scriet, i in Matlab o secvent,   de cod care s  realizeze codarea
mesajelor [1 1 1], [1 0 1].
2. Codat, i toate mesajele posibile emise de surs  s, i identicat, i nu-
m rul de erori pe care codul le poate corecta/detecta.

m=3; % m este numarului bitilor de control


k=3;% numarul simbolurile de informatie
n=m+k;% lungimea cuvantului de cod
msg=[1 1 1];
%introducerea regulii predefinite de codare
P=[0 1 1;1 0 1;1 1 0];
%obtinerea matricii generatoare prin
%concatenarea matricei identitate I3 cu matricea
predefinita P
genmat=[eye(3) P] ;
code = encode(msg,n,k,'linear/binary',genmat)

Aplicatie 5.2.
, Fie H, matricea de control a unui cod bloc liniar.
 
1 0 0 0 1 1 1
H = 0 1 0 1 0 1 1
0 0 1 1 1 0 1
Scriet, i în Matlab o secvent,   de cod pentru identicarea matricei ge-
T
neratoare, vericat, i relat, ia HG = 0 s, i identicat, i toate cuvintele de
cod ce se pot forma cu acest cod. Câte erori poate corecta acest cod?

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
93

%matricea H in forma canonica


H=[1,0,0,0,1,1,1;0,1,0,1,0,1,1;0,0,1,1,1,0,1];
[m,n] = size(H)
Q = [H(:,n-m:n)]
P = Q'
G = [ P, eye(n-m)]
disp ('G = ')
disp ('Matricea generatoare, G, este de ordinul (k x n):')
[k,n] = size(G)
%vericarea HGT=0
rem(H*G',2)
%cuvintele de cod ce se pot forma
N=2^k; %numarul de mesaje
msg = (0:N-1)';%indicele zecimal al fiecarui mesaj
msg_conv = de2bi(msg);%mesajele
%codarea cu matricea G
cuvinteCod= rem(msg_conv*G,2) %cuv de cod v=IG
%distanta Hamming
d_Hamming = min(sum((cuvinteCod(2:2^k,:))'))

5.4 Crearea unui cod Hamming binar in Si-


mulink
Modelul Simulink din Fig. 5.3 prezint  cel mai simplu mod de im-
plementare a unui codor, respectiv decodor pe un canal f r  pertubat, ii
[16].

Fig. 5.3: Implementarea cod rii si decod rii Hamming pentru


,

un canal f r  perturbatii. ,

Vizualizarea modelului se face prin introducerea în Command


Window a instruct, iunii doc_hamming. Altfel, modelul se poate con-
strui folosind urmatoarele blocuri din biblioteca: Communications
System Toolbox:

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
94

1. Bernoulli Binary Generator - din biblioteca Sources, genereaz 


aleator numere binare dup  o distribut, ie Bernoulli de parametru
p - produce 0 00 cu probabilitate p s, i 0 10 cu probabilitate 1 − p.
0 0
- Setarea probabilit t, ii pentru 0 la valoarea de 0.5.
- Setarea Initial seed la orice valoare întreaga pozitiv , de
preferint, a aceeas, i cu ies, irea funct, iei randseed.
- C sut, a Frame-based outputs bifat .
- Valoarea 4 pentru Samples per frame.

2. Hamming Encoder - codeaz  mesaje de lungime k -vector co-


loan , folosind un codor Hamming, ies, irea acestui bloc ind un
vector coloan  de lungime n, cu n = 2m − 1. Default n = 7 s, i
k=4 codul ind corector de o eroare.

3. Hamming Decoder -decodeaz  cuvântul de cod recept, ionat,


având setat, i aceeas, i parametri ca s, i codorul.

4. Error Rate Calculation - compar  datele transmise (port Tx ) cu


datele recept, ionate (port Tr ) prin raportarea num rului de erori
(emisie 6= recept, ie) la întreg s, irul de bit, i transmis.

Pe Display este as, ata rata de eroare, num rul de erori detectate


s, i numarul de simboluri comparate. Deoarce canalul din model este
unul f r  perturbat, ii rata de eroare este nul .

Obt, inerea unei valori mai mici a ratei de eroare la aceeas, i proba-
bilitate de eroare implic  modicarea parametrilor codului Hamming
la valori mai mari, crescând astfel capacitatea de corect, ie/detect, ie a
codului.

5.5 Reducerea ratei de eroare folosind un


cod Hamming
Pentru a simula un canal cu pertubat, ii se completeaz  modelul
prin înserarea unui bloc CBS (canal binar simetric) din biblioteca
Channels. Parametrii acestui bloc se pot vizualiza în Fig. 5.5 (a).
Rata de eroare calculat  coincide cu probabilitatea de eroare p = 0.3
a canalului.

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
95

Operatorul relat, ional compar  semnalul transmis de surs  (genera-


torul Bernoulli) cu semnalul recept, ionat de la decodor. Ies, irea acestui
bloc este 0 dac  cele dou  semnale sunt identice s, i 1 dac  difer .

Fig. 5.4: Implementarea cod rii si decod rii Hamming pentru


,

un canal binar simetric.

Vizualizarea erorilor introduse pe canal se face înserând un bloc-


Scope (osciloscop) din biblioteca Sinks- Fig. 5.5 (b).

(a) (b)

Fig. 5.5: (a) Paramterii blocului BSC in Simulink;


(b) Vizualizarea erorilor introduse de canalul binar simetric
p = 0.3 si a erorilor necorectate.
,

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
96

5.6 Transmisia unui semnal audio


În cele ce urmeaz  este prezentat  folosirea codurilor Hamming
(7,4) în transmisia f r  erori a unui semnal audio. Astfel, se presupune
c  mesajul a fost deja prelucrat în vederea elimin rii redundant, ei (prin
codarea de surs ), s, i c  la intrarea în canal avem un semnal digital,
având n bit, i pe es, antion. Aplicat, ia impune utilizarea unui semnal
vocal mono-canal, reprezentat cu 8 bit, i pe es, antion. Semnalul audio
pe care îl vom transmite are o durat  cunoscut , astfel încât num rul
de es, antioane aate la intrarea canalului este nit.

Se va folosi codarea cu ajutorul matricei generatoare. Astfel, pen-


tru un bloc de bit, i de informat, ie i = [i1 , · · · , ik ], cuvintele de cod se vor
obt, ine în urma relat, iei de codare (5.9). Cuvântul de cod de lungime
n va  de forma v = [a1 , ..., an ].

I. Reprezentarea semnalului
Pentru transmisie avem la dispozit, ie k = 4 bit, i de informat, ie.
4
Astfel, se pot forma 2 = 16 cuvinte de cod. Prin urmare, semnalul
audio ce trebuie transmis va  întâi partit, ionat.

% inregistram semnalul audio (simulam inregistrarea citind


% un fisier ".wav")
mesaj = wavread('audio.wav');
%functia uint8 recuantizeaza semnalul pe 8 biti
mesaj = double(uint8(mesaj));
plot(mesaj, 'b'), title ('semnal original'), hold on;
% afisam semnalul original

Fig. 5.6: Semnalul audio original.


Fiecare 8 biti reprezint  un esantion de semnal.
, , Deoarece avem la
dispozit, ie 4 biti de informatie pentru a reprezenta un mesaj, va trebui
, ,

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
97

s  partit, ion m cei 8 bit, i corespunz tori unui es, antion în 2 blocuri de


4 bit, i - Fig. 5.7.

Fig. 5.7: Reprezentarea esantioanelor de semnal.


,

Urm toarea secvent,   de cod are drept rol împ rt, irea unui bloc de
8 bit, i în dou  blocuri de 4 bit, i.

function bloc = split(esantion)

% esantion = un esantion reprezentat pe 8 biti


% bloc = cele doua blocuri de cate 4 biti; fiecare linie
% reprezinta un bloc de 4 biti
% reprezentarea valoarii esantionului in baza 2
% initializarea vectorului de 8 elemente cu zerouri
esantionBinar = zeros(1,8);
vectorBinar = decimalToBinaryVector(esantion);
lenVector = length(vectorBinar);
% pozitionarea vectorului obtinut pe uultimele pozitii din
% esantionBinar
esantionBinar (end-lenVector+1:end) = vectorBinar;
% pozitionarea primele 4 valori in prima linie din bloc si
% ultimelor 4 valori in a doua linie
bloc(1,:) = esantionBinar(1:4);
bloc(2,:) = esantionBinar(5:8);
end

Se redimensioneaz  astfel semnalul de intrare as, a încât s  e com-


pus din blocuri (mesaje) de câte 4 bit, i în vederea cod rii Hamming.

% numarul de esantioane initiale


lungimeSemnal = length(mesaj);
% initializarea variabilei in care se va stoca rezultatul
mesajIN = zeros(2,4*lungimeSemnal);
j=1;
for k = 1: lungimeSemnal
mesajIN(:, j:j+3) = split(mesaj(k));

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
98

j = j+4;
end

II. Codarea bloc cu bloc a semnalului


Variabila mesajIN este în formatul redat în Fig. 5.8, s get, ile
albastre indicând ordinea în de parcurgere a blocurilor:

Fig. 5.8: Ordinea de parcurgere a blocurilor.

Forma canonic  a matricei generatoare a codului Hamming (7, 4):


 
0 1 1 1 0 0 0
1 0 1 0 1 0 0
G=
1

1 0 0 0 1 0
1 1 1 0 0 0 1

conduce la obt, inerea unor cuvinte de cod sistematice, în care primii


3 bit, i sunt cei de control, iar ultimii 4 sunt bit, ii de informat, ie:

v = [i2 + i3 + i4 , i1 + i3 + i4 , i1 + i2 + i4 , i1 , i2 , i3 , i4 ]

% matricea generatoare
G=[[0,1,1;1,0,1;1,1,0;1,1,1],eye(4)]

% citirea semnaluuil bloc cu bloc si efectuarea operatia de


codare
nrBiti = size(mesajIN,2);

% liniarizarea semnalul de intrare pentru a facilita


citirea
mesajIN = reshape(mesajIN,1,2*nrBiti);

% variabila in care se vor stoca toate cuvintele de cod


cuvinteCod = xor(zeros(1,n),blocCurent*G);
t=1;
for k = 1: 4 : 2*nrBiti

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
99

blocCurent = mesajIN (k:k+3);


cuvinteCod(t,:) = blocCurent*G;
t=t+1;
end

III. Simularea aparitiei erorilor pe canalul de transmisiune


,

% definirea numarul maxim de erori care vor aparea intr-un


% cuvant de cod
q = 2;
% selectarea in mod aleator a numarului de biti ce vor fi
afectati %pentru fiecare cuvant
erori = zeros(size(cuvinteCod));
for k = 1: size(cuvinteCod,1)
% cate erori afecteaza cuvantul curent
nrErori= genRandIdx([0,q], 1);
% unde sunt pozitionate in cuvantul curent
pos = genRandIdx([1,7], nrErori);
% daca exista erori atunci bitii de pe pozitiile respective
devin 1
if pos ~=0
erori (k,pos)=1;
end
end
% cuvintele de cod afectate de erori
cuvinteEronate = xor (cuvinteCod, erori);

S
, tiind c  bit
, ii de informat
, ie se a  pe ultimele 4 pozit, ii, se poate
recompune semnalul vocal pentru a vizualiza diferent, ele fat,   de sem-
nalul original.

Fig. 5.9: Semnalul original (albastru) si cel perturbat (rosu).


, ,

% vizualizare semnal afectat de erori


bitiInformatiePerturbati = double(cuvinteEronate(:,4:end));
% variabila in care se va stoca semnalul perturbat
semnalEronat = zeros(size(mesaj));

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
100

for k = 1: 2 : 2*lungimeSemnal
% recompunerea fiecarui esantion si revenirea in baza 10
esantionCurent(1:4) = bitiInformatiePerturbati(k, :);

esantionCurent(5:8) = bitiInformatiePerturbati(k+1, :);


semnalEronat((k-1)/2 + 1 )= binaryVectorToDecimal(
esantionCurent);
end
% afisarea cu rosu a semnalului eronat peste cel original
plot(semnalEronat, 'r')
plot(mesaj-semnalEronat), title ('semnal de eroare')

Fig. 5.10: Semnalul de eroare

IV. Decodarea semnalului


La decodare se va folosi forma canonic  a matricei de control H
de dimensiune m × n:
 
1 0 0 0 1 1 1
H = 0 1 0 1 0 1 1 (5.16)
0 0 1 1 1 0 1

% matricea de control
H=[eye(3),transpose([0,1,1;1,0,1;1,1,0;1,1,1])];

% calculul sindromului corector


sindrom = mod(cuvinteEronate* H',2);

Fiecare coloan  din sindromul corector va reprezenta pozit, ia bi-


tului eronat conform modului de pozit, ionare a bit, ilor specic codului
Hamming s, i corespunzator cuvântului de cod în forma sistematic :

v = [c4 , c2 , c1 , i3 , i5 , i6 , i7 ] (5.17)

dedus din forma matricelor G s, i H.

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
101

Pentru identicarea pozit, iei se foloses, te mai departe


corespondent, a dintre forma sistematic  s, i cea nesistematic  a
matricei H:

Forma nesistematic  este:


 
0 0 0 1 1 1 1
H = 0 1 1 0 0 1 1 (5.18)
1 0 1 0 1 0 1

iar forma cuvântului de cod nesistematic este:

v = [c1 , c2 , i3 , c4 , i5 , i6 , i7 ] (5.19)

Spre exemplu, dac  sindromul are valoarea [0 1 1], atunci valoarea


în baza 10 va  3, deci bitul eronat este i3 , care în forma sistematic 
este situat pe pozit, ia 4. Prin urmare, corect, ia se va efectua asupra
bitului 4 din cuvantul recept, ionat.

Fig. 5.11: Semnalul estimat (corectat) pentru cazul când pe


canal apare o singur  eroare - semnalul este perfect
reconstruit.

% trecem in baza 10 pentru a identifica pozitia erorii

pozitiiEroriNesistematic = zeros(2*lungimeSemnal,1);
pozitiiEroriSistematic = zeros(2*lungimeSemnal,1);

for k = 1: size(sindrom,2)
pozitiiEroriNesistematic(k)=binaryVectorToDecimal(transpose
(sindrom(:,k)));
end
% corespondenta dintre ordinea coloanelor intre matricea H
% nesistematica si cea sistematica
% prima linie indica modul de pozitionare al bitilor in
forma

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
102

% nesistematica, adica [c1 c2 i3 c4 i5 i6 i7]


% a doua linie indica modul de pozitionare al bitilor in
forma
% sistematica, adica [c4 c2 c1 i3 i5 i6 i7]

coloane = [ 1 2 3 4 5 6 7; 3 2 4 1 5 6 7];

% folosind regula de corespondenta de mai sus, se


identifica pozitia
% erorilor
for k = 1:n
if tmp~=0
pozitiiEroriSistematic(pozitiiEroriNesistematic == k) =
coloane(2,coloane(1,:)==k);
end
end
% corectarea bitilor identificati ca fiind eronati
eroriEstimate = zeros (size(cuvinteCod));

for k = 1: 2*lungimeSemnal
bitEronat = pozitiiEroriSistematic(k); % pozitia erorii
if bitEronat ~=0

% schimbarea valorii bitului respectiv


eroriEstimate(k,bitEronat) = mod(eroriEstimate(k,
bitEronat)+1,2);
end
end

Fig. 5.12: Semnalul estimat (corectat) pentru cazul cand pe


canal pot aparea 2 erori - reconstructia semnalului nu este
corecta

% corectarea cuvintelor
cuvinteEstimate = double(xor (cuvinteEronate, eroriEstimate
));
% refacerea semnalului
% variabila in care se va stoca semnalul estimat

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016
103

semnalEstimat = zeros(size(mesaj));

for k = 1: 2 : 2*lungimeSemnal
% recompunerea fiecarui esantion si trecerea in baza 10

esantionCurent(1:4) = cuvinteEstimate(k, 4:7);


esantionCurent(5:8) = cuvinteEstimate(k+1, 4:7);

semnalEstimat((k-1)/2 + 1 )= binaryVectorToDecimal(
esantionCurent);
end
figure,plot(semnalEstimat, 'b') , title ('semnal estimat')

% codul este corector de o eroare, deci daca un cuvant a


fost
% afectat de mai multe erori, acesta nu va fi corectat
figure,plot(mesaj-semnalEstimat), title ('semnal de eroare'
)
% ascultarea semnalul estimat
wavplay(uint8(semnalEstimat),8000);

5.7 Exercit, ii propuse


1. Implementat, i în Matlab o secvent,   de cod ce foloses, te codul
Hamming corector de o eroare pentru a determina cuvântul de
cod aferent transmiterii notei 8.

2. Considerat, i un cod bloc sistematic generat de matricea prede-


nit  P:  
1 1 0
P = 0 1 1
1 0 1
Identicat, i lungimea cuvântului de cod s, i num rul simbolurilor
de informat, ie. Implementat, i în Matlab o secvent,   de cod care s 
genereze cuvintele de cod pentru toate mesajele posibile emise
de surs  s, i identicat, i num rul de erori pe care codul le poate
corecta/detecta.

3. Scriet, i o secvent,   de cod pentru implementarea unui cod Ham-


ming C(15, 11) cu ajutorul c ruia s  codati textul ' Egalitate nu
exist  decât în matematic .'

D. Faur, C.Pătrașcu, A. Popescu, C.Dănișor - Teoria Transmisiunii Informatiei- Aplicatii, Printech 2016