Sei sulla pagina 1di 35

Geometria combinatoria 1

A.A. 2010-2011

CODICI CICLICI, BCH E


REED SOLOMON

Aceto Maria
Ronca Benedetta

13 MAGGIO 2011
Indice

Introduzione 3

1 Nozioni di base 5
1.1 Campi finiti . . . . . . . . . . . . . . . . . . . . . . 5

2 I codici 9
2.1 Codici lineari . . . . . . . . . . . . . . . . . . . . . 10

3 Codici ciclici 14
3.0.1 Proprietà di Rn = Fq [x]/<xn −1> . . . . . . . 14
3.0.2 Il numero dei codici ciclici . . . . . . . . . . 17

4 Codici BCH 21
4.1 Generalità sul campo GF (2n ) . . . . . . . . . . . . 21
4.2 Costruzione codici BCH . . . . . . . . . . . . . . . 23
4.2.1 Costruzione polinomio generatore . . . . . . 25
4.2.2 Correzione degli errori di un codice BCH . . 25
4.3 Codici Reed-Solomon . . . . . . . . . . . . . . . . . 31
4.3.1 Correzione degli errori nei codici Reed-Solomon 32

Bibliografia 34

2
Introduzione

Il nostro lavoro ha come oggetto, lo studio dei cidici ciclici, dei


codici BHC e dei codici Reed Solomon. Ci siamo quindi interes-
sate alla loro costruzione da un punto di vista geometrico e com-
binatorio e abbiamo inoltre rilevato l’importanza di tali codici pro-
prio per quanto riguarda la trasmissione dell’informazione. La co-
municazione non é altro che la rappresentazione e il trasferimen-
to di informazione da una postazione emittente a una postazione
ricevente attraverso un canale di trasmissione. Ci sono varie forme
di comunicazione tra persone e/o cose, ad esempio

• due persone che parlano sia direttamente che per telefono o


per e-mail, etc;

• una persona che trasmette e/o riceve informazioni da un qualche


dispositivo come computer, stereo, etc;

• due dispositivi ad esempio videoregistratore-tv, cd-lettore,


satellite-base a terra.

In tutte queste situazioni si ha:

• una sorgente di informazioni che produce un messaggio da


trasmettere codificato con qualche insieme di simboli ;

3
• un canale di trasmissione, ovvero un mezzo fisico attraver-
so il quale il messaggio viene trasmesso che puó alterare il
messaggio;

• una posizione ricevente che deve decidere se il messaggio rice-


vuto é attendibile, ovvero se ci sono stati o no errori di trasmis-
sione e, se possibile correggerli senza richiedere la ritrasmis-
sione.

Il processo di comunicazione deve essere:

• efficiente, cioè non richiedere grandi tempi e grandi risorse


fisiche;

• affidabile, ciò che si riceve deve essere quanto più possibile


uguale a ciò che è stato inviato;

• sicura, solo il destinatario deve ricevere il messaggio.

4
Capitolo 1

Nozioni di base

1.1 Campi finiti


Definizione 1.1. Un campo (K, +, ·) è un anello commutativo con
elemento neutro 1 e con l’inverso di ogni elemento non nullo, cioè
∀a ∈ K ∃a−1 tale che a · a−1 = a−1 · a = 1.

Definizione 1.2. Preso K = Zp con p primo e considerato Zp [x]


l’anello dei polinomi a coefficienti in Zp , fissiamo un polinomio
f (x) ∈ Zp [x] monico e irriducibile. L’ideale generato da f (x) è
l’insieme di tutti i polinomi divisibili per f (x) ossia

< f (x) >= {f (x) · h(x) : h(x) ∈ Zp [x]}.

Definiamo su Zp [x] la seguente relazione:

g(x) ≡ h(x) mod f (x) ⇔ g(x) − h(x) ∈ f (x)

cioè se g(x) − h(x) è multiplo di f (x). Questa è una relazione di


equivalenza modulo f (x).
Indichiamo con Zp [x]/<f (x)> l’insieme quoziente dell’anello Zp [x]

5
rispetto a questa relazione. Gli elementi di Zp [x]/<f (x)> sono le
classi di equivalenza modulo la relazione data e una classe di equi-
valenza
g(x) = {g(x) + g(x)h(x)|h(x) ∈ Zp [x]}

Zp [x]/<f (x)> = {r0 + r1 x + . . . + rn−1 xn−1 con ri ∈ Zp }


f (x) = a0 + a1 x + . . . + an−1 xn−1 + xn e la cardinalità dell’anello
quoziente è data da |Zp [x]/<f (x)> | = pn

Definizione 1.3. Un campo di Galois GF (q) è un insieme finito


di q elementi su cui sono definite:

• un’operazione di prodotto ·

- chiusa, cioè ∀a, b ∈ GF (q) ⇒ a · b ∈ GF (q) ;

- per cui esiste l’elemento neutro 1:


∀a ∈ GF (q) ⇒ a · 1 = a;

- per cui esiste sempre l’elemento inverso:


∀a ∈ GF (q) ⇒ ∃(a−1 ) tale che a · (a−1 ) = 1;

- commutativa ∀a, b ∈ GF (q) ⇒ a · b = b · a ;

- associativa ∀a, b ∈ GF (q) ⇒ a · b · c = (a · b) · c = a · (b · c);

• un’operazione di somma +

- chiusa, cioè ∀a, b ∈ GF (q) ⇒ a + b ∈ GF (q) ;

- per cui esiste l’elemento neutro 0:


∀a ∈ GF (q) ⇒ a + 0 = a;

- per cui esiste sempre l’elemento opposto:


∀a ∈ GF (q) ⇒ ∃(−a) tale che a + (−a) = 0;

- commutativa ∀a, b ∈ GF (q) ⇒ a + b = b + a ;

6
- associativa
∀a, b ∈ GF (q) ⇒ a + b + c = (a + b) + c = a + (b + c) ;

- distributiva rispetto al prodotto


∀a, b, c ∈ GF (q) ⇒ a · (b + c) = a · b + a · c;

Un campo finito contiene un numero finito di elementi, chiamato


ordine del campo.
I campi finiti sono chiamati campi di Galois e si indicano con GF (q)
oppure Fq dove q è il loro ordine.

Osservazione 1.
E’ possibile costruire un campo di Galois con q elementi ⇔ q è
un numero primo oppure una potenza intera di un numero primo.
Inoltre se ∃ un campo di Galois con q elementi allora tale campo è
unico, ossia tutti gli altri campi di Galois con q elementi differiscono
solo per il nome dei simboli. Si dimostra che dato un numero primo
q si può costruire un campo di Galois GF (q) = Fq se

• la somma è definita come somma tra i numeri naturali modulo


q;

• il prodotto è definito come il prodotto tra i numeri naturali


modulo q.

Definizione 1.4. Un polinomio si dice irriducibile sopra un cam-


po quando non è il prodotto di due polinomi del campo di grado
minore.

Definizione 1.5. Se un campo E contiene un campo K allora


diremo che E è un’estensione di K.

7
Per esempio il campo dei numeri reali è un’estensione dei numeri
razionali.

Proposizione 1.1.1. Possiamo costruire un campo di Galois con


q n elementi dove q = pm con p primo ed m intero positivo. Infatti
dato Fq campo di Galois possiamo considerare Fnq = GF (q n ) e risul-
ta essere uno spazio vettoriale di dimensione n su Fq , la cardinalità
di Fnq è uguale a q n e i suoi q n elementi sono costituiti da tutte le
possibili n−uple distinte degli elementi di Fq .

8
Capitolo 2

I codici

Definizione 2.1. Chiamiamo alfabeto con q lettere un qualsiasi


insieme finito Aq costituito da q elementi, detti lettere .

La cardinalità di Aq è quindi |Aq | = q.

Definizione 2.2. Considero ora Anq = Aq × Aq × ... × Aq e


| {z }
n volte
x = (x1 , ..., xn ) ∈ Anq , cioè ogni stringa di Aq , si chiama parola con
n lettere.

Infatti Anq è l’insieme delle parole con n lettere. La cardinalità



di questo insieme è data da Anq = q n .
Anq ha la struttura di spazio metrico grazie alla definizione seguente:

Definizione 2.3. La distanza di Hamming è un’applicazione cosı̀


definita:
dH : Anq × Anq → N

∀(x, y) ∈ Anq × Anq ⇒ dH (x, y) = {i ∈ [1, ..., n] : xi 6= yi }


dove x = (x1 , ..., xn ) e y = (y1 , ..., yn ); in altre parole dH (x, y) è il
numero dei posti in cui x 6= y, cioè il numero degli indici per cui
risulti xi 6= yi .

9
Esempio: A = Z2
n = 4 (rappresenta la lunghezza delle parole)
prendo x(0, 1, 1, 0) e y(0, 0, 0, 1)
allora la distanza di Hamming è data da dH (x, y) = 3.

Proposizione 2.0.2. dH è una distanza:

1. dH (x, y) ≥ 0 e dH (x, y) = 0 ⇔ x = y ∀x, y ∈ An

2. dH (x, y) = dH (y, x) ∀x, y ∈ An

3. dH (x, y) + dH (y, z) ≥ dH (x, z) ∀x, y, z ∈ An

Definizione 2.4. Un sottoinsieme C ⊂ Anq è detto codice con


parole di lunghezza n, con q lettere.

Indichiamo con M la cardinalità di C.

Definizione 2.5. La distanza d di un codice C ⊂ Anq è la minima


distanza tra le coppie di parole distinte di C:

d = min{dH (x, y) : x, y ∈ C, x 6= y}

2.1 Codici lineari


Definizione 2.6. Supponiamo che l’alfabeto sia un campo di Ga-
lois di ordine q:
Aq = GF (q) = Fq

dove q = pm e p è un numero primo ed m è un intero positivo.

Sappiamo che un campo di Galois è un campo costituito da un


numero finito di elementi. Per il Teorema di Galois è possibile
costruire un tale campo ⇔ q è primo oppure è potenza di un numero

10
primo. Inoltre sappiamo che se ∃ un campo di Galois con q elementi
allora tale campo è unico. Possiamo inoltre definire GF (q)n = Fnq
come spazio vettoriale n−dimensionale sopra Fq .

Definizione 2.7. C ⊂ Fnq si dice codice lineare se C è sottospazio


vettoriale di Fnq . Possiamo definire C un [n, k, d]q − codice dove

• n è la lunghezza delle parole del codice C ⊂ Anq ;

• k = logq M è la dimensione del codice data dalla cardinalità


logaritmica;

• d è la distanza minima;

• q è la cardinalità dell’alfabeto |Aq | = q.

Un codice lineare con questi parametri è detto un [n, k, d]−codice


su Fq o semplicemente un [n, k]−codice quando non è necessario
specificare d e q. Inoltre il vettore nullo 0 ∈ C e se C ha dimensione
k allora |C| = q k , k è la dimensione del sottospazio C e si chiama
dimensione del codice.

Definizione 2.8. Sia x ∈ Anq allora si definisce peso di Hamming


di x
wH (x) = num{i ∈ [1, ..., n] : xi 6= 0}

Definizione 2.9. Dati x e y in Anq , allora

dH (x, y) = wH (x − y).

Definizione 2.10. Sia C ⊂ Anq si definisce peso minimo di una


parola

w = min{wH (x) : x ∈ C e x 6= 0}

11
Definizione 2.11. Sia C un codice lineare di lunghezza n e dimen-
sione k in Fnq e sia x = (x1 , . . . xn ) una parola codice. H matrice di
dimensione (n − k) × n di rango massimo n − k si chiama matrice
di controllo di parità di C se
 
x
 1 
 .. 
H ·  .  = H · xT = 0 ∀x ∈ C.
 
xn

Proposizione 2.1.1. x = (x1 , . . . xn ) è una parola codice ⇔


H · xT = 0

Quindi tutte le parole codice si trovano risolvendo H · xT = 0.

Definizione 2.12. Dato C codice lineare di lunghezza n e di di-


mensione k in Fnq , definiamo G, matrice generatrice di dimensione
k × n le cui k righe costituiscono una base del sottospazio C. La
matrice G = [Ik |M ] dove Ik è la matrice identità di dimensione
k × k e M = (Bij ) con i = 1, ..., k e j = 1, ..., n − k è la matrice
generatrice in forma canonica.

Da G possiamo ricavare H da HGT da cui:

H = −M T |In−k .
 

Definizione 2.13. Dato C codice di lunghezza n e dimensione k


in Fnq con H matrice di controllo di parità e y ∈ Fnq , definiamo la
sindrome S(y) = H · y T dove y è la parola codice ricevuta quindi
y = c + e, cioè la parola trasmessa e l’errore, e S(y) è un vettore
del tipo (s1 , . . . , sn−k ) ∈ Fqn−k . Se S 6= 0 significa che c’è stato un
errore.

12
Osservazione 2.
S è un vettore quindi può verificarsi uno dei due casi:

• non si sono verificati errori;

• si sono verificati errori e la parola codice y è differente da


quella trasmessa.

Osservazione 3.
Sia y ∈ Fnq e C un [n, k]−codice lineare. Allora S(y) = 0 ⇔ y ∈ C.

Dimostrazione. Infatti S(y) = 0 ⇔ Hy T = 0 ⇔ y ∈ C.

13
Capitolo 3

Codici ciclici

Definizione 3.1. Un codice C è detto ciclico se l’insieme delle


parole codice è invariante rispetto allo shift delle coordinate:
se c = (c0 , c1 , ..., cn−1 ) ∈ C, allora (cn−1 , c0 , c1 , ..., cn−2 ) ∈ C.

Definizione 3.2. Sia Fq = GF (q) un campo con q elementi e C


codice con alfabeto Fq . L’anello Fq [x] è a ideali principali: ogni suo
ideale J, quindi, contiene qualche polinomio

c(x) = c0 + c1 x + ... + cm−1 xm−1 + cm xm

che lo genera.

Osservazione 4.
Sia < xn − 1 > l’ideale di Fq [x] generato dal polinomio xn − 1, de-
notiamo con Rn = Fq [x]/<xn −1> l’anello quoziente di Fq [x] rispetto
all’ideale < xn − 1 >.

3.0.1 Proprietà di Rn = Fq [x]/<xn −1>

1. Ogni elemento di Rn è un laterale dell’ideale < xn − 1 >, e


quindi è del tipo

14
f (x)+ < xn − 1 >, con f (x) ∈ Fq [x]

2. Due polinomi f (x), g(x) definiscono lo stesso laterale di


< xn − 1 > se, e soltanto se

f (x) − g(x) ∈< xn − 1 >

3. ∀f (x) ∈ Fq [x], risulta

f (x)+ < xn − 1 >= r(x)+ < xn − 1 >

dove r(x) è il resto della divisione euclidea tra f (x) e xn − 1.


Ne segue che ogni laterale di < xn − 1 > contiene un unico
polinomio di grado minore di n.

4. Ogni ideale di Rn è del tipo < f (x) >/<xn −1> , dove f (x) ∈
Fq [x] divide < xn − 1 >.

L’anello Rn = Fq [x]/<xn −1> è a ideali principali.


Si ha infatti:

Proposizione 3.0.2. Sia I un ideale non nullo di Rn . Se g(x) 6= 0


è un polinomio monico di grado minimo in I, allora g(x) è unico e
genera l’ideale I.

Dimostrazione. Sia f (x) ∈ I, divido f (x) per g(x) e ottengo f (x) =


g(x)q(x) + r(x) con r(x) = 0 oppure deg r(x) < deg g(x).
Dato che f (x), g(x) ∈ I allora r(x) = f (x) − g(x)q(x) e per la
minimalità del grado di g(x), deve essere r(x) = 0.
Allora f (x) = g(x)q(x) e poichè ho preso un f (x) ∈ I qualunque,
questo vale ∀f (x) ∈ I e quindi I ⊆< g(x) > e, dato che < g(x) >⊆
I è ovvia, ottengo I =< g(x) >.

15
Osservazione 5.
Sia Fq = GF (q) un campo con q elementi e sia C un codice ciclico
con alfabeto Fq . Una parola codice a = (a0 , a1 , ..., an−1 ) ∈ Fnq si
può identificare con il polinomio

a(x) = a0 + a1 x + ... + an−1 xn−1 + < xn − 1 >∈ Rn .

Tenendo presente che

1. i polinomi che si ottengono sono tutti e soli quelli di grado


minore di n;

2. ogni laterale proprio dell’ideale < xn − 1 > di Fq [x] generato


da < xn − 1 > contiene un unico polinomio di grado minore
di n.

La funzione µ : Fnq → Rn che associa a 7→ a(x) può essere consi-


derata una biiezione. In questo modo, ogni polinomio a coefficienti
in Fq viene identificato con il resto della sua divisione per xn − 1.

Osservazione 6.
Se si riguarda Rn = Fq [x]/<xn −1> come spazio vettoriale su Fq allora
la biiezione
a ∈ Fnq 7→ a(x) ∈ Rn

è isomorfismo di spazi vettoriali. Se A ⊆ Fnq indichiamo con A(x)


l’insieme µ(A) e poichè il codice ciclico C è sottospazio vettoriale
di Fnq si ha che C(x) sottospazio vettoriale di Rn . Quindi dire che
un codice è ciclico equivale a dire che

a(x) ∈ C(x) ⇒ xa(x) ∈ C(x)

perchè xa(x) = a0 x + a1 x2 + . . . + an−1 xn ha grado n quindi non


appartiene a Rn ma il resto della divisione di xa(x) per xn−1 che

16
è an−1 + a0 x + a1 x2 + . . . + an−2 xn−1 ∈ Rn ed è la corrispondente
parola an−1 , a0 , a1 , . . . , an−2 che è lo shift di a = (a0 , . . . , an−1 ).

Proposizione 3.0.3. Un codice lineare C su Fq è ciclico ⇔ C(x)


è un ideale di Rn .

Dimostrazione. ⇒
C è lineare e ciclico, C(x) è sottospazio vettoriale di Rn e
∀a(x) ∈ C(x) e q(x) = q0 + q1 x + ... + qn−1 xn−1 ∈ Rn se moltiplico
q(x)a(x) = (q0 + q1 x + ... + qn−1 xn−1 )(a0 + a1 x + ... + an−1 xn−1 ) =
q0 a0 +q0 a1 x+...+qn−1 an−1 xn−1 +q1 xa0 +q1 xa1 x+...+q1 xan−1 xn−1 +
...+qn−1 xn−1 a0 +...+qn−1 an−1 xn = q0 a(x)+q1 xa(x)+...+qn−1 xn−1 a(x).
Dato che qi ∈ Fq che è un campo, per la definizione di sottospazio
vettoriale, q(x)a(x) ∈ C(x) perchè per l’osservazione 4 ottengo che
xs a(x) ∈ C(x), ∀s > 0.

Se C(x) è un ideale di Rn , allora C è sottospazio vettoriale di Fnq
e, per ogni parola a ∈ C ho che xa(x) è un elemento di C(x); cioè
C(x) è ciclico.

Definizione 3.3. Il polinomio generatore di un [n, k]−codice ciclico


C su Fq è l’unico polinomio monico di grado minimo che genera C
(come ideale di Rn ).

3.0.2 Il numero dei codici ciclici

1. Il numero degli [n, k]−codici ciclici su Fq è uguale al numero


dei polinomi di Fq [x] che dividono xn − 1, a meno di una
costante moltiplicativa non nulla.

17
2. Se xn − 1 possiede s fattori irriducibili distinti in Fq [x], il
numero degli [n, k]−codici ciclici su Fq è 2s , in tale numero
essendo compresi anche il codice nullo {0} e Fnq .

Esempio: Il polinomio x4 − 1 ∈ F3 [x] = Z3 = {0, 1, 2} ha la


seguente decomposizione in fattori irriducibili

x4 − 1 = (x − 1)(x + 1)(x2 + 1)

e quindi abbiamo otto polinomi a coefficienti in F3 [x] che dividono


x4 − 1:
1, x − 1, x + 1, x2 + 1, (x − 1)(x + 1),
(x − 1)(x2 + 1), (x + 1)(x2 + 1), x4 − 1.
Esistono, pertanto, otto codici ciclici di lunghezza 4 su F3 .

Definizione 3.4. Se c(x) è un polinomio generatore di un codice


ciclico C, il polinomio h(x) ∈ Fq [x], definito da

xn − 1 = c(x)h(x)

prende il nome di polinomio di controllo di C.

Proposizione 3.0.4. Sia C un [n, k]−codice ciclico su Fq con poli-


nomio generatore di grado m

c(x) = c0 + c1 x + ... + cm−1 xm−1 + cm xm

e relativo polinomio di controllo h(x). Allora la matrice


 
c c1 · · · cm 0 ··· 0
 0 
···
 
 0 c0 c1 cm 0 0 
Gc =  ..

. c0 ···
 
 0 c1 cm 0 
 
0 ··· 0 c0 ··· cm−1 cm
(n−m)×n

è una matrice generatrice di C di dimensione k ×n dove k = n−m.

18
Dimostrazione. Le righe di Gc sono indipendenti e sono parole di
C perchè i polinomi corrispondenti sono

c(x), xc(x), ..., xn−m−1 c(x) e c ∈ C.

Infatti λ1 c(x) + λ2 xc(x) + . . . + λn−m−1 xn−m−1 c(x) = 0 ⇔ c(x)[λ1 +


λ2 x + . . . + λn−m−1 xn−m−1 ] = 0. Ma c(x) 6= 0 essendo c(x) il
polinomio generatore, allora [λ1 + λ2 x + . . . + λn−m−1 xn−m−1 ] = 0.
Dunque λi = 0 per i = 1, . . . , n − m − 1. Se a ∈ C ⇒ a(x) ∈
C(x) ⇒ ∃ un polinomio q(x) di grado minore di n − m tale che

a(x) = q(x)c(x).

Essendo i gradi di a(x), q(x), c(x) non superiori ad n, l’uguaglianza


precedente è un’uguaglianza in Fq [x] e cosı̀ abbiamo

a(x) = q0 c(x) + q1 xc(x) + · · · + qn−m−1 xn−m−1 c(x)

cioè a è combinazione lineare delle righe di Gc .

Proposizione 3.0.5. Sia C un [n, k]−codice ciclico su Fq con poli-


nomio generatore di grado m

c(x) = c0 + c1 x + · · · + cm−1 xm−1 + cm xm

e relativo polinomio di controllo h(x). Allora una parola a ∈ Fnq


appartiene al codice C ⇔ a(x)h(x) = 0 in R.

Dimostrazione. ⇒
Se a ∈ C ⇒ a(x) ∈ C(x) ⇒ ∃ un polinomio q(x) di grado minore
di n − m tale che
a(x) = q(x)c(x).

19
Moltiplico per h(x):
a(x)h(x) = q(x)c(x)h(x) = q(x)(xn − 1) = 0 in Rn .

Ora, per a(x) ∈ Fq [x], con deg (a) < n, sia a(x)h(x) = 0 in Rn e
sia a(x) = q(x)c(x) + r(x) con r(x) di grado minore di m = n − k.
Allora moltiplico per h(x):

a(x)h(x) = q(x)c(x)h(x) + r(x)h(x)

e poichè il primo membro è nullo per ipotesi, ottengo:

q(x)c(x)h(x) + r(x)h(x) = 0

ma q(x)c(x)h(x) = q(x)(xn − 1) = 0. Allora r(x)h(x) = 0 in Rn .


Quindi r(x) è il polinomio nullo e a(x) ∈ C(x).

20
Capitolo 4

Codici BCH

Un importante sviluppo nella comprensione dei codici ciclici si ebbe


con la scoperta di una nuova classe di codici noti come codici BCH.
Il nome BCH deriva dalle iniziali dei loro scopritori ( Bose, Chaud-
huri, Hocquenghem ). I codici BCH sono utili perchè riescono a
correggere molti errori.

4.1 Generalità sul campo GF (2n)


Definizione 4.1. Un’estensione di un campo F è un qualunque
campo E che contenga F .

Definizione 4.2. Sia F un campo e sia E una sua estensione.


Si definisce grado dell’estensione E sul campo F , e si indica con
[E : F ], la dimensione di E come spazio vettoriale su F .

Definizione 4.3. Un’estensione E di un campo F si dice finita se


il suo grado [E : F ] è finito. Sarà infinito in caso contrario.

21
Definizione 4.4. Sia f (x) ∈ F [x]. Un’estensione finita E di F si
dice campo di spezzamento su F di f (x) se f (x) si fattorizza su E
in fattori lineari, e ciò non avviene su un sottocampo proprio di E.

Esempio: Sia f (x) = x2 − 3 ∈ Q[x] un polinomio irriducibile



sul campo Q[x]. Il campo Q( 3) è un’estensione di Q, contiene le
√ √
radici ± 3 di f , e quindi il polinomio f (x) si fattorizza su Q( 3)
in fattori lineari:
√ √
x2 − 3 = (x − 3)(x + 3)
√ √
Q( 3) è il più piccolo campo per cui ciò avviene. Q( 3) è campo
di spezzamento per il polinomio x2 − 3.
Ricordiamo che:

• Ogni campo finito ha pn elementi con p primo.

• Due campi finiti con lo stesso numero pn di elementi sono


isomorfi.

• Dato comunque un numero primo p ed un intero positivo n


esiste un campo con pn elementi.

Proposizione 4.1.1. Ogni elemento a di un campo finito con pn


elementi soddisfa la seguente relazione:
n
ap = a.

E dunque se divido tutto per a 6= 0 ottengo:


n −1
ap = 1.

Proposizione 4.1.2. Un campo F con pn elementi è il campo di


spezzamento del polinomio
n
xp − x ∈ Zp [x]

22
Ricordiamo inoltre la seguente definizione:

Definizione 4.5. Un elemento primitivo di un campo finito F è un


elemento a ∈ F tale che ∀b ∈ F con b 6= 0 ho b = ak , per qualche
k.

Trovato a possiamo definire k = loga b.


Consideriamo la seguente proposizione:

Proposizione 4.1.3. Se F ha q = pn elementi con p primo, allora


n −1
a è un elemento primitivo di F ⇔ le potenze a, a2 , . . . , ap =1
sono distinte e generano tutti gli elementi non nulli di F .

Sia q = 2n e sia p(x) un polinomio primitivo e irriducibile di


grado n in Z2 [x]. Sia a una radice di p(x) cioè p(a) = 0 allora
Z2 [x]/<p(x)> è un campo di ordine 2n isomorfo al campo GF (2n ).
In questo modo GF (2n ) è costruito come campo di spezzamento
del polinomio p(x), e quindi a è un elemento primitivo, cioè

< a >= GF (2n )

4.2 Costruzione codici BCH


Si consideri il polinomio

f (x) = xm − 1 ∈ Z2 [x]

dove m è un intero positivo.


Sia R = Z2 [x]/<f (x)> l’anello formato da tutti i polinomi di Z2 [x] di
grado minore di m. Si consideri, inoltre, un polinomio g(x) ∈ Z2 [x]
che divida f (x).
Otteniamo C={ multipli di g(x) in Z2 [x] di grado minore di m }.

23
L’insieme definito è uno spazio vettoriale in R di dimensione m −
deg g(x). Quindi i polinomi di C formano le parole codice di un
[m, m − deg g(x)]−codice lineare di R e il numero di tali parole è
2m−deg g(x)
. Il polinomio g(x) è il polinomio generatore del codice
C. Le parole del codice C possono essere considerate di lunghezza
m considerando che ogni parola è un polinomio di grado minore di
m e, quindi, è la somma di m monomi. Una parola c(x) ∈ Z2 [x] può
essere associata ad un vettore di Zm
2 le cui entrate sono i monomi

che formano c(x) stesso.


Esempio: Sia f (x) = x7 − 1 e sia g(x) = x3 + x + 1 in Z2 [x] un
polinomio che divide f (x).
Prendo come base del codice C l’insieme generato da g(x) e da i
suoi multipli con grado minore del grado di f (x):

{x3 + x + 1, x4 + x2 + x, x5 + x3 + x2 , x6 + x4 + x3 }.

Dunque C è un [7, 4]−codice con 16 parole codice. Questo perchè 7


è la lunghezza delle parole, ed è proprio il grado del polinomio f (x);
4 è la dimensione del sottospazio vettoriale generato dai multipli di
g(x) ed è proprio la differenza tra il grado di f (x) e il grado di
g(x); inoltre avremo 16 parole del codice perchè 24 è proprio 16. Le
parole codice sono polinomi di grado minore del grado di f (x). Ad
esempio una parola codice è data da x5 + x4 + x3 + x, essa verrà
tradotta e trasmessa come il vettore

0 + 1x + 0x2 + 1x3 + 1x4 + 1x5 + 0x6 ⇒ (0101110) ∈ Z72 .

24
4.2.1 Costruzione polinomio generatore

Affinchè un codice sia un codice BCH, il polinomio generatore deve


essere costruito nel seguente modo.
Sia f (x) ∈ Z2 [x] e siano a1 , a2 , ..., as radici di f (x), con s < m, e
siano w1 (x), w2 (x), ..., ws (x) ∈ Z2 [x] i rispettivi polinomi minimi di
tali radici. Sia, infine, g(x) il minimo comune multiplo dei polinomi
wi (x) sempre in Z2 [x]. Poichè ogni wi (x) divide f (x), allora g(x)
stesso divide f (x) e quindi può essere usato come polinomio gener-
atore di un tale codice.
Scegliamo ora in modo opportuno m e le radici ai in modo tale che
i codici BCH potranno essere ricavati da tali polinomi generatori
n −1
g(x). Sia m = 2n − 1 e quindi f (x) = x2 − 1, allora le radici ai
appartengono al campo di spezzamento GF (2n ) e sono:

ai = ai per i = 1, ..., s.

I polinomi minimi wi (x) sono, in questo contesto, i polinomi minimi


degli ai per i = 1, ..., s. Determiniamo g(x) come prodotto di tali
wi (x). Per quanto detto, abbiamo che g(x) divide f (x).

4.2.2 Correzione degli errori di un codice BCH

Teorema 4.2.1. Sia C un codice BCH ricavato da un polinomio


primitivo di grado n. Consideriamo le prime s potenze di a e
supponiamo che il polinomio c(x) ∈ Z2 [x] sia di grado minore di
m = 2n − 1.
Allora c(x) è una parola del codice C ⇔ c(ai ) = 0, ∀i = 1, . . . s.

Dimostrazione. ⇒
Sia wi (x) il polinomio minimo di ai in Z2 [x], per i = 1, . . . s e

25
sia g(x) il minimo comune multiplo dei polinomi wi (x) in Z2 [x].
Se c(x) ∈ C allora c(x) = g(x)h(x) con h(x) ∈ Z2 [x]. Perciò
c(ai ) = g(ai )h(ai ) = 0h(ai ) = 0

c(ai ) = 0 per i = 1, . . . s ⇒ wi (x)|c(x) per i = 1, . . . s allora
g(x)|c(x) ⇒ c(x) = g(x)h(x) allora c(x) ∈ C.

Lo schema di correzione degli errori di un codice BCH


Sia C un codice BCH derivante da:

• un polinomio primitivo di grado n;

• dalla scelta delle prime 2t potenze di a.

Supponiamo che sia stata trasmessa la parola c(x) ∈ C e che in


corrispondenza sia stata ricevuta la parola r(x) 6= c(x), in Z2 [x], di
grado minore di 2n − 1. Allora r(x) = c(x) + e(x) per un opportuno
polinomio errore non nullo e(x) ∈ Z2 [x] di grado minore di 2n −1. Se
riusciamo a determinare e(x) potremo correggere la parola ricevuta
r(x) facendo semplicemente la seguente operazione:

c(x) = r(x) + e(x).

Grazie al teorema precedente si può affermare che

r(ai ) = c(ai ) + e(ai ) = 0 + e(ai ) = e(ai ), per i = 1, ..., 2t.

Quindi, il conoscere r(x) ci fornisce qualche informazione anche su


e(x). Chiameremo i valori r(ai ) le sindromi di r(x).
Supponiamo ora che il polinomio errore e(x) sia

e(x) = xm1 + xm2 + . . . + xmp ∈ Z2 [x]

26
per opportuni interi positivi m1 < m2 < · · · < mp , con p ≤ t e
mp < 2n − 1. Cerchiamo ora di trovare il polinomio errore e(x)
calcolando le prime 2t sindromi del polinomio r(x):
r1 = r(a) = e(a) = am1 + am2 + . . . + amp
r2 = r(a2 ) = e(a2 ) = (a2 )m1 + (a2 )m2 + . . . + (a2 )mp
..
.
r2t = r(a2t ) = e(a2t ) = (a2t )m1 + (a2t )m2 + . . . + (a2t )mp

Definizione 4.6. Chiamiamo polinomio localizzatore degli errori

E(z) = (z − am1 )(z − am2 ) · . . . · (z − amp ) = z p + σ1 z p−1 + . . . + σp

Le radici di E(z) = 0 indicano le posizioni in cui ci sono er-


rori nella parola ricevuta r(x). Il nostro obiettivo è quello di de-
terminare tali radici o zeri del polinomio localizzatore di errori.
Considerando che

X
σ1 = am i
1≤i≤p

X
σ2 = ami amj
1≤i≤j≤p

..
.

σp = am1 am2 . . . amp

Consideriamo il seguente sistema di equazioni:

27

(am1 )i E(am1 ) = (am1 )i (am1 )p + (am1 )p−1 σ1 + . . . + σp = 0
  




 (am2 )i E(am2 ) = (am2 )i (am2 )p + (am2 )p−1 σ + . . . + σ  = 0

1 p
 .
..




 (amp )i E(amp ) = (amp )i (amp )p + (amp )p−1 σ + . . . + σ  = 0

1 p

Da qui otteniamo



 (am1 )i+p + (am1 )i+p−1 σ1 + . . . + (am1 )i σp = 0
..

.


 (amp )i+p + (amp )i+p−1 σ + . . . + (amp )i σ = 0

1 p

ma la somma dei primi addendi é


m1 m2 mp
(ai+p ) + (ai+p ) + . . . + (ai+p ) = ri+p .
La somma dei secondi addendi di ogni equazione ci dà:
h i
m m2 m
σ1 (ai+p−1 ) 1 + (ai+p−1 ) + . . . + (ai+p−1 ) p = σ1 ri+p−1
e cosı̀ via fino ad arrivare alla somma degli ultimi addendi
h i
i m1 i m2 i mp
σp (a ) + (a ) + . . . + (a ) = σ p ri .
Essendo nulla la somma dei primi membri del sistema si ha che
l’n-simo sistema con i = 1, . . . , p discende dall’i-esima equazione
ri+p + σ1 ri+p−1 + . . . + σp ri = 0.
Al variare di i otteniamo il sistema formato da p equazioni lineari
del tipo precedente con p incognite. Se rivediamo il sistema in for-
ma matriciale otteniamo:
    
r1 r2 ... rp σ r
   p   p+1 
     
 r2 r3 ... rp+1   σp−1   rp+2 
=
.. .. ..  ..   ..
   
  
 . . .   .   . 
     
rp rp+1 . . . r2p−1 σ1 r2p

dove gli rj sono noti perchè sono le sindromi di r(x).

28
Se la matrice precedente p × p è non singolare allora il sistema am-
mette una ed una sola soluzione per σ1 , . . . , σp incognite. Una volta
trovata tale soluzione ci costruiamo il polinomio localizzatore degli
errori E(z). Troviamo le radici z1 , . . . , zp di

E(z) = (z −am1 )(z −am2 )·. . .·(z −amp ) = z p +σ1 z p−1 +. . .+σp = 0.

Poniamo ami = zi per i = 1, . . . , p allora possiamo ricavare mi e


quindi le posizioni m1 , m2 , . . . , mp degli errori della parola ricevuta
r(x).

Teorema 4.2.2. Sia C un codice BCH risultante dalla scelta delle


prime 2t potenze di a. Allora C è t−error correcting.

Dimostrazione. Supponiamo che C si ricavi a partire da un poli-


nomio primitivo di grado n e si ponga m = 2n − 1. Consideri-
amo,inoltre,
 la seguente matrice di dimensione
 (2t) × m:
2 m−1
1 a a ··· a
 
 1 a2 2 2 2 m−1 
(a ) · · · (a )


 
H =  1 a3 3 2 3 m−1 
(a ) · · · (a )


 ..
 

 . 
 
2t 2 2t m−1
1 a2t (a ) · · · (a )

Sia r(x) = b0 +b1 x+. . .+bm−1 xm−1 ∈ Z2 [x], sia b = (b0 , b1 , . . . , bm−1 )
e siano r1 , r2 , . . . , r2t le prime 2t sindromi del polinomio r(x). Allo-
ra è facile verificare che H ◦ bt = (r1 , r2 , . . . , r2t )t . Infatti il prodotto
della riga i−esima di H per bt è:
2 m−1
b0 + b1 ai + b2 (ai ) + . . . + bm−1 (ai ) = r(ai ) per i = 1, . . . , 2t.
Perciò r(x) ∈ C ⇔ H ◦ bt = 0. Quindi H può essere utilizzata
come matrice di controllo di parità per il codice C. Dimostriamo

29
adesso che il numero minimo di colonne H linearmente indipenden-
ti è esattamente 2t + 1. Comunque si scelgono 2t colonne in H,
esse devono essere linearmente indipendenti. Scegliamo dunque 2t
interi Jh tali che 0 ≤ J1 < J2 < . . . < J2t < m. Allora le colonne
di H corrispondenti a tali interi formano la seguente matrice di di-
mensione 2t × 2t
 
aJ1 aJ 2 ··· aJ2t
 
2 J1 2 J2 2 J2t
···
 
 (a ) (a ) (a ) 
..
 
 
 . 
 
J1 J2 J2t
a2t (a2t ) ··· (a2t )

Il determinante di tale matrice si può esprimere anche nel modo


seguente (divido per aJ1 la prima colonna, per aJ2 la seconda colon-
na
e cosı̀ via).
1 1 ··· 1



J1 J J
··· a

a a 2 2t J
· a 1 · aJ2 · . . . · aJ2t .
..


.

J1 2t−1 J 2t−1 J 2t−1
(a ) (a ) 2
· · · (a )2t
Tale determinante è non nullo poichè gli aJh sono tutti diversi da
0 (essendo a un generatore del gruppo moltiplicativo del campo
GF (2n )) e il primo fattore è il determinante di una matrice di Van-
dermore le cui colonne sono a 2 a 2 distinte. Perciò ogni 2t−upla
di colonne di H sono linearmente indipendenti. Inoltre, poichè H
possiede solo 2t righe, possiamo affermare che ogni (2t + 1)−upla
di colonne di H sono linearmente dipendenti. Quindi, il minimo
numero di colonne di H linearmente dipendenti è 2t + 1. Allora la
minima distanza di C è proprio 2t + 1. Quindi il codice C è t−error
correcting.

30
4.3 Codici Reed-Solomon
Una classe di codici BCH è costituita dai codici di Reed-Solomon.
Essi sono codici correttori di errori ideali, cioè riescono a correggere
esplosioni di errori. Una parola contiene un’esplosione di errori se
contiene errori molto vicini tra loro nella successione di simboli che
formano la parola ricevuta.
Scegliamo un polinomio primitivo p(x) di grado n in Z2 [x] e
costruiamo il campo finito F2n = Z2 [x]/<p(x)> . Le parole codice di
un codice RS sono quindi polinomi di grado minore di 2n − 1.
La costruzione di un codice RS t−error correcting
Usiamo il seguente polinomio generatore

g(x) = (x − a)(x − a2 ) . . . (x − a2t ) ∈ F2n [x].

Le parole codice di C sono allora tutti i multipli b(x)g(x) di grado


minore di 2n − 1, con b(x) ∈ F2n [x]. Le parole codice di C han-
no lunghezza 2n − 1 e formano uno spazio vettoriale di dimensione
2n − 1 − 2t. Per rappresentare un tale codice useremo la seguente
notazione: RS(2n − 1, t).
Poichè le parole codice sono polinomi in F2n [x], abbiamo due prob-
lemi:

• le parole codice non possono essere trasmesse in modo imme-


diato come vettori binari associando ad esse la stringa ordi-
nata dei coefficienti del polinomio che rappresenta la parola;

• lo schema per la correzione degli errori usato per i codici BCH


non potrà essere utilizzato nei codici RS, o meglio lo schema
dei BCH può essere utilizzato per i codici RS, ma non è
sufficiente per correggere gli errori nelle posizioni individuate.

31
4.3.1 Correzione degli errori nei codici Reed-
Solomon

Vale il teorema analogo per i codici BCH:

Teorema 4.3.1. Sia F un campo di ordine 2n e sia C un RS(2n −


1, t) codice in F[x]. Supponiamo che c(x) ∈ F[x] abbia grado minore
di 2n − 1. Allora c(x) ∈ C ⇔ c(ai ) = 0 per i = 1, . . . , 2t.

Questo vuol dire che se viene trasmessa la parola c(x) ∈ C e


viene ricevuto il polinomio r(x) ∈ F[x] con r(x) 6= c(x), di grado
minore di 2n − 1, allora r(x) = c(x) + e(x) per qualche polinomio
errore e(x) ∈ F[x], con e(x) non nullo e di grado minore di 2n − 1.
Per correggere r(x), dobbiamo quindi determinare e(x) e dopo
calcolare r(x) + e(x) = c(x). Il teorema ci permette di dire che
r(ai ) = e(ai ) per i = 1, . . . , 2t. Quindi conoscendo r(x) otteniamo
informazioni su e(x).
Schema di correzione
Sia F un campo di ordine 2n e sia C un codice RS(2n − 1, t) in F[x].
Supponiamo che c(x) ∈ C sia la parola trasmessa e che r(x) =
c(x) + e(x) sia la parola ricevuta, con e(x) ∈ F[x] non nullo e di
grado minore di 2n − 1. Allora per determinare e(x) usiamo il
seguente schema:

• Calcoliamo le prime 2t sindromi di r(x) e denotiamole con


S1 = r(a), S2 = r(a2 ), . . . , S2t = r(a2t ). Cosı̀ definiamo il
polinomio delle sindromi S(z) = S1 + S2 z + . . . + S2t z 2t−1 ;

• Costruiamo la tabella dell’algoritmo euclideo relativa ai poli-


nomi a(z) = z 2t e b(z) = S(z) in F[z], arrestandoci alla prima

32
riga in cui si verifica deg(rj ) < t. Poniamo quindi R(z) = rj
e V (z) = vj .

• Troviamo le posizioni degli errori in r(x) calcolando le radici


di V (z), cioè se ai1 , ai2 , . . . , aik sono le radici di V (z), allora
r(x) contiene errori nelle posizioni x−i1 , x−i2 , . . . , x−ik . Quindi
troviamo e(x) = α−i1 xi1 + . . . + α−ik x−ik . Infine possiamo
trovare i coefficienti di e(x) in queste posizioni delgi errori nel
modo seguente: sia α−i il coefficiente del x−i -esimo termine
R(ai )
di e(x). Allora α−i = V (ai )
.

33
Bibliografia

[1] Giuseppe Tallini Maria Scafati


Geometria di Galois e teoria dei codici
CISU, Roma 1995

[2] Giulia Maria Piacentini Cattaneo


Algebra, un approccio algoritmico
Zanichelli 1996

[3] Giorgio Faina


Appunti del corso di Teoria dell’informazione e codici

[4] Codici lineari


www.dimat.unina2.it/mazzocca/Geom Sup/codici4.pdf

[5] Codici ciclici


http://www.dima.unige.it/∼niesi/TdC/app05.pdf

[6] Olivier Pretzel


Error-correcting codes and finite fields
OXFORD UNIVERSITY PRESS

[7] W. Wesley Peterson - E.J.Weldon,Jr


Error-correcting codes
THE MIT PRESS

34
[8] Sloane
A short course on error-correcting codes
SPRINGER

[9] R.Hill
A first course in coding theory
CLARENDON PRESS-OXFORD

35