Sunteți pe pagina 1din 18

S4 Coduri bloc lineare.

Codul Hamming
corector de o eroare
P1. Fie codul bloc linear dat prin matricea de control

1 0 0 0 1 0
𝐻= 0 1 0 0 1 1
0 0 1 0 1 1
0 0 0 1 0 1

a) Care este structura cuvintelor de cod?Determinati relatiile de codare. Care este secventa
binara codata pentru secventa informationala 𝑖 = 1 0 1 1
b) Stabiliti care este matricea generatoare a codului
c) Determinati proprietatile de control ale codului
d) Ilustrati modul de functionare a decodorului pentru urmatoarele cuvinte receptionate
𝑟1 = 1 1 1 0 0 0 si 𝑟2 = 1 0 1 0 0 0
Orice cod bloc poate avea o structura sistematica sau nesistematica.
Aceasta structura este determinata formele canonice ale matricii H sau G.
Astfel:

a) Pentru structura sistematica 𝑣′ = 𝑖 𝑐 - in cuvantul de cod bitii de informatie sunt grupati si apar
inaintea bitilor de control notati cu c , formele canonice ale lui G si H sunt:

𝑮′ = 𝑰𝒎 𝑷  𝑯′ = [𝑷𝑻 𝑰𝒌 ] , unde𝑰𝒎 𝑠𝑖 𝑰𝒌 sunt matrici unitate de ordinul m, respectiv k

Vom avea relatiile de codare 𝑣′ = iG′ si 𝐻′𝑣′𝑡 = 0

b) Pentru structura sistematica 𝑣" = 𝑐 𝑖 , formele canonice ale lui G si H sunt:

𝑮" = 𝑷 𝑰𝒎 si 𝑯" = [𝑰𝒌 𝑷𝑻 ]

Vom avea relatiile de codare 𝑣" = iG" si 𝐻"𝑣"𝑡 = 0


a)
1 0 0 0 1 0
𝐻= 0 1 0 0 1 1
0 0 1 0 1 1
0 0 0 1 0 1
pt forma canonica 𝑯" = [𝑰𝒌 𝑷𝑻 ] => 𝑣" = 𝑐 𝑖 - structura cuvantului de cod
Pentru codul nostru 𝑯"4𝑥6 = [𝑰4 𝑷𝑻𝟒𝒙𝟐 ] => k =4, n = 6, m =2 (n=m+k)
Deci 𝑣" = 𝑐1 𝑐2 𝑐3 𝑐4 𝑎5 𝑎6
𝑐1
1 0 0 0 1 0 𝑐2 0 𝑐1 ⊕ 𝑎5 = 0 𝑐1 = 𝑎5
0 𝑐3 0 ⇒ 𝑐2 ⨁𝑎5 ⨁𝑎6 = 0 ⇒ 𝑐2 = 𝑎5 ⨁𝑎6
𝐻𝑣 𝑡 = 0 ⇒ 0 1 0 1 1
𝑐4 = 𝑐3 = 𝑎5 ⨁𝑎6
0 0 1 0 1 1 0 𝑐3 ⨁𝑎5 ⨁𝑎6 = 0
0 0 0 1 0 1 𝑎5 0 𝑐4 ⊕ 𝑎6 = 0 𝑐4 = 𝑎6
𝑎6
Pentru 𝑖 = 1 0 1 1 , avand m = 2 => 𝑖1 = 1 0 si 𝑖2 = 1 1
Biti de control ii calculam, iar bitii de informatii ii stim.
𝑐1 = 𝑎5 𝑐1 = 1
𝑐2 = 𝑎5 ⨁𝑎6 𝑐 = 1⨁0 = 1
Pt. 𝑖1 = 1 0 => 𝑐 = 𝑎 ⨁𝑎 ⇒ 2 => 𝑣1 " = 𝑐1 𝑐2 𝑐3 𝑐4 𝑎5 𝑎6
3 5 6 𝑐3 = 1⨁0 = 1
𝑐4 = 𝑎6 𝑐4 = 0

𝑣1 " = 1 1 1 0 1 0
Pt. 𝑖2 = 1 1 => 𝑣2 " = 𝑐1 𝑐2 𝑐3 𝑐4 𝑎5 𝑎6 => 𝑣2 " = 1 0 0 1 1 1

b) G = ?
1 0 0 0 1 0
𝑯" = [𝑰𝒌 𝑷𝑻 ] ⇒ 𝑮" = 𝑷 𝑰𝒎 => pt. 𝐻" = 0 1 0 0 1 1 => 𝐺" = 1 1 1 0 1 0
0 0 1 0 1 1 0 1 1 1 0 1
0 0 0 1 0 1
c) determinarea distante de cod, d 𝑐1 𝑐𝟐 𝑐𝟑 𝑐𝟒 𝑎5 𝑎𝟔 dH
0 0 0 0 0 0 -
d => nr. de erori corectabile sau detectabile
0 1 1 1 0 1 4
d = min(dH) =4 -> e =2, t =1
1 1 1 0 1 0 4
Exista 2m cuvinte de cod. 1 0 0 1 1 1 4
d) 𝑟1 = 1 1 1 0 0 0 si 𝑟2 = 1 0 1 0 0 0
Pentru 𝑟1 vom calcula sindromul 𝑆1

1
1 0 0 0 1 0 1 1
1
𝑆1 = 𝐻𝑟1𝑡 = 0 1 0 0 1 1 = 1 ≠ 0 => exista erori in 𝑟1
0 0 1 0 1 1 0 1
0 0 0 1 0 1 0 0
0
Daca 𝑆 = ℎ𝑖 , unde ℎ𝑖 este coloana numarul i din H atunci exista o eroare pe pozitia i din 𝑟1
Daca 𝑆 ≠ ℎ𝑖 , unde ℎ𝑖 este coloana numarul i din H atunci exista mai multe erori in 𝑟1
1
𝑆1 = 1 = ℎ5 => exista o eroare pe pozitia 5 in 𝑟1
1
0
Corectia se face astfel: v = 𝑟 ⊕ 𝑒, unde e este un vector de lungime n cu elemente 0, doar pe
pozitia i avand 1
Corectia: 𝑣1 = 𝑟1 ⨁𝑒 = 1 1 1 0 0 0⨁0 0 0 0 1 0 = 1 1 1 0 1 0
Pentru 𝑟2 = 1 0 1 0 0 0 vom calcula sindromul 𝑆2
1
1 0 0 0 1 0 0 1
1
𝑆2 = 𝐻𝑟2𝑡 = 0 1 0 0 1 1 = 0 ≠ 0 => exista erori in 𝑟2
0 0 1 0 1 1 0 1
0 0 0 1 0 1 0 0
0
Dar, 𝑆2 ≠ ℎ𝑖 => exista erori duble
P2. Secventa binara 101001110101 se codeaza pentru protectie la erori folosind:
a) Un cod Hamming perfect n =7;
b) Un cod Hamming extins pornind de la codul H(7,4);
c) Un cod Hamming restrans pornind de la codul H(15,11);
Determinati in toate cele 3 cazuri:
1. relaţiile de codare şi primul cuvant de cod nenul
2. Lungimea secventei codate
3. cuvantul de cod corect din care provin secventele receptionate: 𝑟1 = [1011001] si 𝑟2 = [11011101]

a) Un cod Hamming perfect n =7; H(7,4)


1. Relatiile de codare si primul cuvant de cod
v = 𝑐1 𝑐2 𝑎3 𝑐4 𝑎5 𝑎6 𝑎7 , unde 𝑐1 , 𝑐2 𝑠𝑖 𝑐4 sunt bitii de control, iar 𝑎3 , 𝑎5 , 𝑎6 𝑠𝑖 𝑎7 bitii de informatie
Codarea se va face utilizand relatia: 𝐻𝑣 𝑡 = 0
𝑐1
𝑐2
0 0 0 1 1 1 1 𝑎3 0 𝑐4 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 = 0 𝑐4 = 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7
𝐻𝑣 𝑡 = 0 ⇒ 0 1 1 0 0 1 1 𝑐4 = 0 ⇒ ቐ𝑐2 ⊕ 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7 = 0 ⇒ ቐ𝑐2 = 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7
1 0 1 0 1 0 1 𝑎5 0 𝑐1 ⊕ 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7 = 0 𝑐1 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7
𝑎6
𝑎7
Din secventa binara 1010 0111 0101, pentru codul H(7,4) primul bloc informational, de lungime
m= 4 este 𝑖1 = 1 0 1 0 , acestia fiind biti de informatie 𝑎3 = 1, 𝑎5 = 0, 𝑎6 = 1 𝑠𝑖 𝑎7 = 0

Vom calcula din relatiile de codare, biti de control corespunzatori:

𝑐4 = 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 𝑐4 = 0 ⊕ 1 ⊕ 0 = 1
ቐ𝑐2 = 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7 = ቐ𝑐2 = 1 ⊕ 1 ⊕ 0 = 0 =>𝑐1 = 1, 𝑐2 = 0 𝑠𝑖 𝑐4 = 1
𝑐1 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7 𝑐1 = 1 ⊕ 0 ⊕ 0 = 1
𝑣1 = 𝑐1 𝑐2 𝑎3 𝑐4 𝑎5 𝑎6 𝑎7 = [1 0 1 1 0 1 0 ]
2. Lungimea secventei codate
Secventa binara data are 12 biti, lungimea secvente codate se poate determina astfel:
𝑛𝑟.𝑏𝑖𝑡𝑖 𝑠𝑒𝑐𝑣𝑒𝑛𝑡𝑎 𝑛𝑟.𝑏𝑖𝑡𝑖 𝑠𝑒𝑐𝑣𝑒𝑛𝑡𝑎
𝐿= ∙ 𝑛 . Daca nu este un nr. Intreg atunci se adauga biti de zero la
𝑚 𝑚
secventa a.i. nr. bitilor din secventa sa se imparta exact la m
12
𝐿= ∙ 7 = 21 𝑏𝑖𝑡𝑖
4
3. cuvantul de cod corect din care provin secventele receptionate: 𝑟1 = 1011001
Dupa cum observam, doar secventa 𝑟1 are 7 biti, ceea ce inseamna ca e o secventa codata cu H(7,4)
Pentru 𝑟1 vom calcula sindromul 𝑆
1
0
0 0 0 1 1 1 1 1 0
𝑆= 𝐻𝑟1𝑡 = 0 1 1 0 0 1 1 1 = 0 ≠ 0 dar 𝑆 = ℎ1 => exista o eroare pe pozitia 1 in 𝑟1
1 0 1 0 1 0 1 0 1
0
1
Corectia: 𝑣1 = 𝑟1 ⨁𝑒 = 1 0 1 1 0 0 1 ⨁ 1 0 0 0 0 0 0 = 0 0 1 1 0 0 1 ⇒ i = [1 0 0 1]
b. Un cod Hamming extins pornind de la codul H(7,4);
1. Relatiile de codare si primul cuvant de cod
𝑛′ = 𝑛 + 1
Hamming extins H*(n’,m’) pornind de la H(n,m)=> se obtine un nou cod cu parametrii ቐ 𝑚′ = 𝑚 (se va adauga un bit de control
𝑘′ = 𝑘 + 1
la v)

Astfel v′ = 𝑐0 𝑐1 𝑐2 𝑎3 𝑐4 𝑎5 𝑎6 𝑎7 iar
0 𝐻
𝐻∗ = - la matricea H a codului H(n,m) se adauga o coloana de 0 si ultima linie cu biti de 1
1 1
Pt. H*(8,4) obtinut de la H(7,4)
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
𝐻∗ =
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1

𝑐4 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 = 0 𝑐4 = 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7
𝑐2 ⊕ 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7 = 0 𝑐2 = 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7
𝐻∗ v′𝑇 = 0 ⇒ ⇒
𝑐1 ⊕ 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7 = 0 𝑐1 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7
𝑐0 ⊕ 𝑐1 ⊕ 𝑐2 ⊕ 𝑎3 ⊕ 𝑐4 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 = 0 𝑐0 = 𝑐1 ⊕ 𝑐2 ⊕ 𝑎3 ⊕ 𝑐4 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7

𝑐0 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7 ⊕ 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7 ⊕ 𝑎3 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎6
Din secventa binara 101001110101, pentru codul H*(8,4) primul bloc informational, de lungime m’=
4 este 𝑖1 = 1 0 1 0 , acestia fiind biti de informatie 𝑎3 = 1, 𝑎5 = 0, 𝑎6 = 1 𝑠𝑖 𝑎7 = 0

Vom calcula din relatiile de codare, biti de control corespunzatori:

𝑐4 = 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 𝑐4 = 1
𝑐2 = 𝑎3 ⊕ 𝑎6 ⊕ 𝑎7 𝑐2 = 0
⇒ ⇒ 𝑣1 ′ = 𝑐0 𝑐1 𝑐2 𝑎3 𝑐4 𝑎5 𝑎6 𝑎7
𝑐1 = 𝑎3 ⊕ 𝑎5 ⊕ 𝑎7 𝑐1 = 1
𝑐0 = 𝑐1 ⊕ 𝑐2 ⊕ 𝑎3 ⊕ 𝑐4 ⊕ 𝑎5 ⊕ 𝑎6 ⊕ 𝑎7 𝑐0 = 0

=> 𝑣1 ′ = 0 1 0 1 1 0 1 0
2. Lungimea secventei codate
Secventa binara data are 12 biti, lungimea secvente codate se poate determina cu acceeasi relatie:
𝑛𝑟.𝑏𝑖𝑡𝑖 𝑠𝑒𝑐𝑣𝑒𝑛𝑡𝑎 12
𝐿= ∙ 𝑛′ = ∙ 8 = 24 𝑏𝑖𝑡𝑖
𝑚′ 4
3. cuvantul de cod corect din care provin secventele receptionate: 𝑟2 = [11011101]
Dupa cum observam, secventa 𝑟2 are 8 biti, ceea ce inseamna ca e o secventa codata cu
H*(8,4)
Rolul extinderii unui cod perfect este de a creste distanta de cod de la d = 3 -> d = 4
Pt d = 4 vom avea d ≥ t + e +1 => t = 1, e=2 - deci este un cod corrector de o eroare si detector
de doua erori.
Astfel, pentru sindrom avem urmatoarele situatii:
𝑐0
∗ 𝑇 𝟎 𝑯 𝑐1 𝑺𝟏
𝑺=𝑯 𝑟 = =
𝟏 𝟏 . 𝑆2
𝑎𝑛
𝑺𝟏 = 𝟎
ൠ - nu avem erori sau erorile nu sunt detectabile
𝑆2 =0
𝑺𝟏 ≠ 𝟎
ൠ - exista o eroare corectabila pe pozitiile de la c1 la an
𝑆2 =1
𝑺𝟏 = 𝟎 𝑺𝟏 ≠ 𝟎
ൠ ⇒ simbolul c0 este eronat ൠ => s-au detectat 2 erori
𝑆2 =1 𝑆2 =0
𝑺 = 𝑯∗ 𝑟2𝑇 pentru 𝑟2 = [11011101] vom avea
1
1
0 0 0 0 1 1 1 1 0 1 1
0 0 1 1 0 0 1 1 1 𝑺 𝑺𝟏 = 0
𝑺= = 0 = 𝟏 ⇒ => s-au detectat 2 erori
0 1 0 1 0 1 0 1 1 0 𝑆2 0
1 1 1 1 1 1 1 1 1 0 𝑆2 = 0
0
1
c) Un cod Hamming restrans pornind de la codul H(15,11);
1. Relatiile de codare si primul cuvant de cod
Codul Hamming restrains se obtine din codul Hamming perfect, astfel:
- in matricea de control H se elimina coloanele cu numar par de biti de 1
- in cuvantul de cod, se elimina biti corespunzatori coloanelor eliminate.
Pentru codul H(15,11) vom avea:
n = 15, m= 11, k =4
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
𝑯=
0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
𝒗 = 𝒄𝟏 𝒄𝟐 𝒂𝟑 𝒄𝟒 𝒂𝟓 𝒂𝟔 𝒂𝟕 𝒄𝟖 𝒂𝟗 𝒂𝟏𝟎 𝒂𝟏𝟏 𝒂𝟏𝟐 𝒂𝟏𝟑 𝒂𝟏𝟒 𝒂𝟏𝟓

𝟎 𝟎 𝟎 𝟎 𝟏 𝟏 𝟏 𝟏
𝟎 𝟎 𝟏 𝟏 𝟎 𝟎 𝟏 𝟏
𝑯𝟎 = => H0(8,4) – codul Hamming restrans
𝟎 𝟏 𝟎 𝟏 𝟎 𝟏 𝟎 𝟏
𝟏 𝟎 𝟎 𝟏 𝟎 𝟏 𝟏 𝟎
𝒗𝟎 = 𝒄𝟏 𝒄𝟐 𝒄𝟒 𝒂𝟕 𝒄𝟖 𝒂𝟏𝟏 𝒂𝟏𝟑 𝒂𝟏𝟒
Din secventa binara 101001110101, pentru codul H0(8,4) primul bloc informational, de lungime m= 4 este
𝑖1 = 1 0 1 0 , acestia fiind biti de informatie 𝑎7 = 1, 𝑎11 = 0, 𝑎13 = 1 𝑠𝑖 𝑎14 = 0

𝑐1
𝑐2
𝟎 𝟎 𝟎 𝟎 𝟏 𝟏 𝟏 𝟏 𝑐4 𝑐8 = 𝑎11 ⊕ 𝑎13 ⊕ 𝑎14 𝑐8 = 0 ⊕ 1 ⊕ 0 = 1
𝟎 𝟎 𝟏 𝟏 𝟎 𝟎 𝟏 𝟏 𝑎7 𝑐4 = 𝑎7 ⊕ 𝑎13 ⊕ 𝑎14 𝑐4 = 1 ⊕ 1 ⊕ 0 = 0
𝐻0 𝑣0𝑇 = 0 ⇒ 𝑐8 = 0 ⇒ =
𝟎 𝟏 𝟎 𝟏 𝟎 𝟏 𝟎 𝟏 𝑐2 = 𝑎7 ⊕ 𝑎11 ⊕ 𝑎14 𝑐2 = 1 ⊕ 0 ⊕ 0 = 1
𝟏 𝟎 𝟎 𝟏 𝟎 𝟏 𝟏 𝟎 𝑎11 𝑐1 = 𝑎7 ⊕ 𝑎11 ⊕ 𝑎13 𝑐1 = 1 ⊕ 0 ⊕ 1 = 0
𝑎13
𝑎14
Pentru 𝑖1 = 1 0 1 0 => 𝒗𝟎 = 𝒄𝟏 𝒄𝟐 𝒄𝟒 𝒂𝟕 𝒄𝟖 𝒂𝟏𝟏 𝒂𝟏𝟑 𝒂𝟏𝟒 = [ 0 1 0 1 1 0 1 0 ]

2. Lungimea secventei codate

𝑛𝑟.𝑏𝑖𝑡𝑖 𝑠𝑒𝑐𝑣𝑒𝑛𝑡𝑎 12
𝐿= 𝑚
∙𝑛 = 4
∙ 8 = 24 𝑏𝑖𝑡𝑖
3. cuvantul de cod corect din care provin secventele receptionate: 𝑟2 = [11011101]
Dupa cum observam, secventa 𝑟2 are 8 biti, ceea ce inseamna ca e o secventa codata cu H0 (8,4)
𝑺 = 𝐻0 𝑟2𝑇 pentru 𝑟2 = [11011101] vom avea
1
1
𝟎 𝟎 𝟎 𝟎 𝟏 𝟏 𝟏 𝟏 0 1
𝟎 𝟎 𝟏 𝟏 𝟎 𝟎 𝟏 𝟏 1
𝑺= = 0 ≠ 0 => exista erori => avem 2 erori detectate
𝟎 𝟏 𝟎 𝟏 𝟎 𝟏 𝟎 𝟏 1 0
𝟏 𝟎 𝟎 𝟏 𝟎 𝟏 𝟏 𝟎 1 1
0
1
Daca S = 0 => nu avem erori sau erorile sunt nedetectabile
Daca 𝑆 ≠ 0 => exista erori in functi de valorile, e si t ale codului
- daca 𝑆 ≠ 0 si 𝑆 are un numar impar de biti de 1 => 𝑆 = ℎ𝑖 => exista o eroare pe pozitia i in secventa
r, unde hi este coloanal i din matricea H0
- daca 𝑆 ≠ 0 si 𝑆 are un numar par de biti de 1 => avem 2 erori detectate
H0(8,4) = H*(8,4)

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