appunti di teoria dei codici - pelleriti.altervista.orgpelleriti.altervista.org/doc/tc.pdf · di...
TRANSCRIPT
UNIVERSITA DI CATANIA
FACOLTA DI INGEGNERIA
APPUNTI DI TEORIA DEI CODICI
Autori:
L. Cauchi
V. La Terra
R. Grasso
Coperto da diritti di c©copyright
Ho letto questi appunti scritti da Lucia Cauchi, Rosario Grasso e Valeria La Terra,
studenti che hanno seguito il mio corso di “Teoria dei Codici” negli anni accademici 2005
– 2006 e 2006 – 2007.
Ho deciso di inserirli nella mia pagina web perche rispecchiano pienamente le mie lezioni
e sono sicuro che essi riusciranno ad essere un ulteriore aiuto didattico agli studenti che
hanno seguito e seguiranno il corso di “Teoria dei Codici”.
Ringrazio Lucia Cauchi, Rosario Grasso e Valeria La Terra, per la loro disponibilita a
condividere liberamente il loro spontaneo lavoro, coperto da diritti di “copyright” legali e
informatici, con tutti i loro colleghi e con il docente.
Mi corre l’obbligo di ringraziare il Professore Dean Hoffman che mi ha permesso, nel 1997,
di seguire presso l’Universita di Auburn (USA) il suo corso di “Coding Theory”.
Faccio inoltre presente che tali appunti nella parte riguardante la Teoria dei Codici trovano
principale fonte bibliografica nel testo “Coding Theory and Cryptography” scritto da D.
Hankerson, D. Hoffman, D.Leonard, C. Lindner, C. Rodger, K. Phelps, J. Wall.
Lorenzo Milazzo
Aggiornamento del 03/12/2007.
Indice
1 Cenni di Teoria dell’Informazione 1
1.1 I primi concetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Schema di codifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Codici univocamente decifrabile e istantanei . . . . . . . . . . . . . . 4
1.4 Codici ottimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.1 Algoritmo di Huffman . . . . . . . . . . . . . . . . . . . . . . 16
1.5 La funzione entropia . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.1 Proprieta della funzione entropia . . . . . . . . . . . . . . . . 24
2 Teoria dei Codici
I Primi concetti 27
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Probabilita e distanza . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Peso ed errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4 Prime tecniche di codifica . . . . . . . . . . . . . . . . . . . . . . . . 37
2.5 Individuazione di errore . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6 Correzione di errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3 Codici lineari 47
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
i
INDICE
3.2 Prodotto scalare in Kn . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3 Matrice generatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4 Matrice di parita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4.1 Algoritmo di generazione di H . . . . . . . . . . . . . . . . . . 55
3.5 Coset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.6 Sindrome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4 Codici perfetti 76
4.1 Cardinalita di un codice C . . . . . . . . . . . . . . . . . . . . . . . . 76
4.2 Codici MDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.3 Codici estesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.4 Codici perfetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.4.1 Codice di Hamming . . . . . . . . . . . . . . . . . . . . . . . . 93
4.4.2 Codice di Golay esteso . . . . . . . . . . . . . . . . . . . . . . 96
5 Codici ciclici 107
5.1 Polinomi su K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.2 Parole di C e polinomi . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.3 Codici ciclici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.4 Codice ciclico e polinomi di Kn−1 . . . . . . . . . . . . . . . . . . . . 115
5.5 Matrice generatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.6 Sindrome e matrice di parita . . . . . . . . . . . . . . . . . . . . . . . 122
6 Campi finiti e codici 2 - BCH 125
6.1 Polinomio primitivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6.2 Campi finiti di Galois . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.3 Polinomio minimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.4 Codici di Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
ii
INDICE
6.5 Codici 2-BCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.6 Schema di codifica per codici 2-BCH . . . . . . . . . . . . . . . . . . 143
iii
Capitolo 1
Cenni di Teoria dell’Informazione
1.1 I primi concetti
Si definisce S0 sorgente di un codice una coppia S0 = (S, P ) dove S = {s1, s2, · · · ,
sn} e un insieme finito di eventi che, come vedremo in seguito, si associano alle parole
di un codice, e P = {p(s1), p(s2), ...., p(sn)} e una distribuzione di probabilita sugli
eventi di S, dove p(si) = pi, con 0 ≤ pi ≤ 1 e∑
i pi = 1.
Si definisce alfabeto di un codice l’insieme finito di caratteri A = {a1, a2, · · · , ar},nel caso in cui il numero di simboli in A e r (cioe |A| = r) si dice che l’alfabeto
genera un codice r-ario, in questi appunti (soprattutto dal capitolo 2) saranno per
lo piu trattati casi in cui alfabeto e costituito da solo due caratteri e in particolare
l’alfabeto A = {0, 1}, tali codici sono detti binari.
Una sequenza di caratteri u = ai1 , ai2 , ...., ain e detta stringa e in essa possono
esistere caratteri ripetuti. Il numero di caratteri presenti in una stringa u e detto
lunghezza della stringa ed essa e rappresentata dalla simbologia l(u).
Indichiamo con A∗ l’insieme di tutte le possibili stringhe che si possono formare con
i caratteri dell’alfabeto (indipendentemente dalla lunghezza). Se una stringa non ha
caratteri si dice che essa e la stringa nulla.
1
1.2 Schema di codifica
Si definisce codice C = {c1, c2, · · · , cn} un particolare sottoinsieme finito di A∗, cioe
C ⊂ A∗, gli elementi ci di C sono detti parole del codice. E possibile avere codici
con parole che hanno lunghezza differente oppure codici le cui parole hanno tutte la
stessa lunghezza, in tal caso il codice e detto a blocchi.
1.2 Schema di codifica
Se S0 = (S, P ) e una sorgente di un codice, si definisce schema di codifica per S0 la
coppia ordinata (C, f), dove f : S → C e un’applicazione iniettiva detta funzione
di assegnazione. Tale funzione definisce una corrispondenza uno a uno tra gli
elementi di S con le parole del codice C.
Si definisce lunghezza media lc di un codice C la quantita:
lc =n∑
i=1
pil(f(si)), (1.1)
dove l(f(si)) e la lunghezza della parola del codice f(si) che corrisponde all’evento
si di probabilita pi, tale probabilita assume il valore della probabilita legata alla
parola f(si). Un codice C1 si dice piu efficiente del codice C2 se lC1 < lC2 .
Vediamo adesso di capire quando si usano codici a blocchi o codici a lunghezza
variabile e in tal caso cerchiamo di stabilire un criterio di assegnazione che permetta
di definire una funzione di assegnazione “piu conveniente”.
Esempio 1
Dato l’insieme S = {a, b, c, d} con P definita nel seguente modo: p(a) =217
, p(b) =217
, p(c) =917
e p(d) =417
. Sia C1 = {0, 11, 10, 100} il codice a lunghezza variabile e
l’applicazione f1 : S → C1 cosı definita: f1(a) = 11, f1(b) = 0, f1(c) = 100 e f1(d) = 10.
La lunghezza media di tale codice e:
2
1.2 Schema di codifica
l1 =n∑
i=1
pil(f(si)) = 2 · 217
+ 1 · 217
+ 3 · 917
+ 2 · 417
=4117
. (1.2)
Si consideri adesso un secondo codice C2 = {00, 10, 11, 01010} e l’applicazione f2 : S → C2
cosı definita: f2(a) = 01010, f2(b) = 00, f2(c) = 10 e f2(d) = 11. Analogamente a quanto
fatto per C1 calcoliamo la sua lunghezza media:
l2 =n∑
i=1
pil(f(si)) = 5 · 217
+ 2 · 217
+ 2 · 917
+ 2 · 417
=4017
. (1.3)
Si vede facilmente che il codice C2 e piu efficiente del codice C1.
L’esempio 1 mostra la particolarita che il codice C2 che contiene la parola piu lunga
ha una lunghezza media minore, cio e dovuto al fatto che in tale codice la funzione
di assegnazione associa la parola piu lunga del codice alla probabilita minore.
Dall’esempio precedente si evince inoltre che quando si ha una conoscenza piu det-
tagliata del sistema mediante la distribuzione di probabilita P , allora e conveniente
usare un codice a lunghezza variabile. L’esempio che segue mostra maggiormente
quando detto e in modo piu generale.
Esempio 2
Sia un codice non a blocchi definito dalla sorgente S = {s1, s2, s3, s4, s5} e p(s1) = 1 − ε
e p({s2, s3, s4, s5}) = ε. Se si utilizza un codice a blocchi binario con due caratteri non si
riescono a rappresentare tutti gli eventi di S perche esso puo contenere al massimo 4 parole
(22 = 4), quindi e necessario utilizzare un codice a blocchi di 3 caratteri che permette di
rappresentare fino a 8 parole (23 = 8). E evidente che un codice a blocchi di lunghezza
tre ha sempre lunghezza media tre e cio e indipendente dalla distribuzione P. Se invece
e utilizzato un codice a lunghezza variabile definito dalla seguente funzione di codifica:
f(s1) = 0 e f(s2) = 111, f(s3) = 101, f(s4) = 001, f(s5) = 110 si ha che la lunghezza
media di tale codice e:
3
1.3 Codici univocamente decifrabile e istantanei
lc =∑n
i=1 pil(f(si)) = 1 · p(s1) + 3 · p(s2) + 3 · p(s3) + 3 · p(s4) + 3 · p(s5) =
1 · p(s1) + 3 · (p(s2) + p(s3) + p(s4) + p(s5))
lc = (1− ε) + 3 · ε = 1 + 2 · ε < 3, (1.4)
essendo ε < 1.
L’esempio 2 mostra chiaramente che quando non si ha una distribuzione P uni-
forme e piu conveniente usare un codice a lunghezza variabile perche permette di
realizzare un codice piu efficiente, se invece P definisce una distribuzione uniforme
allora in questo caso conviene utilizzare un codice a blocchi e sfruttare la teoria dei
codici che verra presentata nei capitoli seguenti che permette migliori possibilita di
individuazione e correzione di errore.
1.3 Codici univocamente decifrabile e istantanei
Prima di affrontare le problematiche inerenti alla correzione degli errori che possono
accadere in una trasmissione di un codice in questa sessione si affrontera il problema
della lettura di una stringa costituita dalle parole di un codice C.
Consideriamo ad esempio il codice C = {0, 01, 001}, ci si accorge subito che la stringa
001 letta da sinistra verso destra puo essere interpretata in due modi differenti: essa
puo contenere l’unica parola del codice 001 oppure la sequenza delle due parole 0
e 01. L’esempio precedente mostra un’ambiguita che puo essere risolta definendo
dei codici particolari che permettono la lettura delle stringhe in maniera unica. E
evidente che un codice a blocchi di lunghezza n non presenta tali problematiche in
quanto la lettura di ogni singola parola viene effettuata con intervalli di n caratteri.
Se un codice C e a lunghezza variabile si dice che esso e univocamente decifrabile
se, date le due parole c1, c2, ...., ck e d1, d2, ...., df , allora si ha che c1, c2, ....., ck =
4
1.3 Codici univocamente decifrabile e istantanei
d1, d2, ....., df se e solo se k = f e cl = dl per 1 ≤ l ≤ k, tale proprieta esprime il
fatto che una stringa che rappresenta una parola di C non puo rappresentare una
stringa di piu parole di C.
Da tale proprieta segue che un codice univocamente decifrabile e un codice che
consente una lettura di una sua stringa da sinistra a destra senza generare ambiguita.
Esempio 3
Il C = {1, 10, 100} e un codice decifrabile perche qualunque stringa formata dalle sue parole
e sempre leggibile in quanto il carattere “1” individua l’inizio di ogni singola parola. Nella
seguente stringa u = 1/10/100/1/1/1/1 si e posto il simbolo “/” per evidenziare meglio
l’inizio di ogni parola contenuta in essa.
Un’altra proprieta legata alla lettura delle stringhe di un codice C e quella legata
alla necessita di riconoscere le parole del codice appena esse sono state ricevute, se
un codice C ha questa proprieta esso e detto codice istantaneo.
Esempio 4
Il codice C = {1, 01, 001} e un codice decifrabile e istantaneo, perche al termine di ogni
parola viene posto il carattere 1 che garantisce il termine di ogni singola parola, tale codice
viene chiamato “comma code”. Il codice decifrabile descritto nell’esempio 3 invece non
ha le caratteristiche di essere istantaneo, infatti se ad esempio si e ricevuta la parola 10,
non possiamo dire subito se siamo in presenza della parola 10 o se quello che abbiamo
ricevuto e solo una parte della parola 100 cio si puo affermare solo alla ricezione del
carattere successivo.
Tutti i codici che sono istantanei sono chiaramente decifrabili, ma non e detto
che un codice decifrabile sia istantaneo, cio si deduce dalle considerazioni fatte
nell’esempio 4.
NB: Tutti i codici a blocchi sono decifrabili e istantanei.
5
1.3 Codici univocamente decifrabile e istantanei
I codici istantanei godono della proprieta del prefisso.
Proprieta 1 (del prefisso) In un codice istantaneo C nessuna parola e prefisso (e
posta all’inizio) di un’altra parola del codice, vale anche il viceversa. 2
La dimostrazione della proprieta 1 e immediata ed essa e importante in quanto
caratterizza i codici istantanei.
Per i codici istantanei si ha il seguente teorema.
Teorema 1 (di Kraft) Se C e un codice r-ario istantaneo costituito da n parole di
lunghezza li, con 1 ≤ i ≤ n, allora deve essere verificata la disuguaglianza di Kraft:
n∑i=1
1
rli≤ 1. (1.5)
Se esistono n interi positivi l1, l2,..., ln e r che verificano la disuguaglianza di Kraft,
allora esiste un codice istantaneo con n parole di lunghezza l1, l2, ...., ln.
Dim.
Dimostriamo la prima parte del teorema.
Sia C un codice costituito dalle parole {c1, c2, ...., cn} aventi rispettivamente lunghez-
za l1, l2, ...., ln. Sia L = max {l1, l2, ...., ln}, consideriamo la parola ci di lunghezza
li dove ci = x1x2.....xli , costruiamo una stringa di lunghezza L,
ui = x1x2.....xliyli+1yli+2.....yL,
dove i primi li caratteri sono la parola ci mentre gli ultimi L − li caratteri yj con
li + 1 ≤ j ≤ L sono caratteri scelti tra gli r caratteri dell’alfabeto del codice C
senza restrizioni e con la possibilita di essere ripetuti. Il numero totale di differenti
6
1.3 Codici univocamente decifrabile e istantanei
stringhe di tipo ui e rL−li (cio perche i primi li caratteri in ui rimangono sempre
invariati), inoltre si ha che tutte le stringhe ui formate non possono essere parole
del codice C in quanto esso e istantaneo e gode della proprieta del prefisso.
Ripetiamo tale procedura su ogni singola parola ci del codice per 1 ≤ i ≤ n, per
ognuna di esse si formano rL−li stringhe differenti tutte di lunghezza L. Sommando
su i si ottiene:
n∑i=1
rL−li =n∑
i=1
rL
rli(1.6)
La quantita espressa dalla (1.6) esprime il numero totale di stringhe ui che si ottiene
da ogni singola parola del codice ci con 1 ≤ i ≤ n ed esse sono tutte distinte e di
lunghezza L. Il valore rL esprime il numero totale di stringhe differenti di lunghezza
L che si possono formare con un alfabeto r-ario, ne segue che valgono le seguenti
disuguaglianze.
n∑i=1
rL
rli= rL
n∑i=1
1
rli≤ rL ⇒
n∑i=1
1
rli≤ 1. (1.7)
La (1.7) verifica la disuguaglianza di Kraft e la prima parte del teorema e provata.
Dimostriamo la seconda parte del teorema.
Determiniamo un algoritmo che permette di determinare un codice istantaneo che
abbia n parole rispettivamente di lunghezza l1, l2,..., ln. Se α1 e il numero delle
parole del nostro codice istantaneo C di lunghezza 1, allora e necessario che α1 ≤ r,
e importante notare che in caso di uguaglianza il codice avrebbe solo parole di
lunghezza uno; se α2 e il numero di parole di lunghezza 2 di C, allora tale valore
deve essere minore o uguale del numero totale di parole distinte di lunghezza 2 che si
possono formare con un alfabeto di r simboli, inoltre poiche C e un codice istantaneo
per esso vale la proprieta del prefisso ed e quindi necessario eliminare tutte le parole
7
1.3 Codici univocamente decifrabile e istantanei
di lunghezza 2 che hanno come prefisso le parole del codice di lunghezza 1, cioe deve
valere la seguente diseguaglianza:
α2 ≤ r2 − α1r.
Analogamente se α3 e il numero di parole del codice C con lunghezza 3 allora deve
valere la seguente disuguaglianza:
α3 ≤ r3 − α2r − α1r2. (1.8)
Dove il primo termine del secondo membro della (1.8) rappresenta il numero totale
di parole distinte di lunghezza 3 che si possono formare con un alfabeto di r simboli
a cui bisogna sottrarre le parole di lunghezza 3 che hanno come prefisso le parole del
codice di lunghezza 2 (secondo termine del secondo membro nella disuguaglianza
(1.8)) e le parole di lunghezza 3 che hanno come prefisso le parole del codice di
lunghezza 1 (terzo termine del secondo membro nella disuguaglianza (1.8)).
Se m e la massima lunghezza del codice C ( N.B. possono esistere lunghezze uguali
cioe li = lj) e consideriamo tutti i possibili αi per 1 ≤ i ≤ m, il codice istantaneo
esiste se ognuna delle seguenti disuguaglianze e vera.
α1 ≤ r
α1r + α2 ≤ r2
α1r2 + α2r + α3 ≤ r3
.
.
α1rm−1 + α2r
m−2 + ..... + αm ≤ rm
(1.9)
Vediamo cosa accade, ad esempio, se la terza disuguaglianza α1r2 + α2r + α3 ≤ r3
e vera. Tutti i suoi termini sono positivi, quindi si ha che vale anche la seguente
8
1.3 Codici univocamente decifrabile e istantanei
disuguaglianza α1r2 + α2r ≤ r3; e possibile dividere ambo i membri di quest’ultima
disuguaglianza per r, si ottiene α1r +α2 ≤ r2 , cioe anche la seconda disuguaglianza
delle (1.9) e vera, seguendo un analogo procedimento e facile verificare che anche la
prima disuguaglianza delle (1.9) e vera.
Sfruttando la metodologia usata nel precedente caso particolare si puo affermare che
se una delle disuguaglianze della (1.9) e vera allora sono vere tutte le disuguaglianze
che la precedono. Osserviamo l’ultima disuguaglianza delle (1.9), se dividiamo ambo
i membri per rm si ha:
α1
r+
α2
r2+ ..... +
αm
rm≤ 1,
cioe
m∑i=1
αi
ri=
n∑i=1
1
rli≤ 1.
Tale disuguaglianza e la disuguaglianza di Kraft ed e vera per le ipotesi del teorema,
quindi sono vere tutte le disuguaglianze che la precedono nella (1.9) e il teorema e
provato. 2
E importante notare che la seconda parte della dimostrazione del teorema precedente
afferma che se un codice verifica la disuguaglianza di Kraft non e detto che esso sia
istantaneo (vedi dall’esempio 6), ma afferma che se e verificata la disuguaglianza
di Kraft per i parametri l1, l2, ..., ln e r, allora e possibile costruire un codice
istantaneo r-ario con parole di lunghezza l1, l2, ...., ln mediante l’algoritmo presentato
dalla dimostrazione del teorema di Kraft.
9
1.3 Codici univocamente decifrabile e istantanei
Esempio 5
Consideriamo un codice 3-ario definito dall’alfabeto A = {0, 1, 2} si vuole vedere se esiste
un codice istantaneo con le seguenti lunghezze di parola: l1 = l2 = 1, l3 = 2, l4 = l5 = 4,
l6 = 5.
Come prima cosa verifichiamo se vale la disuguaglianza di Kraft:
23
+132
+033
+234
+135
=196243
≤ 1 (1.10)
La disuguaglianza e verificata, cerchiamo un codice istantaneo che verifica le lunghezze
l1 = l2 = 1, l3 = 2, l4 = l5 = 4, l6 = 5 seguendo l’algoritmo definito nella seconda parte
della dimostrazione del teorema di Kraft, le parole di lunghezza 1 sono c1 = 0, c2 = 1, la
parola di lunghezza 2 e c3 = 20, le parole di lunghezza 4 sono c4 = 2100, c5 = 2101, la
parola di lunghezza 5 e c6 = 21100. Il codice C = {0, 1, 20, 2100, 2101, 21100} e istantaneo
perche verifica la proprieta del prefisso.
Esempio 6
Il codice C = {0, 11, 100, 110} verifica la diseguaglianza di Kraft infatti si ha che:
12
+122
+223
= 1,
ma tale codice non e istantaneo perche non verifica la proprieta del prefisso.
Un codice istantaneo e anche decifrabile e dal teorema di Kraft e immediato ottenere
il seguente teorema.
Teorema 2 Se esistono n interi positivi l1, l2,..., ln e r che verificano la disu-
guaglianza di Kraft, allora esiste un codice decifrabile con n parole di lunghezza l1,
l2, ...., ln. 2
Resta da capire se per ogni codice decifrabile vale la disuguaglianza di Kraft, cioe se
la prima parte del teorema di Kraft vale anche per i codici decifrabili. La risposta
a tale quesito viene data dal seguente teorema di McMillan.
10
1.3 Codici univocamente decifrabile e istantanei
Teorema 3 (di McMillan) Se C = {c1, c2, ....., cn} e un codice decifrabile, allora
vale la disuguaglianza di Kraft:n∑
i=1
1
rli≤ 1. (1.11)
Dim.
Consideriamo α1, α2,..., αm il numero di parole del codice rispettivamente di lunghez-
za 1, 2,..., m. E facile verificare che il primo membro della disuguaglianza di Kraft
puo scriversi anche nel seguente modo:
n∑i=1
1
rli=
m∑j=1
αj
rj. (1.12)
Eleviamo le due sommatorie ad un valore u, intero positivo:
(n∑
i=1
1
rli
)u
=
(m∑
j=1
αj
rj
)u
=(α1
r+
α2
r2+ · · ·+ αm
rm
)u
. (1.13)
Per maggiore chiarezza l’ultimo membro della (1.13) puo essere scritto come il
prodotto di u sommatorie che rappresentano lo stesso termine:
(α1
r+
α2
r2+ · · ·+ αm
rm
)·(α1
r+
α2
r2+ · · ·+ αm
rm
)· · ·
(α1
r+
α2
r2+ · · ·+ αm
rm
). (1.14)
Lo svolgimento di tale prodotto puo essere svolto ed espresso come la somma dei
seguenti prodotti
∑i1,i2,··· ,iu
αi1αi2 · · ·αiu
ri1+i2+···+iu. (1.15)
La sommatoria della (1.15) e estesa su tutti gli i1, i2, · · · , iu con la limitazione
1 ≤ ij ≤ m con 1 ≤ j ≤ u. Posto k = i1 + i2 + ....iu la (1.15) puo anche
essere scritta nel seguente modo
11
1.3 Codici univocamente decifrabile e istantanei
u·m∑
k=u
∑
i1+i2+....+iu=k
αi1αi2 · · ·αiu
rk, (1.16)
Nella (1.16) il valore minimo che puo assumere k e u e il massimo e um e tale valore
all’interno della seconda sommatoria rimane sempre costante, quindi
u·m∑
k=u
1
rk
∑
i1+i2+···+iu=k
αi1αi2 · · ·αiu . (1.17)
Consideriamo adesso la quantita:
Nk =∑
i1+i2+···+iu=k
αi1αi2 · · ·αiu . (1.18)
Le quantita αi1 , αi2 ,..., αiu rappresentano tutte le possibili parole di lunghezza k
formate nel seguente modo: i primi i1 caratteri individuano una parola del codice di
lunghezza i1, i successivi i2 caratteri individuano una parola del codice di lunghezza
i2 fino ad arrivare agli ultimi iu che a loro volta sono una parola del codice di
lunghezza iu.
Figura 1.1: Stringhe della stessa lunghezza k, ma con sequenze di parole differenti e di
differente lunghezza.
Tutte queste stringhe essendo il codice decifrabile, quindi univocamente leggibile,
sono tutte distinte tra di loro come si evince dalla (fig1.1), ricordiamo che se si ha
un alfabeto r-ario il numero di tutte le possibili parole distinte di lunghezza k e rk,
da cui segue che
12
1.4 Codici ottimi
Nk =∑
i1+i2+···+iu=k
αi1αi2 · · ·αiu ≤ rk. (1.19)
Quindi la (1.17) puo essere scritta nel seguente modo:
u·m∑
k=u
1
rk
∑
i1+i2+....+iu=k
αi1αi1 ......αiu ≤u·m∑
k=u
1
rkrk =
u·m∑
k=u
1 = u ·m− u ≤ u ·m. (1.20)
In definitiva:
(n∑
i=1
1
rli
)u
≤ u ·m (1.21)
Elevando primo e secondo membro per1
usi ha:
n∑i=1
1
rli≤ (u)
1u (m)
1u (1.22)
Per la scelta arbitraria di u si vede facilmente che per u →∞ vale la disuguaglianza
di Kraft e il teorema e dimostrato. 2
1.4 Codici ottimi
Data una sorgente S0 consideriamo la famiglia C costituita da tutti i codici istantanei
che si possono associare a S0, chiaramente ad ogni codice di C e associata una sua
lunghezza media, consideriamo la lunghezza media minima lmin tra tutti i codici
istantanei Cist associati a S0, cioe
lmin = min{lCist
| ∀ Cist ∈ C} . (1.23)
Si definisce codice ottimo C un codice Cist istantaneo che ha lunghezza media lCist
uguale a lmin.
I codici ottimi godono delle seguenti tre proprieta.
13
1.4 Codici ottimi
Proprieta 2 Se C e un codice ottimo associato alla sorgente S0 = (S, P ) e c1,
c2,...., cn sono le sue parole rispettivamente di lunghezza l1, l2,...., ln allora si ha
che se pi > pj deve essere li ≤ lj ( cioe alla probabilita maggiore si associa la parola
di lunghezza minore)
Dim.
Supponiamo per assurdo che esiste un codice ottimo C per cui si ha che pi > pj e
li > lj. Costruiamo un codice C ′ ottenuto da C in cui alla parola ci e associata la
probabilita pj e alla parola cj e associata la probabilita pi mentre le altre parole ck
sono legate alla stessa probabilita pk del codice C. Calcoliamo le lunghezze medie
rispettivamente dei codici C e C ′ e consideriamo la loro differenza.
lC =n∑
k=16=i 6=j
pklk + pili + pjlj; (1.24)
¯lC′ =n∑
k=16=i6=j
pklk + pilj + pjli; (1.25)
¯lC′ − lC = pilj + pjli − pili − pjlj. (1.26)
Dopo facili calcoli si ottiene.
¯lC′ − lC = pi (lj − li)− pj (lj − li) = (pi − pj) (lj − li) (1.27)
Ricordando che li > lj, (lj − li < 0) e pi > pj (pi − pj > 0) ne segue che ¯lC′ − lC < 0
cioe ¯lC′ < lC . Si e quindi determinato un codice C ′ che e istantaneo, ma ha lunghezza
media minore della lunghezza media del codice ottimo C e cio e assurdo. 2
Proprieta 3 Sia C un codice ottimo e sia lm la maggiore lunghezza tra le lunghezze
delle parole del codice, allora esistono almeno due parole di lunghezza lm.
14
1.4 Codici ottimi
Dim.
Supponiamo per assurdo che esiste un codice ottimo C con una sola parola di
lunghezza lm. Calcoliamo la sua lunghezza media
lC =m−1∑
k=1
Pklk + Pmlm (1.28)
Consideriamo l’unica parola cm ∈ C di lunghezza lm e consideriamo il codice C ′
ottenuto da C modificando soltanto cm mediante l’eliminazione dell’ultimo carattere.
Il codice C ′ e un codice istantaneo perche gode della proprieta del prefisso e la sua
lunghezza media e:
¯lC′ =m−1∑
k=1
pklk + pm (lm − 1) . (1.29)
E evidente che ¯lC′ < lC . Si e determinato ancora una volta un codice istantaneo con
lunghezza media minore della lunghezza media del codice ottimo C e cio e assurdo.
2
Proprieta 4 Sia C un codice ottimo e cm una parola di lunghezza massima lm,
allora esiste un’altra parola ck di eguale lunghezza lm tale che i primi lm−1 caratteri
di cm e ck sono uguali.
Dim.
Per la proprieta precedente in un codice ottimo C esistano almeno due parole di
lunghezza massima lm. Supponiamo per assurdo che non esistono due parole di
lunghezza lm i cui primi lm − 1 caratteri sono uguali. Se consideriamo una di tali
parole e cancelliamo il suo ultimo carattere otteniamo un nuovo codice istantaneo
C ′ che gode della proprieta del prefisso (nessuna sua parola e prefisso di un’altra) e
la sua lunghezza media e minore della lunghezza media del codice ottimo C. 2
15
1.4 Codici ottimi
1.4.1 Algoritmo di Huffman
In questa sessione e presentato l’Algoritmo di Huffman che consente di indi-
viduare un codice ottimo data una distribuzione di probabilita P . Tale algoritmo e
valido per codici r-ari, ma qui sara presentata la procedura che riguarda solo i codici
binari.
Algoritmo di Huffman
1. Si ordina la distribuzione di probabilita P 0 = {P 01 , P 0
2 , · · · , P 0n} in modo tale
che le probabilta hanno un ordine decrescente secondo gli indici, cioe P 0i ≤ P 0
j
con i > j.
2. Le due probabilita di valore inferiore, cioe P 0n e P 0
n−1 si sommano, si ot-
tiene il valore P 0∗n−1 = P 0
n + P 0n−1. Si considera la distribuzione di probabilita
P 1 ={P 1
1 , P 12 , · · · , P 1
n−1
}in cui sono presenti tutte le probabilita di P 0 con
esclusione dei valori P 0n e P 0
n−1 al posto dei quali si e inserito il valore P 0∗n−1.
La distribuzione di probabilita P 1 e anch’essa ordinata in ordine decrescente
secondo gli indici e si ha che P 1i = P 0∗
n−1 per qualche i con 1 ≤ i ≤ n− 1.
3. Si ripete il passo precedente per altri n − 2 passi. In ogni singolo passo j si
determina una probabilita P j−1∗n−j data dalla somma delle due probabilita di
valore minore.
4. Si ottiene la distribuzione di probabilita P n−2 costituita da soli due valori.
5. Si associano alle probabilita di P n−2 le parole 1 e 0 (la scelta e arbitraria),
quindi alla distribuzione di probabilita P n−2 e associato il codice Cn−2.
6. Una delle probabilita di P n−2 e del tipo P n−2i = P n−3∗
2 = P n−32 + P n−3
3 con
i = 1, 2 (cioe del tipo P j−1∗n−j con j = n − 2), se ad essa nel passo precedente
e stato associato il carattere k ∈ {0, 1}, allora nella distribuzione P n−3 alle
16
1.4 Codici ottimi
probabilita P n−32 e P n−3
3 si associano le parole k1 e k0 (la scelta e arbitraria)
e per essa si ottiene il codice Cn−3.
7. Si ripete il procedimento precedente sino ad arrivare ad una assegnazione
di parole alla distribuzione P 0. Tali parole associate alle probabilita di P 0
definiscono un codice ottimo binario C0 e l’algoritmo e concluso.
Per maggiore chiarezza segue l’esempio 7 che permette di esplicitare tutti i passi
definiti nell’algoritmo precedente.
Esempio 7
Sia data la distribuzione di probabilita P 0 = {0.35, 0.20, 0.20, 0.15, 0.10}, le due probabilita
di valore minore sono 0.10 e 0.15, la loro somma e 0.25∗, si ottiene nuova distribuzione
di probabilita P 1 = {0.35, 0.25∗, 0.20, 0.20}. Seguendo lo stesso procedimento si sommano
0.20 e 0.20 si ottiene la distribuzione di probabilita P 2 = {0.40∗, 0.35, 0.25} e in seguito si
sommano i valori0.35 e 0.25 si ottiene P 3 = {0.60∗, 0.40}.Definiamo adesso una codifica binaria seguendo i passi 5, 6 e 7 partendo dalla distribuzione
P 3 fino ad arrivare alla distribuzione P 0. I passi dell’algoritmo sono ben riassunti dalla
tabella seguente.
0.35 01 0.35 01 0.40* 1 0.60* 0
0.20 11 0.25* 00 0.35 01 0.40 1
0.20 10 0.20 10 0.25 00
0.15 001 0.20 11
0.10 000
Tab.1
Il codice ottimo legato alla distribuzione di probabilita P 0 e C = {01, 11, 10, 001, 000}
E necessario adesso provare che il codice ottenuto dall’algoritmo di Huffmann e un
codice ottimo, cio e ottenuto dal teorema seguente.
17
1.4 Codici ottimi
Teorema 4 Se Ci e un codice ottimo ottenuto dall’algoritmo di Huffman, allora
anche Ci−1 e un codice ottimo. L’algoritmo di Huffmann genera un codice ottimo.
Dim.
Nell’ultima distribuzione di probabilita, che si ottiene eseguendo l’algoritmo di Huff-
man, e associato il codice ottimo Cn−2 = {0, 1}, quindi se in generale si prova che
l’algoritmo di Huffmann genera dal codice Ci ottimo il codice Ci−1 anch’esso ottimo,
allora si e provato il teorema.
Consideriamo il codice ottimo Ci ={c1, c2, ...., c
?m−1
}e applichiamo l’algoritmo di
Huffman al codice Ci, tenendo presente che L e la lunghezza della parola a cui si
legano la somma di due probabilia, si ottiene il codice Ci−1 = {c1, c2, ....., cm−10, cm−11},calcoliamo le lunghezze medie dei codici Ci e Ci−1:
li =m−2∑
k=1
pklk + (pm−1 + pm) L; (1.30)
li−1 =m−2∑
k=1
pklk + pm−1 (L + 1) + pm (L + 1) . (1.31)
Ricordiamo che nel codice Ci−1 le parole cm−10 cm−10 e parole hanno lunghezza
L + 1. Sottraendo membro a membro la (1.30) dalla (1.31) si ha:
li−1 − li = pm−1 + pm ⇒ li−1 = li + pm−1 + pm. (1.32)
Supponiamo per assurdo che Ci−1 non sia un codice ottimo e quindi esiste un codice
ottimo C ′i−1, associato alla distribuzione di probabilita di Ci−1, tale che l′i−1 < li−1.
Se C ′i−1 e ottimo, per le proprieta 2, 3 e 4, esisteranno due parole di lunghezza
massima e aventi i primi L′ − 1 caratteri uguali con associate le probabilita pm e
pm−1, cioe C ′i−1 =
{c′1, c
′2, ...., c
′m−10, c
′m−11
}. Applicando l’algoritmo di Huffman in
senso opposto si determina un nuovo codice C ′i =
{c′1, c
′2, ...., c
′?m−1
}. Anche per i due
codici C ′i e C ′
i−1 vale la relazione:
18
1.5 La funzione entropia
l′i−1 = l′i + pm−1 + pm. (1.33)
Poiche si e supposto che C ′i−1 e ottimo mentre per assurdo Ci−1 non lo e allora deve
valere la seguente disuguaglianza:
l′i−1 < li−1 (1.34)
Se cio e vero confrontando le equazioni (1.32) e (1.33) si ha che vale la seguente
disuguaglianza.
l′i < li (1.35)
Cio implica che Ci non e ottimo, questo e assurdo e il teorema e provato. 2
1.5 La funzione entropia
Nell’esempio 1 si e vista l’importanza della conoscenza della distribuzione delle
probabilita, da qui nasce l’esigenza di determinare una funzione che permetta di
“misurare” la conoscenza del sistema mediante la conoscenza della sua distribuzione
di probabilita. Tale funzione H e la funzione entropia che e differente dalla grandez-
za fisica usata in termodinamica. Essa nasce dagli studi relativi alla conoscenza di
“informazioni” di un sistema fatti da Shannon nel 1948.
Consideriamo la variabile random X a cui associamo gli eventi X = {x1, x2, ..., xq}.A ciascuno degli eventi xi e possibile associare una distribuzione di probabilita P =
{p1, p2, ..., pq}.La funzione entropia deve soddisfare le seguenti tre proprieta:
1. Se tutte le probabilita di P sono uguali cioe pi =1
qallora H e una funzione
crescente, cioe se q < q′ allora si ha:
19
1.5 La funzione entropia
H
(1
q,1
q, ...,
1
q
)< H
(1
q′,1
q′, ...,
1
q′
)
.
Nella realta questa proprieta esprime che maggiore e il numero di eventi q
maggiore e l’incertezza legata agli eventi.
2. H e una funzione continua cioe a piccole variazioni di probabilita corrispondono
piccole variazioni di H.
3. Vale il principio che un esperimento puo essere scomposto in una successione
di esperimenti successivi.
Esempio 7
Diamo per quest’ultima proprieta un esempio di un esperimento che e rappresentato grafi-
camente nella seguente figura. Esso ha una distribuzione di probabilita P = {12,13,16} e
puo essere scomposto nella successione dei due esperimenti di probabilita P ′ = {12,12} e
P ′′ = {23,13}.
Tale scomposizione puo essere rappresentata mediante la funzione entropia nel seguente
modo:
H
(12,13,16
)= H
(12,12
)+
12H
(23,13
).
20
1.5 La funzione entropia
Teorema 5 La sola funzione che verifica le tre proprieta 1, 2 e 3 e:
H(p1, p2, · · · , pq) = −c
q∑i=1
pi logb pi (b > 1) (1.36)
con c costante positiva.
Dim.
Poniamo
H
(1
q, · · · ,
1
q
)= f(q). (1.37)
Supponiamo di avere sm eventi legati ad una determinata variabile random. Poiche
deve valere la terza proprieta, sm puo essere scomposto in m sequenze di s eventi,
cioe:
f(sm) = mf(s). (1.38)
Fissati t e n interi positivi e sempre possibile determinare un m tale che:
2m ≤ tn < 2m+1. (1.39)
Passando ai logaritmi in base b e sfruttando le loro proprieta si ha:
logb 2m ≤ logb tn < logb 2m+1, (1.40)
m logb 2 ≤ n logb t < (m + 1) logb 2. (1.41)
Dividendo per n logb 2
m
n≤
︸ ︷︷ ︸1◦
logb t
logb 2
2◦︷ ︸︸ ︷<
m + 1
n. (1.42)
21
1.5 La funzione entropia
Poiche f(q), per le proprieta 1 e 2, e una funzione continua e crescente si ha che
applicandola alle disuguaglianze della (1.39) esse continuano a sussistere, cioe:
f(2m) ≤ f(tn) < f(2m+1), (1.43)
dividendo per nf(2):
m
n≤
︸ ︷︷ ︸1◦
f(t)
f(2)
2◦︷ ︸︸ ︷<
m + 1
n. (1.44)
Moltiplicando la 1◦ disuguaglianza della (1.44) per −1 si ottiene:
− f(t)
f(2)≤ −m
n. (1.45)
Sommando la (1.45) con la 2◦ disuguaglianza della (1.42) si ha:
logb t
logb 2− f(t)
f(2)<
1
n. (1.46)
Allo stesso modo, moltiplicando la 2◦ disuguaglianza della (1.44) per −1 si ottiene:
− f(t)
f(2)> −m
n− 1
n. (1.47)
Sommando la (1.47) con la 1◦ disuguaglianza della (1.42) si ha:
logb t
logb 2− f(t)
f(2)> − 1
n, (1.48)
da cui si ricava:
− 1
n<
logb t
logb 2− f(t)
f(2)<
1
n⇒
∣∣∣∣logb t
logb 2− f(t)
f(2)
∣∣∣∣ <1
n(1.49)
e per n →∞ si ha:
limn→∞
∣∣∣∣logb t
logb 2− f(t)
f(2)
∣∣∣∣ = 0 ⇒ logb t
logb 2=
f(t)
f(2)⇒ f(t) = f(2)
logb t
logb 2= c logb t. (1.50)
Consideriamo adesso una distribuzione di probabilita con probabilita razionali:
pi =ki∑j kj
con ki intero ∀i e∑
i
ki∑j kj
= 1 (1.51)
22
1.5 La funzione entropia
Scomponiamo l’esperimento in una successione di due eventi mediante le distribuzioni
di probabilita rappresentate nella figura seguente.
E possibile allora scrivere:
H
(1∑ki
,1∑ki
, · · · ,1∑ki
)= H (p1, p2, ..., pm) + p1c logb k1 + p2c logb k2 + · · ·
+ pmc logb km = H (p1, p2, ..., pm) + c∑
pi logb ki.
Dopo semplici calcoli si ha:
H (p1, p2, ..., pm) = H
(1∑i ki
,1∑i ki
, ...,1∑i ki
)− c
∑i pi logb ki =
c logb
∑i ki − c
∑i pi logb ki = c logb
∑j kj ·
∑i
ki∑j kj
− c∑
i
pi logb ki =
c∑
i
pi logb
∑j
kj − c∑
i
pi logb ki = −c∑
i
pi logb
ki∑i kj
= −c∑
i
pi log pi.
La condizione necessaria del teorema e provata.
Il viceversa se Hb(p1, p2, · · · , pm) = −c∑m
i=1 pi logb pi allora si ha che le proprieta
sono tutte verificate e il teorema e provato. 2
Dal teorema precedente si ha che per un sistema che ha una distribuzione di probabi-
lita P = {p1, p2, · · · , pm} la funzione entropia e definita come la quantita:
Hb(p1, p2, · · · , pm) = −m∑
i=1
pi logb pi.
23
1.5 La funzione entropia
Dove la costante c e stata normalizzata a 1. Se il valore di b in H e 2 allora l’entropia
prende il nome di entropia binaria.
1.5.1 Proprieta della funzione entropia
Siano X e Y due variabili random e sia p(xi, yj) la probabilita congiunta delle due
variabili, allora l’entropia congiunta a X e Y e definita come:
H(X, Y ) =∑i,j
p(xi, yj) log1
p(xi, yj). (1.52)
Enunciamo il seguente lemma omettendo la dimostrazione.
Lemma 1 Sia {p1, p2, · · · , pm} una distribuzione di probabilita e sia {q1, q2, ..., qm}una sequenza di numeri reali con 0 ≤ qi ≤ 1 e
∑qi ≤ 1, allora si ha che:
∑pi log
1
pi
≤∑
pi log1
qi
(1.53)
Consideriamo adesso una sequenza di teoremi che permettono di evidenziare alcune
proprieta della funzione entropia.
Teorema 6 Se X e una variabile aleatoria si ha che:
0 ≤ H(X) ≤ log q (1.54)
Dim.
Chiaramente H(X) ≥ 0. Per definizione di entropia si puo scrivere:
H(X) =
q∑i=1
pi log1
pi
≤q∑
i=1
pi log11q
=
q∑i=1
pi log q (1.55)
da cui:
H(X) ≤ log q (1.56)
2
24
1.5 La funzione entropia
Teorema 7 Siano X e Y due variabili random, allora si ha:
H(X, Y ) ≤ H(X) + H(Y ) (1.57)
Dim.
Se consideriamo la distribuzione di probabilita congiunta ad X e Y e sommo solo
secondo l’indice legato a una variabile random (cioe si varia i lasciando fissato j e
viceversa) si ha:
∑j
p(xi, yj) = p(xi), (1.58)
∑i
p(xi, yj) = p(yj). (1.59)
quindi:
H(X) + H(Y ) =∑
i
p(xi) log1
p(xi)+
∑j
p(yj) log1
p(yj)=
=∑
i,j p(xi, yj) log1
p(xi)+
∑i,j
p(xi, yj) log1
p(yj)=
=∑
i,j p(xi, yj) log1
p(xi)p(yj)≥
∑i,j
p(xi, yj) log1
p(xi, yj)= H(X, Y ).
Il teorema e provato. 2
Siano X e Y due variabili random e p(yj|xi) la distribuzione di probabilita dell’evento
Y condizionato dall’evento X, definiamo l’entropia condizionata nel seguente
modo:
H(X|Y ) =∑i,j
p(yj)p(xi|yj) log1
p(xi|yj)=
∑j
p(yj)H(X|yj) (1.60)
Teorema 8 Se X e Y sono due variabili random, allora:
H(X|Y ) = H(X,Y )−H(Y ). (1.61)
25
1.5 La funzione entropia
Dim.
Dalla precedente definizione abbiamo:
H(X|Y ) =∑i,j
p(yj)p(xi|yj) log1
p(xi|yj). (1.62)
Ricordando che:
p(xi|yj) =p(xi, yj)
p(yj). (1.63)
possiamo scrivere:
H(X|Y ) =∑i,j
p(xi, yj) logp(yj)
p(xi, yj)=
∑i,j
p(xi, yj) log1
p(xi, yj)−
∑i,j
p(xi, yj) log1
p(yj)= H(X,Y )−
∑j
p(yj) log1
p(yj)= H(X,Y )−H(Y ).
Il teorema e provato. 2
Consideriamo l’insieme dei possibili segnali che si presentano in ingresso ad un rice-
vitore E = {a1, ....., am}, supponiamo di avere associata ad esso una distribuzione
di probabilita p(ai) con 1 ≤ i ≤ m. Possiamo allora scrivere l’entropia in ingresso
come:
H(E) = −∑
i
p(ai) log p(ai) =∑
i
p(ai) log1
p(ai)(1.64)
Siano U = {u1, ..., um} l’insieme dei segnali prodotti dalla sorgente in trasmissione,
possiamo definire informazione la quantita:
I(E,U) = H(E)−H(E|U). (1.65)
Da essa e possibile definire capacita del canale come la quantita
C = maxEI(E,U). (1.66)
Essa e legata alla determinazione di una distribuzione di probabilita E tale che
rende massima I(E, U).
26
Capitolo 2
Teoria dei Codici
I Primi concetti
2.1 Introduzione
In questo capitolo vengono presentati i primi concetti legati alla teoria dei codici. Le
prime domande che si pongono sono legate alle motivazioni dell’origine della teoria
dei codici e alla sua utilita.
Quando un sistema trasmissivo invia delle informazioni ad un sistema ricevente,
possiamo pensare ad una comunicazione telefonica o trasmissioni via etere o anche
trasmissioni che provengono dall’esterno del nostro pianeta inviate da sonde, astro-
navi o shuttle, nella realta fisica del nostro universo puo accadere che tali trasmissioni
vengano distorte e il segnale trasmesso ne risulti alterato nella sua ricezione.
Il sistema su cui vengono inviate le informazioni viene chiamato canale. Esso puo
essere individuato dal mezzo trasmissivo su cui vengono inviate informazioni in una
normale comunicazione telefonica o un in invio dati tra due sistemi informatici col-
legati, il canale puo anche essere costituito dallo spazio in cui si propagano onde
27
2.1 Introduzione
elettromagnetiche che trasportano informazioni. In ogni canale esiste sempre la pre-
senza di rumore che compromette la trasmissione. Tale rumore si puo legare a
interferenze elettromagnetiche (disturbi radio, attivita solare, ecc.), competizioni di
trasmissione, fattori di disturbo random, e tanti altri fattori, ognuno legato al tipo
di trasmissione che si sta effettuando.
Un altro tipo di applicazione della teoria dei codici si ha quando si leggono in-
formazioni su un “supporto”, in questo caso il rumore puo essere legato alla non
perfetta condizione del supporto (ad esmpio sporcizia, presenza di graffi in CD o
DVD o invecchiamento del supporto) o a difficolta del sistema di lettura.
Per motivazioni legate al sistema hardware l’informazione viaggia in sequenza di
informazioni binarie e quindi essa viaggia mediante codici binari. In questi appunti
a partire da questo capitolo saranno trattati codici a blocchi.
La motivazione per cui nella maggior parte dei casi si usano codici a blocchi sta nel
fatto che l’esperienza fisica e quindi la rigorosa osservazione sperimentale, associa
ai sistemi trasmissivi una distribuzione di probabilia costante. In particolare come
detto precedentemente l’alfabeto usato e del tipo A = {0, 1} e ogni suo carattere e
chiamato bit. Ad ogni singolo bit, come rappresentato nella figura 2.1, puo essere
associata una probabilita p che esprime la probabilita che esso venga ricevuto cor-
rettamente, chiaramente la probabilita che un bit non sia trasmesso correttamente
e 1− p.
La probabilita p e chiaramente legata al sistema trasmissivo ed essa prende il nome
di efficienza del canale, negli attuali sistemi trasmissivi essa supera il valore 0.97
cioe puo assumere valori molto alti, ma e evidente che in un numero di bits molto
alto la probabilita che l’informazione venga inficiata da errore non e trascurabile.
Un canale Ch1, con efficienza p1, si dice piu efficiente del canale Ch2, di efficienza p2,
se si ha che p1 > p2.
Varie sono state nel tempo le tecniche di controllo e/o correzione di errore, alcune
28
2.1 Introduzione
P - 1 P - 1
P
P
0 0
11
Figura 2.1:
delle quali molto semplici come, ad esempio, l’aggiunta di un bit ad ogni parola di
un codice in modo tale che tutte le sue parole contengano un numero pari di bits
di valore “1”. Il codice C = {111, 011, 001, 100, 110, 010} con l’aggiunta del bit di
parita diventa C ′ = {1111, 0110, 0011, 1001, 1100, 0101}, si vede facilmente che se
si riceve la parola 0010 avendo un numero di bits di valore “1” dispari non e una
parola del codice.
Un’altra tecnica di controllo e correzione di errore, detta di ridondanza, e quella
di trasmettere piu volte la stessa parola e, in ricezione, di controllare se anche la
sequenza di ricezione ha sempre la stessa ripetizione, se cio non avviene allora si ef-
fettua la correzione scegliendo nella sequenza la parola del codice che e stata ripetuta
piu volte. Questa tecnica contrariamente alla precedente oltre ad individuare l’er-
rore permette anche di correggerlo, inoltre maggiore e il numero di ripetizioni di una
stessa parola in una sequenza, maggiore e la probabilita che la correzione sia esatta.
Esiste pero un importante inconveniente in tale tecnica, essa infatti non permette
un numero elevato di ripetizioni dato che maggiore e il loro numero, minore e la
velocita di trasmissione di informazione.
29
2.2 Probabilita e distanza
2.2 Probabilita e distanza
Il problema della correzione delle parole del codice e essenzialmente legato al concetto
di probabilita. La probabilita che la parola v, avente lunghezza n e appartenente
al codice a blocchi C di efficienza p, sia trasmessa correttamente e pn. Supponiamo
adesso di trasmettere la parola v ∈ C, ma di ricevere la parola w /∈ C, come risolvere
il problema della correzione di w?
E necessario definire una funzione che determini la probabilita che la parola v ∈ C
sia trasmessa e la parola w /∈ C sia ricevuta. In generale tale funzione puo essere
definita, indipendentemente dal concetto di parola inviata e ricevuta, nel seguente
modo:
φ : Kn ×Kn → [0, 1],
dove Kn esprime l’insieme di tutte le possibili parole di lunghezza n i cui caratteri
appartengono all’insieme K = {0, 1}, K rappresenta quindi l’alfabeto del codice.
Se Φ (v, w) e la probabilita che la parola v ∈ C e stata inviata e w ricevuta, allora
si ha:
Φ (v, w) = pn−d (1− p)d , (2.1)
dove d e il numero di bits differenti tra le parole v e w, n e la lunghezza delle parole
del codice C, n − d rappresenta il numero di bits trasmessi correttamente, d i bits
trasmessi in maniera errata e 1 − p e la probabilita che un singolo bit giunga in
maniera errata. La quantita d e chiamata distanza tra le parole v e w e si indica
con la simbologia d (v, w). Chiaramente non e difficile provare che tra due parole di
lunghezza n vale la seguente uguaglianza d (v, w) = d (w, v).
30
2.2 Probabilita e distanza
Esempio 1
Sia C un codice a blocchi di lunghezza 5. Per ogni parola v ∈ C la probabilita che v sia
ricevuta correttamente (cioe w = v) e:
Φ(v, v) = p5
Se invece la parola inviata e v = 10011 e quella ricevuta e w = 11001, allora la distanza
tra v e w e 2 e si ha che:
Φ(v, w) = p3(1− p)2
Individuiamo adesso una tecnica che permette di determinare la correzione di un
errore in ricezione. Supponiamo di aver ricevuto la parola w e che essa non appar-
tiene al codice C. Tale tecnica di correzione di errore e basata sull’individuazione
della parola v′ ∈ C tale che ad essa e associata la probabilita massima rispetto alla
parola ricevuta w mediante la funzione Φ cioe:
Φ (v′, w)max = max {Φ (v, w) : v ∈ C} . (2.2)
Quindi se si riceve una parola w non appartenente al codice a blocchi C si individua
la parola del codice v′ tale che la funzione Φ e massima al variare di v in C, fissata
w. Tale parola v′ si sostituisce a w.
E possibile che in tale tecnica si abbia un insieme di parole del codice che hanno
tutte la stessa probabilita massima, in tal caso si genera un’ambiguita, in seguito
vedremo come affrontare tale evenienza.
Consideriamo adesso un risultato che permette di associare il concetto di probabilita
definito dalla funzione Φ al concetto di distanza tra due parole.
31
2.2 Probabilita e distanza
Teorema 9 Sia C un codice a blocchi di lunghezza n, con1
2< p < 1 e siano v1 e
v2 due parole del codice C. Se d1 e la distanza tra v1 e la parola ricevuta w e d2 e
la distanza tra v2 e w, allora si ha che:
Φ(v1, w) < Φ(v2, w) (2.3)
se e solo se d1 > d2, vale anche il viceversa.
Dim.
La disuguaglianza
Φ(v1, w) < Φ(v2, w)
vale se e solo se:
pn−d1 (1− p)d1 < pn−d2 (1− p)d2 ;
pn−d1 (1− p)d1
pn−d2 (1− p)d2< 1;
pn−d1−n+d2 (1− p)d1−d2 < 1;
pd2−d1 (1− p)−(d2−d1) < 1;
(p
1− p
)d2−d1
< 1. (2.4)
Poiche per le ipotesi1
2< p < 1 si ha che p > 1− p ovvero:
p
1− p> 1,
32
2.2 Probabilita e distanza
allora la (2.4) e vera se e solo se l’esponente e negativo cioe se:
d2 − d1 < 0 ⇒ d2 < d1, (2.5)
e il teorema e provato. 2
Il teorema precedente assume una rilevanza fondamentale in quanto permette di
abbandonare il concetto di probabilita e di sostituirlo con il concetto di distanza tra
due parole.
La tecnica di correzione di errore esposta precedentemente adesso cambia nel seguente
modo: se si riceve una parola w non appartenente al codice C si individua la parola
v′ ∈ C che ha distanza minima da w e si sostituisce a w, cio equivale al fatto che la
funzione Φ(v, w), fissata w, assume valore massimo per v′ ∈ C. L’esempio seguente
chiarisce meglio tale tecnica.
Esempio 2
Sia il codice C = {01101, 01001, 10100, 10101} e supponiamo di ricevere la parola w =
00110 non appartenente al codice C. Esaminiamo la tabella seguente.
C w distanza
c1 01101 00110 3
c2 01001 00110 4
c3 10100 00110 2
c4 10101 00110 3
Tab.1
La parola del codice che ha distanza minima da w e c3 = 10100, tale parola e quella che
corregge w ed e quella che tra tutte le parole del codice C ha la massima probabilita di
essere stata inviata in trasmissione.
33
2.3 Peso ed errore
2.3 Peso ed errore
Si e precedentemente detto che l’alfabeto dei codici a blocchi e K = {0, 1}, ma tale
insieme di caratteri e anche un insieme numerico e su di esso possono essere definite
due operazioni algebriche binarie, una di somma e l’altra di prodotto definite dalla
tabella seguente.
Somma Prodotto
0 + 0 = 0 0 · 0 = 0
1 + 0 = 1 1 · 0 = 0
1 + 0 = 1 0 · 1 = 0
1 + 1 = 0 1 · 1 = 1
Tab.2
Le due operazioni di somma e prodotto danno all’insieme K le proprieta di campo.
L’insieme Kn, come precedentemente detto, e l’insieme di tutte le possibili differenti
parole binarie di lunghezza n, tale insieme e finito ed ha cardinalita uguale a 2n,
perche ogni singola componente di una parola di Kn puo assumere valori “0” o “1”.
L’insieme Kn puo anche assumere la struttura di spazio vettoriale se si interpretano
le sue parole come vettori e su di esse si definiscono le operazioni di somma vettoriale
e di prodotto esterno tra gli elementi di K e Kn mediante i concetti di spazio
vettoriale introdotti nei corsi base di algebra lineare. La somma tra le componenti
corrispondenti di due parole e data dall’operazione di somma definita su K. Un
esempio di somma tra le due parole (101) e (111) e: (101) + (111) = (010).
E importante notare che la somma di due parole uguali e uguale alla parola che
possiede in tutte le sue componenti bits di valore “0”, tale parola e detta nulla e si
34
2.3 Peso ed errore
indica con il simbolo 0, cioe ∀v ∈ Kn si ha che v + v = 0. Tale proprieta permette
di capire che la parola opposta di una qualunque parola v ∈ Kn e la parola stessa.
Si ha inoltre che vale la seguente proprieta.
Proprieta 5 Se v + w = 0, allora si ha che v = w. 2
Si e preferito evidenziare tale proprieta perche molto spesso chi comincia a studiare
questi argomenti commette l’errore di scrivere v = −w, cio e sbagliato!!!
Infatti se vale l’eguaglianza v + w = 0, allora vale anche v + w + w = w che e
equivalente a v + 0 = w ed infine si ha v = w.
Diamo adesso l’importante nozione di errore per un codice C a blocchi. Supponiamo
che e stata inviata la parola v ∈ C e si sia ricevuta la differente parola w, allora si
definisce errore tra v e w la parola u cosı definita:
u = v + w. (2.6)
Il concetto di errore legato alle parole v e w puo per certi versi sembrare “strano”,
infatti nella sua definizione si capisce facilmente che per determinare u non solo e
necessaria la parola w conosciuta in ricezione, ma anche la parola trasmessa. Questo
non deve sorprendere se si pensa che, come vedremo nel capitolo 3 e nei successivi,
la teoria dei codici in correzione di errore ha come obiettivo principale quello di
individuare, mediante tecniche matematiche, la parola u indipendentemente dalla
conoscenza di v. Se si riesce in tale obiettivo, dopo aver verificato che w /∈ C, per
determinare v basta sommare le parole w + u e si ottiene la parola inviata.
Se v ∈ Kn, allora si definisce peso di v il numero di bits che hanno valore “1” in v.
Tale valore si esprime secondo la simbologia wt(v). Ad esempio il peso della parola
v = 011001 ∈ K6 e uguale a tre, cioe wt (011001) = 3.
35
2.3 Peso ed errore
Esiste una relazione tra il peso e la distanza dell’errore. Infatti date due parole
distinte v e w, la loro distanza d(v, w) rappresenta il numero di bits tra loro differenti.
La somma u = v + w individua la parola u, diversa dalla parola nulla, che ha la
caratteristica di possedere bits di valore “1” nelle componenti in cui v e w sono tra
loro differenti, cio comporta che la parola u ha peso uguale alla distanza tra v e w
cioe:
d(v, w) = wt(u). (2.7)
Se d e la distanza tra le parole v e w, allora l’equazione (2.1) si puo anche scrivere
nel seguente modo:
Φ (v, w) = pn−d (1− p)d = pn−wt(u) (1− p)wt(u) . (2.8)
Esempio 3
Siano v = 011001 e w = 111101 parole di K6, si ha che u = v + w = 100100 allora segue
che: d(v, w) = wt(v + w) = 2.
Di seguito sono enunciate una serie di proprieta legate ai concetti di distanza e di
peso.
Proprieta 6 Date due parole v e w di Kn allora valgono le seguenti quattro pro-
prieta.
1. d(v, u) + d(u,w) ≥ d(v, w);
2. wt(v + w) ≤ wt(v) + wt(w);
36
2.4 Prime tecniche di codifica
3. wt(av) = a · wt(v) con a ∈ K;
4. d(av, aw) = a · d(v, w) con a ∈ K. 2
La prima disuguaglianza delle precedenti e la disuguaglianza triangolare.
Diamo adesso un’altra importante definizione. Si definisce distanza o distanza di
Hamming di un codice binario C l’intero dc cosı definito:
dc = min {d(v′, v′′), v′, v′′ ∈ C} = min {wt(v′ + v′′), v′, v′′ ∈ C} . (2.9)
Tale parametro, se non vi e alcuna ambiguita legata al codice C, si denotera con
la semplice simbologia d. La distanza d e uno dei tre parametri che, in seguito,
caratterizza un codice a blocchi.
2.4 Prime tecniche di codifica
La tecnica di decodifica che e presentata in questa sessione e basata sulla ricerca tra
tutte parole del codice C della parola che, in termini di distanza, e la piu vicina alla
parola che e stata ricevuta e che non appartiene al codice.
Tale tecnica prende il nome di MLD dall’inglese “Maximum Likelihood Decoding”
cioe massima probabilta di decodifica.
Il seguente esempio mostra in maniera pratica l’utilizzo di tale tecnica su un codice
estremamente banale, ma utile a scopi didattici.
37
2.4 Prime tecniche di codifica
Esempio 4
Sia il codice di lunghezza 3, C = {000, 111}. Consideriamo tutte le differenti parole di
K3, esse sono 23 e K3 = {000, 001, 010, 011, 100, 101, 110, 111}.
Parola
ricevuta
Errore
000 + w
Errore
111 + w
Decodifica
000 000∗ 111 000
001 001∗ 110 000
010 010∗ 101 000
011 011 100∗ 111
100 100∗ 011 000
101 101 010∗ 111
110 110 001∗ 111
111 111 000∗ 111
Tab.3
La prima colonna della tabella precedente rappresenta tutte le possibili parole di lunghez-
za tre che possono essere ricevute, cioe w, la seconda e terza colonna rappresentano la
somma della singola parola del codice C e la parola w cioe tali colonne rappresentano gli
errori 000 + w e 111 + w. L’ultima colonna individua la parola di C che “correggera” w.
Supponiamo che la parola 001 e ricevuta, nella terza riga della tabella si considerano gli
errori 001 e 110, tra essi si determina la parola del codice che sommata a 001 ha errore di
peso minore, cioe 000 corrispondente all’errore 001. Nella tabella gli errori di peso minore
su ogni riga vengono evidenziati mediante asterisco.
Nell’esempio 4 e importante notare che che la scelta della parola di peso minore e
dovuta al fatto che d(v, w) = wt(v+w) e a quanto affermato dal teorema 9, date due
38
2.4 Prime tecniche di codifica
parole del codice C v1 e v2 se si ha che d(v1, w) = wt(v1+w) < d(v2, w) = wt(v2+w)
allora la parola v1 ha maggiori probabilita di essere stata inviata rispetto alla parola
v2.
Il codice dell’esempio 4, come gia detto, e estremamente semplice ed inoltre per
ogni parola ricevuta non possiede alcuna ambiguita, cioe su ogni parola ricevuta w
e sempre possibile fare una correzione. In codici piu complessi puo accadere che per
una parola ricevuta si determina un insieme di errori dello stesso peso in tal caso la
tecnica MLD si scinde in due strategie di correzione.
• CMLD(complete MLD): Ricevuta w /∈ C, se vi sono piu parole del codice con
lo stesso errore minimo, allora tra tali parole se ne sceglie una arbitrariamente
o mediante tecniche ponderate.
• IMLD(incomplete MLD): Ricevuta w /∈ C, se vi sono piu parole del codice
con lo stesso errore minimo, allora si richiede la ritrasmissione del messaggio.
La ritrasmissione del messaggio puo essere anche chiesta quando si riceve una
parola w “troppo” distante da tutte le parole del codice, il“troppo” e legato
al tipo di strategia che si vuole adottare in correzione.
39
2.4 Prime tecniche di codifica
Esempio 4
Parola
ricevuta
Errore
0000 + w
Errore
1010 + w
Errore
0111 + w
Decodifica
0000 0000∗ 1010 0111 0000
1000 1000 0010 1111 −−−−0100 0100∗ 1110 0011 0000
0010 0010 1000 0101 −−−−0001 0001∗ 1011 0110 0000
1100 1100 0110 1011 −−−−1010 1010 0000∗ 1101 1010
1001 1001 0011 1110 −−−−0110 0110 1100 0001∗ 0111
0101 0101 1111 0010∗ 0111
0011 0011 1001 0100∗ 0111
1110 1110 0100∗ 1001 1010
1101 1101 0111 1010∗ 0111
1011 1011 0001∗ 1100 1010
0111 0111 1101 0000∗ 0111
1111 1111 0101 1000 0111
Tab.4
La tabella 4 e legata al codice di lunghezza 4 C = {0000, 1010, 0111} e mostra che nelle
righe 2a, 4a, 6a e 8a la tecnica IMLD chiede sempre la ritrasmissione.
40
2.5 Individuazione di errore
2.5 Individuazione di errore
Un codice C individua un errore u se e solo se v + u /∈ C ∀v ∈ C.
Esempio 5
Consideriamo il seguente codice C = {001, 101, 110}, vediamo se esso individua l’errore
u = 010. Per far cio sommiamo tale errore ad ogni parola del codice e verifichiamo che
tale parola non appartiene a C.
001 + 010 = 011 /∈ C
101 + 010 = 111 /∈ C
110 + 010 = 100 /∈ C
Il codice C individua l’errore u = 010.
Consideriamo adesso l’errore u′ = 100.
001 + 100 = 101 ∈ C
101 + 100 = 001 ∈ C
110 + 100 = 010 /∈ C
Il codice C quindi individua l’errore u ma non individua l’errore u′.
Il risultato seguente individua un insieme di errori che possono essere individuati da
un codice C.
Teorema 10 Sia C codice a blocchi di lunghezza n e distanza d, allora C individua
tutti gli errori diversi dalla parola nulla e con peso minore o uguale a d− 1. Esiste
almeno un errore di peso d che non puo essere individuato da C.
Dim.
Consideriamo un errore u 6= 0 il cui peso e wt(u) ≤ d− 1 con d 6= 1, ∀ v ∈ C si ha
che:
41
2.5 Individuazione di errore
d(v, v + u) = wt(v + v + u) = wt(u) ≤ d− 1 (2.10)
Poiche C ha distanza d segue che prese due generiche parole v′ ∈ C e v′′ ∈ C allora
d(v′, v′′) ≥ d, quindi se v ∈ C e vale la (2.10) allora si ha che v + u /∈ C. Vista
l’arbitrarieta della scelta di v la prima parte del teorema e provata.
Se d e la distanza del codice allora esistono almeno due parole c′ ∈ C e c′′ ∈ C
tale che d(c′, c′′) = d. Sia u = c′ + c′′ e evidente che wt(u) = d e c′′ = u + c′ ∈ C.
Si e trovato un errore u con peso d che non viene individuato da C e il teorema e
provato. 2
Se d e la distanza di un codice C, allora C si dira d - 1 error-detecting.
Esempio 6
Il codice C = {000, 111} ha distanza d = 3 ed e 2-error-detecting.
Esempio 7
Il codice C = {001, 101, 110} ha distanza d = 1. Poiche d− 1 = 0 si ha che il teorema 10,
in questo caso, non ci aiuta alla determinazione di errori individuati da C.
Dall’esempio precedente e importante notare che il teorema 10 indica che se vi e
codice C avente distanza d allora tutte le parole di peso d−1 sono errori individuati
da C, ma non e detto che non vi possano essere errori di peso maggiore o uguale
a d individuati dal codice, nell’esempio 7 si ha che d − 1 = 0, ma la parola 010 e
chiaramente un errore individuato da C come si evince dall’esempio 5.
42
2.6 Correzione di errore
2.6 Correzione di errore
In questa sessione e caratterizzato un particolare errore legato al codice C che oltre
ad essere individuato permette una correzione della parola ricevuta.
Si dice che un codice C corregge un errore u se e solo se, comunque si fissi w ∈ C
e w 6= v, vale la disuguaglianza:
d(w, v + u) > d(v, v + u) (2.11)
Esempio 8
Sia dato il codice C = {000, 111} e l’errore u = 010. Supponiamo che la parola inviata sia
v = 000. In questo caso u + v = (010) + (000) = 010, pertanto:
d(000, u + v) = d(000, 010) = wt(010) = 1
d(111, u + v) = d(111, 010) = wt(101) = 2.
Consideriamo adesso che la parola inviata e v = 111, in questo caso u+v = (010)+(111) =
101, pertanto:
d(000, u + v) = d(000, 101) = wt(101) = 2
d(111, u + v) = d(111, 101) = wt(010) = 1.
In entrambi i casi, se si effettuano le tecniche di codifica usate nella sessione 2.4 si vede
che C corregge u = 010 in modo “efficace” sia nell’ipotesi che sia inviata la parola 000 che
la parola 111 ed inoltre verifica la (2.11). Consideriamo adesso l’errore u = 110.
Per v = 000 si ha:
d(000, u + v) = d(000, 110) = wt(110) = 2
d(111, v + u) = d(111, 110) = wt(001) = 1.
43
2.6 Correzione di errore
In questo caso C non corregge l’errore u = 110 perche la parola che ha distanza minore
non e quella inviata.
Dato x ∈ R, indichiamo con bxc il massimo intero minore o uguale a x. Ad esempio:
⌊5
2
⌋= 2; b3c = 3;
⌊1
2
⌋= 0.
Anche per questo tipo di errori cerchiamo di individuare gli errori che sono corretti
da un codice C.
Teorema 11 Sia C un codice di lunghezza n e distanza d. Allora esso corregge tutti
gli errori di peso minore o uguale a
⌊d− 1
2
⌋. Esiste almeno un errore di peso pari
a 1 +
⌊d− 1
2
⌋che C non corregge.
Dim.
Sia u un errore con peso wt(u) ≤⌊
d− 1
2
⌋e due arbitrarie parole v e w in C con
v 6= w, supposto di trasmettere v. Si vuole dimostrare che:
d(v, v + u) < d(w, v + u). (2.12)
Per la disuguaglianza triangolare si ha che:
d(w, v + u) + d(v + u, v) ≥ d(w, v) ≥ d. (2.13)
Per le ipotesi si ha anche che:
d(v + u, v) = wt(v + u + v) = wt(u) ≤ d− 1
2, (2.14)
44
2.6 Correzione di errore
quindi,
d ≥ 2wt(u) + 1. (2.15)
Dalla (2.13) si ha:
d(w, v + u) + wt(v + u + v) ≥ d(w, v) ≥ d ≥ 2wt(u) + 1 (2.16)
d(w, v + u) + wt(u) ≥ 2wt(u) + 1 (2.17)
d(w, v + u) ≥ wt(u) + 1 = d(v + u, v) + 1 (2.18)
Dalla scelta arbitraria di v e w si ha che:
d(w, v + u) > d(v, v + u). (2.19)
La prima parte del teorema e provata.
Poiche la distanza di C e d allora esistono almeno due parole v e w appartenenti a
C tali che:
d(v, w) = d (2.20)
Consideriamo la parola v + w ed in essa cambiamo un numero d − 1 −⌊
(d− 1)
2
⌋
bits di valore “1” in “0”; chiamiamo u la parola che si ottiene dopo aver cambiato
tali bits. Il peso di tale parola sara:
d−{
d− 1−⌊
d− 1
2
⌋}=
⌊d− 1
2
⌋+ 1.
Consideriamo adesso d(v, v + u) e d(w, v + u):
d(v, v + u) = wt(u) =
⌊d− 1
2
⌋+ 1 (2.21)
d(w, v + u) = wt(w + v + u) = d(v + w, u) = d−{
1 +
⌊d− 1
2
⌋}(2.22)
45
2.6 Correzione di errore
Se la distanza d e dispari, allora si puo scrivere come d = 2t + 1 e si ha che:
d(v, v + u) = 1 +2t
2= 1 + t (2.23)
e
d(w, v + u) = 2t + 1− (1 + t) = t (2.24)
Pertanto:
d(v, v + u) > d(w, v + u) (2.25)
in contraddizione con la (2.19).
Se la distanza d e pari essa puo scriversi come d = 2t. In tal caso:
d(v, v + u) = 1 +
⌊2t− 1
2
⌋= 1 +
⌊t− 1
2
⌋= 1 + t− 1 = t (2.26)
e
d(w, v + u) = 2t− t = t (2.27)
Pertanto:
d(v, v + u) = d(w, v + u) (2.28)
anch’essa in contraddizione con la (2.19), quindi il codice C non corregge l’errore u
e il teorema e completamente provato. 2
Se d e la distanza di un codice C, allora C si dira
⌊d− 1
2
⌋-correttore, ad esempio
un codice di distanza sette e un codice 3-correttore.
46
Capitolo 3
Codici lineari
3.1 Introduzione
In questa sessione e presentato un tipo di codice che permette l’applicazione di molti
concetti incontrati nei corsi base di algebra lineare.
Un codice binario a blocchi C si definisce lineare se la somma di due parole v e w,
appartenenti a C e ancora una parola di C, cioe:
∀v, w ∈ C ⇒ v + w ∈ C.
Se Kn e un insieme di parole di lunghezza n che ha le proprieta di spazio vettoriale
sul campo K = {0, 1} mediante le operazioni di somma e prodotto definite nel
capitolo precedente, allora un codice lineare C puo intendersi come un sottospazio
di Kn, infatti la sua definizione implica la chiusura delle operazioni di somma e
prodotto esterno in C.
In un codice lineare molti parametri definiti nel capitolo precedente possono essere
calcolati mediante degli algoritmi piu semplici rispetto a quelli che si basano sulle
definizioni. Nel teorema seguente si vede come e possibile calcolare la distanza di un
47
3.1 Introduzione
codice senza effettuare il confronto diretto tra tutte le distinte coppie delle parole
del codice.
Teorema 12 La distanza di un codice lineare C e la piu piccola distanza tra tutte
le parole del codice, di peso maggiore di zero, e la parola nulla.
Dim.
Consideriamo la quantita t = min {d(0, c), c ∈ C}. Supponiamo per assurdo che la
distanza del codice d < t, allora esistono almeno due parole v′ e v′′ appartenenti a
C per cui si ha:
d(v′, v′′) = d.
Consideriamo la parola c = v′ + v′′, essa apparterra a C ed inoltre wt(c) = d > 0,
quindi:
wt(c) = d(0, c) = d.
Cio vuol dire che:
d ∈ {d(0, c), c ∈ C} ⇒ d ≥ t.
Si e determinato un assurdo in quanto t e il minimo di tale insieme e contempo-
raneamente si ha che d < t. 2
Esempio 1
C = {000, 111, 011, 100}, le distanze tra tutte le parole di C con peso maggiore di zero
dalla parola 000 sono d(111, 000) = 3, d(011, 000) = 2, d(100, 000) = 1 quindi la distanza
del codice e d = 1.
48
3.2 Prodotto scalare in Kn
3.2 Prodotto scalare in Kn
In Kn e possibile introdurre il prodotto scalare canonico definito nei corsi di algebra
lineare. Se v e w sono due parole di Kn, si intende come loro prodotto scalare la
somma dei prodotti delle componenti corrispondenti, ad esempio se v = (111) e
w = (010) si ha che v · w = (111) · (010) = 0 + 1 + 0 = 1. Se il prodotto scalare di
due parole e zero allora le due parole si dicono ortogonali, ad esempio se v = (111)
e w = (101) allora v · w = 1 + 0 + 1 = 0 e tali parole sono ortogonali.
Si definisce C⊥ (C ortogonale) l’insieme delle parole:
C⊥ = {v ∈ Kn : v · w = 0 ∀w ∈ C} ,
cioe l’insieme delle parole di Kn che sono ortogonali ad ogni parola di C. Tale
insieme e anch’esso un codice lineare, infatti se c′ e c′′ sono due arbitrarie parole
di C⊥ e v e una generica parola di C, allora si ha che essa e ortogonale alla parola
somma c′ + c′′, cioe:
(c′ + c′′) · v = c′ · v + c′′ · v = 0,
cio vuol dire che prese due parole arbitrarie di C⊥ allora la loro somma appartiene
a C⊥ e C-ortogonale e un codice lineare.
Un insieme di parole di C, B = {c1, c2, · · · , ck}, e un insieme di generatori di C se
per qualunque v ∈ C e possibile scrivere:
v = a1c1 + a2c2 + ... + akck.
E evidente che se l’equazione vettoriale
a1c1 + a2c2 + ... + akck = 0,
49
3.3 Matrice generatrice
e vera se e solo se ai = 0, per 1 ≤ i ≤ k, allora gli elementi di B sono detti
linearmente indipendenti ed essi formano una base di C. Il valore k, cioe il numero
di elementi in B e detto essere la dimensione di C. Essa insieme ai parametri n
(lunghezza), d (distanza) caratterizza un codice C.
In algebra lineare vale il seguente risultato, che in questi appunti e soltanto enun-
ciato.
Teorema 13 Sia C un codice lineare di lunghezza n e dimensione k, allora si ha:
dimC + dimC⊥ = n (3.1)
2
Maggiori approfondimenti degli argomenti trattati in questa sessione possono facil-
mente essere trovati in qualunque testo di algebra lineare.
3.3 Matrice generatrice
Sia C un codice lineare e B = {c1, c2, ..., ck} un insieme di sue parole che costituiscono
una sua base. Costruiamo la matrice G, posizionando per riga tutti gli elementi di
B.
G =
c1
c2
.
.
ck
. (3.2)
50
3.3 Matrice generatrice
La matrice (3.2) e detta matrice generatrice, essa si puo ottenere anche da una
matrice le cui righe sono costituite da parole del codice che formano un insieme di
generatori di C mediante operazioni elementari.
La riduzione di matrici mediante sequenza di operazioni elementari si rimanda ai cor-
si algebra lineare, qui invece sono presentate due particolari riduzioni che conducono
alla matrice generatrice di un codice lineare.
Sia A una matrice (k×n) su K, un elemento “1” di A si dice 1-leading se esso e un
elemento speciale (tutti gli elementi al di sotto sono “0”) e nella riga in cui si trova
tutti gli elementi alla sua sinistra assumono valore “0”. Una colonna della matrice
A si definisce colonna leading se essa contiene un 1-leading e tutti gli altri suoi
elementi sono “0”.
Esempio 2
Nella matrice A i caratteri “1” sottosegnati sono degli 1-leading, in particolare, nella se-
conda riga l’ 1-leading non ha nessun zero a sinistra in quanto primo elemento della riga,
ma rientra nella sua definizione perche appartiene all’ultima riga di A.
La matrice B contiene due colonne leading corrispondenti ai caratteri “1” sottosegnati.
A =
00011000
10011111
; B =
0 1 0
0 0 1
1 0 1
.
Una matrice A e ridotta parzialmente (REF) se tutte le sue righe nulle sono poste
al fondo di A e ogni riga non nulla ha un 1-leading che ha alla sua destra tutti gli
1-leadings delle righe sottostanti. Se una matrice non e ridotta parzialmente, allora
essa puo essere ridotta mediante le operazioni elementari:
1. Ri ⇒ Rj;
51
3.3 Matrice generatrice
2. Ri ⇒ Ri + Rj.
Esempio 3
La matrice A e una matrice ridotta parzialmente.
A =
0 1 1 1 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
.
Esempio 4
La matrice B non e una matrice ridotta parzialmente, consideriamo le sue righe come
generatori di un codice lineare C di lunghezza n = 4.
B =
1 0 1 1
1 0 1 0
1 1 0 1
.
Riduciamo B mediante una sequenza di operazioni elementari.
{R2 ⇒ R2 + R1 R3 ⇒ R3 + R1}.
B′ =
1 0 1 1
0 0 0 1
0 1 1 0
.
52
3.3 Matrice generatrice
{R2 ⇔ R3} ;
B′′ =
1 0 1 1
0 1 1 0
0 0 0 1
.
La matrice B′′ e ridotta parzialmente e le sue tre righe non nulle in cui compaiono gli
1- leading sono linearmente indipendenti quindi si e ottenuta una matrice generatrice del
codice C le cui righe formano una base di C.
Una matrice A si dice ridotta totalmente (RREF) se essa e ridotta parzialmente
e ogni suo 1-leading si trova in una leading colonna.
Esempio 5
La precedente matrice B′′ puo essere ridotta totalmente mediante la seguente operazione
elementare.
{R1 ⇒ R1 + R3} ;
B′′′ =
1 0 1 0
0 1 1 0
0 0 0 1
.
B′′′ e una matrice ridotta totalmente ed essa e anche una matrice generatrice.
53
3.4 Matrice di parita
Se un codice C ha dimensione k, allora si ha che la sua cardinalita e | C | = 2k. La
cardinalita di C e quindi pari al numero totale delle differenti parole di lunghezza k.
Cio e dovuto al fatto che se una base di C e B = {c1, c2, · · · , ck}, allora ogni parola
c di C si puo esprimere mediante un’unica combinazione lineare degli elementi di B,
cioe,
v = a1c1 + a2c2 + · · ·+ akck; (3.3)
ci sono al piu 2k distinte possibili combinazioni lineari del tipo (3.3).
Sia G una matrice generatrice di un codice C di lunghezza n e dimensione k, allora
essa sara una matrice k × n.
Una generica parola v di C si puo ottenere dal seguente prodotto riga per colonna:
v = u ·G = (a1, a2, · · · , ak) ·
c1
c2
.
ck
;
dove u = (a1, a2, · · · , ak) e una parola su K di lunghezza k (dimensione di C).
La parola v di C adesso puo essere individuata mediante la parola di lunghezza k
(a1, a2, · · · , ak)G rispetto alla matrice G.
3.4 Matrice di parita
Se C e un codice lineare, come precedentemente detto, anche il suo codice duale
C⊥ e un codice lineare. In questa sessione si determina la matrice generatrice del
54
3.4 Matrice di parita
codice duale di un codice lineare C, in particolare si chiama matrice di parita la
trasposta della matrice generatrice del codice duale.
3.4.1 Algoritmo di generazione di H
La matrice di parita e indicata con il simbolo H ed essa e individuata dal codice
lineare C, di parametri (n, k, d), mediante il seguente algoritmo.
Algoritmo
1. Sia S e un insieme di generatori del codice C e A la matrice ottenuta ponendo
per riga tutti gli elementi di S.
2. Si riduce totalmente la matrice A, si ottiene la matrice:
A′ =
G
0
,
dove G e una matrice generatrice di C, k × n e 0 le righe nulle ottenute dopo
la riduzione totale di A.
3. Sia X la matrice k × (n − k) ottenuta dalla matrice G eliminando tutte le
colonne in cui sono presenti dei 1-leading.
4. Si costruisce la matrice H (n× (n− k)) nel modo seguente:
• Nelle righe di H corrispondenti alle colonne 1-leading di G, si posizionano,
in sequenza, le righe di X. Le righe posizionate sono k.
• Nelle rimanenti n− k righe di H si posizionano in sequenza le righe della
matrice identita I(n−k).
5. Fine. 2
55
3.4 Matrice di parita
Teorema 14 La matrice di parita determinata dall’algoritmo precedente e la traspos-
ta della matrice generatrice del codice duale corrispondente al codice lineare C di
parametri (n, k, d).
Dim.
La matrice H e una matrice (n × (n − k)). Per provare il teorema basta mostrare
che il prodotto riga per colonna tra le matrici G e H e uguale ad una matrice nulla
del tipo (k × (n − k)). Senza ledere la generalita della dimostrazione a meno di
una permutazione delle colonne di G e delle righe di H si ha che e possibile scrivere
G′ = [Ik, X] e H ′ =
X
I(n−k)
. Il prodotto riga per colonna delle due matrici e:
G′ ·H ′ =[
Ik X] X
In−k
= X + X = 0; (3.4)
cio prova il teorema e la correttezza dell’algoritmo, inoltre si ha che:
HT = GC⊥ .
2
Esempio 6
Sia un codice C generato dalle parole S = {11101, 10110, 01011, 11010}, determiniamo per
C la matrice generatrice e la matrice di parita. Riduciamo totalmente la matrice:
56
3.4 Matrice di parita
AV I =
1 1 1 0 1
1 0 1 1 0
0 1 0 1 1
1 1 0 1 0
;
{R2 ⇒ R2 + R1 R4 ⇒ R4 + R1} ;
AV =
1 1 1 0 1
0 1 0 1 1
0 1 0 1 1
0 0 1 1 1
;
{R3 ⇒ R3 + R2} ;
AIV =
1 1 1 0 1
0 1 0 1 1
0 0 0 0 0
0 0 1 1 1
;
{R3 ⇔ R4} ;
57
3.4 Matrice di parita
AIII =
1 1 1 0 1
0 1 0 1 1
0 0 1 1 1
0 0 0 0 0
;
{R1 ⇒ R1 + R2} ;
AII =
1 0 1 1 0
0 1 0 1 1
0 0 1 1 1
0 0 0 0 0
;
{R1 ⇒ R1 + R3} ;
AI =
1 0 0 0 1
0 1 0 1 1
0 0 1 1 1
0 0 0 0 0
.
La matrice AI e totalmente ridotta e da essa si ricava la matrice G in cui sono presenti 3
colonne leading e quindi C ha dimensione k = 3.
58
3.4 Matrice di parita
G =
1 0 0 0 1
0 1 0 1 1
0 0 1 1 1
.
Da G eliminando le 3 leading colonne si ottiene la matrice X.
X =
0 1
1 1
1 1
.
Consideriamo adesso la matrice identita In−k = I2, posizioniamo le righe di X nelle righe
corrispondenti alle posizioni delle 1-leading colonne di G cioe nella 1a, 2a e 3a riga e nelle
rimanenti 4◦ e 5◦ riga poniamo le righe di I2. Si ottiene la matrice la matrice di parita H.
H =
0 1
1 1
1 1
1 0
0 1
.
Per ottenere la matrice generatrice del codice duale basta fare la trasposta di H, ovvero:
59
3.4 Matrice di parita
HT =
0 1 1 1 0
1 1 1 0 1
=
[XT In−k
].
Esempio 7
Consideriamo un codice di lunghezza 8 generato dall’insieme di parole S = {(11111111),
(11110000), (11001100), (10101010)} Determiniamo la matrice generatrice G e la matrice
di parita H.
Riduciamo totalmente la matrice:
AV I =
1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0
1 1 0 0 1 1 0 0
1 0 1 0 1 0 1 0
;
{R2 ⇒ R1 + R2 R3 ⇒ R3 + R1 R4 ⇒ R4 + R1} ;
AV =
1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
;
{R2 ⇔ R4} ;
60
3.4 Matrice di parita
AIV =
1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
;
{R1 ⇒ R1 + R2} ;
AIII =
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
;
{R1 ⇒ R1 + R3} ;
AII =
1 0 0 1 1 0 0 1
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
;
{R1 ⇒ R1 + R4} ;
61
3.4 Matrice di parita
AI =
1 0 0 1 0 1 1 0
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
.
La matrice AI e totalmente ridotta. Da essa si determina la matrice G.
G =
1 0 0 1 0 1 1 0
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
.
Costruiamo la matrice X eliminando le 4 colonne leading. La dimensione di C e k = 4.
X =
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
.
Consideriamo la matrice identita In−k = I4 e aggiungiamo i suoi elementi nella righe
corrispondenti alle colonne di G non eliminate.
62
3.4 Matrice di parita
H =
1 1 1 0
1 1 0 1
1 0 1 1
1 0 0 0
0 1 1 1
0 1 0 0
0 0 1 0
0 0 0 1
.
La matrice generatrice del codice duale di C e HT le cui n−k = 4 righe formano una base
per C⊥.
Nella dimostrazione del teorema 14 tramite una permutazione delle colonne si trasfor-
ma la matrice generatrice ridotta totalmente in una matrice del tipo G′ = [I, X]. Ci
si pone la domanda se per un qualunque codice C, di parametri (n, k, d), e sempre
possibile determinare una matrice del tipo G′ senza effettuare permutazioni delle sue
colonne. Esistono codici che non possono avere matrici generatrici poste nella forma
assunta dalla matrice G′, tale affermazione e giustificata dall’esempio seguente.
Esempio 8
Sia il codice lineare C avente base B = {001, 100}. Tutte le sue possibili matrici generatrici
sono:
G =
1 0 0
0 0 1
; G′ =
1 0 1
0 0 1
; G′′ =
1 0 1
1 0 0
; G′′′ =
0 0 1
1 0 1
;
63
3.4 Matrice di parita
GIV =
1 0 0
1 0 1
.
Nessuna di tale matrice ha la forma G = [I,X].
Se un codice C, di dimensione k, possiede una matrice generatrice che assume la
forma G =[
Ik X]
allora esso si chamera sistematico e una sua qualunque
parola v si puo esprimere nel modo seguente:
v = u ·[
I X]
=[
u uX]. (3.5)
I primi k bits di v, (cioe u), sono chiamati bits di ricezione , gli ultimi n− k bits
(cioe (uX)) bits di parita o di controllo.
I codici che non sono sistematici possono essere riconducibili a codici sistematici
mediante una o piu permutazioni delle colonne di una delle matrici G. Ad esempio:
G =
1 0 0
0 0 1
⇒ G =
1 0 0
0 1 0
.
Il codice sistematico ottenuto e detto equivalente al codice che lo ha generato in
quanto esso mantiene la stessa dimensione, distanza e lunghezza.
64
3.4 Matrice di parita
La matrice di parita di un codice lineare C permette di “controllare” se una parola w
ricevuta e una parola del codice utilizzato, infatti se w ∈ C essa non puo appartenere
a C⊥.
Teorema 15 Condizione necessaria e sufficiente affinche w ∈ C e che w ·H = 0.
Dim.
Se c1, c2, · · · , cn−k sono parole che individuano una base di C⊥ e tci e la parola
trasposta di ci, per 1 ≤ i ≤ n − k, allora la matrice H si puo scrivere nel seguente
modo:
H =[
tc1,tc2, · · · , tcn−k
].
Se w ∈ C poiche w · ci = 0 per qualunque ci con 1 ≤ i ≤ n− k, allora si ha:
w ·H = 0,
e il teorema e provato. 2
Un’altro importante risultato che lega la distanza con le righe della matrice di parita
e dato dal seguente teorema.
Teorema 16 Sia C un codice lineare e H la sua matrice di parita. Allora C ha dis-
tanza d se e solo se, comunque si considerino d−1 righe di H, esse sono linearmente
indipendenti ed esistono almeno d righe di H linearmente dipendenti.
65
3.5 Coset
Dim.
Sia d la distanza del codice lineare C, cio vuol dire che esiste una parola v ∈ C tale
che wt(v) = d. Inoltre si ha v ·H = 0 si ha quindi che le d righe di H corrispondenti
alle posizioni delle componenti di v in cui sono presenti bits di valore “1” sono
linearmente dipendenti.
Consideriamo adesso un’arbitraria parola w con wt(w) ≤ d − 1 (con peso minore
di d) allora si ha che w · H 6= 0 perche w /∈ C, ne segue quindi che comunque si
scelgono d−1 righe di H esse saranno sempre linearmente indipendenti e il teorema
e provato. Il viceversa e banalmente dimostrabile. 2
3.5 Coset
In questa sessione e presentato un sottoinsieme di Kn che si lega al concetto pre-
sente in algebra di “laterale” o “coset” (termine inglese). Il laterale nella seguente
trattazione e presentato come strumento di teoria dei codici.
Se C ⊂ Kn e un codice lineare di lunghezza n e u una qualunque parola di Kn che
puo anche non appartenere a C, allora si definisce coset di C, determinato da u,
l’insieme:
C + u = {v + u ∈ Kn ∀v ∈ C} .
Tale insieme contiene lo stesso numero di parole del codice cioe 2k, in particolare
se u e una parola di C chiaramente si ha che C + u = C, in caso contrario esso
sara diverso da C, ma non sara un sottospazio di Kn in quanto e evidente che non
contiene la parola nulla.
66
3.5 Coset
Esempio 9
Sia il codice C = (000, 111) ⊂ K3 e u = 101, l’insieme coset sara C + u = {101, 010} Se
consideriamo u′ = 111: C + u′ = {111, 000}.Si nota che per u′ ∈ C si ha: C+u′ = C. Sia u′′ = 010 si ha che C+u′′ = {010, 101} = C+u,
da cio segue che ad ogni parola di K3 non sempre corrispondono cosets differenti.
Il seguente teorema mostrera le principali proprieta dei cosets legati ad un codice
lineare C.
Teorema 17 Sia C un codice lineare di parametri (n, k, d) e siano u e v due parole
di Kn, allora valgono le seguenti otto proprieta:
1. Se u e nel coset C + v, allora C + u = C + v.
2. La parola u ∈ C + u.
3. Se u + v ∈ C allora u e v appartengono allo stesso coset.
4. Se u + v /∈ C, allora u e v appartengono a coset differenti.
5. Ogni parola di Kn e contenuta in uno ed un solo coset.
6. Tutti i coset hanno la stessa cardinalita: |C + u| = |C|. Da cio la cardinalita
di un coset e 2k.
7. Se C ha dimensione k ci sono esattamente 2n−k coset diversi di C, e ogni coset
contiene esattamente 2k parole.
8. C e un coset.
Dim.
Dimostriamo in sequenza le proprieta del teorema.
67
3.5 Coset
1. Se u ∈ C + v deve esistere una w ∈ C tale che u = w + v. Sia t ∈ C + v, allora
esiste un t′ ∈ C tale che t = t′ + v ed inoltre t = t′ + w + u. Poiche il codice
e lineare si ha che t′ + w ∈ C, segue che t ∈ C + u. Data l’arbitrarieta di t si
ha che qualunque parola di C + v essa appartiene anche a C + u e si ha che
C + u ⊇ C + v.
Sia p una generica parola appartenente a C + u, allora esiste un p′ tale che
p = p′ + u, con p′ ∈ C, inoltre p = p′ + w + v, ma p′ + w ∈ C, essendo p′ e w
parole del codice, ne segue che p ∈ C + v e C + v ⊇ C + u, deve quindi essere
C + u = C + v.
2. La dimostrazione e immediata perche la parola nulla appartiene a C.
3. Se u+ v ∈ C allora esiste una w ∈ C tale che w = u+ v, ma poiche u = w + v,
allora si ha che u ∈ C + v e per la prima proprieta del teorema si ha che
C + u = C + v.
4. Supponiamo per assurdo che u e v appartengono allo stesso coset C + w, cio
comporta che esiste una parola t′ ∈ C tale che u = t′ + w e esiste una parola
t′′ ∈ C tale che v = t′′+w, sommando si ha u+v = t′+ t′′+w+w = t′+ t′′, ma
C e lineare, quindi t′ + t′′ ∈ C e conseguentemente u + v ∈ C il che e assurdo.
5. Supponiamo per assurdo che esiste una parola w che appartiene a due cosets
C + u e C + v con C + u 6= C + v. Cio comporta che w ∈ C + u e per la
prima proprieta w ∈ C + u = C + w, ma anche w ∈ C + v = C + w da cio
C + u = C + v il che e assurdo.
Tale proprieta mostra che cosets distinti sono disgiunti.
6. La dimostrazione e immediata.
68
3.5 Coset
7. Le parole totali di Kn sono 2n mentre le parole di C sono 2k. Da cio il numero
di coset sara2n
2k= 2n−k.
8. La dimostrazione e immediata. 2
Esempio 10
Sia dato un codice C = {0000, 1011, 0101, 1110}. Una sua matrice generatrice e
G =
1 0 1 1
0 1 0 1
.
Il codice C e individuato dai parametri (4, 2, 2), quindi il numero di coset e 2n−k = 4 e
sono:
C =
0 0 0 0
1 0 1 1
0 1 0 1
1 1 1 0
.
Per determinare il secondo coset consideriamo la parola u1 = 1000 in K4 non appartenente
a C e aggiungiamo tale parola ogni parola di C.
69
3.5 Coset
u1 + C = 1000 + C =
1 0 0 0
0 0 1 1
1 1 0 1
0 1 1 0
.
Consideriamo adesso un’altra parola, u2 = 0100, non appartenente a C o a C + u1. Il
terzo coset sara:
u2 + C = 0100 + C =
0 1 0 0
1 1 1 1
0 0 0 1
1 0 1 0
.
Ripetendo lo stesso procedimento con la parola u3 = 0010, il quarto coset sara:
u3 + C = 0010 + C =
0 0 1 0
1 0 0 1
0 1 1 1
1 1 0 0
.
Dei quattro coset, l’unico che rappresenta un codice lineare e chiaramente il primo, essendo
C stesso.
70
3.5 Coset
Adesso sfruttando le proprieta dei cosets cerchiamo di individuare una tecnica utile
alla correzione di errori.
Consideriamo un codice lineare C e assumiamo che v sia la parola inviata e w
la parola ricevuta, l’errore associato e u = v + w, tale equazione e equivalente a
u + w = v ∈ C. Per la proprieta 3 del teorema 17 si ha che l’errore u e la parola
ricevuta w appartengono a uno stesso coset di C.
Poiche gli errori di minor peso sono quelli che hanno maggiore probabilita di verifi-
carsi, vediamo adesso come la tecnica MLD puo essere utilizzata per un codice
lineare C di cui conosciamo i suoi coset.
Ricevuta la parola w, se w · H = 0 allora la parola ricevuta appartiene al codice.
Se w · H 6= 0 allora ad essa e legato un errore che appartiene allo stesso coset cui
appartiene w. Tra tutte le parole appartenente al coset C + w si sceglie la parola u
di peso minore, cioe la piu probabile, tale parola prende il nome di coset leader.
Sommando u a w si ottiene la parola v = w + u, essa e la parola che ha la maggiore
probabilita di essere stata inviata.
Esempio 11
I coset leaders corrispondenti ad ogni singolo coset dell’esempio 10 sono:
1. il coset leader di C e 0000;
2. il coset leader di C + u1 e 1000;
3. il coset leader di C + u2 e 0100;
4. il coset leader di C + u3 e 0010.
Se w = 1101 e la parola ricevuta si verifica facilmente che w ∈ C + u1 = C + 1000 e
71
3.6 Sindrome
tale coset ha coset leader la parola (1000). La correzione della parola w e v = w + u =
1101 + 1000 = 0101.
Puo accadere che in un coset vi sono piu parole con uguale peso minimo, in tal caso
si puo adoperare la tecnica CMLD in cui si effettua una scelta tra le parole di peso
minore e si definisce un coset leader o la tecnica IMLD dove se w appartiene a un
coset dove vi sono piu di una parola di minore peso allora si richiede la ritrasmissione.
E importante sottolineare che per la prima volta si e riusciti a determinare l’errore
u soltanto tramite la conoscenza della parola trasmessa w e tramite esso si puo
effettuare la correzione.
Il procedimento di correzione appena descritto, nel caso in cui il numero degli ele-
menti di un codice C e elevato, puo comportare notevoli problemi di immagaz-
zinamento dati.
3.6 Sindrome
Proprio per ovviare ai problemi di immagazzinamento dati legati alla tecnica di
correzione di errore precedentemente illustrata in questa sessione viene introdotto il
concetto di sindrome di una parola di Kn.
Sia w ∈ Kn, si definisce sindrome di w la parola s = w ·H di Kn−k.
Esempio 12
Consideriamo il codice presentato nell’esempio 10 e sia la parola w = 1101. La matrice H
di C e:
72
3.6 Sindrome
H =
1 1
0 1
1 0
0 1
.
La sindrome di w e:
s = w ·H = 1101
1 1
0 1
1 0
0 1
= 11.
Quindi essendo s = w ·H 6= 0 per il teorema 15 si ha che w /∈ C e w ∈ C + 1000.
Consideriamo una qualunque parola w′ del coset C + 1000 e facile notare che la sua
sindrome sara sempre la stessa cioe:
s = w′ ·H = w′
1 1
0 1
1 0
0 1
= 11.
Il teorema seguente spiega i risultati ottenuti nell’ultima parte dell’esempio 12.
73
3.6 Sindrome
Teorema 18 Sia C un codice lineare di parametri (n, k, d). Siano u e w due parole
di Kn e H la sua matrice di parita, allora valgono le seguenti proprieta:
1. w ·H = 0 se e solo se w ∈ C.
2. u ·H = w ·H se e solo se w e u appartengono allo stesso coset.
3. Se u e l’errore di una parola ricevuta w allora u ·H e la somma delle righe di
H che corrispondono alla posizione dei bits alterati in trasmissione.
Dim.
1. La proprieta e vera per il teorema 15.
2. Dalla relazione:
w ·H = u ·H,
si ha:
w ·H + u ·H = 0,
e quindi:
(w + u) ·H = 0 ⇔ w + u ∈ C,
quindi w e u appartengono allo stesso coset.
3. Se u = w + v e l’errore legato a w allora e evidente che u ·H individua le righe
di H in cui e avvenuto un cambiamento di carattere nei bits corrispondenti
della parola inviata. 2
74
3.6 Sindrome
Dato che parole dello stesso coset hanno la stessa sindrome, mentre parole di coset
differenti hanno sindromi differenti, allora e possibile identificare un coset con la sua
sindrome corrispondente e a tale sindrome si puo associare il coset leader corrispon-
dente. Tale corrispondenza tra sindrome e coset leader permette di individuare una
tabella, detta SDA ( Standard Decoding Array).
Se C e un codice lineare di lunghezza n e dimensione k, allora 2n−k parole di
lunghezza n− k saranno ognuna la sindrome di ogni singolo coset.
Nell’esempio seguente vedremo una tabella SDA in cui il coset leader di ogni singolo
coset viene posto come prima componente di ogni singola riga, mentre la sindrome
corrispondente e posta come seconda componente della riga. Nel caso in cui piu
parole hanno stesso minor peso all’interno di un coset, allora, in tale esempio, e
utilizzata la tecnica CMLD.
Esempio 13
Coset leaders Sindrome u·H0000 00
1000 11
0100 01
0010 10
Riferendoci all’esempio 10 in cui abbiamo calcolato i coset del codice: C = {0000, 1011,
0101, 1110} si e costruita la tabella SDA.
Se w = 0101 allora w ·H = 00 che e la sindrome di 0000. Da cio v = w+u = 0101+0000 =
0101. Se w = 1100 allora w · H = 10 che e la sindrome di 0010. Da cio v = w + u =
1100 + 0010 = 1110.
75
Capitolo 4
Codici perfetti
4.1 Cardinalita di un codice C
In questa sessione sono presentate le relazioni esistenti tra i parametri che caratter-
izzano un codice C, cioe lunghezza, distanza e dimensione, e il numero di parole pre-
senti nel codice. Inoltre sono presentati particolari codici che in seguito assumeranno
notevole importanza.
Facciamo prima alcune considerazioni legate alla distanza tra parole differenti di Kn
e la distanza d di un codice C.
Sia v una parola di Kn, consideriamo il numero di differenti t-uple (t < n) di bits
distinte prese all’interno di v. Tramite il calcolo combinatorio si ha che tale numero
di t-uple e uguale a:
n
t
=
n!
t!(n− t)!=
n(n− 1) · · · (n− t + 1)
t!. (4.1)
76
4.1 Cardinalita di un codice C
Ci si pone la seguente domanda: qual’e il numero di parole di Kn che hanno distanza
1 da v?
Il problema si puo anche porre nel seguente modo: determinare il numero di parole
di Kn che differiscono da v soltanto per un bit. Chiaramente il numero di tali parole
e n =
n
1
. In generale determinare il numero di parole di Kn che hanno distanza
t, con t < n, da v e equivalente a determinare il numero di tutte le possibili t-uple
distinte di bits presenti in v, infatti se si individuano arbitrariamente in v t bits e si
cambiano i valori di tali bits da “0” a “1” o da “1” a “0”, si ottiene una nuova parola
che ha distanza t da v. Il numero di parole che hanno distanza t da v e esattamente n
t
.
Esempio 1
Sia v = 101110101 una parola di K9. Il numero di parole che hanno distanza 1 in K9 da v
e
9
1
= 9; Il numero di parole che hanno distanza 2 in K9 da v e
9
2
=
9 · 82
= 36;
Il numero di parole che hanno distanza 3 in K9 da v e
9
3
=
9 · 8 · 73 · 2 = 84.
Da quanto detto precedentemente e ricordando che
n
0
= 1 si ha il seguente
teorema.
77
4.1 Cardinalita di un codice C
Teorema 19 Se 0 ≤ t ≤ n e v e una parola di lunghezza n, appartenente ad un
codice C, allora il numero di parole di lunghezza n e distanza al piu t da v e:
N =
n
0
+
n
1
+
n
2
+ · · ·+
n
t
. (4.2)
2
Il precedente teorema permette di determinare per ogni parola v di un codice C,
avente distanza d e lunghezza n, una “sfera” in Kn di centro v e “raggio” t tale
che al suo interno si trovano esattamente N parole. Qui e usato il termine “sfera”
per facilitare la comprensione del lettore, ma se consideriamo le parole di Kn come
punti di uno spazio a n dimensioni il concetto di “sfera” e molto piu complesso e
rientra nel campo della geometria finita che esula da un corso di teoria dei codici.
Nel seguente teorema e mostrato che se la distanza di C e d = 2t+1, allora le “sfere”
che hanno come centro le parole del codice e raggio t sono tutte disgiunte.
Teorema 20 Sia C un codice avente distanza d = 2t+1 e lunghezza n, siano v e w
due distinte parole di C, allora non esiste alcuna parola c ∈ Kn tale che d(v, c) ≤ t
e d(w, c) ≤ t.
Dim.
Supponiamo per assurdo che esista una c ∈ Kn e due parole v, w ∈ C tali che
d(v, c) ≤ t e d(w, c) ≤ t, per la disuguaglianza triangolare si ha:
d(v, w) ≤ d(v, c) + d(c, w) ≤ t + t = 2t < 2t + 1 = d.
78
4.1 Cardinalita di un codice C
Si sono determinate due parole di C, v e w che hanno distanza minore della distanza
di C cioe d(v, w) < d, questo e assurdo. 2
Il risultato precedente permette di ottenere un limite superiore alla cardinalita | C |di un codice, tale limite e legato ai parametri n e d.
Teorema 21 (Limite di Hamming) Se C e un codice di lunghezza n e distanza
d = 2t + 1 allora si ha che:
| C | ·
n
0
+
n
1
+
n
2
+ · · ·+
n
t
≤ 2n, (4.3)
ovvero:
| C | ≤ 2n
n
0
+
n
1
+
n
2
+ · · ·+
n
t
. (4.4)
Dim.
Se si considera un’arbitraria parola v ∈ C, per il teorema (19), le parole che distano
al piu t da v sono:
N =
n
0
+
n
1
+
n
2
+ · · ·+
n
t
.
79
4.1 Cardinalita di un codice C
Inoltre, per il teorema 20, nessuna di tali parole ha distanza minore o uguale a t
da una qualsiasi altra parola presente in C. Il numero di parole distinte che hanno
distanza minore o uguale a t da ogni singola parola di C e:
| C | ·
n
0
+
n
1
+
n
2
+ · · ·+
n
t
.
Il numero di parole distinte in Kn e 2n, si ha allora che:
| C | ·
n
0
+
n
1
+
n
2
+ · · ·+
n
t
≤ 2n. (4.5)
Il teorema e provato. 2
Esempio 2
Sia un codice C con n = 6 e d = 3, quindi essendo d = 2t + 1 si ha che t = 1. Per il
teorema di Hamming si ha:
|C| ≤ 2n
n
0
+
n
1
=26
1 + 6< 10. (4.6)
80
4.1 Cardinalita di un codice C
Poiche un codice binario deve contenere un numero di parole che e una potenza di due,
allora | C | ≤ 8. Questo significa che in un codice C avente distanza d = 3 e lunghezza
n = 6 al massimo vi sono otto parole.
Il teorema seguente mette in relazione le grandezze (n, k, d) che caratterizzano un
codice lineare.
Teorema 22 (Limite di Singleton) Per un codice lineare (n,k,d) si ha che d −1 ≤ n− k.
Dim.
La matrice di parita H di un codice lineare C e definita come:
H =
X
In−k
.
In essa non vi possono essere piu di n − k righe linearmente indipendenti, data la
presenza di In−k, le cui righe costituiscono una base per Kn−k. Per il teorema 16
del capitolo 3, si ha che in H comunque si scelgono arbitrariamente d− 1 righe esse
sono linearmente indipendenti, quindi segue che:
d− 1 ≤ n− k, (4.7)
81
4.1 Cardinalita di un codice C
e il teorema e provato. 2
Poniamoci adesso il seguente problema, dati i parametri (n, k, d) vediamo se e pos-
sibile determinare un codice lineare C le cui parole hanno lunghezza n, la sua
dimensione e k e la sua distanza e d.
Un codice lineare puo essere individuato mediante la sua matrice di parita, cioe
mediante una matrice H (n × (n − k)), essa ha la caratteristica di avere almeno
d righe linearmente dipendenti e comunque si scelgono d − 1 sue righe esse sono
linearmente indipendenti. Se si riesce a determinare una tale matrice H, dato che
essa e la matrice trasposta della matrice generatrice del codice duale GC⊥ =t H, da
essa, mediante l’algoritmo presentato nel capitolo 3, si puo determinare la matrice
di parita HC⊥ del codice duale che individua una matrice generatrice G =t HC⊥
(n× (n− k)) del codice C avente parametri (n, k, d).
Figura 4.1:
Nel seguente esempio e mostrato un metodo utile a determinare la matrice di parita
di un codice lineare avente parametri (n, k, d), tale tecnica in seguito permettera di
formulare il teorema di Gilbert - Varshamov.
82
4.1 Cardinalita di un codice C
Esempio 3
Vediamo se e possibile determinare un codice lineare C di parametri (15, 6, 5). Indi-
viduiamo la sua matrice di parita H (15× 9). Essa puo contenere la matrice I9, costituita
da righe linearmente indipendenti. Bisogna determinare altre sei righe di K9 in modo tale
che vi siano almeno 5 righe linearmente dipendenti e comunque si scelgono in essa 4 righe
esse devono essere linearmente indipendenti.
Cerchiamo di individuare la decima riga da aggiungere alle righe di I9, iniziamo con es-
cludere la parola nulla di K9, in quanto essa stessa e linearmente dipendente, inoltre e
necessario escludere qualsiasi parola contenuta in I9 e tutte le parole di K9 ottenute da
combinazioni lineari di due o tre righe di I9, quindi e possibile aggiungere una decima riga
se il numero totale delle parole in K9, cioe 29, e strettamente maggiore del numero di parole
che necessariamente devono essere escluse. Quindi deve valere la seguente disuguaglianza.
9
0
+
9
1
+
9
2
+
9
3
< 29.
La disuguaglianza e valida in quanto 1 + 9 + 36 + 84 < 29, quindi e possibile aggiungere
una decima riga. Sia essa la riga 111100000 che formera la matrice,
H10 =
I9
111100000
.
E importante notare come la matrice H10 ha gia d = 5 righe linearmente dipendenti, cioe la
prima, la seconda, la terza, la quarta e la decima. Determiniamo adesso H11 aggiungendo
a H10 un’undicesima riga mantenendo le proprieta richieste precedentemente, cioe in H11
non possono esistere 4 righe linearmente dipendenti. La seguente disuguaglianza, ottenuta
dalle precedenti considerazioni,
83
4.1 Cardinalita di un codice C
10
0
+
10
1
+
10
2
+
10
3
< 29,
e ancora valida e quindi aggiungiamo la riga 100011100, otteniamo la matrice H11. Iteran-
do questa procedura otteniamo la matrice di parita di C di parametri (15, 6, 5).
H10 =
I9
111100000
101000011
100011100
101000011
010101110
011000101
.
Teorema 23 (Limite di Gilbert-Varshamov) Un codice lineare C con parametri
(n, k, d) esiste se:
n− 1
0
+
n− 1
1
+ · · ·+
n− 1
d− 2
< 2n−k.
Dim.
Il codice C si puo determinare mediante la sua matrice di parita H, cioe una matrice
(n× (n−k)). Supponiamo di aver determinato una matrice Hi, dove il primo valore
che i puo assumere e n − k cioe Hn−k = In−k. In generale consideriamo un i, con
n − k ≤ i ≤ n − 1, Hi deve avere la proprieta che comunque si prendono in essa
d− 1 righe esse devono essere linearmente indipendenti. Cerchiamo di determinare
84
4.1 Cardinalita di un codice C
una matrice del tipo Hi+1 aggiungendo una riga a Hi. Tale riga deve essere scelta in
Kn−k e deve essere differente dalla parola nulla, e necessario poi escludere in Kn−k
tutte le parole che sono righe in Hi e tutte le parole che risultano combinazione
lineare di j righe di Hi con 2 ≤ j ≤ d − 2. Il numero delle righe che non possono
essere aggiunte in Hi e che appartengono a Kn−k e dato da:
Ni =
i
0
+
i
1
+
i
2
+ · · ·+
i
d− 2
.
Se Ni < 2n−k allora sara possibile determinare una matrice Hi+1. Se i + 1 < n,
allora ripetiamo quanto fatto precedentemente per Hi in modo da poter aggiungere
una nuova riga a Hi+1 e formare una matrice Hi+2. Si ha che Ni+1 e uguale a:
Ni+1 =
i + 1
0
+
i + 1
1
+
i + 1
2
+ · · ·+
i + 1
d− 2
.
Ancora una volta se Ni+1 < 2n−k allora sara possibile determinare la matrice Hi+2.
E importante notare che la disuguaglianza Ni < Ni+1 e valida. Il procedimento
descritto, se possibile, si puo iterare fino a che i = n−1, in tal caso se e anche valida
la diseguaglianza seguente,
85
4.2 Codici MDS
Nn =
n− 1
0
+
n− 1
1
+
n− 1
2
+ · · ·+
n− 1
d− 2
< 2n−k, (4.8)
allora sara possibile determinare la matrice H di C. Inoltre poiche in generale vale
sempre la disuguaglianza Ni < Ni+1 per n− k ≤ i ≤ n− 1, e possibile determinare
la matrice di parita H di C solo se e verificata la disuguaglianza (4.8) e il teorema
e provato. 2
4.2 Codici MDS
La diseguaglianza (4.7) mette in relazione tutti i parametri che caratterizzano un
codice C. Se tale diseguaglianza, per un codice lineare C, vale come eguaglianza,
allora essa caratterizza un insieme di codici in cui, fissati n e k, si ha che la loro
distanza puo assumere il suo valore massimo cioe d = n−k+1. Tali codici prendono
il nome di codici MDS dall’inglese “Maximum Distance Separable”.
I codici MDS assumono una notevole importanza in quanto a tutt’oggi sono ampia-
mente utilizzati nella lettura dati (lettori CD o DVD), tra i piu importanti si ricor-
dano i codici Reed-Solomon che si rimandano ad un corso di teoria dei codici piu
avanzato.
Il teorema seguente identifica una serie di proprieta che caratterizzano i codici MDS
e che sono tra esse equivalenti.
86
4.2 Codici MDS
Teorema 24 Per ogni codice lineare C (n, k, d) le seguenti proposizioni sono equiva-
lenti:
1. d = n− k + 1
2. Comunque si scelgano n− k righe di H esse sono linearmente indipendenti.
3. Comunque si scelgano k colonne della matrice generatrice G, esse sono linear-
mente indipendenti.
4. C e un MDS
Dim.
1. Se d = n − k + 1, dalla definizione, si ha che C e un codice MDS e vale il
viceversa.
2. Supponiamo di avere una matrice di parita H avente la proprieta che co-
munque si individuano in essa n− k righe esse sono linearmente indipendenti.
Per il teorema 16 del capitolo 3, la matrice H ha la proprieta che comunque si
scelgono d− 1 righe esse sono linearmente indipendenti e ve ne sono d linear-
mente dipendenti, allora si ha che n− k ≤ d− 1, ma per il teorema 22 anche
la disuguaglianza d− 1 ≤ n− k e valida, quindi deve essere d− 1 = n− k. E
evidente che vale anche il viceversa.
3. Sia C un codice lineare MDS, allora si ha che n−d = k−1. Se tale eguaglianza
e valida allora si ha che in ogni parola di C non possono esistere piu di k−1 zeri.
Infatti una parola di minimo peso del codice ha esattamente n− k + 1 bits di
valore “1” ed esattamente k−1 bits di valore “0”. Sia G la matrice generatrice
di C, supponiamo per assurdo che esistano k colonne linearmente dipendenti.
Se si estraggono tali colonne, esse individuano una matrice quadrata A (k ×
87
4.3 Codici estesi
k) le cui k colonne sono linearmente dipendenti, per un teorema di algebra
lineare, si ha che anche le k righe di A sono linearmente dipendenti (dimensione
dello spazio delle righe e uguale a quello delle colonne). E possibile quindi
determinare una parola u ∈ Kk, diversa dalla parola nulla, tale che u · A =
0 ∈ Kk e segue anche che la parola del codice u · G possiede k zeri, questo e
un assurdo.
4. Se C e MDS allora banalmente valgono tutte le tre condizioni precedenti. 2
4.3 Codici estesi
Consideriamo un codice lineare C di parametri (n, k, d) e ad ogni parola di C si
aggiunge il bit di parita, cioe si aggiunge un bit in modo tale che ogni sua singola
parola abbia peso pari. Il codice cosı ottenuto si denota con C∗, esso ha lunghezza
n + 1 ed e detto codice esteso di C.
La matrice generatrice di un codice esteso si puo rappresentare nel seguente modo
G∗ = [G, b], dove la sottomatrice G e la matrice generatrice di C e b e un vettore
colonna, con k componenti ciascuno dei quali assume valore “1” se il numero di bits
di valore “1” della parola corrispondente in G e dispari e valore “0” in caso contrario.
La matrice di parita H∗ del codice esteso C∗ puo essere costruita tramite la matrice
G∗ mediante il noto algoritmo oppure in modo piu semplice dalla matrice di parita
H del codice originario C. La matrice di parita di C∗ sara:
H∗ =
H J
0 1
, (4.9)
88
4.3 Codici estesi
dove J e un vettore colonna formato da bits che assumono tutti valore “1”. Per
provare che tale matrice e effettivamente la matrice di parita di C∗ basta provare
che il prodotto riga per colonna e G∗ ·H∗ = 0.
G∗ ·H∗ =[
G, b]· H J
0 1
=
[GH,GJ + b
],
il prodotto G ·H = 0, essendo G e H le matrici generatrice e di parita del codice C.
Consideriamo adesso il temine GJ + b, osserviamo che se ri e la riga i-esima della
matrice G allora si ha che:
ri · J =
1 se ri contiene un numero dispari di bits di valore “1”;
0 se ri contiene un numero pari di bits di valore “1”.
Se indichiamo con bi la componente i-esima del vettore b, essa assumera il valore:
bi =
1 se ri · J = 1;
0 se ri · J = 0.
Si ha dunque che GJ + b = 0 e quindi H∗ e la matrice di parita di C∗.
89
4.3 Codici estesi
Esempio 4
Consideriamo un codice lineare C avente matrici generatrice e di parita:
G =
1 0 0 1 0
0 1 0 0 1
0 0 1 1 1
, H =
1 0
0 1
1 1
1 0
0 1
.
Definiamo le matrici G∗ e H∗ del codice esteso di C aggiungendo il bit di parita ad ogni
riga di G e utilizzando la (4.9).
G∗ =
1 0 0 1 0 0
0 1 0 0 1 0
0 0 1 1 1 1
, H∗ =
1 0 1
0 1 1
1 1 1
1 0 1
0 1 1
0 0 1
.
90
4.4 Codici perfetti
4.4 Codici perfetti
Un codice C di lunghezza n e distanza d = 2t + 1 si dice perfetto se si ha che:
| C | = 2n
n
0
+
n
1
+
n
2
+ · · ·+
n
t
. (4.10)
Poiche la cardinalita di un codice binario deve essere uguale ad una potenza di 2
allora e immediata la seguente condizione necessaria.
Teorema 25 Condizione necessaria per l’esistenza di un codice perfetto e che:
n
0
+
n
1
+
n
2
+ .... +
n
t
,
sia potenza di 2.
Due codici perfetti che sono detti banali sono il codice C = {(000...000), (111...111)},le cui parole appartengono a Kn e il codice C = Kn.
91
4.4 Codici perfetti
Esempio 5
• Verifichiamo che il codice con n = 7 e d = 3 e perfetto.
d = 2t + 1 = 3 ⇒ t = 1 e quindi si ha che:
|C| = 27
7
0
+
7
1
=27
23= 24 = 16.
Il codice C e perfetto.
• Verifichiamo che il codice con n = 23 e d = 7 sia un codice perfetto. Se d = 2t+1 = 7,
allora segue che t = 3 e si ha:
|C| = 223
23
0
+
23
1
+
23
2
+
23
3
=223
211= 212 = 4096.
Il secondo codice dell’esempio individua un codice che in seguito sara trattato in dettaglio,
ma come codice esteso.
Il seguente teorema fu provato da Van Lint nel 1963 e da’ precise indicazioni sullo
spettro di esistenza, legato al parametro n, dei codici perfetti. In questi appunti e
omessa la dimostrazione.
92
4.4 Codici perfetti
Teorema 26 (Van Lint) Se C e un codice perfetto non banale di lunghezza n e
distanza d = 2t + 1, allora o n = 23 e d = 7, oppure n = 2r − 1 (per r ≥ 2) e d = 3.
2
Teorema 27 Se C e un codice perfetto di lunghezza n e distanza d = 2t + 1, allora
C corregge tutti gli errori di peso minore o uguale a t. 2
4.4.1 Codice di Hamming
Un codice lineare di lunghezza n = 2r − 1, con r ≥ 2, avente una matrice di parita
H le cui righe hanno lunghezza r e detto codice di Hamming.
In un codice di Hamming la matrice H e del tipo ((2r−1)× r). Se consideriamo che
le parole distinte di lunghezza r sono 2r, allora, se si esclude la parola nulla, si ha
che tutte le altre parole di lunghezza r sono tutte presenti nelle righe di H, quindi
comunque si considerano due distinte righe di H esse sono linearmente indipendenti,
inoltre in H sono presenti le righe 10000 · · · 000, 01000 · · · 000 e 11000 · · · 000, di
lunghezza r, e chiaro che esse sono linearmente dipendenti, segue che i codici di
Hamming hanno distanza d = 3 e per il teorema 26 essi sono dei codici perfetti.
Esempio 6
La matrice di parita di un codice di Hamming con r = 3 (n = 2r − 1 = 7) e:
93
4.4 Codici perfetti
1 1 1
1 1 0
1 0 1
0 1 1
1 0 0
0 1 0
0 0 1
.
La sua matrice generatrice e:
G =
1 0 0 0 1 1 1
0 1 0 0 1 1 0
0 0 1 0 1 0 1
0 0 0 1 0 1 1
.
Dato l’intero positivo r e il suo codice di Hamming corrispondente C sappiamo che
la relazione tra le dimensioni di C e il suo codice duale C⊥ e:
dimC + dimC⊥ = n,
Poiche dimC⊥ = r ed inoltre n = 2r − 1, allora si ha che:
k = dimC = 2r − 1− r.
La cardinalita del codice di Hamming C e:
94
4.4 Codici perfetti
| C | = 2k = 22r−1−r
Gli stessi risultati precedentemente ottenuti si possono ricavare considerando che C
e un codice perfetto con d = 2t + 1 = 3 e t = 1 allora si ha che:
| C | = 2n
n
0
+
n
1
=22r−1
1 + 2r − 1= 22r−1−r.
Sia un codice di Hamming C di lunghezza n = 2r − 1, se si considera una parola v
di Kn di peso uno, essa certamente non appartiene a C, poiche d = 3, e la si somma
ad un’altra parola w distinta di peso uno, allora si ottiene una parola di peso due
che non appartiene a C, quindi v e w sono due parole che appartengono a coset
differenti. Il numero di coset di C e pari a 2r, quindi le 2r − 1 parole di lunghezza
n = 2r − 1 e peso uno piu la parola nulla formano i coset leaders di un codice di
Hamming C.
In generale un codice di Hamming ha la seguente tabella SDA:
COSET LEADER u SINDROME u ·H0000 · · · 0000 00 · · · 00
I2r−1 H
95
4.4 Codici perfetti
Esempio 7
La tabella SDA del codice di Hamming dell’esempio 6 e qui sotto rappresentata.
COSET LEADER u SINDROME u ·H0000000 000
1000000 111
0100000 110
0010000 101
0001000 011
0000100 100
0000010 010
0000001 001
4.4.2 Codice di Golay esteso
In questa sessione e presentato un codice avente come parametri (24, 12, 8), esso e
generato dal codice perfetto di parametri (23, 11, 7) e si chiama codice di Golay
esteso .
Il codice di Golay esteso ha una notevole importanza perche e stato ampiamente
utilizzato dall’ente spaziale NASA negli anni ’80 soprattutto nelle trasmissioni delle
sonde Voyager.
Per definire tale codice e necessario costruire la matrice B1 di tipo (11× 11) ottenu-
96
4.4 Codici perfetti
ta dalla riga di 11 caratteri 11011100010, le successive righe di B1 sono ottenute
mediante lo spostamento (“shift”) del primo bit nell’ultima posizione.
B1 =
1 1 0 1 1 1 0 0 0 1 0
1 0 1 1 1 0 0 0 1 0 1
0 1 1 1 0 0 0 1 0 1 1
1 1 1 0 0 0 1 0 1 1 0
1 1 0 0 0 1 0 1 1 0 1
1 0 0 0 1 0 1 1 0 1 1
0 0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1 0
0 1 0 1 1 0 1 1 1 0 0
1 0 1 1 0 1 1 1 0 0 0
0 1 1 0 1 1 1 0 0 0 1
(4.11)
Consideriamo adesso un’estensione B (12× 12) della matrice B1 nel seguente modo:
97
4.4 Codici perfetti
B =
B1 J
JT 0
=
1 1 0 1 1 1 0 0 0 1 0 1
1 0 1 1 1 0 0 0 1 0 1 1
0 1 1 1 0 0 0 1 0 1 1 1
1 1 1 0 0 0 1 0 1 1 0 1
1 1 0 0 0 1 0 1 1 0 1 1
1 0 0 0 1 0 1 1 0 1 1 1
0 0 0 1 0 1 1 0 1 1 1 1
0 0 1 0 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 1 1 0 0 1
1 0 1 1 0 1 1 1 0 0 0 1
0 1 1 0 1 1 1 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1 1 0
. (4.12)
Definiamo inoltre la matrice generatrice del codice di Golay esteso:
G =[
I12, B],
Il codice di Golay esteso gode delle proprieta che sono enunciate nel seguente teore-
ma.
Teorema 28 Un codice di Golay esteso C ha le seguenti proprieta:
1. Il codice C ha una lunghezza n = 24, dimensione k = 12 e | C | = 212 = 4096
parole.
98
4.4 Codici perfetti
2. La matrice B e una matrice simmetrica, cioe BT = B.
3. Due qualunque righe ri e rj di B sono tra loro ortogonali, cioe ri · rj = 0.
4. La matrice di parita di C e H =
B
I
.
5. Esiste un’altra matrice di parita per C cioe H ′ =
I
B
.
6. C e autoduale cioe C = C⊥.
7. La distanza di C e d = 8
8. Il codice C e un codice 3-correttore, cioe corregge tutti gli errori u tali che
wt(u) ≤ 3.
Dim.
Dimostriamo le proprieta del teorema in sequenza.
1. La dimostrazione e evidente osservando le caratteristiche della matrice gene-
ratrice.
2. La matrice B e evidentemente simmetrica, cio e dovuto al metodo della sua
costruzione.
3. Per provare tale proprieta basta eseguire i prodotti ri · rj, con i 6= j e 1 ≤i, j ≤ 12, e constatare la loro ortogonalita.
4. Per dimostrare che H e una matrice di parita si procede nel modo seguente:
G ·H =[
I, B] B
I
= B + B = 0.
99
4.4 Codici perfetti
5. Per dimostrare che H ′ e una matrice di parita si procede nel modo seguente:
G ·H ′ =[
I, B] I
B
= I + BBT = I + I = 0.
6. Poiche H ′ = GT , allora il codice di Golay e un codice autoduale, cioe il suo
duale e esso stesso.
7. Consideriamo una parola v di C ottenuta dalla somma di due righe distinte
di G v = ri + rj con i 6= j. Poiche le due righe sono ortogonali, allora ri e rj
hanno un numero pari di bits “1” posti nelle stesse componenti, pertanto:
wt(v) = wt(ri) + wt(rj)− 2(2x) = wt(ri) + wt(rj)− 4x,
dove 2x e il numero pari di bits di valore “1” posti nelle stesse componenti di
ri e rj, inoltre tali righe hanno un peso uguale a 8 o 12, quindi il peso di v e
un multiplo di 4.
Consideriamo adesso la parola v′ = v + rk, dove rk e un’altra qualunque riga
di G e v = ri + rj. Osserviamo che:
rk · v = (ri + rj) · rk = rk · ri + rk · rj = 0 + 0 = 0,
quindi rk e v sono ortogonali, con analoghe considerazioni fatte in precedenza
si ha che:
wt(v′) = wt(ri + rj) + wt(rk)− 4y,
dove 2y e il numero pari di bits di valore “1” presenti nelle stesse componenti
in v e rk. Una generica combinazione di righe di G permette di ottenere
100
4.4 Codici perfetti
una generica parola w di C e anch’essa, con analoghi ragionamenti fatti in
precedenza, ha un peso che e un multiplo di 4. Nella matrice G sono presenti
righe di peso 8 e 12, e necessario provare che non esistono parole di C di peso
4.
Supponiamo per assurdo che la parola w di C ha peso 4. Il codice C e
autoduale, allora ogni sua parola si puo ottenere dalle due diverse matrici
generatrici di G =[
I, B]
e G′ =[
B, I]
cioe si ha:
w = u1
[I, B
]=
[u1, u1B
],
e
w = u2
[B, I
]=
[u2B, u2
].
Dato che wt(w) = 4, supponendo che wt(u1) ≥ 2 (cioe che i primi dodici bit
di w contengano due o piu bit di valore 1), allora deve essere necessariamente
wt(u1B) ≤ 2 che equivale a dire wt(u2) ≤ 2, cio perche w si puo scrivere
sia mediante l’uso di G che di G′; nel caso contrario si ha che wt(u1) ≤ 2.
Facilmente si puo calcolare che il peso della somma di due righe di B e maggiore
o uguale a quattro, allora si ha:
wt(w) = wt(ui) + wt(uiB) ≥ 1 + 4 = 5,
dove il valore i puo assumere il valore 1 o 2, ma cio e assurdo in quanto
wt(w) = 4 e la proprieta e provata.
8. Tale proprieta e evidende essendo d = 8. 2
101
4.4 Codici perfetti
Abbiamo visto, dalla proprieta 8 del teorema precedente, che il codice di Golay
esteso e un codice 3-correttore, cioe corregge tutti gli errori di peso minore o uguale
a tre.
Ci si propone adesso di definire un algoritmo per la correzione di tali errori. Se w
e la parola ricevuta, e u l’errore utilizzato per la correzione si ha che wt(u) ≤ 3.
L’errore u puo essere denotato mediante la seguente scrittura u =[
u1, u2
], dove
u1 e u2 hanno lunghezza 12 (l (ui) = 12 per i = 1 e 2). Poiche wt(u) ≤ 3, allora
deve essere wt(u1) ≤ 1 oppure wt(u2) ≤ 1. Indichiamo con s1 la sindrome di w, se
si usa la matrice di parita H =
I
B
, allora si ha che:
s1 = w ·H = u ·H =[
u1, u2
]· I
B
= u1 + u2B.
Consideriamo i seguenti due casi.
Primo caso
Se wt(u2) ≤ 1, cioe esso puo assumere i valori 0 e 1.
• Se wt(u2) = 0 segue che u2B = 0 e quindi risulta s1 = u1 + 0, con wt(u1) ≤ 3.
In questo caso l’errore e u = [s1, 0]. E facile verificare che tale errore ha peso
minore o uguale a tre e ha sindrome uguale a w ·H, quindi e un coset leader.
• Se wt(u2) = 1 segue che u2B individua una riga bj di B e si ha s1 = u1 + bj e
conseguentemente si ha che u1 = s1 + bj.
Si cerca quindi di determinare una riga bj per cui si ha che wt(u1) = wt(s1 +
bj) ≤ 2 ( ricordiamo che wt(u) ≤ 3), se tale bj esiste, allora l’errore e u =
[s1 + bj, ej] ed esso ha la stessa sindrome di w infatti:
102
4.4 Codici perfetti
u ·H =[
s1 + bj, ej
]· I
B
= s1 + bj + bj = s1
.
Secondo caso
Consideriamo adesso la sindrome di w usando la matrice di parita
H ′ =
B
I
, allora s2 = w ·H ′ =
[u1, u2
]· B
I
= u1B + u2.
Se wt(u1) ≤ 1, allora wt(u1) puo assumere i valori 0 e 1.
• Se wt(u1) = 0 segue che u1B = 0 e quindi risulta s2 = 0 + u2, con wt(u2) ≤ 3.
In questo caso l’errore e u = [0, s2]. Anche in questo caso si puo verificare che
tale errore ha peso minore o uguale a tre e ha sindrome uguale a w ·H ′, esso
e quindi un coset leader.
• Se wt(u1) = 1 segue che u1B individua una riga bi di B, quindi s2 = u2 + bi e
conseguentemente u2 = s2 + bi.
Si cerca quindi di determinare una riga bi per cui si ha che wt(u2) = wt(s2 +
bi) ≤ 2, se tale bi esiste, allora l’errore e u = [ei, s1 ·B + bi], ed esso ha la
stessa sindrome di w infatti:
u ·H ′ =[
ei, s1 ·B + bi
]· B
I
= bi + s2 + bi = s2.
Da questa tecnica di decodifica e possibile determinare un algoritmo di decodifica
per il codice di Golay esteso.
103
4.4 Codici perfetti
Osserviamo che essendo B = BT , allora B2 = B ·BT = I ed e lecito scrivere:
s1 ·B = (u1 + u2B) ·B = u1B + u2B2 = u1B + u2 = s2. (4.13)
Cio significa che, calcolata la sindrome s1 si puo facilmente determinare la sindrome
s2.
Algoritmo di decodifica
1. Calcolo della sindrome s1 = w ·H = u1 + u2B.
2. Se wt(s1) ≤ 3 allora u =[
s1, 0]
(caso in cui wt(u2) = 0).
3. Se wt(s1 + bj) ≤ 2 per qualche riga bj di B, allora u =[
s1 + bj, ej
], dove
ej e la parola di lunghezza 12 con un bit di valore “1” nell’j-esima posizione,
tutti gli altri bits hanno valore “0”.
4. Calcolo della sindrome s2 = w ·H ′ = s1 ·B.
5. Se wt(s1 ·B) ≤ 3 (caso in cui wt(u1) = 0), allora u =[
0, s1B].
6. Se wt(s1B + bi) ≤ 2 per qualche riga bi di B, allora u =[
ei, s1B + bi
].
7. Se u non e determinato, allora si richiede la ritrasmissione.
8. Fine. 2
104
4.4 Codici perfetti
Esempio 8
Sia la parola ricevuta w = 101111101111, 010010010010. Calcoliamo la sindrome:
s = w ·H = w
I
B
= 101111101111 + 001111101110 = 100000000001,
osserviamo che wt(s) = 2 ≤ 3. Pertanto:
u =[
s, 0]
= 100000000001, 000000000000.
La parola che con maggiore probabilita e stata inviata e:
v = w + u = 001111101110, 010010010010.
Esempio 9
Sia la parola ricevuta w = 001001001101, 101000101000. Calcoliamo la sindrome:
s = w ·H = w
I
B
= 001001001101 + 111000000100 = 110001001001,
osserviamo che wt(s) = 5 > 3. Pertanto dal passo 3 dell’algoritmo di decodifica si ha:
s + b1 = 000110001100 ⇒ wt(s + b1) = 4 > 3;
s + b2 = 011111000010 ⇒ wt(s + b2) = 6 > 3;
s + b3 = 101101011110 ⇒ wt(s + b3) = 8 > 3;
s + b4 = 001001100100 ⇒ wt(s + b4) = 4 > 3;
s + b5 = 000000010010 ⇒ wt(s + b5) = 2 < 3.
Quindi:
105
4.4 Codici perfetti
u =[
s + b5, e5
]= 000000010010, 000010000000.
La parola che con maggiore probabilita e stata inviata e:
v = w + u = 001001011111, 101010101000.
106
Capitolo 5
Codici ciclici
5.1 Polinomi su K
In questo capitolo e mostrato come una parola di un codice C di lunghezza n puo
essere rappresentata mediante polinomi di grado n− 1 su K, ma prima mostriamo
alcune proprieta dei polinomi a coefficienti in K, cioe dell’insieme K[x], i cui elementi
sono denotati con la simbologia f(x), g(x), p(x) ecc. ecc. Consideriamo un generico
polinomio di grado n di K[x].
f(x) = a0 + a1x + a2x2 + · · ·+ an−2x
n−2 + an−1xn−1 + anx
n.
In K[x] puo essere considerata la classica operazione di somma tra polinomi. Poiche
in K si ha che 1 + 1 = 0, allora segue che xk + xk = 0, tutto cio fa si che il grado
della somma di due polinomi f(x) + g(x) non ha sempre il massimo tra i gradi dei
polinomi f(x) e g(x).
107
5.1 Polinomi su K
Esempio 1
Siano i polinomi di K[x] f(x) = 1 + x + x4 e g(x) = x2 + x4, si ha che:
f(x) + g(x) = 1 + x + x2,
e evidente che il polinomio somma ha grado 2 minore di 4 cioe il massimo grado dei
polinomi f(x) e g(x).
Siano adesso i polinomi l(x) = 1 + x2 + x3 e p(x) = x + x2 + x4, si ha:
l(x) + p(x) = 1 + x + x3 + x4,
in questo caso invece il polinomio somma ha grado uguale al massimo grado dei due
polinomi.
Dagli esempi precedenti si puo affermare che nell’operazione di somma tra due
generici polinomi f(x) e g(x) di K[x] si ha che:
deg(f(x) + g(x)) ≤ max {deg(f(x)), deg(g(x))} .
Nell’operazione di somma l’elemento neutro e il polinomio nullo, inoltre considerato
un generico polinomio g(x) di K[x], dato che g(x) + g(x) = 0, allora e evidente che
l’opposto di tale polinomio e il polinomio stesso.
Consideriamo in K[x] la classica operazione di prodotto di cui si ha un’applicazione
nell’esempio seguente.
Esempio 2
Siano i polinomi f(x) = 1 + x + x3 + x4 e g(x) = x + x2 + x3 consideriamo il prodotto tra
tali polinomi:
108
5.1 Polinomi su K
f(x) · g(x) = (x + x2 + x3) + x(x + x2 + x3) + x3(x + x2 + x3) + x4(x + x2 + x3) = x + x7.
Consideriamo adesso il quadrato della somma di due polinomi osserviamo che:
[f(x) + g(x)]2 = f 2(x) + f(x)g(x) + f(x)g(x) + g2(x) = f 2(x) + g2(x).
Cio significa che nel quadrato della somma di due polinomi di K[x] non si ha il
doppio prodotto.
Consideriamo adesso i polinomi f(x) e h(x) con h(x) 6= 0, allora esiste un unico
polinomio q(x) ed unico polinomio r(x), con deg(r(x)) < deg(h(x)), tali che:
f(x) = h(x)q(x) + r(x). (5.1)
Il polinomio q(x) e detto quoziente, mentre r(x) resto.
Esempio 3
Sia f(x) = x + x2 + x6 + x7 + x8 e h(x) = 1 + x + x2 + x4, si ha che:
109
5.2 Parole di C e polinomi
Quindi f(x) = h(x)(x3 + x4) + (x + x2 + x3) e in particolare il quoziente e q(x) = x3 + x4,
il resto r(x) = x + x2 + x3, e possibile notare che deg(r(x)) < deg(h(x)) = 4.
5.2 Parole di C e polinomi
In questa sessione viene messa in corrispondenza una parola di Kn con un polinomio
di grado n−1 su K, inoltre si fa vedere come si possono rappresentare tutte le parole
di un codice C mediante i polinomi di K[x]n−1, cioe l’insieme di polinomi su K con
grado minore o uguale a n− 1.
Consideriamo il polinomio f(x) = a0 + a1x + a2x2 + .... + an−1x
n−1 che ha grado
al piu n − 1, si ricorda che i coefficienti ai assumono valori su K e alcuni possono
assumere valore “0”. A f(x) facciamo corrispondere la parola di lunghezza n v =
a0a1a2....an−1. Si e quindi definita una corrispondenza biunivoca tra i polinomi di
K[x]n−1 e le parole di Kn.
Esempio 4
Sia n = 5, consideriamo il polinomio di K[x]4 f(x) = 1+x2 +x4 ad esso si puo associare la
parola v = 10101, mentre al polinomio g(x) = 1 + x si puo associare la parola w = 11000.
Siano f(x) e h(x) due polinomi con h(x) 6= 0, se si puo scrivere f(x) = h(x)q(x) +
r(x), allora diremo che f(x) in modulo h(x) e uguale a r(x) e scriveremo che
f(x) mod h(x) = r(x).
Si dice che due polinomi f(x) e g(x) sono equivalenti in modulo h(x) e scriveremo
110
5.2 Parole di C e polinomi
f(x) ≡ g(x) mod h(x), se e solo se entrambi divisi per h(x) 6= 0 hanno lo stesso
resto cioe se:
f(x) mod h(x) = r(x) = g(x) mod h(x)
Esempio 5
Siano i polinomi f(x) = 1 + x4 + x9 + x11, g(x) = 1 + x6 e h(x) = 1 + x5, si ha che:
Quindi x11 +x9 +x4 +1 = (x5 +1)(x6 +x4 +x)+x+1 cioe f(x) in modulo h(x) e uguale
a x + 1, inoltre si ha:
Quindi x6 + 1 = (x5 + 1)x + x + 1 e vale f(x) mod (h(x)) = x + 1 = g(x) mod (h(x)),
allora si puo scrivere che f(x) ≡ g(x) mod h(x) = x + 1.
111
5.3 Codici ciclici
Fissato un polinomio h(x) di grado n, poiche per un qualunque polinomio f(x) di
K[x] si ha che f(x) mod h(x) = r(x) e il deg(r(x)) < n, allora ad ogni polinomio
f(x) di K[x] si puo associare un polinomio r(x) di K[x]n−1 che identifica una parola
binaria di lunghezza n. In particolare tutti i polinomi equivalenti in modulo h(x)
individuano la stessa parola di Kn.
Esempio 6
Il polinomio f(x) = 1 + x4 + x9 + x11 dell’esercizio 5 essendo in modulo h(x) = 1 + x5
uguale a x + 1 corrisponde alla parola di lunghezza 5 uguale a v = 11000.
Proprieta 7 Se p(x) e un polinomio di K[x] e f(x) ≡ g(x) mod h(x), allora valgono
le due seguenti proprieta.
• f(x) + p(x) ≡ g(x) + p(x) mod (h(x));
• f(x)p(x) ≡ g(x)p(x) mod (h(x)). 2
5.3 Codici ciclici
Prima di dare la definizione di codice ciclico in questa sessione e presentato un
particolare operatore che agisce su Kn e permette di ottenere ancora una parola di
Kn.
Sia v una parola di Kn, si definisce operatore shift ciclico l’applicazione π : Kn →Kn, esso agisce sulla parola v spostando il suo ultimo bit nella prima posizione.
112
5.3 Codici ciclici
Esempio 7
Si elencano in sequenza una serie di applicazioni dell’operatore π su diverse parole v di
lunghezza n differente.
Sia v = 1100 ⇒ π(v) = 0110.
Sia v = 011011 ⇒ π(v) = 101101.
Sia v = 101 ⇒ π(v) = 110.
Sia v = 10011 ⇒ π(v) = 11001.
E facile verificare che l’operatore π e lineare, quindi segue la proprieta.
Proprieta 8 L’operatore π e lineare cioe valgono le due proprieta:
• ∀ v, w ∈ Kn, π(v + w) = π(v) + π(w).
• ∀ a ∈ K = {0, 1}, π(av) = aπ(v).
Un codice C si dice ciclico se per qualunque parola v ∈ C si ha che anche π(v) ∈ C,
cioe se si effettua lo shift ciclico su una qualunque parola di C la parola ottenuta
appartiene ancora a C.
Esempio 8
Sia il codice C = {000, 110, 101, 011}, si ha che:
π(v) = π(000) = 000 ∈ C;
π(v) = π(110) = 011 ∈ C;
π(v) = π(101) = 110 ∈ C;
π(v) = π(011) = 101 ∈ C.
113
5.3 Codici ciclici
Quindi il codice C e un codice ciclico.
Si puo notare che il codice C dell’esempio 8 oltre ad essere ciclico e anche un codice
lineare, infatti la somma di due sue parole e ancora una parola del codice. L’esempio
seguente pero mostra che non tutti i codici lineari sono anche ciclici.
Esempio 9
Sia il codice C = {000, 100, 011, 111}, si ha che:
π(v) = π(100) = 010 /∈ C;
π(v) = π(011) = 101 /∈ C.
Il codice C e lineare ma non ciclico.
Cerchiamo di determinare un codice ciclico e lineare; sia v ∈ Kn e consideriamo
l’insieme S cosı definito:
S ={v, π(v), π2(v), · · · , πn−1(v)
},
dove con πi(v) si intende una sequenza di i applicazioni dell’operatore π cioe
π(π(· · · (π(v)) · · · ). Consideriamo l’insieme di tutte le possibili combinazioni lineari
delle parole di S, cioe L(v, π(v), π2(v), · · · , πn−1(v)), tale insieme definisce un codice
C che e ciclico lineare, in quanto C = L(v, π(v), π2(v), · · · , πn−1(v)) e l’operatore
π e un’applicazione lineare. E facile anche notare che un codice cosı ottenuto e il
piu piccolo codice ciclico lineare contenente v, infatti se v appartiene ad un codice
ciclico lineare C ′, con C ′ 6= C, allora esso sempre contiene l’insieme S e l’insieme
L(v, π(v), π2(v), · · · , πn−1(v)). L’insieme S e un insieme di generatori per il codice
lineare C.
114
5.4 Codice ciclico e polinomi di Kn−1
Esempio 10
Sia la parola di K3 v = 100, consideriamo l’insieme S = {100, 010, 001}, allora si ha che
C = K3 = {000, 100, 010, 001, 110, 101, 011, 111}.
Esempio 11
Sia la parola di K4 v = 0101, π(v) = 1010 e π2(v) = 0101 = v, quindi S = {0101, 1010}.E importante notare che la ciclicita delle parole v negli esempi precedenti era n−1, adesso
e 1 poiche π2(v) = v, il codice ottenuto e C = {0000, 0101, 1010, 1111}.
5.4 Codice ciclico e polinomi di Kn−1
Come si e visto nella seconda sessione del capitolo una qualunque parola v puo
essere scritta in forma polinomiale. Facciamo quindi corrispondere ad ogni parola v
di lunghezza n, un polinomio v(x) di grado minore o uguale a n− 1.
L’operatore π sposta l’ultimo bit di v nella prima posizione formando una nuova
parola. In una visione polinomiale di v, l’operatore π e equivalente al prodotto
xv(x). Il concetto di shift ciclico, quindi, corrisponde al prodotto del fattore x per il
polinomio v(x), procedendo in una successione di prodotti per x si puo determinare
un polinomio f(x) di grado maggiore di n − 1 che e legato ad una parola binaria
di lunghezza n + 1. Nasce la necessita di “modulare” il polinomio f(x) ottenuto
tramite il polinomio h(x) = xn + 1, cioe si considera il polinomio f(x) mod h(x)
che ha grado minore o uguale a n − 1 e corrisponde ad una parola di lunghezza n.
E importante notare che poiche xn mod (xn + 1) = 1, allora se in un polinomio e
presente il termine xn esso si puo sostituire con il termine 1.
Quanto detto consente di generare un codice ciclico lineare da un punto di vista
115
5.4 Codice ciclico e polinomi di Kn−1
polinomiale. Sia v una parola di Kn a cui e associato il polinomio v(x), costruiamo
l’insieme S cosı definito:
S ={v(x), xv(v), x2v(x), · · · , xn−1v(x)
}. (5.2)
Nella (5.2) al polinomio xiv(x) corrisponde la parola πi(v). E evidente che in S
possono essere presenti polinomi di grado maggiore di n − 1, allora e necessario
considerare ogni polinomio di S in modulo (xn+1), per far cio si utilizza la scrittura:
S ={v(x), xv(x), · · · , xn−1v(x)
}mod (xn + 1). (5.3)
L’insieme di tutte le combinazioni lineari dei polinomi di S in modulo (xn + 1)
costituisce un codice lineare ciclico ed esso e il piu piccolo codice ciclico contenente
la parola v. L’insieme S definisce un insieme di polinomi generatori del codice
ciclico lineare C, la tecnica di costruzione utilizzata e equivalente alla tecnica in cui
si adopera l’operatore π ed essa genera lo stesso codice.
Esempio 12
Sia la parola v = 1101000 di K7 e sia h(x) = x7 + 1. Formiamo l’insieme S costituito dai
7 polinomi.
v = 1101000 ⇒ v(x) = 1 + x + x3;
π(v) = 0110100 ⇒ xv(x) = x + x2 + x4;
π2(v) = 0011010 ⇒ x2v(x) = x2 + x3 + x5;
π3(v) = 0001101 ⇒ x3v(x) = x3 + x4 + x6
π4(v) = 1000110 ⇒ x4v(x) = x4 + x5 + x7 mod (x7 + 1) = 1 + x4 + x5;
π5(v) = 0100011 ⇒ x5v(x) = x5 + x6 + x8 mod (x7 + 1) = x + x5 + x6;
π6(v) = 1010001 ⇒ x6v(x) = x6 + x7 + x9 mod (x7 + 1) = 1 + x2 + x6.
116
5.4 Codice ciclico e polinomi di Kn−1
I sette polinomi ottenuti costituiscono l’insieme S e sono i generatori del codice ciclico
lineare C.
Una qualunque parola c(x) di un codice ciclico C ottenuto da S puo esprimersi
mediante una combinazione lineare degli elementi di S, cioe:
c(x) =[a0v(x) + a1xv(x) + a2x
2v(x) + ... + an−1xn−1v(x)
]mod (xn + 1) =
= (a0+a1x+a2x2+...+an−1x
n−1)v(x) mod (xn+1) = a(x)v(x) mod (xn+1). (5.4)
Nella (5.4) si e determinato il polinomio a(x) = a0 + a1x + a2x2 + ... + an−1x
n−1 di
grado n− 1 che permette di enunciare il seguente lemma.
Lemma 2 Se C e un codice ciclico lineare e v ∈ C, allora per ogni polinomio a(x)
di grado n− 1 si ha che
c(x) = a(x)v(x) mod (xn + 1) ∈ C. (5.5)
2
117
5.5 Matrice generatrice
5.5 Matrice generatrice
Consideriamo un codice ciclico e lineare C dove ogni sua parola ha una rappresen-
tazione polinomiale, tra tutte le sue parole non nulle si consideri una parola a cui
corrisponde un polinomio g(x) che ha grado minimo rispetto ad ogni altra parola di
C.
E facile provare che esiste una sola parola il cui polinomio corrispondente ha grado
minimo. Supponiamo per assurdo che esistano due parole differenti in C a cui sono
associati due polinomi di grado minimo uguale a k, siano essi g(x) e g′(x). Se
si considera la somma delle due parole, quindi anche dei due polinomi, si ottiene
c(x) = g(x)+g′(x) e per la linearita di C si ha che c(x) ∈ C, inoltre poiche la somma
dei termini di grado k e zero (xk + xk = 0) segue che deg(c(x)) < k, cio e assurdo
in quanto per la scelta fatta, g(x) e g′(x) sono due polinomi di grado minimo in C
e non puo esistere in C una parola di grado minore di k. Il polinomio di minimo
grado in C e unico.
Se C e un codice ciclico lineare si chiama polinomio generatore di C l’unico
polinomio non nullo di grado minimo corrispondente a una parola di C. Il polinomio
generatore permette di generare tutte le parole di C.
Teorema 29 Se C e un codice ciclico lineare, allora si ha che ogni parola c(x) di
C si puo esprimere nel modo seguente:
c(x) = a(x)g(x). (5.6)
Dim.
Per provare il teorema basta mostrare che il polinomio generatore divide ogni parola
118
5.5 Matrice generatrice
di C. Supponiamo per assurdo che esista una parola c(x) ∈ C che non e divisibile
per g(x), allora si ha che:
c(x) = a(x)g(x) + r(x),
dalla quale e possibile ottenere:
r(x) = a(x)g(x) + c(x).
Per il lemma 2 si ha che a(x)g(x) e una parola di C ed inoltre per la linearita di C
si ha che a(x)g(x) + c(x) ∈ C ne segue che anche r(x) ∈ C, ma questo e assurdo in
quanto deg(r(x)) < deg(g(x)) e deve necessariamente essere r(x) = 0. 2
Il seguente teorema permette di legare il polinomio generatore con i concetti di
dimensione e base di un codice ciclico e lineare C.
Teorema 30 Sia C un codice ciclico lineare di lunghezza n e g(x) il suo polinomio
generatore di grado n− k = deg(g(x)), allora si ha:
1. Il codice C ha dimensione k.
2. Le parole corrispondenti a g(x), xg(x), ... ,xk−1g(x) formano una base di C.
3. La parola c(x) appartiene a C se e solo se c(x) = a(x)g(x) dove deg(a(x)) < k
(cioe g(x) e un divisore per ogni parola c(x) in C).
Dim.
Il polinomio g(x) ha grado n− k, i polinomi g(x), xg(x), ..., xk−1g(x) hanno rispet-
tivamente grado n−k, n−k+1, ..., n−1, sono diversi dal polinomio nullo e nessuno
119
5.5 Matrice generatrice
di essi puo essere espresso come combinazione lineare dei precedenti essendo questi
tutti di grado inferiore, quindi, per un teorema di Algebra lineare, essi sono linear-
mente indipendenti. Per il teorema 29 si ha che ogni parola c(x) di C si puo scrivere
come c(x) = a(x)g(x), cio prova il punto 3 del teorema ed inoltre i k polinomi g(x),
xg(x), ..., xk−1g(x) formano una base di C. 2
Esempio 13
Sia g(x) = 1 + x + x3 il polinomio generatore per il codice ciclico C di lunghezza n = 7,
si ha che deg(g(x)) = n − k = 3, da cui k = n − 3 = 4 e il codice C ha dimensione 4.
Calcoliamo una base per C moltiplicando g(x) per i fattori x, x2 e x3:
g(x) = 1 + x + x3 ⇒ 1101000;
xg(x) = x + x2 + x4 ⇒ 0110100;
x2g(x) = x2 + x3 + x5 ⇒ 0011010;
x3g(x) = x3 + x4 + x6 ⇒ 0001101.
Il teorema 30 definisce per un codice ciclico lineare C una sua base ottenuta dal
polinomio generatore g(x), allora tramite i polinomi g(x), xg(x), ..., xk−1g(x), si
puo definire la matrice generatrice del codice C nella seguente forma:
G =
g(x)
xg(x)
x2g(x)
.
.
xk−1g(x)
. (5.7)
120
5.5 Matrice generatrice
Esempio 14
Sia C un codice ciclico lineare di lunghezza 4, avente polinomio generatore g(x) = 1 + x2,
allora si ha che n− k = 2. Una base per C e individuata dai polinomi:
g(x) = 1 + x2 ⇒ 1010
xg(x) = x + x3 ⇒ 0101.
La matrice generatrice di C e:
G =
1 0 1 0
0 1 0 1
.
Uno dei problemi fondamentali per la determinazione di un codice ciclico lineare
che ha parametri n e k e quello di individuare il suo polinomio generatore g(x).
Diverse sono le tecniche utilizzate e i due teoremi seguenti danno indicazioni su
alcune proprieta del polinomio generatore.
Teorema 31 Se g(x) e il polinomio generatore di un codice lineare ciclico C di
lunghezza n, allora g(x) divide 1 + xn cioe 1 + xn = g(x)f(x) e vale il viceversa.
Dim.
Se dividiamo 1 + xn per g(x) si ha 1 + xn = g(x)f(x) + r(x), da cui si ottiene che
r(x) = g(x)f(x)+(1+xn). Poiche ogni polinomio deve essere considerato in modulo
(1+xn) e lecito scrivere r(x) = (g(x)f(x)+(1+xn)) mod (xn +1), tenendo presente
che (1 + xn) mod (xn + 1) ha resto zero, si ha che r(x) = g(x)f(x) mod (xn + 1),
quindi r(x) ∈ C, ma deg(r(x)) < deg(g(x)) e poiche g(x) e il polinomio di grado
minimo in C, allora r(x) deve essere il polinomio nullo. 2
121
5.6 Sindrome e matrice di parita
Teorema 32 Il polinomio generatore g(x) del piu piccolo codice lineare ciclico C,
di lunghezza n e contenente la parola corrispondente a v(x), e il massimo comune
divisore di v(x) e di (1 + xn).
Dim.
Per il lemma 2 si ha che ogni parola c(x) ∈ C si puo esprimere come c(x) =
v(x)a(x) mod (xn+1), allora in particolare per g(x) si ha g(x) = a(x)v(x) mod (xn+
1) o equivalentemente g(x) = a(x)v(x) + b(x)(xn + 1). Per i teoremi 31 e 29 si ha
che g(x) e un divisore di (1 + xn) e di v(x), quindi ogni comune divisore per v(x)
e 1 + xn deve dividere anche g(x), pertanto esso e il massimo comune divisore fra
v(x) e 1 + xn. 2
Un metodo alternativo per cercare un polinomio generatore, di un codice ciclico C di
dimensione k, consiste nel cercare di ridurre una sua matrice generatrice G in modo
che le colonne leading siano le ultime colonne di G. La riga di G corrispondente al
polinomio di minimo grado individua il polinomio generatore.
5.6 Sindrome e matrice di parita
Supponiamo sia stata ricevuta la parola w, corrispondente a w(x), e che sia sta-
ta inviata la parola v, associata a v(x), allora definiamo errore polinomiale il
polinomio e(x) = v(x) + w(x). Si definisce sindrome polinomiale la quantita:
s(x) = w(x) mod (g(x)). (5.8)
Poiche g(x) ha grado n−k, allora la sindrome s(x) ha grado minore di n−k e ad essa
122
5.6 Sindrome e matrice di parita
corrisponde una parola di lunghezza n− k. Supponiamo che w(x) ∈ C, allora dato
che w(x) = a(x)g(x), segue che la sua sindrome e s(x) = 0. Se invece w(x) /∈ C,
allora, poiche w(x) = v(x) + e(x), si ha che
s(x) = w(x) mod (g(x)) = [v(x) + e(x)] mod (g(x)) = e(x) mod (g(x)),
dato che v(x) mod (g(x)) = 0. Cio comporta che la sindrome della parola rice-
vuta w(x) corrisponde alla sindrome dell’errore e(x) e la definizione di sindrome
polinomiale corrisponde alla definizione di sindrome data nel capitolo 3.
Si definisce matrice di parita Hn×n−k la matrice la cui i-esima riga, ri, e la parola
di lunghezza n− k corrispondente al polinomio:
ri(x) = xi mod (g(x)) per 0 ≤ i ≤ n− 1.
La matrice di parita e:
H =
x0
x
x2
.
.
xn−1
mod (g(x)). (5.9)
Se w e la parola ricevuta, poiche w(x) = v(x) + e(x) la sindrome polinomiale si puo
ottenere anche mediante la matrice H nel seguente modo:
123
5.6 Sindrome e matrice di parita
w ·H = (v + e) ·H ≡ ∑n−1i=0 (vi + ei)x
i mod (g(x)) =
=∑n−1
i=0 vixi mod (g(x)) +
∑n−1i=0 eix
i mod (g(x)) =
=∑n−1
i=0 eixi mod (g(x)) = e(x)mod(g(x)).
Ancora una volta la definizione precedente coincide con la definizione di sindrome
ottenuta tramite la matrice di parita del capitolo 3.
Esempio 15
Consideriamo un codice C di lunghezza 7 con polinomio generatore g(x) = 1 + x + x3, si
ha che n− k = 3, quindi la dimensione di C e k = 4. Costruiamo la matrice di parita nel
modo seguente:
r0(x) = 1 mod (g(x)) = 1 ⇔ 100;
r1(x) = x mod (g(x)) = x ⇔ 010;
r1(x) = x2 mod (g(x)) = x2 ⇔ 001;
r1(x) = x3 mod (g(x)) = 1 + x ⇔ 110;
r1(x) = x4 mod (g(x)) = x + x2 ⇔ 011;
r1(x) = x5 mod (g(x)) = 1 + x + x2 ⇔ 111;
r1(x) = x6 mod (g(x)) = 1 + x2 ⇔ 101.
La matrice di parita e:
H =
1 0 0
0 1 0
0 0 1
1 1 0
0 1 1
1 1 1
1 0 1
.
124
Capitolo 6
Campi finiti e codici 2 - BCH
In questo capitolo e definita la nozione di campo finito. La trattazione non sara
rigorosa, ma mirata a dare quei concetti base utili ad un corso di Teoria dei Codici
rivolto a studenti di ingegneria. Per maggiori approfondimenti si consiglia la visione
di testi di Matematica Discreta e Campi Finiti.
Quando si dice che un insieme numerico e un “campo”?
Un campo e un insieme numerico C su cui sono definite due operazioni algebriche
binarie di cui la prima, generalmente chiamata somma (+), risulta essere un grup-
po commutativo e la seconda, chiamata prodotto (×), risulta anch’essa un gruppo
commutativo sull’insieme C−{0}, cioe l’insieme numerico C con l’esclusione dell’ele-
mento neutro 0 rispetto alla somma. Esempi di insiemi numerici che sono dei campi
possono essere quelli dei numeri reali e dei numeri complessi su cui sono definite le
classiche operazioni di somma e prodotto.
125
6.1 Polinomio primitivo
Nel capitolo precedente si e definita una corrispondenza tra le parole di Kn e i
polinomi di K[x] in modulo xn + 1, cioe i polinomi di K[x]n−1. E evidente che per
tali polinomi vale la classica operazione di somma e rispetto a tale operazione si ha
che K[x]n−1 e un gruppo abeliano con elemento neutro il polinomio nullo, l’inverso
di un qualunque polinomio g(x) e se stesso. L’operazione di somma di due polinomi
di K[x]n−1 e equivalente all’operazione di somma definita precedentemente in Kn
come si vede nell’esempio seguente.
Esempio 1
Siano in K4 le due parole v = 0101 e w = 0111 corrispondenti ai polinomi v(x) = x + x3
e w(x) = x + x2 + x3, allora si ha che:
v + w = 0101 + 0111 = 0010,
equivalentemente,
v(x) + w(x) = x2.
Tale polinomio somma in K4 corrisponde alla parola 0010.
6.1 Polinomio primitivo
Un polinomio g(x) si dice irriducibile se esso e divisibile solo per 1 e per se stesso,
in caso contrario e detto riducibile. Nell’esempio seguente sono elencati una serie
di polinomi che sono sia riducibili che irriducibili.
126
6.1 Polinomio primitivo
Esempio 2
1. x e irriducibile.
2. x + 1 e irriducibile.
3. x2 e evidentemente riducibile.
4. x2 + 1 e riducibile in quanto si puo esprimere come (x + 1)2.
5. x2+x+1 e irriducibile in quanto non si puo esprimere come prodotto di due polinomi
di primo grado.
6. x3+x+1 e irriducibile in quanto non si puo esprimere come prodotto di un polinomio
di primo grado e un polinomio di secondo grado.
7. x4 + x + 1 e irriducibile.
8. x4 + 1 e riducibile in quanto puo essere scritto come (x2 + 1)2 .
Diamo adesso una definizione che assume una fondamentale importanza nella definizione
dei campi finiti. Un polinomio irriducibile di grado n > 1 e detto primitivo se esso
non divide tutti i polinomi del tipo xm + 1 con m < 2n − 1 e divide il polinomio
xm + 1 con m = 2n − 1.
Esempio 3
Consideriamo il polinomio h(x) = 1 + x + x2, n = 2, esso e irriducibile e m = 22 − 1 = 3.
Se si considerano i polinomi del tipo xm + 1, con m < 3, allora si ha che essi non sono
divisibili per h(x), mentre e divisibile x3 + 1.
127
6.1 Polinomio primitivo
Quindi h(x) e un polinomio primitivo.
Esempio 4
Consideriamo il polinomio irriducibile h(x) = x3 +x+1 e m = 23−1 = 7. Tutti i polinomi
xm + 1 con m < 7 non sono divisibili per h(x). Verifichiamo se esso divide il polinomio
x7 + 1:
Quindi h(x) e un polinomio irriducibile e primitivo.
128
6.2 Campi finiti di Galois
Esempio 5
Sia il polinomio h(x) = 1 + x + x2 + x3 + x4, con m = 24 − 1 = 15, esso, se primitivo, non
divide tutti i polinomi xm + 1 con m < 15, ma poiche:
x5 + 1 = (1 + x)(1 + x + x2 + x3 + x4),
allora h(x) divide x5 + 1 ed esso non e un polinomio primitivo.
6.2 Campi finiti di Galois
Si considerino i polinomi di K[x] in modulo xn + 1 e definiamo in essi la classica
operazione di prodotto tra polinomi, cioe se f(x) e g(x) sono due polinomi arbitrari
non nulli di K[x] allora il loro prodotto e:
f(x) · g(x) mod xn + 1
e deve appartenere a K[x]n−1 − {0}, cioe dati due polinomi f(x) e g(x) non nulli, il
loro polinomio prodotto deve essere anch’esso non nullo e appartenere a K[x]n−1 −{0}.L’esempio seguente mostrera che il prodotto definito precedentemente non rispetta
sempre tale proprieta.
Esempio 6
Proviamo ad utilizzare l’operazione di moltiplicazione sui polinomi in modulo 1 + x4 cioe
sui polinomi di K[x]3 equivalenti alle parole di K4. Sia la parola v = 0101 corrispondente
al polinomio v(x) = x + x3 e consideriamo il prodotto v(x) · v(x):
129
6.2 Campi finiti di Galois
(x + x3)2 = x2 + x6.
Consideriamo adesso tale polinomio in modulo x4 + 1 cioe:
quindi,
(x + x3)2 = (x2 + x6)mod(x4 + 1) = 0.
Il problema presentato nell’esempio 7 e legato al fatto che 1+x4 non e irriducibile e
tutti i polinomi riducibili divisibili per 1+x4 sono equivalenti in modulo al polinomio
nullo, quindi alla parola nulla.
In base a quest’ultima osservazione consideriamo i polinomi di K[x] in modulo h(x)
con h(x) polinomio primitivo di grado n > 1. Se indichiamo il polinomio x con il
simbolo β , allora e possibile usare la seguente scrittura:
130
6.2 Campi finiti di Galois
βi = ximod(h(x)). (6.1)
Si noti che h(x), poiche e un polinomio primitivo, non divide i polinomi 1 + xm
per m < 2n − 1 e quindi βm 6= 1 per m < 2n − 1, ma divide 1 + xm, allora
1 = xm mod (h(x)) o equivalentemente βm = 1 se e solo se m = 2n − 1.
Si definisce il seguente insieme:
GF (2n) ={βi|i = 0, 1, ..., 2n − 2
} ⋃{0} . (6.2)
L’insieme GF (2n) contiene 2n elementi distinti, infatti se supponiamo che due suoi
elementi βi e βj, con i < j e 0 ≤ i, j ≤ 2n − 2 siano tali che βi = βj, allora si ha
che βi = βj−iβi, il che implica che βj−i = 1, cio accade solo se j − i e un multiplo
di 2n − 1, ma essendo 1 ≤ j − i ≤ 2n − 2 < 2n − 1 questo e impossibile e si ha che
βi 6= βj.
L’insieme GF (2n) ha la struttura di campo con le operazioni di somma e prodotto,
esso prende il nome di Campo di Galois. Ogni singolo elemento di GF (2n) si puo
mettere in corrispondenza con le parole di Kn, come vedremo nell’esempio seguente
in cui viene mostrato come si costruisce il campo di Galois GF (24) in cui sono
facilmente definite le operazioni di somma e prodotto.
131
6.2 Campi finiti di Galois
Esempio 7
Dato il polinomio primitivo h(x) = 1 + x + x4, costruiamo il campo GF (24) ricavando i
suoi elementi come indicato nella tabella (6.1).
parola polinomio campo
0000 0 0
1000 1 1
0100 x β
0010 x2 β2
0001 x3 β3
1100 x4 = 1 + x β4
0110 x5 = x + x2 β5
0011 x6 = x2 + x3 β6
1101 x7 = x3 + x4 = 1 + x + x3 β7
1010 x8 = x + x2 + x4 = x + x2 + 1 + x = 1 + x2 β8
0101 x9 = x + x3 β9
1110 x10 = x2 + x4 = x2 + 1 + x β10
0111 x11 = x3 + x2 + x β11
1111 x12 = x4 + x3 + x2 = x + 1 + x2 + x3 β12
1011 x13 = x2 + x + x3 + x4 = x2 + x + x3 + 1 + x = 1 + x2 + x3 β13
1001 x14 = x3 + x4 + x = x3 + x + 1 + x = x3 + 1 β14
Tabella 6.1: GF (24)
La somma tra gli elementi di GF(24) e estremamente semplice in quanto definita come
somma algebrica degli elementi di GF (24). Calcoliamo il prodotto tra le due parole (0110)
e (1101), corrispondenti alle parole β5 e β7 e ai polinomi x + x2 e 1 + x + x3, si ha che:
132
6.2 Campi finiti di Galois
(0110) · (1101) = β5 · β7 = β12 = 1111.
Cio e equivalente al prodotto dei polinomi corrispondenti in modulo h(x):
(x + x2) · (1 + x + x3) = x5 · x7 = x12 mod h(x).
Un elemento α ∈ GF (2n) e detto primitivo se ogni sua potenza m, con 1 ≤ m <
2n − 1, e diversa da 1 (αm 6= 1).
Si definisce ordine di un elemento α 6= 0 di GF (2r) il piu piccolo intero positivo m
per cui si ha che αm = 1. In particolare un elemento primitivo di GF (2r) ha ordine
2n − 1.
Sia il polinomio p(x) ∈ K[x], si dice che p(x) ammette una radice α ∈ GF se
p(α) = 0.
Esempio 8
Sia il polinomio p(x) = 1 + x3 + x4, con h(x) = 1 + x + x4 polinomio primitivo, vediamo
se β e una sua soluzione in GF (24).
p(β) = 1 + β3 + β4 = 1000 + 0001 + 1100 = 0101 = β9 6= 0000,
quindi β non e una radice di p(x).
Consideriamo adesso l’elemento β7 ∈ GF e vediamo se esso e radice di p(x). Ricordando
che β15 = 1 si ha:
p(β7) = 1 + (β7)3 + (β7)4 = 1 + β21 + β28 = 1 + (β15 · β6) + (β15 · β13) =
= 1000 + 0011 + 1011 = 0000
Quindi β7 e soluzione di p(x).
133
6.3 Polinomio minimo
6.3 Polinomio minimo
Se α e un arbitrario elemento di GF (2n), allora si definisce polinomio minimo
di α il polinomio di minimo grado che ha come radice α. Il polinomio minimo
di α e denotato mediante la simbologia mα(x), oppure, dato che α = βi, per un
determinato i, con mi(x) e le due scritture sono equivalenti:
mα(x) ≡ mi(x)
Trovare il polinomio minimo di un elemento α di GF (2n) si riconduce a determinare
una combinazione lineare non banale dei vettori {1, α, α2, ..., αn} che origini la parola
nulla cioe in termini di elementi di GF (2n):
a0 + a1α + a2α2 + a3α
3 + ... + arαn = 0.
Tale combinazione lineare esiste poiche ogni elemento della combinazione lineare
rappresentata nell’equazione precedente corrisponde a una parola di Kn in cui n+1
elementi sono sempre linearmente dipendenti.
Esempio 9
Cerchiamo di determinare il polinomio minimo dell’elemento α = β3 ∈ GF (24), dove si
utilizza come polinomio primitivo h(x) = 1 + x + x4. Consideriamo l’equazione
mα(x) = m3(x) = a01+ a1α + a2α2 + a3α
3 + a4α4 = a0β
0 + a1β3 + a2β
6 + a3β9 + a4β
12 =
= a01 + a1x3 + a2(x2 + x3) + a3(x + x3) + a4(1 + x + x2 + x3). (6.3)
Bisogna determinare i valori a0, a1, .., a4 ∈ {0, 1}, vista la corrispondenza tra gli elementi
di GF (24) e le parole di K4 si ha:
134
6.3 Polinomio minimo
0000 = a0(1000) + a1(0001) + a2(0011) + a3(0101) + a4(1111) (6.4)
Risolvendo per componenti rispetto a a0, a1, a2, a3, a4 si determina:
a0 + a4 = 0
a3 + a4 = 0
a2 + a4 = 0
a1 + a2 + a3 + a4 = 0
quindi:
a0 = a4
a3 = a4
a2 = a4
a1 = a4
Per determinare una combinazione non banale e necessario porre a4 = 1 e quindi si ha che
a0 = a1 = a2 = a3 = a4 = 1 e il polinomio minimo e:
m3(x) = 1 + x + x2 + x3 + x4.
Il teorema seguente mostra le principali proprieta dei polinomi minimi.
Teorema 33 Sia α 6= 0 un elemento di GF (2n) e sia mα(x) il suo minimo poli-
nomio si ha:
1. Il polinomio minimo mα(x) e irriducibile.
2. Se f(x) e un polinomio tale che f(α) = 0, allora mα(x) divide f(x).
135
6.3 Polinomio minimo
3. Il polinomio minimo mα(x) e unico.
4. Il polinomio minimo mα(x) divide x2n−1 + 1.
Dim.
1. Supponiamo per assurdo che mα(x) e riducibile, in tal caso esso puo es-
sere scritto come mα(x) = q(x)p(x), poiche mα(α) = 0, allora si ha che
q(α)p(α) = 0 e quindi q(α) = 0 oppure p(α) = 0, ma deg(q(x)) < deg(mα(x))
e deg(p(x)) < deg(mα(x)), questo e assurdo in quanto mα(x) e il polinomio di
grado minore che ha α come radice.
2. Supponiamo che mα(x) non divide f(x), allora si puo scrivere:
f(x) = mα(x)q(x) + r(x),
dove deg(r(x)) < deg(mα(x)), per ipotesi f(α) = 0 quindi:
f(α) = mα(α)q(α) + r(α) = 0 · q(α) + r(α) = r(α) = 0,
cio e assurdo perche il polinomio r(x) ha α come radice ed ha grado inferiore
di mα(x).
3. Se esistono due polinomi minimi m′α(x) e mα(x), per la parte seconda del
teorema si ha che mα(x) divide m′α(x) e m′
α(x) divide mα(x), cio vuol dire che
mα(x) = m′α(x) e il polinomio minimo e unico.
4. Poiche α e un elemento di GF (2n), allora esiste un i per cui α = βi ed inoltre:
α2n−1 + 1 = (βi)2n−1 + 1 = (β2n−1)i + 1 = 1i + 1 = 1 + 1 = 0.
Pertanto, mα(x) divide x2n−1 + 1. 2
136
6.3 Polinomio minimo
La seguente proprieta permette di ottenere informazioni sulle radici dei polinomi
minimi.
Proprieta 9 Sia f(x) un polinomio in K allora si ha che:
f(x)2 = f(x2). (6.5)
Dim.
La proprieta e dimostrata dalle seguenti eguaglianze:
f(x)2 =
(n∑
i=0
aixi
)2
=n∑
i=0
ai(xi)2 =
n∑i=0
ai(x2)i = f(x2).
2
La proprieta (9) permette di affermare che se α e una radice del polinomio f(x) cioe
f(α) = 0, allora anche f(α2) = 0, quindi α2 e una radice di f(x), cosı come lo e
anche α4 e in generale α2n−1.
Teorema 34 Le radici del polinomio minimo mα(x) sono α, α2, α4, · · · , α2n−1, in
particolare i polinomi m1(x) e m3(x) hanno n radici distinte e rispettivamente sono:
{β, β2, β4, ..., β2n−1}, (6.6)
{β3, β6, ..., β3(2n−1)}.
137
6.3 Polinomio minimo
Dim.
La prima parte della proprieta segue dalla proprieta 9. Sia il polinomio minimo
m1(x), consideriamo due soluzioni β2ie β2j
della (6.6) e supponiamo per assurdo
che β2i= β2j
con i > j e 0 ≤ i, j ≤ n− 1, allora si ha:
β2j · β2i−2j
= β2j
,
equivalente all’equazione:
β2i−2j
= 1. (6.7)
La (6.7) vale se 2i − 2j = k(2n − 1), cioe 2i − 2j e un multiplo di 2n − 1, ma poiche
i e j variano tra 0 e n− 1, allora si ha:
2i − 2j ≤ 2n−1 − 1 < 2n − 1.
Cio mostra che 2i − 2j non e un multiplo di 2n − 1 e tutte le n soluzioni di m1(x)
sono tutte distinte. Con uguale procedura si dimostra che anche tutte le soluzioni
di m3(x) sono tutte distinte. 2
elemento di GF(24) polinomoio minimo
0 x
1 1 + x
β, β2, β4, β8 1 + x + x4
β3, β6, β9, β12 1 + x + x2 + x3 + x4
β5, β10 1 + x + x2
β7, β11, β13, β14 1 + x3 + x4
Tabella 6.2: Radici e polinomi minimi in GF(24)
138
6.4 Codici di Hamming
La precedente tabella individua le soluzioni di tutti i polinomi minimi di GF (24).
6.4 Codici di Hamming
I codici di Hamming sono codici perfetti 1-correttori che hanno lunghezza l = 2n−1 e
le righe della loro matrice di parita hanno lunghezza n. In questa sezione e mostrato
che le 2n − 1 righe della matrice di parita di un codice di Hamming possono essere
rappresentate mediante gli elementi non nulli di un campo di Galois GF (2n), infatti
essendo β un elemento primitivo di GF (2n) allora per definizione le sue potenze
sono tutte distinte e individuano i 2n − 1 elementi non nulli di GF corrispondenti
alle parole non nulle di Kn.
La matrice di parita di un codice di Hamming di lunghezza l = 2n − 1 puo essere
espressa nel seguente modo:
H(2n−1)×r =
1
β
β2
.
βi
.
β2n−2
. (6.8)
Esempio 10
Se n = 3, allora l = 23 − 1 = 7. Definiamo GF (23) mediante il polinomio primitivo
p(x) = 1 + x + x3, l’elemento β corrispondente al polinomio x e alla parola di K3 010,
ricordando poi che xi mod p(x), si ottiene:
139
6.4 Codici di Hamming
H =
1
β
β2
β3
β4
β5
β6
↔ H =
1 0 0
0 1 0
0 0 1
1 1 0
0 1 1
1 1 1
1 0 1
.
Quanto detto precedentemente si puo riassumere mediante il seguente teorema.
Teorema 35 Un polinomio primitivo di grado n e il generatore polinomiale di un
codice ciclico di Hamming di lunghezza 2n − 1. 2
Sia C un codice ciclico di lunghezza n con polinomio generatore g(x) e supponiamo
che α ∈ GF (2n) sia una radice di g(x), allora chiaramente si ha che g(α) = 0. Poiche
tutte le parole c(x) di C possono essere scritte come c(x) = a(x) · g(x) allora segue
che c(α) = g(α) · x(α) = 0. Per i teoremi 33 e 34 si ha che mα(x) e divisore di ogni
parola c(x) appartenente a C ed inoltre e possibile scrivere g(x) come prodotto di
polinomi minimi.
Teorema 36 Sia g(x) il polinomio generatore di un codice ciclico di lunghezza n,
allora g(x) sara il prodotto dei minimi polinomi di α1, α2, ..., αk ∈ GF (2n), se e solo
se
∀c(x) ∈ C c(α1) = c(α2) = ... = c(αk) = 0. (6.9)
2
140
6.4 Codici di Hamming
Cerchiamo di individuare una tecnica utile all’individuazione e alla correzione degli
errori per i codici di Hamming.
Se c(x) e la parola che e stata inviata e w(x) la parola ricevuta, allora l’errore e(x)
e definito nel seguente modo:
w(x) = c(x) + e(x).
Se il polinomio generatore g(x) = mα(x) e il polinomio primitivo, allora α e radice
di tale polinomio (g(α) = 0) e si ha che:
w(α) = c(α) + e(α) = 0 + e(α) = αj,
dove αj e un elemento del campo GF . Pertanto il polinomio che rappresenta l’errore
e e(x) = xj e la correzione della parola ricevuta si puo scrivere come:
c(x) = w(x) + xj.
Poiche si ha che:
c(α) = w(α) + αj = αj + αj = 0.
Quindi la parola ottenuta adoperando questa tecnica e una parola del codice. E
importante notare che l’aggiunta del polinomio xj a w(x) corrisponde in termini di
parole di Kn al cambio del valore della componente j-esima nella parola ricevuta.
Esempio 11
Consideriamo il polinomio m1(x) = 1 + x + x3 (primitivo con soluzione β) e il campo di
Galois GF (23). Supponiamo di ricevere w(x) = 1 + x2 + x3 + x6, allora:
141
6.5 Codici 2-BCH
w(β) = 1 + β2 + β3 + β6 = 100 + 001 + 110 + 101 = 110 = β3
L’errore in questo caso e dato dal polinomio e(x) = x3, quindi la correzione della parola
ricevuta e:
c(x) = w(x) + e(x) = 1 + x2 + x3 + x6 + x3 = 1 + x2 + x6
6.5 Codici 2-BCH
Una importante classe di codici correttori multipli e la classe dei codici BCH ( dai
nomi di Bose, Chaudhuri e Hocquengham ). Essi sono definiti da due interi positivi
r e t, con t < 2r−1 − 1, e la loro lunghezza e n = 2r − 1, essi sono codici t-correttori
di dimensione k ≥ n− rt.
In questa sessione sono considerati solo codici BCH 2-correttori di lunghezza
2r − 1. Essi hanno come polinomio generatore il polinomio g(x) = mβ(x)mβ3(x),
dove β appartiene a GF (2r) con r ≥ 4. Poiche n = 2r − 1 e g(x) divide 1 + xn,
allora g(x) e il polinomio generatore di un codice ciclico.
Si consideri un campo GF (2r) avente come polinomio generatore g(x) = m1(x)m3(x),
dove m1(x) e m3(x) sono due polinomi minimi aventi ciascuno r soluzioni distinte.
La matrice di parita H di tali codici e definita nel modo seguente:
142
6.6 Schema di codifica per codici 2-BCH
β0 β0
β β3
β2 β6
. .
βi β3i
. .
β2r−2 β3(2r−2)
(6.10)
Poiche βi e un elemento di GF (2r), esso rappresenta una parola di lunghezza r, quin-
di H e una matrice (2r − 1)× (2r). Inoltre, poiche il deg(m1(x)) = r = deg(m3(x))
ne segue che il grado di g(x) = m1(x)m3(x) e n − k = 2r, pertanto il codice ha
dimensione k = n− 2r = 2r − 1− 2r. Si puo dimostrare (ma non verra fatto in tale
trattazione) che la distanza di tali codici e d = 2.
6.6 Schema di codifica per codici 2-BCH
Consideriamo che w e la parola ricevuta e w(x) il polinomio ad essa associato in una
trasmissione che utilizza un codice 2-BCH. Ricordando che tale codice e un codice
2- correttore, allora la sindrome di w e:
w ·H =[
w(β), w(β3)]
=[
s1, s3
](6.11)
dove s1 e s3 sono due parole di lunghezza r. Nella sequenza successiva e illustrato
la tecnica che permette di individuare l’algoritmo di decodifica dei codici 2-BCH.
• Se non vi sono errori nella trasmissione di w, cioe se w ∈ C, allora si ha che
w ·H = 0 e quindi s1 = s3 = 0.
• Se si e nel caso in cui vi e solo un errore nella trasmissione della parola w,
allora l’errore utilizzato per correggere w(x) e e(x) = xi dato che tale errore,
143
6.6 Schema di codifica per codici 2-BCH
se esso e nella i-esima componente di w, individua la i-esima riga di H nel
calcolo della sindrome di w:
w ·H = e ·H =[
βi, β3i
]=
[s1, s3
](6.12)
Tale caso si verifica se calcolando la sindrome si ha che s31 = s3.
• Se si e nel caso in cui vi sono due errori nella trasmissione di w ed essi sono nelle
posizioni i-sima e j-esima, con i 6= j, allora l’errore utilizzato per correggere
w(x) e e(x) = xi+xj. Infatti la sindrome di w, per il teorema 18 del capitolo 3,
e la combinazione lineare delle righe i-esima e j-esima di H, cioe:
w ·H = e ·H =[
βi + βj, β3i + β3j
]=
[s1, s3
]. (6.13)
Consideriamo il seguente sistema di equazioni risultante:
βi + βj = s1
β3i + β3j = s3.
Poiche:
β3i + β3j = (βi + βj)(β2i + βi+j + β2j),
ed inoltre:
s21 = (βi + βj)2 = β2i + β2j,
allora e possibile scrivere:
s3 = β3i + β3j = (βi + βj)(β2i + β2j + βi+j) = s1(s21 + βi+j),
144
6.6 Schema di codifica per codici 2-BCH
Da cui si ottiene:
s3
s1
+ s21 = βi+j.
E possibile pensare βi e βj come radici dell’equazione di secondo grado:
x2 + (βi + βj)x + βi+j = 0.
Tale polinomio prende il nome di Polinomio di individuazione di errore
ed esso puo essere anche scritto mediante s1 e s3, cioe:
x2 + s1x + (s3
s1
+ s21) = 0 (6.14)
Pertanto nel caso di un errore di peso due calcolata la sindrome nelle sue parti
s1 e s3, mediante sostituzione si determinano le radici dell’equazione (6.14) e
si individua e(x).
Se la tecnica mostrata precedentemente non permette di determinare e(x), cioe non
si trovano soluzioni della (6.14), allora vuol dire che e accaduto un errore con peso
maggiore di due ed e necessario richiedere la ritrasmissione.
Esempio 12
Sia w la parola ricevuta la cui sindrome e composta da s1 = 0111 = w(β) e da s3 = 1010 =
w(β3). Dalla tabella 6.1 si deduce che s1 = β11 e s3 = β8, quindi:
s3
s1+ s2
1 =β8
β11+ β22 = β8β−11β15 + β7β15 = β12 + β7 = 1111 + 1101 = 0010 = β2,
e polinomio di individuazione di errore e:
x2 + β11x + β2 = 0,
le cui soluzioni numeriche, determinate mediante sostituzione, sono βi = β4 e βj = β13.
145