Documente Academic
Documente Profesional
Documente Cultură
Aspecte teoretice
Lucrarea are ca scop studiul codurilor ciclice binare. Coeficientii acestui tip de
coduri apartin campului Galois de ordin 2 - GF (2), deci ai ∈ {0, 1}. Ca
urmare, toate operatiile aritmetice ce vor fi mentionate sunt modulo 2.
Fiecare cuvant de cod de lungime n contine m biti de control si k biti de
informatie (n = k + m) . Bitii de control au ca scop detectia si corectia
posibilelor erori aparute in urma transmiterii secventei binare printr-un canal cu
perturbatii.
Codarea ciclica se poate realiza atat in mod nesistematic (bitii de control vor fi
intercalati cu cei de informatie), cat si in mod sistematic (bitii de control vor fi
grupati inaintea bitilor de informatie).
Polinoamele asociate
Fiecarui cuvant de cod v i se asociaza un polinom v(x) ai carui coeficienti sunt
reprezentati de bitii codului, ai . Gradul maxim al polinomului este n − 1:
2 n−1
v(x) = a0 + a1 x + a2 x + ⋯ ⋯ an−1 x
elemente, si reprezinta inelul claselor de resturi modulo p(x), unde p(x) este
un polinom de grad n cu coeficienti binari. Pentru convenienta, acest polinom
se alege de forma:
n
p(x) = x + 1
⎢ 0 g0 ⋯ gm−2 gm−1 1 ⋯ 0 0 ⎥
⎢ ⎥
⎢⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯⎥
⎣ ⎦
0 0 ⋯ ⋯ ⋯ ⋯ ⋯ gm−1 1
⎢ 0 0 ⋯ hk hk−1 ⋯ h0 0 ⎥
H = ⎢ ⎥
⎢⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯⎥
⎣ ⎦
hk hk−1 ⋯ ⋯ ⋯ ⋯ ⋯ 0
Codarea ciclica
unde v este un vector linie ce contine bitii cuvantului de cod iar i este vectorul
linie format din coeficientii polinomului de informatie. Datorita ortogonalitatii
dintre matricea generatoare si matricea de control, relatia de codare devine
echivalenta cu:
T
Hv = 0
Exemplu
Fie codul ciclic C (6, 3) − n = 6, k = 3. Sa se identifice un polinom generator
pentru acest cod si sa se realizeze codarea nesistematica a mesajului
i = (1 0 1 ) .
Polinomul generator g(x) are gradul m=3 (m=n-k) si este divizor la polinomului
p(x) = x
6
+ 1 . Descompunerea polinomului p(x) in campul GF (2) care
contine cel putin un factor de grad 3 este:
3 3
p(x) = (1 + x )(1 + x )
Exemplu
Fie codul ciclic C (9, 6). Sa se identifice polinomul generator al acestui cod si
sa se realizeze codarea sistematica a mesajului i = (0 1 0 0 1 1) .
Pentru a putea corecta cel putin o eroare, intre numarul de biti de control m si
lungimea totala a cuvintelor de cod n trebuie sa existe egalitatea:
m
n = 2 − 1
Exista deci doua forme posibile ale polinomului generator. Vom alege varianta:
3
g(x) = 1 + x + x
⎢0 1 1 0 1 0 0⎥
G = ⎢ ⎥
⎢0 0 1 1 0 1 0⎥
⎣ ⎦
0 0 0 1 1 0 1
1 1 0 1 0 0 0
⎡ ⎤
⎢0 1 1 0 1 0 0⎥
v = (1001) ⎢ ⎥
⎢0 0 1 1 0 1 0⎥
⎣ ⎦
0 0 0 1 1 0 1
Cuvantul de cod astfel rezultat este v = (1 1 0 0 1 0 1) , bitii de informatie
fiind intercalati cu bitii de control.
Avand in vedere ca acest tip de cod poate fi aplicat pentru corectia erorilor in
cazul in care cel mult un bit al cuvantului a fost eronat receptionat, polinomul
asociat erorii va fi de forma:
l
ϵl (x) = x , l = 0 : n − 1
Hamming (7,4)
Pentru codul Hamming (7,4) descris de polinomul $g(x) =1+x+x^3$ operatiile de
codare/decodare si marimile calculate sunt prexzentate mai jos.
import numpy as np
from LinearBlockCode import LinearBlockCode
from CyclicCode import CyclicCode
#definirea polinomului generator prin introducerea coeficientilor de la g0
g = np.array([1,1,0,1])
cc = CyclicCode(g, 7) # C(g, n) unde g este pol generator iar n=m+k
cc.printInfo()
-> Linear Block Code Cb( 7 , 4 )
-> Message length (k): 4
-> Codeword length (n): 7
-> Coding rate (R = k/n): 0.5714285714285714
-> Minimum Distance (dmin): 3
-> Error Detection Capability: 2
-> Error Correction Capability (t): 1
-> Weight Distribution (A): [0 0 7 7 0 0 1]
-> Generator Matrix (G):
[[1 1 0 1 0 0 0]
[0 1 1 0 1 0 0]
[1 1 1 0 0 1 0]
[1 0 1 0 0 0 1]]
[[1 0 0 1 0 1 1]
[0 1 0 1 1 1 0]
[0 0 1 0 1 1 1]]
c0 = m0 ⊕ m2 ⊕ m3
c1 = m0 ⊕ m1 ⊕ m2
c2 = m1 ⊕ m2 ⊕ m3
c3 = m0
c4 = m1
c5 = m2
c6 = m3
s0 = r0 ⊕ r3 ⊕ r5 ⊕ r6
s1 = r1 ⊕ r3 ⊕ r4 ⊕ r5
Hamming C(7,3)
Un cod ciclic liniar binar C(n, k) are lungimea codului n = 7 și polinomul
generator $g(X) = 1 + X^2 + X^3 + X^4$$g(X) = 1 + X^2 + X^3 + X^4$.
C(n,6)
Fie un cod ciclic ce contine $k=6$$k=6$ biti de informatie, avand polinomul
generator de forma $g(x)=1+x+x^2+x^3+x^4$$g(x)=1+x+x^2+x^3+x^4$.
Hamming(15,11)
Fie codul ciclic Hamming $(15,11)$$(15,11)$ generat de polinomul
$g(x)=1+x+x^4$$g(x)=1+x+x^4$. Determinati:
Intrebare: Pentru care dintre cele 4 coduri studiate obtinem cea mai buna rata a
codului?
Observatie: Când NumPy creează un polinom dintr-un vector, folosește cel mai
mare indice al vectorului drept coeficientul cel mai mic și invers. Astfel pt codul
anterios s-a inversat fiecare vector înainte de a-l converti într-un polinom!
Exemplu: Default NumPy behaviour: [0,1,0,1] -> X^2 + 1 Modificare: [0,1,0,1] -> X
+ X^3