Lezioni di Algebra e Teoria dei Codici - Servizi interni
Lezioni di Algebra e Teoria dei Codici - Servizi interni
Lezioni di Algebra e Teoria dei Codici - Servizi interni
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Prof.ssa Carla Fiori<br />
<strong>Lezioni</strong> <strong>di</strong><br />
<strong>Algebra</strong> e <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci<br />
Università <strong>di</strong> Modena e Reggio Emilia<br />
Dipartimento <strong>di</strong> Scienze Fisiche, Informatiche, Matematiche<br />
Anno Accademico 2012-13
Questo documento è stato scritto in L ATEX utilizzando l’e<strong>di</strong>tor LYX. I <strong>di</strong>agrammi<br />
invece sono stati prodotti utilizzando XY-Pic.<br />
Quest’opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-<br />
Non commerciale-Non opere derivate 2.5 Italia. Per leggere una copia della licenza<br />
visita il sito web<br />
http://creativecommons.org/licenses/by-nc-nd/2.5/it/<br />
o spe<strong>di</strong>sci una lettera a Creative Commons, 171 Second Street, Suite 300, San<br />
Francisco, California, 94105, USA. Per ulteriori informazioni si prega <strong>di</strong> contattare<br />
Emanuele Bardelli, Marco Corghi e Dario Pran<strong>di</strong> agli in<strong>di</strong>rizzi , o .<br />
$\<br />
Alcuni <strong>di</strong>ritti riservati ○ BY: ○ =○ 2006-2007<br />
This work is licensed under the Creative Commons Attribution-Noncommercial-<br />
No Derivative Works 2.5 Italy License. To view a copy of this license, visit<br />
http://creativecommons.org/licenses/by-nc-nd/2.5/it/<br />
or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco,<br />
California, 94105, USA. For further information, please contact Emanuele Bardelli,<br />
Marco Corghi e Dario Pran<strong>di</strong> at these e-mail addresses , or .<br />
$\<br />
Some Rights Reserved ○ BY: ○ =○ 2006-2007
Prefazione<br />
Questi appunti raccolgono le lezioni del corso <strong>di</strong> <strong>Algebra</strong> e <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci,<br />
insegnamento fondamentale per la Laurea Magistrale in Matematica Computazionale<br />
e Modellistica, 6 cfu, 36 ore, anno accademico 2012-13. Il docente, prof.ssa<br />
Carla Fiori, rende reperibili questi appunti nella propria pagina web perchè siano<br />
a <strong>di</strong>sposizione <strong>di</strong> tutti gli studenti quale ausilio <strong>di</strong>dattico.<br />
i
In<strong>di</strong>ce<br />
Prefazione i<br />
Capitolo 1. Presentazione del corso 1<br />
1. Programma del corso 1<br />
2. Prerequisiti 1<br />
3. Testi <strong>di</strong> riferimento 2<br />
Capitolo 2. Generalità sui Co<strong>di</strong>ci 3<br />
1. Introduzione 3<br />
2. Trasmissione <strong>di</strong> un messaggio 4<br />
3. Problemi <strong>di</strong> trasmissione 5<br />
4. Canali <strong>di</strong> trasmissione. Canali simmetrici 7<br />
5. Esempi. Co<strong>di</strong>ci: Fiscale, ISBN, Morse, ASCII. 8<br />
Capitolo 3. Co<strong>di</strong>ci a Blocchi 13<br />
1. Definizioni 13<br />
2. Co<strong>di</strong>ci che rivelano e correggono errori. Distanza <strong>di</strong> Hamming. 14<br />
3. Efficienza e Rapporto <strong>di</strong> separazione 21<br />
4. Relazioni fra i parametri <strong>di</strong> un co<strong>di</strong>ce 22<br />
5. (n, k)-co<strong>di</strong>ci, co<strong>di</strong>ci MDS, co<strong>di</strong>ci equivalenti 27<br />
Capitolo 4. Co<strong>di</strong>ci Lineari 33<br />
1. Definizioni e prime proprietà 33<br />
2. Matrici generatrici 35<br />
3. Co<strong>di</strong>fica nei co<strong>di</strong>ci lineari 41<br />
4. Tabella standard e Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari 43<br />
5. Co<strong>di</strong>ce duale 45<br />
6. Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari per sindrome 51<br />
7. Riepilogo relativo alla co<strong>di</strong>fica e deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare 56<br />
8. L’enumeratore <strong>dei</strong> pesi <strong>di</strong> un co<strong>di</strong>ce lineare 60<br />
Capitolo 5. Co<strong>di</strong>ci Ciclici 62<br />
1. Definizioni e proprietà 62<br />
2. Polinomio generatore e matrice generatrice 64<br />
3. Polinomio <strong>di</strong> controllo e matrice <strong>di</strong> controllo 71<br />
4. Schemi <strong>di</strong> co<strong>di</strong>fica 73<br />
ii
INDICE iii<br />
5. Deco<strong>di</strong>fica 77<br />
6. Co<strong>di</strong>ci BCH 79<br />
Capitolo 6. Co<strong>di</strong>ci <strong>di</strong> Hamming 85<br />
1. Definizioni e Proprietà 85<br />
2. Co<strong>di</strong>ci <strong>di</strong> Hamming binari 88<br />
Capitolo 7. Co<strong>di</strong>ci <strong>di</strong> Goppa 90<br />
Capitolo 8. Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni 91<br />
1. Gruppi come co<strong>di</strong>ci e <strong>di</strong>stanza <strong>di</strong> Hamming 91<br />
2. Gruppi strettamente k-transitivi 92<br />
3. Uncoverings 93<br />
4. Algoritmo <strong>di</strong> deco<strong>di</strong>fica per gruppi strettamente k-transitivi 94<br />
5. I gruppi <strong>di</strong> Mathieu M11 e M12 97<br />
6. Estensione a gruppi non strettamente k-transitivi 99<br />
7. Simboli ripetuti 101<br />
8. Ottimizzazione 103<br />
Capitolo 9. Elementi <strong>di</strong> Crittografia 107<br />
1. Introduzione 107<br />
2. Crittosistemi a chiave pubblica 109<br />
3. Vantaggi, svantaggi, applicazioni <strong>dei</strong> crittosistemi a chiave pubblica 110<br />
4. Il sistema RSA 111<br />
5. La firma elettronica, autenticazione con il sistema RSA 121<br />
6. Sicurezza del sistema RSA 122<br />
Capitolo 10. Gruppi e Insiemi <strong>di</strong> Permutazioni Equi<strong>di</strong>stanti 124
CAPITOLO 1<br />
Presentazione del corso<br />
1. Programma del corso<br />
(1) Co<strong>di</strong>ci a blocchi.<br />
(2) Co<strong>di</strong>ci lineari.<br />
(3) Co<strong>di</strong>ci ciclici.<br />
(4) Co<strong>di</strong>ci <strong>di</strong> Hamming.<br />
(5) Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni.<br />
(6) Elementi <strong>di</strong> Crittografia.<br />
(7) Gruppi e insiemi <strong>di</strong> permutazioni equi<strong>di</strong>stanti.<br />
Per contestualizzare maggiormente gli argomenti trattati nei punti (1) − (5),<br />
nelle parti (6) e (7) vengono presentati alcuni temi strettamente legati alla teoria<br />
<strong>dei</strong> co<strong>di</strong>ci quali la crittografia o, in ambito più strettamente algebrico, lo stu<strong>di</strong>o <strong>di</strong><br />
particolari insiemi finiti <strong>di</strong> permutazioni.<br />
2. Prerequisiti<br />
Si ritengono note le definizioni e le principali proprietà delle seguenti nozioni.<br />
• Numerazioni in basi <strong>di</strong>verse. Numerazione binaria.<br />
• Struttura Algebrica. Sottostruttura. Omomorfismo fra strutture algebriche.<br />
• Gruppo. Gruppi ciclici. Laterali <strong>di</strong> un sottogruppo.<br />
• Permutazioni e loro proprietà.<br />
• Anello. Ideali <strong>di</strong> un anello. Anello <strong>dei</strong> polinomi.<br />
• Corpo e campo. Caratteristica <strong>di</strong> un campo. Campi <strong>di</strong> Galois. Divisioni<br />
<strong>di</strong> polinomi su un campo K. Ampliamenti algebrici <strong>dei</strong> campi. Polinomi<br />
minimi.<br />
• Struttura algebrica delle classi resto modulo n.<br />
1
3. TESTI DI RIFERIMENTO 2<br />
3. Testi <strong>di</strong> riferimento<br />
Il materiale <strong>di</strong>dattico è fornito dal docente con appunti e articoli sugli argomenti<br />
trattati. Per i capitoli 2, 3, 4, 5, 6, 7, 9 si segnalano i seguenti testi <strong>di</strong> riferimento.<br />
(1) L. Berar<strong>di</strong>, <strong>Algebra</strong> e teoria <strong>dei</strong> co<strong>di</strong>ci correttori, Milano, F. Angeli, 1994.<br />
(2) M. W. Baldoni, C. Ciliberto, G. M. Piacentini Cattaneo, Aritmetica,<br />
Crittografia e Co<strong>di</strong>ci, Milano, Springer-Verlag, 2006.<br />
(3) L. Giuzzi, Co<strong>di</strong>ci Correttori, Milano, Springer, 2006.
CAPITOLO 2<br />
Generalità sui Co<strong>di</strong>ci<br />
1. Introduzione<br />
′′ Ti svegli una mattina, e nella semioscurità ve<strong>di</strong> una figura con uno strano<br />
cappello accucciata in un angolo della stanza. Dopo un po’ i tuoi occhi focalizzano<br />
e ti accorgi che in realtà sono i tuoi vestiti buttati su una se<strong>di</strong>a. Noti poi che la<br />
tua amata se n’è andata e trovi un biglietto sul cuscino che <strong>di</strong>ce ′′ I LOVE XOU ′′ .<br />
Quasi certamente questo ti rassicurerà, perchè presumerai che nel buio la Y sembri<br />
una X. Certo, non sei sicuro al 100%. Potrebbe anche essere che in realtà la X<br />
è una L e che sei stato abbandonato per il tuo caro amico(o almeno così credevi)<br />
Lou. ′′<br />
(Pretzel, 1992)<br />
Questo esempio racchiude l’essenza della teoria <strong>dei</strong> co<strong>di</strong>ci: trasmettendo messaggi<br />
c’è sempre una possibilità d’errore a cui ogni sistema <strong>di</strong> comunicazione deve<br />
far fronte, in modo da essere affidabile.<br />
I sistemi <strong>di</strong> comunicazione per trasferire messaggi sono molteplici: si può pensare<br />
ad una comunicazione via telegrafo o via telefono, ad un trasferimento <strong>di</strong> dati<br />
da un computer ad un altro, ad un messaggio inviato attraverso un cavo ottico o<br />
ad una antenna satellitare, ecc. ... .<br />
Qualunque sia il sistema <strong>di</strong> comunicazione utilizzato, uno <strong>dei</strong> problemi più<br />
frequenti è la presenza del rumore nel canale <strong>di</strong> comunicazione, ossia la presenza<br />
<strong>di</strong> un insieme <strong>di</strong> segnali <strong>di</strong> <strong>di</strong>sturbo e interferenze, estranei a quelli trasmessi.<br />
Questi <strong>di</strong>sturbi possono introdurre degli errori nelle informazioni trasmesse e ciò<br />
<strong>di</strong>venta particolarmente grave quando si tratta della trasmissione <strong>di</strong> informazioni<br />
cifrate.<br />
La teoria <strong>dei</strong> co<strong>di</strong>ci affronta questo tipo <strong>di</strong> problemi ed elabora tecniche volte ad<br />
identificare e a correggere gli eventuali errori commessi nel corso della trasmissione<br />
<strong>dei</strong> dati, oltre che a permettere <strong>di</strong> co<strong>di</strong>ficare e deco<strong>di</strong>ficare velocemente i dati che<br />
si vogliono inoltrare.<br />
3
2. TRASMISSIONE DI UN MESSAGGIO 4<br />
Queste tecniche richiedono però <strong>di</strong> trasmettere dati aggiuntivi (ridondanza)<br />
che se da un lato permettono <strong>di</strong> verificare se c’è stato un errore ed eventualmente<br />
correggerlo, dall’altro complicano ed appesantiscono le operazioni <strong>di</strong> trasmissione.<br />
Affinchè il sistema sia efficace è necessario trovare il giusto equilibrio tra la<br />
ridondanza e la correttezza dell’informazione.<br />
I co<strong>di</strong>ci correttori e rivelatori <strong>di</strong> errori sono importanti dal punto <strong>di</strong> vista pratico<br />
ma, al contempo, interessanti dal punto <strong>di</strong> vista teorico-matematico perchè senza<br />
la matematica non si possono costruire buoni co<strong>di</strong>ci.<br />
La branca della matematica su cui poggia la teoria <strong>dei</strong> co<strong>di</strong>ci è l’algebra e,<br />
in particolare, sono le strutture algebriche finite. Ad esempio, l’ambito in cui si<br />
sviluppa la teoria più interessante <strong>dei</strong> co<strong>di</strong>ci a blocchi è quello <strong>dei</strong> campi <strong>di</strong> Galois.<br />
Molti in<strong>di</strong>cano il 1948 l’anno <strong>di</strong> nascita della <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci perchè è l’anno<br />
della pubblicazione dell’articolo Mathematical theory of communication <strong>di</strong> C. E.<br />
Shannon in cui viene provata l’esistenza <strong>di</strong> co<strong>di</strong>ci capaci <strong>di</strong> correggere un buon<br />
numero <strong>di</strong> errori. Da questi inizi la teoria <strong>dei</strong> co<strong>di</strong>ci ha avuto un enorme sviluppo<br />
che dura tuttora (le pubblicazioni su questo argomento sono migliaia).<br />
In questo corso verranno esposti i fondamenti della teoria <strong>dei</strong> co<strong>di</strong>ci e, in particolare,<br />
saranno oggetto <strong>di</strong> stu<strong>di</strong>o alcune famiglie <strong>di</strong> co<strong>di</strong>ci a blocchi.<br />
Trasmettitore<br />
Ricevitore<br />
2. Trasmissione <strong>di</strong> un messaggio<br />
M x<br />
M<br />
Co<strong>di</strong>ficatore<br />
M x<br />
Deco<strong>di</strong>ficatore<br />
M x y<br />
Trasmettitore (o sorgente) = emette il messaggio M.<br />
y<br />
C<br />
A<br />
N<br />
A<br />
L<br />
E<br />
<strong>di</strong>sturbi<br />
Co<strong>di</strong>ficatore = traduce il messaggio in modo che possa attraversare il canale<br />
<strong>di</strong> comunicazione (<strong>di</strong> norma trasforma i messaggi in segnali elettrici): M → x.<br />
Canale = è il mezzo usato per far viaggiare i segnali.
3. PROBLEMI DI TRASMISSIONE 5<br />
Deco<strong>di</strong>ficatore = ritrasforma i segnali nel messaggio M e lo invia al ricevitore.<br />
Ricevitore = riceve il messaggio.<br />
Rumore = <strong>di</strong>sturbi <strong>di</strong> vario tipo.<br />
In questa operazione la prima necessità è quella <strong>di</strong> riconoscere se il messaggio<br />
ricevuto contiene errori e in tal caso correggerli.<br />
La scienza che si occupa <strong>dei</strong> meto<strong>di</strong> per cifrare un messaggio è la crittografia.<br />
La scienza che si occupa <strong>dei</strong> meto<strong>di</strong> per in<strong>di</strong>viduare e correggere gli errori immessi<br />
durante la trasmissione <strong>dei</strong> messaggi è la teoria <strong>dei</strong> co<strong>di</strong>ci.<br />
Pur essendo due ambiti strettamente connessi, in queste lezioni ci occuperemo <strong>di</strong><br />
teoria <strong>dei</strong> co<strong>di</strong>ci.<br />
3. Problemi <strong>di</strong> trasmissione<br />
Quando si trasmette un messaggio la prima necessità è quella <strong>di</strong> riconoscere se<br />
il messaggio ricevuto contiene errori e in tal caso correggerli.<br />
Per introdurre le varie problematiche che si debbono affrontare, iniziamo con<br />
due esempi.<br />
Esempio 2.3.1. Supponiamo si voglia trasmettere un messaggio in lingua italiana.<br />
Per co<strong>di</strong>ficare associamo ad ogni lettera dell’alfabeto italiano il suo numero<br />
d’or<strong>di</strong>ne scritto in forma binaria.<br />
a → 1 = 1 · 2 0 = 1<br />
b → 2 = 1 · 2 1 + 0 · 2 0 = 10<br />
c → 3 = 1 · 2 1 + 1 · 2 0 = 11<br />
...............<br />
z → 21 = 1 · 2 4 + 0 · 2 3 + 1 · 2 2 + 0 · 2 1 + 1 · 2 0 = 10101<br />
Nel canale viene immessa la sequenza binaria. Il deco<strong>di</strong>ficatore associa alla<br />
sequenza binaria la lettera dell’alfabeto italiano e la invia al ricevitore. E’ ovvio<br />
che co<strong>di</strong>ficatore e deco<strong>di</strong>ficatore devono conoscere ed utilizzare lo stesso metodo<br />
per co<strong>di</strong>ficare e deco<strong>di</strong>ficare. Trasmettere la lettera a significa<br />
Trasmettere la lettera z significa<br />
a → 1 → CANALE → 1 → a<br />
z → 10101 → CANALE → 10101 → ?<br />
Pur supponendo non vi siano stati errori durante la trasmissione, incontriamo<br />
il primo ostacolo: poichè le lettere dell’alfabeto sono rappresentate da blocchi (<strong>di</strong>
3. PROBLEMI DI TRASMISSIONE 6<br />
0 ed 1) <strong>di</strong> lunghezza <strong>di</strong>versa, se trasmettiamo la sequenza 10101, il deco<strong>di</strong>ficatore<br />
non sa se la sequenza è relativa ad una sola lettera o se sono state trasmesse più<br />
lettere in successione. Ad esempio:<br />
10101 → 10101 = z<br />
10101 → 10 10 1 = bba<br />
10101 → 10 101 = be<br />
Nasce dunque il problema della sud<strong>di</strong>visione delle sequenze ricevute.<br />
Per risolvere questo problema basta co<strong>di</strong>ficare tutte le lettere con sequenze<br />
aventi la stessa lunghezza. La minima lunghezza sarà quella necessaria per<br />
rappresentare la sequenza più lunga, nel nostro esempio la z. Per fare ciò è sufficiente,<br />
per esempio, aggiungere all’inizio <strong>di</strong> ogni sequenza tanti zeri quanti ne<br />
occorrono per arrivare alla lunghezza prestabilita (nel nostro esempio, scegliendo<br />
la minima, per arrivare ad avere cinque simboli). A questo punto stabiliamo che<br />
tutte le lettere dell’alfabeto saranno trasmesse con delle cinquine <strong>di</strong> simboli:<br />
a → 00001<br />
b → 00010<br />
c → 00011<br />
.........<br />
z → 10101<br />
ora per deco<strong>di</strong>ficare non ci sono più ambiguità.<br />
Esempio 2.3.2. Un collega in America lancia una moneta e, via posta elettronica,<br />
ci trasmette 0 se viene TESTA, ci trasmette 1 se viene CROCE. Nella<br />
trasmissione c’è però una probabilità p <strong>di</strong> errore, ovviamente 0 ≤ p ≤ 1. Supponiamo<br />
sia p = 0, 01; significa che presumiamo capiti una volta su 100 che venga<br />
trasmesso 1 invece <strong>di</strong> 0 o viceversa. Se noi riceviamo 0 non possiamo dunque<br />
essere sicuri che sia uscita TESTA. Per affrontare questa criticità, proviamo ad<br />
introdurre una ridondanza ossia ad introdurre degli elementi che ′′ appesantiscono ′′<br />
la trasmissione ma riducono la probabilità <strong>di</strong> errore.<br />
Chie<strong>di</strong>amo al collega in America <strong>di</strong> trasmettere 00 se esce TESTA e <strong>di</strong> trasmettere<br />
11 se esce CROCE. Supponiamo che esca TESTA.<br />
La probabilità <strong>di</strong> ricevere 11, ossia che nella trasmissione vengano effettuati due<br />
errori è p 2 = 0, 0001 e dunque, rispetto a prima, è molto ridotta. La probabilità <strong>di</strong><br />
ricevere 01 oppure 10, ossia che venga effettuato un solo errore, è 2 · 0, 99 · 0, 01 =<br />
0, 0198. La probabilità <strong>di</strong> ricevere 00, informazione corretta, è 0, 99·0, 99 = 0, 9801.<br />
Inoltre se riceviamo 01 oppure 10 siamo certi che vi è un errore <strong>di</strong> trasmissione e<br />
perciò possiamo richiedere al collega in America <strong>di</strong> riinviare il messaggio. Dunque<br />
solo in un caso su 10000 potremo essere tratti in errore.<br />
Se non ci sono problemi <strong>di</strong> tempo e <strong>di</strong> costi per l’utilizzo del canale <strong>di</strong> trasmissione,<br />
possiamo ancora migliorare la situazione fissando un intero positivo <strong>di</strong>spari
4. CANALI DI TRASMISSIONE. CANALI SIMMETRICI 7<br />
n e chiedendo <strong>di</strong> inviare una sequenza <strong>di</strong> n cifre 0 se esce TESTA e una sequenza<br />
<strong>di</strong> n cifre 1 se esce CROCE. Ciò aiuterà a deco<strong>di</strong>ficare TESTA se la sequenza <strong>di</strong><br />
arrivo contiene più cifre 0 che 1 e deco<strong>di</strong>fiare CROCE se contiene più cifre 1 che<br />
0, (Principio <strong>di</strong> massima Somiglianza).<br />
La probabilità <strong>di</strong> errore <strong>di</strong>venta<br />
Pn = <br />
0≤i
5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 8<br />
Nell’ambito <strong>dei</strong> canali <strong>di</strong> comunicazione senza memoria sono particolarmente<br />
importanti i canali simmetrici. Un canale <strong>di</strong> questo tipo è definito dalla proprietà<br />
che la probabilità p che una lettera ai in entrata sia trasformata in uscita<br />
in una lettera <strong>di</strong>versa aj non <strong>di</strong>pende da ai e aj ma è la stessa per tutte le coppie<br />
<strong>di</strong> lettere <strong>di</strong>stinte. Ciò significa che nella matrice del canale P risulta pij = p per<br />
ogni coppia (i, j), i = j. Il numero p si chiama probabilità <strong>di</strong> errore del canale.<br />
La matrice <strong>di</strong> un canale simmetrico rispetto ad un alfabeto A con q lettere è<br />
dunque del tipo<br />
P =<br />
⎛<br />
⎜<br />
⎝<br />
1 − (q − 1)p p · · · p<br />
p 1 − (q − 1)p · · · p<br />
.<br />
. . .<br />
p p · · · 1 − (q − 1)p<br />
In particolare sono molto usati i canali simmetrici binari denotati con BSC<br />
(Binary Symmetric Channel). In essi l’alfabeto <strong>di</strong>spone solo <strong>di</strong> due simboli, per<br />
esempio 0 ed 1; poichè ciascuna lettera in entrata ha la stessa probabilità p <strong>di</strong><br />
⎞<br />
⎟<br />
⎠ .<br />
essere trasformata nell’altra in uscita, la matrice del canale è data da<br />
P =<br />
1 − p p<br />
p 1 − p<br />
La matrice <strong>di</strong> un canale simmetrico binario viene schematizzata con la seguente<br />
figura<br />
1−P<br />
<br />
.<br />
0 <br />
<br />
<br />
<br />
0<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
P<br />
<br />
<br />
<br />
P<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
1<br />
<br />
1<br />
1−P<br />
5. Esempi. Co<strong>di</strong>ci: Fiscale, ISBN, Morse, ASCII.<br />
Riportiamo alcuni esempi <strong>di</strong> co<strong>di</strong>ci molto comuni i cui nomi sono certamente<br />
noti al lettore.<br />
Esempio 2.5.1. Il Co<strong>di</strong>ce Fiscale Italiano è un co<strong>di</strong>ce su un alfabeto <strong>di</strong> 36<br />
lettere (le 26 dell’alfabeto inglese e le cifre decimali da 0 a 9). Le sue parole servono<br />
a co<strong>di</strong>ficare qualunque persona o ente abbia rapporti con il sistema fiscale italiano.<br />
Nel caso <strong>di</strong> una persona fisica la parola corrispondente è composta da 16 lettere:<br />
le prime 6 si riferiscono a cognome e nome, il secondo gruppo <strong>di</strong> 5 in<strong>di</strong>vidua la<br />
data <strong>di</strong> nascita e il sesso, il successivo gruppo <strong>di</strong> 4 in<strong>di</strong>vidua la località italiana
5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 9<br />
o lo stato estero <strong>di</strong> nascita e l’ultima, che è <strong>di</strong> controllo, si calcola me<strong>di</strong>ante un<br />
opportuno algoritmo sulle prime 15.<br />
Precisamente:<br />
• Le prime tre lettere sono le prime tre consonanti del cognome.<br />
• Il secondo gruppo <strong>di</strong> tre lettere sono la prima, la terza e la quarta consonante<br />
del nome.<br />
• Seguono le ultime due cifre dell’anno <strong>di</strong> nascita.<br />
• La lettera seguente in<strong>di</strong>ca il mese <strong>di</strong> nascita secondo le corrispondenze<br />
Gennaio = A Maggio = E Settembre = P<br />
Febbraio = B Giugno = H Ottobre = R<br />
Marzo = C Luglio = L Novembre = S<br />
Aprile = D Agosto = M Dicembre = T<br />
• Le due cifre successive in<strong>di</strong>cano il giorno <strong>di</strong> nascita ed il sesso : per i<br />
soggetti <strong>di</strong> sesso maschile, il giorno <strong>di</strong> nascita rimane invariato (con i<br />
numeri da 1 a 31, facendo precedere dalla cifra 0 i giorni del mese da 1 a<br />
9). Per i soggetti <strong>di</strong> sesso femminile, il giorno <strong>di</strong> nascita viene aumentato<br />
<strong>di</strong> 40 (per cui i numeri che compaiono vanno da 41 a 71).<br />
• I quattro simboli successivi in<strong>di</strong>cano il comune italiano o lo stato estero<br />
<strong>di</strong> nascita.<br />
• Il se<strong>di</strong>cesimo carattere ha una funzione <strong>di</strong> controllo. Esso viene determinato<br />
nel seguente modo: a ciascuno <strong>dei</strong> primi quin<strong>di</strong>ci simboli viene<br />
assegnato un valore numerico; se un simbolo occupa una posizione <strong>di</strong> or<strong>di</strong>ne<br />
pari, ad esso si associa un numero secondo l’or<strong>di</strong>ne naturale (cioè<br />
alla lettera A o allo zero viene associato il valore zero; alla lettera B o<br />
al numero 1 viene associato il valore 1, e così via per tutte le lettere e i<br />
numeri); se invece un simbolo occupa una posizione <strong>di</strong> or<strong>di</strong>ne <strong>di</strong>spari, ad<br />
esso viene associato un valore numerico secondo la tabella sotto riportata.<br />
I valori numerici così determinati, vengono ad<strong>di</strong>zionati e la somma si<br />
<strong>di</strong>vide per il numero 26. Il carattere <strong>di</strong> controllo si ottiene convertendo<br />
tale cifra nel carattere corrispondente l’or<strong>di</strong>ne naturale.<br />
Tabella <strong>di</strong> conversione <strong>dei</strong> caratteri <strong>di</strong> or<strong>di</strong>ne <strong>di</strong>spari.<br />
A o zero = 1 | J o 9 = 21 | S = 12<br />
B o 1 = 0 | K = 2 | T = 14<br />
C o 2 = 5 | L = 4 | U = 16<br />
D o 3 = 7 | M = 18 | V = 10<br />
E o 4 = 9 | N = 20 | W = 22<br />
F o 5 = 13 | O = 11 | X = 25<br />
G o 6 = 15 | P = 3 | Y = 24<br />
H o 7 = 17 | Q = 6 | Z = 23<br />
I o 8 = 19 | R = 8 |
5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 10<br />
Esempio 2.5.2. Il co<strong>di</strong>ce ISBN ( International Standard Book Number) è un<br />
co<strong>di</strong>ce a blocchi C <strong>di</strong> lunghezza 10 sull’alfabeto <strong>di</strong> 11 lettere costituito dalle cifre<br />
decimali da 0 a 9 e dalla lettera X ed è usato per co<strong>di</strong>ficare i libri in commercio.<br />
Quasi ogni libro, infatti, che non sia troppo vecchio, presenta stampata sul retro<br />
della copertina una successione <strong>di</strong> <strong>di</strong>eci cifre, che è il suo ISBN e cioè la parola<br />
<strong>di</strong> C ad esso associata. Lo schema <strong>di</strong> co<strong>di</strong>fica, ad esempio, <strong>di</strong> un libro scritto in<br />
inglese è il seguente: la prima lettera a1 <strong>di</strong> una parola a è zero e corrisponde alla<br />
lingua inglese; le due lettere successive a2a3 in<strong>di</strong>viduano la casa e<strong>di</strong>trice; le sei<br />
lettere successive a4a5a6a7a8a9 in<strong>di</strong>cano un numero assegnato al libro dalla casa<br />
e<strong>di</strong>trice; l’ultima lettera a10 è <strong>di</strong> controllo ed è uguale al resto r della <strong>di</strong>visione per<br />
11 dell’intero<br />
a1 + 2a2 + 3a3 + 4a4 + 5a5 + 6a6 + 7a7 + 8a8 + 9a9<br />
se 0 ≤ r ≤ 9, è invece uguale ad X se risulta r = 10. Come si vede, l’ultima lettera<br />
<strong>di</strong> una parola del co<strong>di</strong>ce ISBN è l’unica che può assumere il valore X. Per esempio,<br />
il libro <strong>di</strong> E.F.Assmus e J.D.Key dal titolo Designs and Their Codes, pubblicato<br />
dalla Cambridge University Press, ha ISBN uguale a 0 − 521 − 41361 − 3. Ciò<br />
significa che la casa e<strong>di</strong>trice Cambridge University Press è co<strong>di</strong>ficata con ′′ 52 ′′ .<br />
Da notare che i trattini che separano alcuni gruppi <strong>di</strong> cifre dell’ISBN non hanno<br />
alcun significato al fine della co<strong>di</strong>fica. Per maggiori informazioni sul co<strong>di</strong>ce ISBN<br />
vedere il sito web: http://www.alice.it/bookshop/law.bks/co<strong>di</strong>inte.htm .<br />
Esempio 2.5.3. Il co<strong>di</strong>ce Morse è un co<strong>di</strong>ce a lunghezza variabile sull’alfabeto<br />
<strong>di</strong> tre lettere : punto, linea, spazio<br />
Γ = {•, −, spazio}<br />
Esso serve a co<strong>di</strong>ficare le lettere dell’alfabeto inglese ed è stato molto usato nel<br />
passato soprattutto per trasmettere messaggi con il telegrafo senza fili. Il co<strong>di</strong>ce,<br />
riportato in tabella, è stato costruito in modo che una sua parola è tanto più lunga<br />
quanto la lettera corrispondente è meno frequente nella lingua inglese.<br />
A • - B - • • • C - • - • D - ••<br />
E • F - •• - • G - - • H • • ••<br />
I •• J • - - - K - • - L • - ••<br />
M - - N - • O - - - P • - - •<br />
Q - - • - R • - • S • • • T -<br />
U •• - V • • • - W • - - X - •• -<br />
Y - • - - Z - - ••<br />
Si noti, per esempio, che nella lingua inglese la lettera E è più frequente della<br />
Z e quin<strong>di</strong> la parola del co<strong>di</strong>ce ′′ • ′′ corrispondente ad E è relativamente più corta<br />
<strong>di</strong> quella ′′ − − • • ′′ corrispondente a Z. Questo semplice accorgimento si presta<br />
chiaramente a rendere più veloce la co<strong>di</strong>fica, la trasmissione e la deco<strong>di</strong>fica <strong>dei</strong>
5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 11<br />
messaggi. Lo spazio che figura fra le lettere <strong>di</strong> Γ non è mai utilizzato per la<br />
co<strong>di</strong>fica <strong>di</strong> una singola lettera ma è essenziale per <strong>di</strong>videre tra loro le parole del<br />
co<strong>di</strong>ce presenti in un messaggio co<strong>di</strong>ficato. Più precisamente, quando si co<strong>di</strong>fica<br />
una frase, bisogna inserire esattamente uno spazio tra due lettere dell’alfabeto<br />
co<strong>di</strong>ficato ed almeno due spazi fra due parole. Per esempio, se usiamo il simbolo<br />
@ per in<strong>di</strong>care uno spazio, l’espressione<br />
si co<strong>di</strong>fica con<br />
CODICE MORSE<br />
− • − • @ − − − @ − • • @ • •@ − • − •@ • @@ − −@ − − − @ • − • @ • • • @•<br />
Osserviamo che il co<strong>di</strong>ce Morse non <strong>di</strong>stingue le lettere minuscole dalle maiuscole.<br />
Il co<strong>di</strong>ce Morse è un co<strong>di</strong>ce introdotto per la trasmissione <strong>di</strong> testo su linee telegrafiche<br />
e queste trasmettono solo un tipo <strong>di</strong> segnale: presenza o assenza <strong>di</strong> corrente.<br />
Se si rappresenta con il simbolo ′′ 1 ′′ la presenza <strong>di</strong> corrente e con il simbolo ′′ 0 ′′<br />
l’assenza, vigono le seguenti regole <strong>di</strong> modulazione:<br />
(1) Il punto ′′ • ′′ corrisponde all’unità fondamentale <strong>di</strong> tempo <strong>di</strong> trasmissione<br />
e viene in<strong>di</strong>cato con ′′ 1 ′′ .<br />
(2) La linea ′′ − ′′ corrisponde ad un segnale continuato <strong>di</strong> durata tripla rispetto<br />
quello del punto e dunque corrisponde ad inviare la sequenza 111.<br />
(3) Facendo corrispondere il simbolo 0 alla pausa della durata <strong>di</strong> un punto,<br />
in ogni lettera i singoli simboli <strong>di</strong> punto e linea sono separati da 0, in ogni<br />
parola le singole lettere sono fra loro separate da 000 e due parole sono<br />
fra loro separate da 0000000.<br />
Esempio 2.5.4. L’American Standard Code for Information Interchange, noto<br />
come Co<strong>di</strong>ce ASCII, dal 1968 è il co<strong>di</strong>ce standard per i computer. E’ un co<strong>di</strong>ce<br />
a blocchi sull’alfabeto F = {0, 1} formato da tutte le parole <strong>di</strong> lunghezza sette e,<br />
quin<strong>di</strong>, contiene esattamente 2 7 = 128 parole. Esso è stato costruito per co<strong>di</strong>ficare<br />
le lettere dell’alfabeto inglese maiuscole e minuscole, le cifre decimali da 0 a 9 e una<br />
serie <strong>di</strong> altri simboli e istruzioni allo scopo <strong>di</strong> permettere all’architettura interna<br />
<strong>di</strong> un computer <strong>di</strong> operare solo con i simboli 0 ed 1. Al co<strong>di</strong>ce standard iniziale<br />
a 7 bit sono seguite estensioni a 8 bit con lo scopo <strong>di</strong> raddoppiare il numero <strong>di</strong><br />
caratteri rappresentabili. ASCII esteso (8 bit) ha 256 configurazioni: le prime 128<br />
(da 00000000 a 01111111) sono associate ai caratteri dell’ASCII standard, le altre<br />
128 (da 10000000 a 11111111) sono associate a lettere accentate, a caratteri grafici,<br />
a simboli matematici e scientifici, eccetera.<br />
Nella Tabella 1 si riporta, secondo il co<strong>di</strong>ce ASCII, la traduzione in numeri<br />
<strong>dei</strong> simboli più comunemente usati durante la scrittura <strong>di</strong> un testo. Si parte da 32<br />
perchè gli interi minori <strong>di</strong> 32 e il 127 sono caratteri <strong>di</strong> controllo; il 32 corrisponde<br />
al carattere <strong>di</strong> spazio.
5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 12<br />
Nella Tabella 2 sono elencate le parole del co<strong>di</strong>ce ASCII che corrispondono<br />
alle cifre da 0 a 9 e alle lettere maiuscole dell’alfabeto scritte in forma binaria.<br />
Per esempio la sequenza<br />
VA BENE !<br />
viene trasformata in<br />
0101011001000001001000000100001001000101010011100100010100100001<br />
Tabella 1<br />
32 44 , 56 8 68 D 80 P 92 .\ 104 h 116 t<br />
33 ! 45 − 57 9 69 E 81 Q 93 ] 105 i 117 u<br />
34 ′′ 46 . 58 : 70 F 82 R 94 ˆ 106 j 118 v<br />
35 # 47 / 59 ; 71 G 83 S 95 _ 107 k 119 w<br />
36 $ 48 0 60 < 72 H 84 T 96 108 l 120 x<br />
37 % 49 1 61 = 73 I 85 U 97 a 109 m 121 y<br />
38 & 50 2 62 > 74 J 86 V 98 b 110 n 122 z<br />
39 ′ 51 3 63 ? 75 K 87 W 99 c 111 o 123 {<br />
40 ( 52 4 64 @ 76 L 88 X 100 d 112 p 124 |<br />
41 ) 53 5 65 A 77 M 89 Y 101 e 113 q 125 }<br />
42 ∗ 54 6 66 B 78 N 90 Z 102 f 114 r 126 ∼<br />
43 + 55 7 67 C 79 O 91 [ 103 g 115 s<br />
Tabella 2<br />
(spazio) 00100000 ! 00100001 0 00110000 1 00110001<br />
2 00110010 3 00110011 4 00110100 5 00110101<br />
6 00110110 7 00110111 8 00111000 9 00111001<br />
A 01000001 B 01000010 C 01000011 D 01000100<br />
E 01000101 F 01000110 G 01000111 H 01001000<br />
I 01001001 J 01001010 K 01001011 L 01001100<br />
M 01001101 N 01001110 O 01001111 P 01010000<br />
Q 01010001 R 01010010 S 01010011 T 01010100<br />
U 01010101 V 01010110 W 01010111 X 01011000<br />
Y 01011001 Z 01011010
CAPITOLO 3<br />
Co<strong>di</strong>ci a Blocchi<br />
Per superare i problemi evidenziati dagli esempi del paragrafo 3 del capitolo<br />
precedente, i co<strong>di</strong>ci stu<strong>di</strong>ati sono principalmente co<strong>di</strong>ci a blocchi ossia co<strong>di</strong>ci in cui<br />
le parole hanno tutte la stessa lunghezza.<br />
La proprietà fondamentale <strong>dei</strong> co<strong>di</strong>ci a blocchi è che ogni blocco viene co<strong>di</strong>ficato<br />
e deco<strong>di</strong>ficato in modo in<strong>di</strong>pendente ed autonomo sia da quelli che lo precedono<br />
che da quelli che lo seguono. Pertanto per descrivere l’azione generale <strong>di</strong> co<strong>di</strong>fica<br />
e <strong>di</strong> deco<strong>di</strong>fica <strong>dei</strong> blocchi, basta descriverla su uno solo <strong>di</strong> essi.<br />
1. Definizioni<br />
Definizione 3.1.1. Sia Aq = {x1, x2, . . . , xq} un insieme finito <strong>di</strong> car<strong>di</strong>nalità<br />
|Aq| = q ≥ 2 e sia n un intero positivo. Si definisce co<strong>di</strong>ce a blocchi <strong>di</strong> lunghezza<br />
n ed or<strong>di</strong>ne q (o co<strong>di</strong>ce q-ario) un qualunque sottoinsieme non vuoto C<br />
<strong>di</strong> A n q .<br />
Nei casi q = 2 e q = 3 il co<strong>di</strong>ce si <strong>di</strong>ce rispettivamente co<strong>di</strong>ce binario e co<strong>di</strong>ce<br />
ternario.<br />
L’insieme Aq è detto alfabeto <strong>di</strong> C; una parola del co<strong>di</strong>ce è una n-pla or<strong>di</strong>nata<br />
<strong>di</strong> simboli dell’alfabeto e viene denotata con x = x1x2 · · · xn oppure x =<br />
(x1, x2, · · · , xn) o semplicemente con (x1, x2, · · · , xn), i simboli xi che formano la<br />
n-pla vengono detti componenti o coor<strong>di</strong>nate della parola. L’or<strong>di</strong>ne |C| = M <strong>di</strong> C<br />
si <strong>di</strong>ce grandezza del co<strong>di</strong>ce. A n q è detto spazio delle parole <strong>di</strong> lunghezza n e<br />
or<strong>di</strong>ne q.<br />
I co<strong>di</strong>ci a blocchi rispondono all’esigenza <strong>di</strong> avere tutte le parole con la stessa<br />
lunghezza e <strong>di</strong> avere la possibilità <strong>di</strong> prefissare la lunghezza n a seconda dell’esigenza<br />
del caso.<br />
Esistono co<strong>di</strong>ci in cui variano grandezza del co<strong>di</strong>ce e lunghezza delle parole,<br />
sono detti co<strong>di</strong>ci a lunghezza variabile.<br />
13
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 14<br />
Noi tratteremo solo co<strong>di</strong>ci a blocchi e pertanto nel seguito li chiameremo<br />
soltanto co<strong>di</strong>ci.<br />
2. Co<strong>di</strong>ci che rivelano e correggono errori. Distanza <strong>di</strong> Hamming.<br />
R. Hamming (1948) è fra i primi a stu<strong>di</strong>are tecniche per aumentare l’efficienza<br />
<strong>di</strong> un co<strong>di</strong>ce. Lo scopo è quello <strong>di</strong> trovare meto<strong>di</strong> affinchè un co<strong>di</strong>ce sia in grado non<br />
solo <strong>di</strong> scoprire ma anche <strong>di</strong> correggere errori. Illustriamo l’esempio considerato<br />
dallo stesso Hamming e noto come co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming.<br />
Supponiamo <strong>di</strong> dover trasmettere <strong>dei</strong> messaggi consistenti <strong>di</strong> numeri da 0 a 15<br />
scritti in base 2. Si tratta dunque <strong>di</strong> quaterne <strong>di</strong> cifre 0 e 1. Il nostro co<strong>di</strong>ce ha<br />
per alfabeto il campo <strong>di</strong> Galois GF (2) = A2 = {0, 1} ed è |C| = M = 2 4 = 16.<br />
Se la parola da trasmettere è la quaterna (a1, a2, a3, a4), noi trasmettiamo la<br />
7-upla<br />
(a1, a2, a3, a4, a1 + a3 + a4, a1 + a2 + a4, a1 + a2 + a3)<br />
in cui le somme sono fatte ovviamente in GF (2).<br />
Ad esempio invece <strong>di</strong> trasmettere la quaterna (0, 1, 0, 0) viene trasmessa la<br />
settupla (0, 1, 0, 0, 0, 1, 1). In pratica si costruisce un co<strong>di</strong>ce <strong>di</strong> lunghezza n = 7,<br />
immergendo C = A 4 2 in A 7 2 me<strong>di</strong>ante l’applicazione iniettiva<br />
ϕ : A 4 2 → A 7 2<br />
che ad (a1, a2, a3, a4) ∈ A 4 2 associa l’elemento (a1, a2, a3, a4, a1 + a3 + a4, a1 + a2 +<br />
a4, a1 + a2 + a3) ∈ A 7 2.<br />
A partire dal co<strong>di</strong>ce C = A 4 2 si costruisce il co<strong>di</strong>ce ϕ(C) ⊆ A 7 2; poichè C e<br />
ϕ(C) sono in corrispondenza biunivoca, ′′ identifichiamo ′′ C con ϕ(C) ⊆ A 7 2 ossia<br />
parleremo <strong>di</strong> C come il co<strong>di</strong>ce le cui parole sono delle 7-ple.<br />
Ve<strong>di</strong>amo cosa abbiamo guadagnato nel passare da sequenze costituite da quattro<br />
simboli a parole costituite da sette simboli. Osserviamo che se (x1, x2, · · · , x7)<br />
è una parola del co<strong>di</strong>ce, si ha<br />
⎧<br />
⎨<br />
⎩<br />
x1 + x3 + x4 + x5 = 0<br />
x1 + x2 + x4 + x6 = 0<br />
x1 + x2 + x3 + x7 = 0<br />
Infatti, per esempio, il primo membro della prima equazione è x1+x3+x4+x5 =<br />
2x1 + 2x3 + 2x4 che in A2 vale 0.<br />
Il sistema lineare <strong>di</strong> equazioni costruito e considerato sul campo GF (2), è detto<br />
sistema delle con<strong>di</strong>zioni <strong>di</strong> parità del co<strong>di</strong>ce. Se riceviamo il messaggio<br />
(x1, x2, · · · , x7) ed esso non verifica il sistema lineare sopra scritto, <strong>di</strong> sicuro vi è<br />
un errore <strong>di</strong> trasmissione. Dunque il co<strong>di</strong>ce è in grado <strong>di</strong> scoprire errori.
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 15<br />
Supponiamo ora <strong>di</strong> sapere, o <strong>di</strong> ritenere assai probabile, che nel trasmettere una<br />
7-pla <strong>di</strong> C si possa verificare al massimo un errore. Allora il sistema <strong>di</strong> equazioni<br />
soprascritto è tale che i casi possibili sono tutti e soli i seguenti:<br />
• se (x1, x2, · · · , x7) non verifica nessuna delle equazioni del sistema lineare,<br />
l’errore è al primo posto;<br />
• se (x1, x2, · · · , x7) verifica la prima equazione del sistema lineare ma non<br />
le altre due, l’errore è al secondo posto;<br />
• se (x1, x2, · · · , x7) verifica la seconda equazione del sistema lineare ma non<br />
le altre due, l’errore è al terzo posto;<br />
• se (x1, x2, · · · , x7) verifica la terza equazione del sistema lineare ma non<br />
le altre due , l’errore è al quarto posto;<br />
• se (x1, x2, · · · , x7) verifica la seconda e la terza equazione del sistema<br />
lineare ma non la prima, l’errore è al quinto posto;<br />
• se (x1, x2, · · · , x7) verifica prima e la terza equazione del sistema lineare<br />
ma non la seconda, l’errore è al sesto posto;<br />
• se (x1, x2, · · · , x7) verifica la prima e la seconda equazione del sistema<br />
lineare ma non la terza, l’errore è al settimo posto;<br />
Dunque se sappiamo che c’è un solo errore, il sistema ci consente anche<br />
<strong>di</strong> in<strong>di</strong>viduare dove c’è l’errore e quin<strong>di</strong> <strong>di</strong> correggerlo. Infatti essendo il co<strong>di</strong>ce<br />
binario, per correggerlo basta sostituire 0 a 1, o viceversa, nel posto in cui c’è<br />
l’errore.<br />
Esempio 3.2.1. Supponiamo <strong>di</strong> ricevere la parola p = (0, 1, 0, 1, 0, 1, 0), che<br />
contiene errori perchè non sod<strong>di</strong>sfa il sistema lineare, supponiamo inoltre <strong>di</strong> sapere<br />
che l’errore è uno solo. Poichè p non sod<strong>di</strong>sfa nessuna delle tre equazioni del<br />
sistema, per quanto schematizzato prima, si ha che l’errore è nella prima coor<strong>di</strong>nata<br />
e perciò la parola corretta è p = (1, 1, 0, 1, 0, 1, 0).<br />
Il motivo per cui il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming funziona è che, come si verifica<br />
imme<strong>di</strong>atamente, due <strong>di</strong>verse parole <strong>di</strong>fferiscono in almeno tre coor<strong>di</strong>nate.<br />
Cerchiamo <strong>di</strong> capire con un esempio. Sia (x1, x2, · · · , x7) una parola del co<strong>di</strong>ce<br />
che durante la trasmissione subisce un errore in una sola coor<strong>di</strong>nata, sia ad esempio<br />
la prima. Al posto <strong>di</strong> p = (x1, x2, · · · , x7) riceviamo p ′ = (x ′ 1, x2, · · · , x7). Poichè<br />
ogni altra parola <strong>di</strong>fferisce da p in almeno tre coor<strong>di</strong>nate, p ′ <strong>di</strong>fferisce dalle parole<br />
del co<strong>di</strong>ce <strong>di</strong>verse da p in almeno due coor<strong>di</strong>nate. Allora correggiamo l’errore<br />
andando a considerare la parola del co<strong>di</strong>ce ′′ più somigliante ′′ a quella ricevuta.<br />
L’unica parola del co<strong>di</strong>ce che <strong>di</strong>fferisce da (x ′ 1, x2, · · · , x7) in una sola coor<strong>di</strong>nata<br />
(e quin<strong>di</strong> più somigliante) è la p = (x1, x2, · · · , x7).
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 16<br />
Le considerazioni fatte per il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming si generalizzano. Formalizziamo<br />
questi concetti introducendo la nozione <strong>di</strong> <strong>di</strong>stanza <strong>di</strong> due parole.<br />
Definizione 3.2.2. Siano p = (x1, x2, · · · , xn), p ′ = (y1, y2, · · · , yn) ∈ A n q . Si<br />
definisce <strong>di</strong>stanza <strong>di</strong> Hamming <strong>di</strong> p da p ′ il numero <strong>di</strong> coor<strong>di</strong>nate in cui p e p ′<br />
<strong>di</strong>fferiscono, si in<strong>di</strong>ca con d(p, p ′ ). In simboli<br />
d(p, p ′ ) = |{i | xi = yi}|.<br />
La <strong>di</strong>stanza <strong>di</strong> Hamming è un’applicazione d : A n q × A n q → R che sod<strong>di</strong>sfa le<br />
seguenti proprietà caratteristiche <strong>di</strong> una metrica tra punti del piano o dello spazio.<br />
Comunque prese tre parole p, p ′ , p ′′ del co<strong>di</strong>ce, si ha :<br />
(1) d(p, p ′ ) ≥ 0; d(p, p ′ ) = 0 se e solo se p = p ′ (positività)<br />
(2) d(p, p ′ ) = d(p ′ , p) (simmetria)<br />
(3) d(p, p ′ ) ≤ d(p, p ′′ ) + d(p ′′ , p ′ ) (<strong>di</strong>suguaglianza triangolare).<br />
La vali<strong>di</strong>tà <strong>di</strong> 1) e <strong>di</strong> 2) è imme<strong>di</strong>ata. Proviamo la 3).<br />
Siano p = (x1, x2, · · · , xn), p ′ = (y1, y2, · · · , yn), p ′′ = (z1, z2, · · · , zn), occorre<br />
provare che<br />
|{i | xi = yi}| ≤ |{i | xi = zi}| + |{i | zi = yi}|.<br />
Se in i si ha xi = yi, allora zi può essere uguale al più ad uno fra xi e yi e<br />
pertanto ogni i che compare al primo membro compare anche in almeno uno degli<br />
adden<strong>di</strong> del secondo membro. Ciò prova la vali<strong>di</strong>tà della <strong>di</strong>suguaglianza.<br />
Definizione 3.2.3. Si chiama <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce C, e si in<strong>di</strong>ca<br />
con d = d(C), il minimo delle <strong>di</strong>stanze tra due parole <strong>di</strong>stinte qualsiasi <strong>di</strong> C. In<br />
simboli<br />
d = d(C) = min{d(p, p ′ ), ∀ p, p ′ ∈ C, p = p ′ }.<br />
La <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce, come faremo vedere nel seguito, è il parametro<br />
su cui si basano le in<strong>di</strong>cazioni <strong>di</strong> quanti errori un co<strong>di</strong>ce può in<strong>di</strong>viduare e/o<br />
correggere.<br />
Definizione 3.2.4. Si <strong>di</strong>ce che il co<strong>di</strong>ce C è un (n, M, d)q - co<strong>di</strong>ce se è:<br />
• definito su un alfabeto <strong>di</strong> q simboli,<br />
• <strong>di</strong> lunghezza n,<br />
• <strong>di</strong> grandezza M = |C|,<br />
• con <strong>di</strong>stanza minima d.<br />
I numeri q, n, M, d sono i parametri del co<strong>di</strong>ce.<br />
Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è un (7, 16, 3)2 - co<strong>di</strong>ce.
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 17<br />
La scrittura C ⊆ A n q significa che le parole del co<strong>di</strong>ce hanno lunghezza n (perchè<br />
sono delle n-ple) e sono sull’alfabeto Aq <strong>di</strong> q simboli; pertanto, in seguito, la<br />
scrittura (n, M, d)q verrà spesso semplificata a seconda <strong>di</strong> quali sono i parametri<br />
necessari per la comprensione dell’argomento trattato.<br />
Per stu<strong>di</strong>are la relazione tra la <strong>di</strong>stanza <strong>di</strong> Hamming e il problema della correzione<br />
degli errori <strong>di</strong> trasmissione, iniziamo con la seguente definizione.<br />
Definizione 3.2.5. Un co<strong>di</strong>ce C si <strong>di</strong>ce h-correttore se h è il numero massimo<br />
<strong>di</strong> errori che il co<strong>di</strong>ce è in grado <strong>di</strong> correggere. Il co<strong>di</strong>ce si <strong>di</strong>ce h-rivelatore se h<br />
è il numero massimo <strong>di</strong> errori che il co<strong>di</strong>ce è in grado <strong>di</strong> rivelare.<br />
Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è 1-correttore e 2-rivelatore.<br />
Teorema 3.2.6. Un co<strong>di</strong>ce C <strong>di</strong> lunghezza n è h-rivelatore se e solo se ha<br />
<strong>di</strong>stanza minima d = h + 1.<br />
Dimostrazione. Sia d = h+1. Se in una parola trasmessa p entra un numero<br />
t <strong>di</strong> errori, t ≤ h, la sequenza p ′ in uscita non è una parola del co<strong>di</strong>ce perchè<br />
d(p, p ′ ) = t < d e pertanto i t errori sono rivelati. Se invece entra un numero <strong>di</strong><br />
errori maggiore o uguale a d = h + 1, la sequenza che si riceve può essere un’altra<br />
parola del co<strong>di</strong>ce e quin<strong>di</strong> gli errori non vengono rivelati e pertanto se d = h + 1 il<br />
co<strong>di</strong>ce è h-rivelatore.<br />
Viceversa, sia h il massimo numero <strong>di</strong> errori che il co<strong>di</strong>ce rivela. Allora una<br />
qualunque parola <strong>di</strong> C deve avere almeno h + 1 componenti <strong>di</strong>verse da quella<br />
trasmessa, ossia d(C) ≥ h+1 e poichè h è il massimo numero <strong>di</strong> errori che il co<strong>di</strong>ce<br />
può rivelare, in C esistono due parole che hanno <strong>di</strong>stanza esattamente h + 1 da cui<br />
d(C) = h + 1. <br />
Teorema 3.2.7. Un co<strong>di</strong>ce C con <strong>di</strong>stanza minima d(C) = d corregge ⌊( d−1<br />
2 )⌋<br />
errori, dove ⌊( d−1<br />
2<br />
)⌋ in<strong>di</strong>ca la parte intera <strong>di</strong> d−1<br />
2 .<br />
Dimostrazione. Sia d(C) = d. Supponiamo che in una parola trasmessa p<br />
entri un numero <strong>di</strong> errori minore o uguale a ⌊( d−1<br />
2 )⌋ e sia p′ la n-pla ricevuta. Si<br />
ha d(p, p ′ ) ≤ ⌊( d−1<br />
2 )⌋. Proviamo che per ogni altra parola p′′ <strong>di</strong> C si ha d(p ′ , p ′′ ) ≥<br />
⌊( d−1<br />
2 )⌋ + 1 da ciò segue che la parola p è la più somigliante a p′ . Supponiamo per<br />
assurdo che esista una parola p ′′ <strong>di</strong> C, p ′′ = p, tale che d(p ′ , p ′′ ) ≤ ⌊( d−1<br />
2<br />
)⌋. Allora<br />
si ha d(p ′ , p) + d(p ′ , p ′′ ) ≤ 2⌊( d−1)⌋<br />
≤ d − 1, e questo, per la <strong>di</strong>suguaglianza<br />
2<br />
triangolare, implica d(p, p ′′ ) ≤ d − 1 ma ciò è assurdo perchè d(C) = d. <br />
Corollario 3.2.8. Sia C un co<strong>di</strong>ce con <strong>di</strong>stanza minima d.
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 18<br />
(1) C scopre h errori ⇔ h < d, ossia d ≥ h + 1 .<br />
(2) C corregge h errori ⇔ d ≥ 2h + 1.<br />
Dimostrazione. (1) Un co<strong>di</strong>ce scopre h errori se e solo se, alterando<br />
una parola del co<strong>di</strong>ce in t ≤ h coor<strong>di</strong>nate, non si ottiene mai un’altra<br />
parola del co<strong>di</strong>ce. Questo accade se e solo se due parole del co<strong>di</strong>ce hanno<br />
<strong>di</strong>stanza almeno h + 1.<br />
(2) Un co<strong>di</strong>ce corregge h errori se e solo se alterando una parola del co<strong>di</strong>ce in<br />
t ≤ h coor<strong>di</strong>nate, la n-pla così ottenuta ha <strong>di</strong>stanza maggiore <strong>di</strong> h da una<br />
qualunque altra parola del co<strong>di</strong>ce. Questo accade se e solo se due parole<br />
del co<strong>di</strong>ce hanno <strong>di</strong>stanza almeno 2h + 1.<br />
<br />
L’insieme A n q può essere pensato come uno spazio <strong>di</strong> <strong>di</strong>mensione n e pertanto se<br />
in A n q si considera la <strong>di</strong>stanza <strong>di</strong> Hamming d, allora la coppia (A n q , d) è uno spazio<br />
metrico e possiamo dare la seguente definizione.<br />
Definizione 3.2.9. Sia r un intero positivo. Per ogni x ∈ A n q , si definisce sfera<br />
<strong>di</strong> centro x e raggio r l’insieme <strong>di</strong> tutti gli elementi y ∈ A n q tali che d(x, y) ≤ r.<br />
In simboli<br />
S(x, r) = {y | y ∈ A n q , d(x, y) ≤ r}.<br />
La definizione ora data permette <strong>di</strong> caratterizzare geometricamente i co<strong>di</strong>ci<br />
h-correttori sulla base del principio <strong>di</strong> massima somiglianza.<br />
Teorema 3.2.10. Sia C ⊆ A n q un co<strong>di</strong>ce. C è h-correttore se e solo se comunque<br />
prese due parole <strong>di</strong>stinte p e p ′ <strong>di</strong> C, si ha S(p, h) ∩ S(p ′ , h) = ∅.<br />
Dimostrazione. Sia C h-correttore e siano p, p ′ ∈ C, p = p ′ . Per il corollario<br />
3.2.8 si ha d(p, p ′ ) ≥ 2h+1. Supponiamo per assurdo che sia S(p, h)∩S(p ′ , h) = ∅<br />
e sia x ∈ S(p, h)∩S(p ′ , h). Ciò significa che d(p, x) ≤ h, d(p ′ , x) ≤ h e quin<strong>di</strong> per<br />
la proprietà della <strong>di</strong>suguaglianza triangolare si ha d(p, p ′ ) ≤ h + h < 2h + 1 = d<br />
e ciò è assurdo.<br />
Viceversa, sia S(p, h)∩S(p ′ , h) = ∅ per ogni p, p ′ ∈ C, p = p ′ . Supponiamo per<br />
assurdo che esistano p, p ′ ∈ C tali che d(p, p ′ ) ≤ 2h. Non può essere d(p, p ′ ) ≤ h<br />
perchè in tal caso p ′ ∈ S(p, h) contro l’ipotesi S(p, h) ∩ S(p ′ , h) = ∅. Sia allora<br />
h + 1 ≤ d(p, p ′ ) ≤ 2h, poniamo d(p, p ′ ) = h + t con 1 ≤ t ≤ h. Senza ledere in<br />
generalità possiamo supporre che le (h + t) componenti in cui p e p ′ <strong>di</strong>fferiscono<br />
siano le prime h + t . Sia z ∈ A n q avente le prime h componenti uguali a p<br />
e le successive t componenti ( dalla (h + 1)-esima alla (h + t)-esima ) uguali a<br />
quelle <strong>di</strong> p ′ ; tutte le altre componenti <strong>di</strong> z siano uguali a quelle <strong>di</strong> p e p ′ . Si ha<br />
d(z, p) = t ≤ h e perciò z ∈ S(p, h), inoltre d(z, p ′ ) = h e perciò z ∈ S(p ′ , h).
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 19<br />
Risulta dunque z ∈ S(p, h) ∩ S(p ′ , h) e ciò è assurdo per l’ipotesi fatta. Rimane<br />
così provato che è d(p, p ′ ) ≥ 2h + 1 per ogni p, p ′ ∈ C e pertanto per il corollario<br />
3.2.8 il co<strong>di</strong>ce C è h-correttore. <br />
Se un co<strong>di</strong>ce C è h-correttore e durante la trasmissione entrano al più h errori,<br />
allora ogni n-pla p ′ ricevuta appartiene ad una ed una sola sfera S(p, h) e quin<strong>di</strong> p<br />
è la parola <strong>di</strong> C più vicina a p ′ . Dire che per la deco<strong>di</strong>fica si applica il principio <strong>di</strong><br />
massima somiglianza significa deco<strong>di</strong>ficare ogni n-pla ricevuta p ′ come<br />
la parola p centro della sfera S(p, h) a cui p ′ appartiene.<br />
Il numero h degli errori che un (n, M, d)-co<strong>di</strong>ce C garantisce <strong>di</strong> poter correggere<br />
(Teorema 3.2.10) è detto raggio <strong>di</strong> impacchettamento <strong>di</strong> C perchè coincide con il<br />
massimo intero r tale che<br />
S(p, r) ∩ S(p ′ , r) = ∅<br />
per ogni coppia <strong>di</strong> parole <strong>di</strong>stinte p, p ′ ∈ C.<br />
Esempio 3.2.11. Sia C = {c1, c2, c3, c4}, con<br />
c1 = (00000), c2 = (10110), c3 = (01011), c4 = (11101).<br />
La <strong>di</strong>stanza minima <strong>di</strong> questo co<strong>di</strong>ce è d = 3; pertanto per il teorema 3.2.7, è<br />
sempre possibile correggere esattamente un errore. Sia ora S l’insieme <strong>di</strong> tutte<br />
le possibili sequenze <strong>di</strong> lunghezza 5 su A = {0, 1}; ovviamente |S| = 2 5 = 32.<br />
Consideriamo tutte le sfere <strong>di</strong> raggio 1 e centro nelle parole <strong>di</strong> C.<br />
Sc1 = {(00000), (10000), (01000), (00100), (00010), (00001)}<br />
Sc2 = {(10110), (00110), (11110), (10010), (10100), (10111)}<br />
Sc3 = {(01011), (11011), (00011), (01111), (01001), (01010)}<br />
Sc4 = {(11101), (01101), (10101), (11001), (11111), (11100)}.<br />
L’unione <strong>di</strong> tali sfere contiene solo 24 delle possibili 32 sequenze <strong>di</strong> lunghezza 5,<br />
sia S ∗ l’insieme delle sequenze che non cadono in alcuna delle sfere:<br />
S ∗ = {(11000), (01100), (10001), (00101), (01110), (00111), (10011), (11010)}.<br />
Supponiamo che sia stata ricevuta la parola u = (00011); calcoliamo la <strong>di</strong>stanza<br />
da ogni parola <strong>di</strong> C, risulta :<br />
d(c1, u) = 2, d(c2, u) = 3, d(c3, u) = 1, d(c4, u) = 4.<br />
Poichè u ∈ Sc3, si può deco<strong>di</strong>ficare u con p = c3. Se fosse stata ricevuta la parola<br />
v = (11000), le <strong>di</strong>stanze dalle parole del co<strong>di</strong>ce sarebbero :<br />
d(c1, v) = 2, d(c2, v) = 3, d(c3, v) = 3, d(c4, v) = 2.<br />
A questo punto non saremmo in grado <strong>di</strong> correggere automaticamente l’errore,<br />
l’unica informazione sarebbe che ci sono almeno due errori perchè v non è una<br />
parola del co<strong>di</strong>ce.
2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 20<br />
Il seguente teorema mette in luce che può risultare più conveniente avere co<strong>di</strong>ci<br />
con <strong>di</strong>stanza minima pari anzichè <strong>di</strong>spari.<br />
Teorema 3.2.12. Sia C un co<strong>di</strong>ce con <strong>di</strong>stanza minima d pari, d = 2h+2, h ∈<br />
N. Allora C oltre ad essere h-correttore è anche almeno (h + 1)-rivelatore.<br />
Dimostrazione. Nel teorema 3.2.7 è stato <strong>di</strong>mostrato che se C ha <strong>di</strong>stanza<br />
minima d pari allora C corregge h = ⌊ d−1 d ⌋ = − 1 errori. Proviamo che C rivela<br />
2 2<br />
(h + 1) = d<br />
d<br />
errori. Se in una parola p trasmessa entrano errori, la sequenza<br />
2 2<br />
ricevuta non appartiene a nessuna sfera avente centro in una parola del co<strong>di</strong>ce e<br />
raggio h, quin<strong>di</strong> i d errori sono rivelati. Essi non possono essere corretti perchè la<br />
2<br />
sequenza ricevuta potrebbe essere equi<strong>di</strong>stante da due parole del co<strong>di</strong>ce. <br />
Nota 3.2.13. Sia C un co<strong>di</strong>ce h-correttore. Supponiamo si trasmetta la parola<br />
p e si riceva p ′ in cui sono entrati h + 1 errori.<br />
• Se il co<strong>di</strong>ce ha <strong>di</strong>stanza minima <strong>di</strong>spari, l’errore non è rivelato e la deco<strong>di</strong>fica<br />
potrebbe essere errata perchè p ′ potrebbe appartenere ad una sfera<br />
S(q, h) con q = p, q ∈ C. Anzi, in questo caso, p verrebbe deco<strong>di</strong>ficata con<br />
q. Tutto questo perchè, per il Teorema 3.2.7 si ha d = 2h + 1 e pertanto<br />
d = d(p, q) ≤ d(p, p ′ ) + d(p ′ , q) ≤ (h + 1) + h = 2h + 1<br />
non porta ad un assurdo.<br />
• Se il co<strong>di</strong>ce ha <strong>di</strong>stanza minima pari, gli h + 1 errori vengono rivelati<br />
(anche se non corretti) perchè p ′ non può appartenere a nessuna sfera <strong>di</strong><br />
centro q ∈ C e raggio h. Infatti, per il Teorema 3.2.7 si ha d = 2h + 2 e<br />
pertanto<br />
d = d(p, q) ≤ d(p, p ′ ) + d(p ′ , q) ≤ (h + 1) + h = 2h + 1<br />
e ciò è assurdo.<br />
Esempio 3.2.14. Sia C un co<strong>di</strong>ce binario 1-correttore con <strong>di</strong>stanza minima<br />
d ≥ 3. Siano p e q due parole del co<strong>di</strong>ce aventi <strong>di</strong>stanza minima ossia d(p, q) = d.<br />
(1) Se durante la trasmissione entra un errore, la sequenza in uscita appartiene<br />
alla sfera S(p, 1) o alla sfera S(q, 1) a seconda che sia stata trasmessa<br />
p oppure q. Sia nel caso che d sia <strong>di</strong>spari sia nel caso che d sia pari, per il<br />
principio <strong>di</strong> massima somiglianza l’errore viene corretto e il deco<strong>di</strong>ficatore<br />
associa alla sequenza ricevuta il centro della sfera a cui essa appartiene<br />
che è la parola trasmessa.<br />
(2) Supponiamo ora <strong>di</strong> trasmettere p e che entrino due errori. Analizziamo<br />
la situazione <strong>di</strong>stinguendo il caso in cui d è <strong>di</strong>spari e il caso in cui d è pari.
3. EFFICIENZA E RAPPORTO DI SEPARAZIONE 21<br />
• 1 ◦ caso: la <strong>di</strong>stanza minima <strong>di</strong> C è <strong>di</strong>spari. Sia d = 3 e siano p =<br />
(11101), q = (00001) due parole del co<strong>di</strong>ce tali che d(p, q) = 3.<br />
Poichè abbiamo supposto che trasmettendo p entrino due errori, supponiamo<br />
arrivi la sequenza p ′ = (00101) che appartiene alla sfera<br />
S(q, 1) per cui i due errori non solo non verrebbero rivelati ma la sequenza<br />
verrebbe deco<strong>di</strong>ficata come la parola q quando invece è stata<br />
trasmessa p.<br />
• 2 ◦ caso: la <strong>di</strong>stanza minima <strong>di</strong> C è pari. Sia d = 4 e siano p =<br />
(11101), q = (00000) due parole del co<strong>di</strong>ce tali che d(p, q) = 4.<br />
Come per il caso precedente, supponiamo che nel trasmettere p entrino<br />
due errori e si riceva la sequenza p ′ = (00101) . Risulta d =<br />
(p ′ , p) = 2, d(p ′ , q) = 2; ciò significa che p ′ non appartiene nè alla sfera<br />
S(p, 1) nè alla sfera S(q, 1). Dunque se entrano due errori, anche in<br />
questo caso, non si è in grado <strong>di</strong> correggerli ma però vengono rivelati<br />
perchè d = (p, p ′ ) = 2 mentre la <strong>di</strong>stanza minima è 4.<br />
Efficienza <strong>di</strong> un co<strong>di</strong>ce.<br />
3. Efficienza e Rapporto <strong>di</strong> separazione<br />
Osserviamo che la lunghezza n del co<strong>di</strong>ce C ⊆ A n q si può vedere come una<br />
misura del costo del co<strong>di</strong>ce : più la parola <strong>di</strong> un co<strong>di</strong>ce è lunga, più tempo ed<br />
energia occorrono per inviare i messaggi e quin<strong>di</strong> maggiore è la spesa <strong>di</strong> gestione.<br />
La grandezza M del co<strong>di</strong>ce C, si può vedere come una misura della ricchezza del<br />
co<strong>di</strong>ce : più parole ha un co<strong>di</strong>ce, maggiore e più varia è la sua possibilità <strong>di</strong><br />
trasmettere informazioni. Il rapporto qualità/prezzo può essere rappresentato dal<br />
numero<br />
R = logqM<br />
n<br />
Il numero R si <strong>di</strong>ce efficienza o rapporto <strong>di</strong> informazione del co<strong>di</strong>ce. Occorre<br />
tenerlo il più possibile vicino ad 1 perchè il co<strong>di</strong>ce sia poco costoso, ma per renderlo<br />
efficiente <strong>di</strong> scoprire e/o correggere errori non deve essere troppo vicino ad 1.<br />
Nota 3.3.1. Se k < n è la lunghezza minima della sequenza per poter esprimere<br />
poichè risulta<br />
tutti i messaggi (ossia Ak q è il vocabolario minimo), allora si ha R = k<br />
n<br />
M = qk . Inoltre da M ≤ qn segue R ≤ 1.<br />
Rapporto <strong>di</strong> separazione.<br />
Se d è la <strong>di</strong>stanza minima del co<strong>di</strong>ce, un’altra misura è il numero<br />
δ = d<br />
n
4. RELAZIONI FRA I PARAMETRI DI UN CODICE 22<br />
detto rapporto <strong>di</strong> separazione del co<strong>di</strong>ce. Più grande è δ (ossia più grande è<br />
la <strong>di</strong>stanza minima d), più il co<strong>di</strong>ce ha possibilità <strong>di</strong> correggere gli errori.<br />
4. Relazioni fra i parametri <strong>di</strong> un co<strong>di</strong>ce<br />
Sia C ⊆ A n q un (n, M, d)q -co<strong>di</strong>ce .<br />
I parametri del co<strong>di</strong>ce a blocchi non variano in modo in<strong>di</strong>pendente ma sono<br />
correlati fra loro. E’ dunque importante stabilire delle relazioni che esprimano<br />
questi legami, non solo per determinare la possibile esistenza <strong>di</strong> un co<strong>di</strong>ce, ma<br />
anche per stabilire quando è che un co<strong>di</strong>ce è migliore <strong>di</strong> un altro in considerazione<br />
delle esigenze del caso, per esempio a parità <strong>di</strong> prestazioni è preferibile il co<strong>di</strong>ce<br />
più corto perchè meno costoso.<br />
Le principali relazioni fra i parametri riguardano la limitazione superiore e la<br />
limitazione inferiore <strong>di</strong> M in termini <strong>di</strong> n e d.<br />
Teorema 3.4.1 (Stima <strong>di</strong> Singleton). Sia C ⊆ A n q con <strong>di</strong>stanza minima d.<br />
Allora risulta<br />
|C| ≤ q n−d+1<br />
Dimostrazione. Comunque prese due parole p, p ′ ∈ C, p = p ′ , esse hanno<br />
al più (n − d)-componenti uguali perchè d(p, p ′ ) ≥ d. Ne segue che comunque si<br />
fissano n − d + 1 posti i1, . . . , in−d+1, nel co<strong>di</strong>ce non esistono due parole <strong>di</strong>stinte<br />
aventi la stessa (n − d + 1)-pla nei posti fissati. Quin<strong>di</strong> fissati comunque n − d + 1<br />
posti, possiamo associare ad ogni parola la (n − d + 1)-pla (ci1, . . . , cin−d+1 ) che<br />
si trova nei posti fissati, inoltre a parole <strong>di</strong>stinte corrispondono (n − d + 1)-ple<br />
<strong>di</strong>stinte. Da ciò segue che l’applicazione<br />
ϕ : C → A n−d+1<br />
q , ϕ(c) = (ci1, . . . , cin−d+1 )<br />
è iniettiva e pertanto |C| ≤ |A n−d+1<br />
q | = q n−d+1 . <br />
Corollario 3.4.2. Nella stima <strong>di</strong> Singleton vale l’uguaglianza se e solo se per<br />
ogni n − d + 1 componenti le parole del co<strong>di</strong>ce assumono su <strong>di</strong> esse tutti i possibili<br />
valori.<br />
Un’altra stima superiore per |C| si può ottenere riprendendo il concetto <strong>di</strong> sfera<br />
<strong>di</strong> centro x ∈ C e raggio r (def. 3.2.9). Calcoliamo anzittutto la car<strong>di</strong>nalità ( o<br />
volume) <strong>di</strong> una sfera.
4. RELAZIONI FRA I PARAMETRI DI UN CODICE 23<br />
Teorema 3.4.3. Il numero degli elementi della sfera S(x, r) è<br />
|S(x, r)| =<br />
r<br />
i=0<br />
<br />
n<br />
(q − 1)<br />
i<br />
i<br />
Dimostrazione. Sia 0 ≤ t ≤ n e sia σ(x, t) = {y | y ∈ A n q , d(x, y) = t}.<br />
Allora la sfera <strong>di</strong> centro x e raggio r è tale che<br />
r<br />
S(x, r) = σ(x, t).<br />
t=0<br />
Poichè per t = t ′ si ha σ(x, t) ∩ σ(x, t ′ ) = ∅, risulta<br />
|S(x, r)| =<br />
r<br />
t=0<br />
|σ(x, t)|<br />
e pertanto per calcolare |S(x, r)| basta calcolare |σ(x, t)|.<br />
Se x = (x1, . . . , xn) è il centro, σ(x, t) è data da tutte le n-ple y = (y1, . . . , yn)<br />
tali che d(x, y) = t. Fissiamo t posti della n-pla x, ad esempio i primi t. Il numero<br />
delle n-ple che <strong>di</strong>fferiscono dalla x = (x1, . . . , xn) nei primi t posti è (q −1) t , infatti<br />
in ognuno <strong>dei</strong> t posti fissati possono comparire come componenti i (q − 1) elementi<br />
<strong>di</strong> Aq <strong>di</strong>versi dalla componente che compare in quel posto in x. I t posti possono<br />
essere fissati in tanti mo<strong>di</strong> quante sono le combinazioni semplici <strong>di</strong> n elementi presi<br />
a t a t . Allora<br />
|σ(x, t)| =<br />
Segue che la car<strong>di</strong>nalità <strong>di</strong> una sfera è<br />
|S(x, r)| =<br />
<br />
n<br />
(q − 1)<br />
t<br />
t .<br />
r<br />
i=0<br />
<br />
n<br />
(q − 1)<br />
i<br />
i .<br />
Grazie al precedente risultato, si ottiene la seguente limitazione detta anche<br />
limitazione per impacchettamento <strong>di</strong> sfere.<br />
Teorema 3.4.4 (Stima <strong>di</strong> Hamming). Sia C ⊆ A n q un co<strong>di</strong>ce che corregge h<br />
errori. Allora risulta<br />
|C| ≤<br />
h<br />
i=0<br />
qn <br />
(q − 1) i<br />
Dimostrazione. Per il corollario 3.2.8 si ha d ≥ 2h + 1 e pertanto per ogni<br />
coppia <strong>di</strong> parole x, y ∈ C, le due sfere S(x, h) e S(y, h) non hanno elementi in<br />
comune. D’altra parte, A n q contiene l’unione S <strong>di</strong> tutte le sfere S(x, h) al variare<br />
n<br />
i
4. RELAZIONI FRA I PARAMETRI DI UN CODICE 24<br />
<strong>di</strong> x ∈ C ed essendo tali sfere in numero <strong>di</strong> |C| e a due a due <strong>di</strong>sgiunte, S contiene<br />
|C| · |S(x, r)| elementi e quin<strong>di</strong><br />
|C| · |S(x, r)| ≤ q n .<br />
Nota 3.4.5. La stima <strong>di</strong> Hamming, nella gran parte <strong>dei</strong> casi, è migliore <strong>di</strong><br />
quella <strong>di</strong> Singleton. Infatti si <strong>di</strong>mostra che se C ⊆ A n 2 è un co<strong>di</strong>ce con <strong>di</strong>stanza<br />
minima d, i parametri per cui la stima <strong>di</strong> Singleton è migliore <strong>di</strong> quella <strong>di</strong> Hamming<br />
sono solo i seguenti.<br />
• d = 2 e n qualunque;<br />
• d = 4 e n = 4, 5, 6;<br />
• d = 6 e N = 6, 7;<br />
• d pari, d ≥ 8 e n = d.<br />
Un’altra stima superiore per |C| si ottiene considerando il massimo valore<br />
possibile della <strong>di</strong>stanza tra due parole <strong>di</strong>stinte del co<strong>di</strong>ce.<br />
Teorema 3.4.6 (Stima <strong>di</strong> Plotkin). Sia C ⊆ A n q con <strong>di</strong>stanza minima d e tale<br />
che qd − n(q − 1) > 0. Allora si ha<br />
|C| ≤<br />
qd<br />
qd − n(q − 1) .<br />
Dimostrazione. Per la <strong>di</strong>mostrazione si rinvia a [2] pag. 413. <br />
I co<strong>di</strong>ci C per i quali nella stima <strong>di</strong> Hamming vale l’uguaglianza si <strong>di</strong>cono<br />
perfetti. Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è perfetto.<br />
Definizione 3.4.7. Sia C ⊆ A n q un co<strong>di</strong>ce h-correttore. C si <strong>di</strong>ce perfetto se<br />
|C| =<br />
h<br />
i=0<br />
qn <br />
(q − 1) i<br />
n<br />
i<br />
I seguenti co<strong>di</strong>ci sono detti co<strong>di</strong>ci perfetti banali.<br />
(1) C = A n q verifica l’uguaglianza per h = 0.<br />
(2) C tale che |C| = 1 , in questo caso ogni n-pla viene deco<strong>di</strong>ficata nell’unica<br />
parola del co<strong>di</strong>ce.<br />
(3) C = {(00 · · · 0), (11 · · · 1)} binario <strong>di</strong> lunghezza n <strong>di</strong>spari, costituito dalle<br />
sole due parole aventi come componenti tutti 0 oppure tutti 1, corregge<br />
n−1<br />
2 errori ed è perfetto.
4. RELAZIONI FRA I PARAMETRI DI UN CODICE 25<br />
Nota 3.4.8. Dalla definizione 3.4.7 seguono imme<strong>di</strong>atamente le seguenti caratterizzazioni<br />
e le seguenti con<strong>di</strong>zioni necessarie <strong>di</strong> esistenza.<br />
(1) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se l’unione <strong>di</strong> tutte le sfere<br />
S(x, h), x ∈ C, coincide con l’insieme <strong>di</strong> tutte le parole possibili.<br />
(2) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se la famiglia {S(x, h)}x∈C<br />
delle sfere <strong>di</strong> centro x ∈ C e raggio h costituisce una partizione <strong>di</strong> Fq.<br />
(3) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se ogni n-pla <strong>di</strong> A n q ha una<br />
<strong>di</strong>stanza minore od uguale ad h da una ed una sola parola <strong>di</strong> C .<br />
(4) Con<strong>di</strong>zione necessaria affinchè un co<strong>di</strong>ce C ⊆ A n q , h-correttore, sia perfetto<br />
è che<br />
h<br />
i=0<br />
<br />
n<br />
(q − 1)<br />
i<br />
i | q n .<br />
(5) Con<strong>di</strong>zione necessaria per l’esistenza <strong>di</strong> un co<strong>di</strong>ce C ⊆ A n q 1-correttore<br />
perfetto è che<br />
(1 + n(q − 1)) | q n .<br />
(6) Non esistono co<strong>di</strong>ci binari 1-correttori perfetti <strong>di</strong> lunghezza pari .<br />
Esempio 3.4.9. Consideriamo il piano proiettivo <strong>di</strong> or<strong>di</strong>ne 2 o piano <strong>di</strong> Fano.<br />
P = {1, 2, 3, 4, 5, 6, 7} è l’insieme <strong>dei</strong> punti.<br />
2<br />
1<br />
6<br />
3<br />
4 5 7<br />
B = {B1 = {1, 2, 4}, B2 = {2, 3, 5}, B3 = {3, 4, 6}, B4 = {4, 5, 7}, B5 = {5, 6, 1}, B6 =<br />
{6, 7, 2}, B7 = {7, 1, 3}} è l’insieme delle rette.<br />
La matrice d’incidenza A del piano <strong>di</strong> Fano è :<br />
1 2 3 4 5 6 7<br />
B1 1 1 0 1 0 0 0<br />
B2 0 1 1 0 1 0 0<br />
B3 0 0 1 1 0 1 0<br />
B4 0 0 0 1 1 0 1<br />
B5 1 0 0 0 1 1 0<br />
B6 0 1 0 0 0 1 1<br />
B7 1 0 1 0 0 0 1
4. RELAZIONI FRA I PARAMETRI DI UN CODICE 26<br />
A partire da questa matrice d’incidenza, costruiamo un co<strong>di</strong>ce binario 1-correttore<br />
perfetto C nel modo seguente.<br />
Le parole <strong>di</strong> C sono:<br />
(1) Le sette righe della matrice A che denoteremo con ci.<br />
(2) Le sette righe della matrice Ā ottenuta da A scambiando tra loro i simboli<br />
0 e 1. Ad esempio la prima riga <strong>di</strong> Ā dà la parola 0010111. Denotiamo<br />
con ¯ci tali parole.<br />
(3) Le parole 0 = (0000000) ed 1 = (1111111).<br />
Per come costruite le parole e ricordando le proprietà del piano proiettivo, è facile<br />
verificare che C ha <strong>di</strong>stanza minima d = 3. Il co<strong>di</strong>ce è 1-correttore e |C| = 16.<br />
Inoltre C è perfetto perchè :<br />
h<br />
i=0<br />
qn <br />
(q − 1) i =<br />
n<br />
i<br />
7<br />
0<br />
2 7<br />
<br />
(q − 1) 0 7<br />
+ (q − 1) 1<br />
1<br />
= 27<br />
1 + 7<br />
= 16 = |C|<br />
Dopo aver considerato tre limitazioni superiori per |C|, riportiamo una limitazione<br />
inferiore .<br />
Teorema 3.4.10 (Stima <strong>di</strong> Gilbert-Varshamov). Sia M = |C| il massimo per<br />
cui esiste un co<strong>di</strong>ce C ⊆ A n q con <strong>di</strong>stanza minima d. Si ha<br />
M ≥<br />
d−1<br />
i=0<br />
qn <br />
(q − 1) i<br />
Dimostrazione. Costruiamo un co<strong>di</strong>ce C che verifica l’uguaglianza. Consideriamo<br />
una qualunque x1 ∈ A n q e mettiamola in C. Scegliamo una seconda parola<br />
x2 ∈ A n q che abbia <strong>di</strong>stanza almeno d da x1 e mettiamola in C. Scegliamo una<br />
terza parola x3 ∈ A n q che abbia <strong>di</strong>stanza almeno d sia da x1 che da x2. Proce<strong>di</strong>amo<br />
allo stesso modo. Dopo aver scelto le prime h parole x1, . . . , xh aventi tutte a due<br />
a due <strong>di</strong>stanza almeno d tra <strong>di</strong> loro, scegliamo la (h + 1)-esima parola xh+1 avente<br />
<strong>di</strong>stanza almeno d da tutte le parole x1, . . . , xh, sempre che questo sia possibile.<br />
Infatti il proce<strong>di</strong>mento avrà termine perchè ad un certo punto non ci sarà più<br />
spazio per scegliere ancora una parola. A questo punto si è costruito un co<strong>di</strong>ce C<br />
che ha la seguente proprietà: l’unione <strong>di</strong> tutte le sfere S(x, d − 1) con centri nei<br />
punti x ∈ C coincide con tutto A n q , se così non fosse avremmo potuto continuare.<br />
Il co<strong>di</strong>ce costruito è tale che<br />
n<br />
i<br />
M · |S(x, d − 1)| ≥ q n<br />
da cui segue la stima per M.
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 27<br />
Quanto esposto fino ad ora giustifica il fatto che ad un buon co<strong>di</strong>ce si richiedono<br />
le seguenti proprietà:<br />
• lunghezza n abbastanza piccola per permettere una trasmissione veloce<br />
delle sue parole;<br />
• un numero M <strong>di</strong> parole abbastanza grande per co<strong>di</strong>ficare una buona<br />
quantità <strong>di</strong> messaggi;<br />
• <strong>di</strong>stanza minima abbastanza grande per correggere il maggior numero<br />
possibile <strong>di</strong> errori.<br />
Ovviamente queste richieste sono fra loro contrastanti e perciò non è possibile<br />
ottimizzare uno <strong>dei</strong> parametri senza avere preventivamente fissato gli altri due.<br />
Questo tipo <strong>di</strong> problema è quello comunemente noto con il nome <strong>di</strong> problema<br />
fondamentale della teoria <strong>dei</strong> co<strong>di</strong>ci.<br />
5. (n, k)-co<strong>di</strong>ci, co<strong>di</strong>ci MDS, co<strong>di</strong>ci equivalenti<br />
Esistono co<strong>di</strong>ci nei quali una parola rimane in<strong>di</strong>viduata univocamente assegnando<br />
un numero <strong>di</strong> simboli minore della lunghezza delle parole.<br />
Definizione 3.5.1. Siano i1, i2, . . . , ik interi positivi tali che 1 ≤ i1 < i2 <<br />
. . . < ik ≤ n. I posti i1, i2, . . . , ik sono detti posti <strong>di</strong> informazione per un co<strong>di</strong>ce<br />
C ⊆ A n q se, comunque si fissi una k-upla (y1, y2, . . . , yk), yi ∈ Aq, esiste una ed una<br />
sola parola <strong>di</strong> C tale che nel posto i1 compaia y1, nel posto i2 compaia y2, . . . , nel<br />
posto ik compaia yk.<br />
Definizione 3.5.2. Un co<strong>di</strong>ce C ⊆ A n q avente k posti <strong>di</strong> informazione si <strong>di</strong>ce<br />
(n, k)-co<strong>di</strong>ce oppure co<strong>di</strong>ce sistematico.<br />
Se esistono k posti d’informazione, l’applicazione <strong>di</strong> C in A k q che ad ogni parola<br />
<strong>di</strong> C associa la k-upla che si presenta nei k posti d’informazione è biunivoca perchè<br />
la k-upla in<strong>di</strong>vidua la parola univocamente e pertanto M = |C| = q k . I k simboli<br />
che compaiono nella k-upla sono detti <strong>di</strong> informazione mentre i rimanenti n − k<br />
simboli sono detti <strong>di</strong> controllo o ridondanti. In un (n, k)-co<strong>di</strong>ce le sequenze<br />
emesse dal co<strong>di</strong>ficatore <strong>di</strong> sorgente vengono sud<strong>di</strong>vise in k-uple e ad ogni k-upla<br />
vengono aggiunti n−k simboli <strong>di</strong> controllo me<strong>di</strong>ante un fissato algoritmo; in questo<br />
modo ogni k-upla viene trasformata in una n-upla. Poichè in un (n, k)-co<strong>di</strong>ce è<br />
possibile <strong>di</strong>stinguere i simboli <strong>di</strong> informazione da quelli ridondanti, questi co<strong>di</strong>ci<br />
sono anche detti separabili. Il rapporto k viene detto tasso <strong>di</strong> informazione<br />
n<br />
<strong>di</strong> un (n, k)-co<strong>di</strong>ce.
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 28<br />
Teorema 3.5.3. Se C ⊆ A n q è un (n, k)-co<strong>di</strong>ce allora |C| = q k .<br />
Dimostrazione. Segue dalla biezione esistente fra C e A k q . <br />
Esempio 3.5.4. Sia C il co<strong>di</strong>ce formato dalle parole: C = {0011, 0101, 1101}.<br />
Dire se C è un (4, 2)-co<strong>di</strong>ce.<br />
Risposta - NO, perchè non vale il Teorema 3.5.3, infatti |C| = 2 2 .<br />
Analizziamo il co<strong>di</strong>ce solo in base alla definizione <strong>di</strong> (n, k)-co<strong>di</strong>ce.<br />
(1) I posti {1, 2} non sono <strong>di</strong> informazione, infatti delle possibili coppie 00, 01,<br />
10, 11 in C manca 10.<br />
(2) I posti {1, 4} non sono <strong>di</strong> informazione perchè manca la coppia 00 e la<br />
coppia 01 figura due volte.<br />
Analogamente per le altre coppie <strong>di</strong> posti e dunque poichè C non ha due posti <strong>di</strong><br />
informazione non è un (4, 2)-co<strong>di</strong>ce.<br />
Esempio 3.5.5. Consideriamo il co<strong>di</strong>ce C = {0011, 0101, 1100, 1011}. I posti<br />
{1, 2} sono <strong>di</strong> informazione come anche i posti {1, 3}; al contrario comunque si<br />
considerino altri due posti, essi non sono <strong>di</strong> informazione. C è un (4, 2)-co<strong>di</strong>ce.<br />
Esempio 3.5.6. I co<strong>di</strong>ci<br />
C1 = {0000, 1100, 1010, 1001, 0110, 0101, 0011, 1111}<br />
C2 = {1000, 0100, 0010, 0001, 1110, 1011, 1101, 0111}.<br />
sono entrambi <strong>dei</strong> (4, 3)-co<strong>di</strong>ci perchè tre qualsiasi posti sono <strong>di</strong> informazione.<br />
Teorema 3.5.7 (Limitazione <strong>di</strong> Singleton). Se C ⊆ A n q è un (n, k)-co<strong>di</strong>ce allora<br />
d ≤ n − k + 1.<br />
Dimostrazione. Se C è un (n, k)-co<strong>di</strong>ce con <strong>di</strong>stanza minima d, allora per<br />
3.4.1 e 3.5.3 si ha<br />
|C| ≤ q n−d+1<br />
e |C| = q k .<br />
Queste relazioni implicano k ≤ n − d + 1 da cui d ≤ n − k + 1 . <br />
La <strong>di</strong>suguaglianza <strong>di</strong> 3.5.7 dà una limitazione superiore per la <strong>di</strong>stanza minima<br />
<strong>di</strong> un (n, k)-co<strong>di</strong>ce. Se, da un lato, al crescere della ridondanza n−k può aumentare<br />
la capacità del co<strong>di</strong>ce <strong>di</strong> correggere errori, dall’altro al crescere della ridondanza<br />
<strong>di</strong>minuisce il tasso <strong>di</strong> informazione k il quale dà la misura della percentuale <strong>di</strong><br />
n<br />
informazione contenuta in una n-upla.<br />
Come già detto, in un buon co<strong>di</strong>ce dovrebbero essere gran<strong>di</strong> sia k (e quin<strong>di</strong><br />
n<br />
poca ridondanza) sia la <strong>di</strong>stanza minima (più grande è d più il co<strong>di</strong>ce ha possibilità
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 29<br />
<strong>di</strong> correggere errori). Poichè le due cose si contrappongono, occorre trovare co<strong>di</strong>ci<br />
in cui i parametri siano in un giusto equilibrio.<br />
Definizione 3.5.8. Un (n, k)-co<strong>di</strong>ce si <strong>di</strong>ce ottimale oppure MDS ( a massima<br />
<strong>di</strong>stanza separabile) se, comunque presi k posti, essi sono <strong>di</strong> informazione.<br />
Teorema 3.5.9. Con<strong>di</strong>zione necessaria e sufficiente affinchè un (n, k)-co<strong>di</strong>ce<br />
C con <strong>di</strong>stanza minima d sia un co<strong>di</strong>ce MDS è che sia d = n − k + 1 .<br />
Dimostrazione. Sia C un co<strong>di</strong>ce MDS. Supponiamo per assurdo che sia d ≤<br />
n − k, allora esistono in C due parole x e y tali che d(x, y) ≤ n − k; queste due<br />
parole hanno almeno k componenti uguali e pertanto esistono k posti che non sono<br />
<strong>di</strong> informazione e C non è MDS.<br />
Viceversa, sia d = n − k + 1. Se per assurdo C non fosse MDS, ci sarebbero<br />
k posti non <strong>di</strong> informazione. Siano x e y le parole aventi componenti uguali nei k<br />
posti non <strong>di</strong> informazione. Si ha d(x, y) ≤ n − k < d e ciò è assurdo perchè d è la<br />
<strong>di</strong>stanza minima del co<strong>di</strong>ce. <br />
Esempio 3.5.10. I co<strong>di</strong>ci C1 e C2 dell’esempio 3.5.6 sono (4, 3)-co<strong>di</strong>ci ottimali.<br />
Esempio 3.5.11. Sia (F, +) un gruppo ad<strong>di</strong>tivo <strong>di</strong> or<strong>di</strong>ne q. Prendendo F come<br />
alfabeto, consideriamo il co<strong>di</strong>ce C <strong>di</strong> lunghezza n, definito da<br />
n<br />
C = {(x1, x2, . . . , xn) | xi ∈ F, xi = 0}.<br />
Se in ogni n-pla fissiamo n − 1 elementi, rimane univocamente determinato l’elemento<br />
n-simo perchè deve risultare x1 + x2 + · · · + xn = 0.<br />
Dunque C è un co<strong>di</strong>ce con n−1 posti d’informazione e pertanto è un (n, n−1)co<strong>di</strong>ce.<br />
Poichè è possibile scrivere qualsiasi elemento in funzione <strong>dei</strong> rimanenti<br />
n − 1, il co<strong>di</strong>ce C è MDS. Allora la <strong>di</strong>stanza minima è d = n − (n − 1) + 1 = 2.<br />
Poichè n − 1 posti qualsiasi sono <strong>di</strong> informazione, ogni parola ha un solo simbolo<br />
<strong>di</strong> controllo.<br />
Esempio 3.5.12. Co<strong>di</strong>ce a ripetizione : è così detto un co<strong>di</strong>ce C in cui i<br />
simboli che compaiono in una qualsiasi parola sono tutti uguali tra loro.<br />
Se C è un co<strong>di</strong>ce a ripetizione <strong>di</strong> lunghezza n, allora il co<strong>di</strong>ce è un (n, 1)-co<strong>di</strong>ce;<br />
infatti un solo simbolo è sufficiente per in<strong>di</strong>viduare una parola. Inoltre C è un<br />
co<strong>di</strong>ce MDS perchè qualsiasi posto è <strong>di</strong> informazione. La <strong>di</strong>stanza minima è allora<br />
d = n − 1 + 1 = n. Il co<strong>di</strong>ce C corregge allora fino a ⌊ n−1⌋<br />
errori.<br />
2<br />
i=1
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 30<br />
NOTA - Il co<strong>di</strong>ce a ripetizione è un co<strong>di</strong>ce con molta ridondanza e quin<strong>di</strong><br />
poco conveniente perchè per trasmettere una informazione si devono usare troppi<br />
simboli; inoltre contiene solo q parole (supposto che l’alfabeto abbia q simboli).<br />
Esempio 3.5.13. Costruzione <strong>di</strong> un (p, 2)-co<strong>di</strong>ce MDS con alfabeto<br />
F, |F | = p, p primo.<br />
La costruzione che presentiamo è il caso p = 3. Sia F = {0, 1, 2}.<br />
Passo 1. Si scrivono le parole aventi le componenti tutte uguali fra loro:<br />
000, 111, 222<br />
Passo 2 . Pensando le tre parole precedenti scritte in colonna, si considera come<br />
quarta parola la <strong>di</strong>agonale 012 . Si costruiscono altre due parole sommando 1 ad<br />
ogni componente <strong>di</strong> essa (somma modulo 3) :<br />
012, 120, 201<br />
Passo 3 . Si ripete il passo 2. e si ottengono :<br />
021, 102, 210<br />
Quando sulla <strong>di</strong>agonale otteniamo una parola già presa in considerazione, (000),<br />
il processo termina e ciò accade al passo p, quando abbiamo ottenuto tutte le p 2<br />
parole del co<strong>di</strong>ce.<br />
Definizione 3.5.14. Due co<strong>di</strong>ci C1, C2 ⊆ A n q si <strong>di</strong>cono equivalenti se è possibile<br />
ottenere tutte le parole <strong>di</strong> C2 da quelle <strong>di</strong> C1 applicando un numero finito <strong>di</strong><br />
volte le seguenti operazioni:<br />
(1) permutazione delle n posizioni (1, 2, . . . , n) in tutte le parole <strong>di</strong> C1;<br />
(2) permutazione <strong>dei</strong> simboli dell’alfabeto applicata, in tutte le parole, alle<br />
componenti che occupano una posizione fissata.<br />
Se C ⊆ A n q , |C| = M, le parole <strong>di</strong> C possono essere scritte come righe <strong>di</strong> una<br />
tabella avente M righe ed n colonne. L’operazione 1) corrisponde ad una permutazione<br />
delle colonne della tabella, l’operazione 2) corrisponde ad una permutazione<br />
<strong>dei</strong> simboli dell’alfabeto Aq applicata ad una colonna della tabella.<br />
Esempio 3.5.15. Consideriamo i seguenti due co<strong>di</strong>ci binari:<br />
C1: 0 0 0 0 0 C2: 0 0 1 0 0<br />
0 1 1 0 1 0 0 0 1 1<br />
1 0 1 1 0 1 1 1 1 1<br />
1 1 0 1 1 1 1 0 0 0
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 31<br />
Verifichiamo che C2 è equivalente a C1. Applicando ai simboli che compaiono nella<br />
terza posizione delle parole <strong>di</strong> C2 la permutazione 0 ↦→ 1, 1 ↦→ 0 , si ottiene il<br />
co<strong>di</strong>ce C3 :<br />
C3: 0 0 0 0 0<br />
0 0 1 1 1<br />
1 1 0 1 1<br />
1 1 1 0 0<br />
Applicando alle colonne <strong>di</strong> C3 la permutazione 1 ↦→ 1, 2 ↦→ 4, 3 ↦→ 3, 4 ↦→ 2, 5 ↦→ 5<br />
si ottengono le parole<br />
0 0 0 0 0<br />
0 1 1 0 1<br />
1 1 0 1 1<br />
1 0 1 1 0<br />
che sono le parole <strong>di</strong> C1.<br />
Esempio 3.5.16. Consideriamo il co<strong>di</strong>ce ternario<br />
C: 0 1 2<br />
1 2 0<br />
2 0 1<br />
proviamo che esso è equivalente ad un co<strong>di</strong>ce a ripetizione.<br />
Applichiamo ai simboli della prima posizione (colonna) la permutazione<br />
0 ↦→ 0, 1 ↦→ 2, 2 ↦→ 1 ;<br />
ai simboli della seconda posizione applichiamo la permutazione<br />
0 ↦→ 1, 1 ↦→ 0, 2 ↦→ 2 ;<br />
ai simboli della terza posizione applichiamo la permutazione<br />
0 ↦→ 2, 1 ↦→ 1, 2 ↦→ 0 .<br />
Si ottiene<br />
0 0 0<br />
2 2 2<br />
1 1 1<br />
che sono le parole del co<strong>di</strong>ce ternario a ripetizione <strong>di</strong> lunghezza 3.<br />
Il concetto <strong>di</strong> co<strong>di</strong>ci equivalenti è importante perchè due co<strong>di</strong>ci equivalenti<br />
correggono lo stesso numero <strong>di</strong> errori. Ciò segue dal fatto che le operazioni<br />
descritte per costruire co<strong>di</strong>ci equivalenti non variano la <strong>di</strong>stanza tra due qualsiasi<br />
parole e perciò neanche la <strong>di</strong>stanza minima. Due co<strong>di</strong>ci equivalenti hanno dunque<br />
le stesse proprietà metriche, così come hanno la stessa ridondanza e la stessa<br />
efficienza.
5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 32<br />
Teorema 3.5.17. Dato un co<strong>di</strong>ce C ⊆ A n q esiste sempre un co<strong>di</strong>ce C1 ⊆ A n q<br />
equivalente a C e contenente una qualsiasi fissata parola v ∈ A n q \ C.<br />
Dimostrazione. Sia p una qualunque parola <strong>di</strong> C. Applicando al più n<br />
permutazioni sui simboli, dalla parola p si ottiene la parola v. <br />
Esempio 3.5.18. Dato il co<strong>di</strong>ce binario<br />
C = {001, 101, 110, 011},<br />
costruire un co<strong>di</strong>ce C1 equivalente a C e tale che 000 ∈ C1.<br />
Soluzione - Basta applicare ai simboli che compaiono al terzo posto la permutazione<br />
0 ↦→ 1, 1 ↦→ 0 . Infatti si ottiene :<br />
000, 100, 111, 010<br />
che sono le parole <strong>di</strong> un co<strong>di</strong>ce equivalente a C.<br />
Da quanto esposto fino ad ora, appare evidente che nella teoria <strong>dei</strong> co<strong>di</strong>ci<br />
correttori è importante avere:<br />
(1) Co<strong>di</strong>ci capaci <strong>di</strong> correggere un prefissato numero <strong>di</strong> errori.<br />
(2) Co<strong>di</strong>ci <strong>di</strong> facile co<strong>di</strong>fica e <strong>di</strong> facile deco<strong>di</strong>fica.<br />
Per affrontare questi problemi occorre avere co<strong>di</strong>ci che abbiano una struttura<br />
algebrica ′′ ricca ′′ . Per rendersi conto <strong>di</strong> ciò, basta pensare ad un co<strong>di</strong>ce C costruito<br />
su un alfabeto <strong>di</strong> 10 simboli ed avente 100 posti <strong>di</strong> informazione. C contiene 10 100<br />
parole, la co<strong>di</strong>fica e la deco<strong>di</strong>fica sono teoricamente possibili, ma non praticamente<br />
per l’elevato numero <strong>di</strong> parole <strong>di</strong> C. Se poi si vuole determinare la <strong>di</strong>stanza minima<br />
si devono fare 10100 confronti !!!<br />
2<br />
Anche per superare questi problemi, sono stati introdotti i co<strong>di</strong>ci lineari che<br />
senza dubbio sono una delle più importanti famiglie <strong>di</strong> co<strong>di</strong>ci.
CAPITOLO 4<br />
Co<strong>di</strong>ci Lineari<br />
L’importanza <strong>dei</strong> co<strong>di</strong>ci lineari sta nel fatto che l’insieme delle parole ha una<br />
forte struttura algebrica e per questo sono facilitate molte operazioni quali:<br />
• calcolare i parametri del co<strong>di</strong>ce;<br />
• co<strong>di</strong>ficare e trasmettere i messaggi;<br />
• deco<strong>di</strong>ficare i messaggi;<br />
• scoprire e correggere errori;<br />
• calcolare la probabilità <strong>di</strong> una corretta deco<strong>di</strong>fica.<br />
1. Definizioni e prime proprietà<br />
Sia Fq = GF (q), q = p t , p primo, t ≥ 1, un campo <strong>di</strong> Galois. Nel seguito con<br />
Fq si intenderà sempre il campo GF (q) e sarà l’alfabeto su cui è definito il co<strong>di</strong>ce.<br />
Sotto questa ipotesi la struttura algebrica più naturale da usare su F n q è quella <strong>di</strong><br />
spazio vettoriale sul campo Fq; ricor<strong>di</strong>amo che in questo caso gli elementi <strong>di</strong> F n q si<br />
chiamano vettori <strong>di</strong> or<strong>di</strong>ne n sul campo Fq i cui elementi si <strong>di</strong>cono scalari.<br />
Definizione 4.1.1. Un co<strong>di</strong>ce C si <strong>di</strong>ce lineare se è un sottospazio vettoriale<br />
<strong>di</strong> F n q .<br />
Esempio 4.1.2. Costruiamo un co<strong>di</strong>ce lineare C su F2 <strong>di</strong> <strong>di</strong>mensione due e<br />
lunghezza 5. L’insieme <strong>di</strong> tutti i possibili messaggi è K = F 2 2 e perciò K =<br />
{(0 0), (1 0), (0 1), (1 1)}. Sia C il sottospazio vettoriale <strong>di</strong> F 5 2 avente per base<br />
B = {b1 = (1 0 1 1 1), b2 = (1 1 1 1 0)}<br />
Si ottiene in modo naturale la seguente applicazione <strong>di</strong> co<strong>di</strong>fica, K → C:<br />
(0 0) → 0 · b1 + 0 · b2 = (0 0 0 0 0)<br />
(1 0) → 1 · b1 + 0 · b2 = (1 0 1 1 1)<br />
(0 1) → 0 · b1 + 1 · b2 = (1 1 1 1 0)<br />
(1 1) → 1 · b1 + 1 · b2 = (0 1 0 0 1)<br />
33
1. DEFINIZIONI E PRIME PROPRIETÀ 34<br />
Quin<strong>di</strong> C = {(0 0 0 0 0), (1 0 1 1 1), (1 1 1 1 0), (0 1 0 0 1)}. Come si può<br />
verificare, la <strong>di</strong>stanza minima <strong>di</strong> C è d = 2.<br />
Si osservi che dalla definizione segue<br />
• C è un co<strong>di</strong>ce lineare se e solo se la somma <strong>di</strong> due parole e il prodotto <strong>di</strong><br />
una parola per uno scalare è ancora una parola del co<strong>di</strong>ce.<br />
• Se C è un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k allora C è un (n, k)-co<strong>di</strong>ce (ve<strong>di</strong><br />
teorema 4.2.2) ed è isomorfo a F k q e pertanto |C| = q k . Inoltre se C ha<br />
<strong>di</strong>stanza minima d si ha k ≤ n − d + 1, d ≤ n − k + 1, |C| ≤ q n−d+1 .<br />
• Un co<strong>di</strong>ce lineare contiene sempre la parola (0, 0, . . . , 0) perchè ′′ contiene ′′<br />
sempre il vettore nullo.<br />
• Il numero <strong>dei</strong> sottospazi k <strong>di</strong>mensionali <strong>di</strong> V = F n q è<br />
sk = (qn − 1)(q n−1 − 1) · · · (q n−k+1 − 1)<br />
(q k − 1)(q k−1 − 1) · · · (q − 1)<br />
e pertanto vi sono esattamente sk possibili (n, k)-co<strong>di</strong>ci <strong>di</strong>fferenti.<br />
Nota 4.1.3. Come mostra il seguente esempio, spazi vettoriali isomorfi possono<br />
dare co<strong>di</strong>ci con <strong>di</strong>stanza minima <strong>di</strong>versa e perciò non equivalenti.<br />
Esempio 4.1.4. Sia F = GF (2). Sia C1 = {λ(1, 0, 0)+µ(0, 1, 0), ∀ λ, µ ∈ F }<br />
il sottospazio <strong>di</strong> F 3 <strong>di</strong> <strong>di</strong>mensione 2 generato da v1 = (1, 0, 0) e v2 = (0, 1, 0).<br />
Sia ora C2 = {λ(1, 1, 0) + µ(1, 0, 1), ∀ λ, µ ∈ F } il sottospazio <strong>di</strong> F 3 <strong>di</strong><br />
<strong>di</strong>mensione 2 generato da w1 = (1, 1, 0) e w2 = (1, 0, 1).<br />
C1 e C2 come spazi vettoriali sono isomorfi ma non lo sono come co<strong>di</strong>ci. Infatti<br />
risulta d(C1) = 1 mentre d(C2) = 2 come si verifica facilmente esplicitando le parole<br />
<strong>dei</strong> due co<strong>di</strong>ci. C1 e C2 sono <strong>dei</strong> (3, 2)-co<strong>di</strong>ci lineari binari e quin<strong>di</strong> contengono<br />
2 2 = 4 parole .<br />
C1 = {(0, 0, 0), (1, 0, 0), (0, 1, 0), (1, 1, 0)}, C2 = {(0, 0, 0), (1, 0, 1), (1, 1, 0), (0, 1, 1)}.<br />
Definizione 4.1.5. Si definisce peso <strong>di</strong> Hamming w(x) <strong>di</strong> un vettore x ∈ F n q<br />
il numero delle componenti non nulle <strong>di</strong> x.<br />
Teorema 4.1.6. Sia C un co<strong>di</strong>ce lineare con <strong>di</strong>stanza minima d. Si ha<br />
• d(x, y) = w(x − y), ∀ x, y ∈ C<br />
• d è uguale al minimo peso delle sue parole non nulle.
2. MATRICI GENERATRICI 35<br />
Dimostrazione. Siano x, y ∈ C, poichè d(x, y) è il numero <strong>di</strong> posti in cui le<br />
componenti <strong>di</strong> x e y sono <strong>di</strong>verse, si ha che d(x, y) è il numero delle componenti<br />
non nulle della parola x − y ∈ C ossia d(x, y) = w(x − y).<br />
Sia ora d la <strong>di</strong>stanza minima <strong>di</strong> C, allora esistono due parole x, y ∈ C tali<br />
che d(x, y) = d cioè w(x − y) = d(x, y), quin<strong>di</strong> il peso minimo è d oppure<br />
un intero minore <strong>di</strong> d. Se esistesse una parola y ∈ C con w(y) < d, seguirebbe<br />
d(y, 0) = w(y) < d, e perciò d non sarebbe la <strong>di</strong>stanza minima. <br />
Il teorema ora <strong>di</strong>mostrato mette in evidenza l’importanza della nozione <strong>di</strong> peso<br />
<strong>di</strong> Hamming. Per un co<strong>di</strong>ce qualunque trovare la minima <strong>di</strong>stanza significa<br />
calcolare la <strong>di</strong>stanza <strong>di</strong> ogni coppia <strong>di</strong> parole del co<strong>di</strong>ce ossia occorre calcolare<br />
e confrontare |C|<br />
<strong>di</strong>stanze, mentre per i co<strong>di</strong>ci lineari il problema si risolve con<br />
2<br />
il calcolo del peso delle singole parole del co<strong>di</strong>ce ossia è sufficiente calcolare e<br />
confrontare i |C| − 1 pesi <strong>di</strong> Hamming delle parole non nulle <strong>di</strong> C.<br />
Abbiamo <strong>di</strong>mostrato che un co<strong>di</strong>ce con <strong>di</strong>stanza minima d pari, oltre a correggere<br />
d<br />
d<br />
− 1 errori, rivela errori (ve<strong>di</strong> teorema 3.2.11). E’ dunque utile il seguente<br />
2 2<br />
risultato.<br />
Teorema 4.1.7. Un co<strong>di</strong>ce lineare binario C ⊆ F n 2 con <strong>di</strong>stanza minima d<br />
<strong>di</strong>spari esiste se e solo se esiste un co<strong>di</strong>ce binario C1 ⊆ F n+1<br />
2 avente <strong>di</strong>stanza<br />
minima d + 1 e con |C| = |C1|. Inoltre C1 è lineare.<br />
Dimostrazione. Si rinvia a [1] pag. 126. <br />
2. Matrici generatrici<br />
L’operazione <strong>di</strong> co<strong>di</strong>fica <strong>di</strong> un messaggio me<strong>di</strong>ante un co<strong>di</strong>ce lineare è una<br />
trasformazione lineare e pertanto un vantaggio nel considerare co<strong>di</strong>ci lineari è<br />
quello <strong>di</strong> avere la possibilità <strong>di</strong> una rapida descrizione del co<strong>di</strong>ce e della facile<br />
deco<strong>di</strong>fica delle parole. Uno <strong>dei</strong> meto<strong>di</strong> con cui ciò si realizza è la ′′ costruzione ′′ <strong>di</strong><br />
una matrice che lo rappresenta.<br />
Ad esempio<br />
Nello spazio vettoriale V = F 5 2 i vettori v1 = (1 0 0 0 1), v2 = (1 1 0 1 0), v3 =<br />
(1 1 1 0 1) formano una base per un (5, 3)-co<strong>di</strong>ce binario C (associato al sottospazio<br />
F 3 2 ). Sia<br />
G =<br />
⎛<br />
⎝ v1<br />
v2<br />
v3<br />
⎞<br />
⎛<br />
⎠ = ⎝<br />
1 0 0 0 1<br />
1 1 0 1 0<br />
1 1 1 0 1<br />
⎞<br />
⎠ .
2. MATRICI GENERATRICI 36<br />
Comunque preso un vettore m = (m1m2m3) <strong>di</strong> F 3 2 rappresentante il messaggio da<br />
trasmettere, possiamo calcolare la parola p <strong>di</strong> C che gli corrisponde ossia il vettore<br />
<strong>di</strong> F 5 2 che sarà trasmesso:<br />
p = m1v1 + m2v2 + m3v3 = mG.<br />
Se ad esempio m = (1 0 1) , verrà trasmesso<br />
⎛<br />
⎞<br />
1 0 0 0 1<br />
mG = (1 0 1) ⎝ 1 1 0 1 0 ⎠ = (0 1 1 0 0).<br />
1 1 1 0 1<br />
Generalizziamo<br />
Sia C ⊆ F n q un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k ≤ n, sia {e1, e2, . . . , ek} una base<br />
<strong>di</strong> C e sia {b1, b2, . . . , bn} una base <strong>di</strong> F n q . Ogni vettore ei può essere scritto in modo<br />
unico come combinazione lineare <strong>dei</strong> vettori bi :<br />
⎧<br />
⎪⎨<br />
⎪⎩<br />
Pertanto è unica la matrice<br />
G =<br />
e1 = e11b1 + e12b2 + · · · + e1nbn<br />
e2 = e21b1 + e22b2 + · · · + e2nbn<br />
ek = ek1b1 + ek2b2 + · · · + eknbn<br />
⎛<br />
⎜<br />
⎝<br />
e11 · · · e1k · · · e1n<br />
e21 · · · e2k · · · e2n<br />
.<br />
ek1 · · · ekk · · · ekn<br />
G è <strong>di</strong> tipo k × n, ha rango k essendo {ei} una base <strong>di</strong> C.<br />
Definizione 4.2.1. Sia C ⊆ F n q un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k. Si definisce<br />
matrice generatrice <strong>di</strong> C una matrice <strong>di</strong> tipo k×n le cui righe sono le componenti<br />
<strong>dei</strong> vettori <strong>di</strong> una base <strong>di</strong> C rispetto una base <strong>di</strong> F n q .<br />
Osserviamo che, se invece <strong>di</strong> prendere una base del co<strong>di</strong>ce prendessimo un sistema<br />
<strong>di</strong> generatori x1, . . . , xh, h ≥ k, perverremmo con lo stesso proce<strong>di</strong>mento<br />
sopra descritto , ad una matrice <strong>di</strong> tipo h × n <strong>di</strong> rango k, che può ancora considerarsi<br />
una matrice generatrice. La restrizione sulla in<strong>di</strong>pendenza delle righe della<br />
matrice generatrice non è strettamente necessaria, è utile per minimizzare l’ingombro<br />
algoritmico e <strong>di</strong> registrazione <strong>dei</strong> dati. Per questo quando si parla <strong>di</strong> matrice<br />
generatrice si intende quella costruita a partire da una base del co<strong>di</strong>ce.<br />
Di norma come base <strong>di</strong> V = F n q si considera la base canonica.<br />
.<br />
⎞<br />
⎟<br />
⎠
2. MATRICI GENERATRICI 37<br />
Un vantaggio che si ha considerando co<strong>di</strong>ci lineari è che la loro descrizione è<br />
molto più semplice attraverso la matrice G che non con l’elenco delle parole del<br />
co<strong>di</strong>ce. Se ad esempio C è un (50, 40)-co<strong>di</strong>ce lineare binario allora<br />
|C| = 2 40 = (2 4 ) 10 > 10 10<br />
mentre G, avendo 40 righe e 50 colonne, ha 2000 elementi.<br />
Teorema 4.2.2. Un co<strong>di</strong>ce lineare C ⊆ F n q <strong>di</strong> <strong>di</strong>mensione k è un (n, k)-co<strong>di</strong>ce.<br />
Dimostrazione. Siano {ei}, i = 1, · · · , k e {bj}, j = 1, · · · , n, basi rispettiva-<br />
mente <strong>di</strong> C e <strong>di</strong> F n q e sia<br />
G =<br />
⎛<br />
⎜<br />
⎝<br />
e11 · · · e1k · · · e1n<br />
e21 · · · e2k · · · e2n<br />
.<br />
ek1 · · · ekk · · · ekn<br />
la matrice generatrice <strong>di</strong> C rispetto alle basi fissate. Poichè G ha rango k, in essa<br />
esiste almeno un minore <strong>di</strong> or<strong>di</strong>ne k non nullo. Sia ad esempio<br />
<br />
<br />
e11 · · · e1k <br />
<br />
<br />
e21 · · · e2k <br />
<br />
<br />
<br />
.<br />
<br />
<br />
<br />
ek1 · · ·<br />
<br />
ekk<br />
Proviamo che i primi k posti sono <strong>di</strong> informazione.<br />
Si deve provare che assegnata una qualsiasi k-upla (a1, · · · , ak) c’è una ed una<br />
sola parola x = (x1x2 · · · xk)G = x1e1 + · · · + xkek (x è una n-upla) che ha a1<br />
come prima componente, a2 come seconda componente, . . . , ak come k-esima<br />
componente. Ciò equivale a provare che il sistema<br />
⎧<br />
x1e11 + x2e21 + · · · + xkek1 = a1<br />
⎪⎨ x1e12 + x2e22 + · · · + xkek2 = a2<br />
(x1x2 · · · xk)G =<br />
⎪⎩<br />
.<br />
x1e1k + x2e2k + · · · + xkekk = ak<br />
ha una ed una sola soluzione e questo segue dal fatto che esso è un sistema lineare<br />
<strong>di</strong> k equazioni in k incognite con determinante della matrice <strong>dei</strong> coefficienti non<br />
nullo per ipotesi. Inoltre le rimanenti (n−k) componenti ak+1, . . . , an <strong>di</strong> tale parola<br />
sono combinazioni lineari <strong>di</strong> x1, . . . , xk tramite i coefficienti eij, e pertanto sono<br />
univocamente determinate. <br />
Corollario 4.2.3. Un co<strong>di</strong>ce lineare k-<strong>di</strong>mensionale è MDS se e solo se ogni<br />
minore <strong>di</strong> or<strong>di</strong>ne k <strong>di</strong> una sua matrice generatrice è non nullo.<br />
⎞<br />
⎟<br />
⎠
2. MATRICI GENERATRICI 38<br />
Dimostrazione. Segue dal teorema precedente poichè un (n, k)-co<strong>di</strong>ce è MDS<br />
se k posti qualsiasi sono <strong>di</strong> informazione. <br />
Osserviamo che due qualunque (n, k)-co<strong>di</strong>ci lineari sono sempre isomorfi come<br />
spazi vettoriali ma un isomorfismo fra spazi vettoriali non assicura che venga conservata<br />
la struttura metrica e pertanto non è detto che due qualunque (n, k)-co<strong>di</strong>ci<br />
lineari siano equivalenti perchè possono avere <strong>di</strong>stanza minima <strong>di</strong>versa. La definizione<br />
<strong>di</strong> equivalenza tra co<strong>di</strong>ci data in 3.5.14 per due co<strong>di</strong>ci a blocchi qualsiasi<br />
vale, ovviamente, anche per i co<strong>di</strong>ci lineari ma in generale con questa definizione<br />
non è detto venga conservata la proprietà <strong>di</strong> linearità ossia un co<strong>di</strong>ce lineare può<br />
risultare equivalente a un co<strong>di</strong>ce non lineare. Ad esempio :<br />
Sia C = {(0, 1), (0, 0)}, esso è un (2, 1)-co<strong>di</strong>ce binario lineare. Come co<strong>di</strong>ce, per<br />
la definizione 3.5.14 esso è equivalente al (2, 1)-co<strong>di</strong>ce C1 = {(1, 1), (1, 0)}, ma C1<br />
non è lineare non essendo sottospazio vettoriale.<br />
Quanto osservato motiva il fatto che la 3.5.14 si mo<strong>di</strong>fichi per i co<strong>di</strong>ci lineari<br />
nel senso seguente.<br />
Definizione 4.2.4. Due co<strong>di</strong>ci lineari C1, C2 ⊆ F n q si <strong>di</strong>cono equivalenti se è<br />
possibile ottenere tutte le parole <strong>di</strong> uno <strong>di</strong> essi da quelle dell’altro applicando un<br />
numero finito <strong>di</strong> volte le seguenti operazioni:<br />
(1) permutazione delle n posizioni (1, 2, . . . , n);<br />
(2) moltiplicazione <strong>dei</strong> simboli che compaiono in una data posizione per uno<br />
scalare non nullo.<br />
La proprietà (2) è mo<strong>di</strong>ficata rispetto alla 3.5.14 perchè è importante passare<br />
da un co<strong>di</strong>ce lineare ad un co<strong>di</strong>ce equivalente che sia lineare (oltre ad avere la stessa<br />
<strong>di</strong>stanza minima). Non solo, ricordando che un co<strong>di</strong>ce lineare si può ′′ identificare ′′<br />
con una sua matrice generatrice, se sui simboli che compaiono in una colonna<br />
della matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare C si applicasse una permutazione<br />
qualsiasi, si ottiene un co<strong>di</strong>ce che se anche fosse ancora lineare, potrebbe avere<br />
<strong>di</strong>stanza minima <strong>di</strong>versa. Ve<strong>di</strong>amo un esempio.<br />
Esempio 4.2.5. Sia C ⊆ F 3 3 un co<strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 2 dato con la matrice<br />
<br />
1 1 0<br />
G =<br />
0 1 2<br />
Si ha C = {λ(1, 1, 0) + µ(0, 1, 2)} = {(λ, λ + µ, 2µ), λ, µ ∈ GF (3)}. Per (λ, µ) =<br />
(0, 0) ogni parola <strong>di</strong> C ha almeno due componenti non nulle e quin<strong>di</strong> d(C) = 2.<br />
Operando sui simboli del secondo posto (seconda colonna) tramite la permutazione<br />
0 ↦→ 1, 1 ↦→ 0, 2 ↦→ 2 la matrice G viene trasformata in<br />
<br />
1 0 0<br />
G1 =<br />
0 0 2
2. MATRICI GENERATRICI 39<br />
che è matrice generatrice <strong>di</strong> un co<strong>di</strong>ce C1 ⊆ F 3 3 con d(C1) = 1. I co<strong>di</strong>ci C e C1 sono<br />
isomorfi come spazi vettoriali ma non come co<strong>di</strong>ci perchè hanno <strong>di</strong>stanza minima<br />
<strong>di</strong>versa.<br />
E’ possibile operare su una matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare in modo da<br />
avere una matrice generatrice dello stesso co<strong>di</strong>ce o <strong>di</strong> un co<strong>di</strong>ce lineare equivalente.<br />
Teorema 4.2.6. Due matrici G e G1 ad elementi in GF (q) e <strong>di</strong> tipo k ×<br />
n generano (n, k)-co<strong>di</strong>ci lineari equivalenti se una delle due matrici può essere<br />
ottenuta dall’altra tramite una sequenza finita <strong>di</strong> trasformazioni <strong>dei</strong> seguenti tipi:<br />
(1) scambiare due righe;<br />
(2) moltiplicare gli elementi <strong>di</strong> una riga per un elemento non nullo <strong>di</strong> GF (q);<br />
(3) sommare ad una riga un’altra riga moltiplicata per un elemento non nullo<br />
<strong>di</strong> GF (q);<br />
(4) permutare due colonne;<br />
(5) moltiplicare gli elementi <strong>di</strong> una colonna per un elemento non nullo <strong>di</strong><br />
GF (q).<br />
Dimostrazione. Le operazioni (1), (2), (3) danno un cambiamento <strong>di</strong> base<br />
dello spazio vettoriale, dunque si ha lo stesso spazio vettoriale, cioè lo stesso co<strong>di</strong>ce<br />
rappresentato dalla matrice <strong>di</strong> partenza.<br />
L’operazione (4) equivale ad una permutazione delle posizioni (1, 2, . . . , n).<br />
L’operazione (5) equivale a moltiplicare le componenti <strong>di</strong> tutte le parole che<br />
occupano una posizione fissata per un elemento non nullo <strong>di</strong> GF (q). <br />
Nota 4.2.7. Si osservi che sommare ad una colonna un’altra colonna moltiplicata<br />
per un elemento non nullo <strong>di</strong> GF (q), non preserva l’equivalenza <strong>di</strong> co<strong>di</strong>ci.<br />
Dunque in una matrice generatrice il ruolo ricoperto dalle righe e dalle colonne<br />
non è simmetrico.<br />
La matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare non è unica perchè <strong>di</strong>pende dalle basi<br />
fissate. E’ quin<strong>di</strong> importante scegliere matrici generatrici il più semplice possibile<br />
ma equivalenti ossia che generino co<strong>di</strong>ci equivalenti. Per un co<strong>di</strong>ce lineare C ⊆ F n q<br />
<strong>di</strong> <strong>di</strong>mensione k si può scegliere la seguente matrice detta forma standard o<br />
forma ridotta normale.<br />
S =<br />
⎛<br />
⎜<br />
⎝<br />
1 0 . . . 0 x1,k+1 . . . x1,n<br />
0 1 . . . 0 x2,k+1 . . . x2,n<br />
.<br />
0 0 . . . 1 xk,k+1 . . . xk,n<br />
⎞<br />
⎟<br />
⎠
2. MATRICI GENERATRICI 40<br />
In forma più compatta questa matrice si può scrivere nel seguente modo<br />
S = (Ik|A)<br />
dove Ik è la matrice unitaria <strong>di</strong> or<strong>di</strong>ne k ed è data dalle prime k colonne <strong>di</strong> S,<br />
mentre A è la matrice rimanente. La convenienza <strong>di</strong> una matrice in questa forma<br />
è che, una volta co<strong>di</strong>ficato il vettore a = (a1, . . . , ak) si ottiene un vettore che<br />
nelle prime k componenti coincide con a. Dunque è evidente che la ridondanza del<br />
co<strong>di</strong>ce è concentrata esattamente nelle rimanenti (n − k) componenti.<br />
Si osservi che la forma standard <strong>di</strong> una matrice generatrice non è unica. Per<br />
esempio una permutazione qualsiasi delle colonne della matrice A porta alla costruzione<br />
<strong>di</strong> un’altra matrice T , generatrice <strong>di</strong> un co<strong>di</strong>ce equivalente a C perchè T<br />
è sempre in forma standard ( [3], pag. 64).<br />
Corollario 4.2.8. Per ogni (n, k)-co<strong>di</strong>ce (o co<strong>di</strong>ce sistematico) sopra un campo<br />
Fq esiste una matrice standard<br />
G = (Ik|A)<br />
le cui righe generano C oppure generano un (n, k)-co<strong>di</strong>ce C1 equivalente a C. Viceversa<br />
se C ammette una matrice standard allora è un co<strong>di</strong>ce sistematico.<br />
Esempio 4.2.9. Sia C un co<strong>di</strong>ce lineare su GF (2) avente matrice generatrice<br />
⎛<br />
G = ⎝<br />
1 0 1 1 1<br />
0 1 1 0 1<br />
1 1 0 0 0<br />
(1) Trasformare G in forma normale.<br />
(2) Determinare quante parole contiene C.<br />
(3) Trovare la <strong>di</strong>stanza minima d.<br />
Soluzione -<br />
(1) Poichè il minore costituito dalle prime tre colonne è nullo, non è possibile<br />
trasformare G in forma standard usando solo trasformazioni elementari<br />
sulle righe. Per avere le prime tre colonne linearmente in<strong>di</strong>pendenti,<br />
applichiamo alle posizioni (ossia alle colonne <strong>di</strong> G) la permutazione<br />
otteniamo la matrice<br />
⎞<br />
⎠<br />
1 ↦→ 4, 2 ↦→ 2, 3 ↦→ 3, 4 ↦→ 1, 5 ↦→ 5,<br />
⎛<br />
¯G = ⎝<br />
1 0 1 1 1<br />
0 1 1 0 1<br />
0 1 0 1 0<br />
⎞<br />
⎠
3. CODIFICA NEI CODICI LINEARI 41<br />
che ha le prime tre colonne linearmente in<strong>di</strong>pendenti e perciò si può operare<br />
sulle righe. Sostituendo la terza riga con la somma della seconda e<br />
terza riga, si ottiene<br />
⎛<br />
⎝<br />
1 0 1 1 1<br />
0 1 1 0 1<br />
0 0 1 1 1<br />
Sostituendo alla prima riga la somma della prima con la terza riga e<br />
sostituendo alla seconda riga la somma della seconda e terza riga, si ottiene<br />
⎛<br />
⎝<br />
1 0 0 0 0<br />
0 1 0 1 0<br />
0 0 1 1 1<br />
che è una matrice in forma standard e genera un co<strong>di</strong>ce equivalente a<br />
quello dato.<br />
(2) C ha lunghezza 5 e dalla G si deduce che k = 3, pertanto C è un (5, 3)co<strong>di</strong>ce<br />
binario e dunque |C| = 2 3 = 8.<br />
(3) La parola (10000) appartiene a C ed ha peso 1 e perciò d = 1.<br />
⎞<br />
⎠<br />
⎞<br />
⎠<br />
3. Co<strong>di</strong>fica nei co<strong>di</strong>ci lineari<br />
Co<strong>di</strong>ficare un messaggio in un (n, k)-co<strong>di</strong>ce significa, utilizzando un algoritmo<br />
matematico, associare ad un messaggio costituito da k simboli una parola data da<br />
una n-upla in modo che ad ogni k-upla corrisponda una ed una sola parola.<br />
Per i co<strong>di</strong>ci lineari l’algoritmo <strong>di</strong> co<strong>di</strong>fica è quello <strong>di</strong> seguito illustrato.<br />
Sia C ⊆ F n q , Fq = GF (q), un (n, k)-co<strong>di</strong>ce lineare avente matrice generatrice<br />
G =<br />
⎛<br />
⎜<br />
⎝<br />
e11 · · · e1k · · · e1n<br />
e21 · · · e2k · · · e2n<br />
.<br />
ek1 · · · ekk · · · ekn<br />
Supponiamo che i primi k posti siano <strong>di</strong> informazione. Le parole del co<strong>di</strong>ce C<br />
sono le n-uple che si ottengono combinando linearmente le righe <strong>di</strong> G tramite le<br />
k-uple <strong>di</strong> elementi <strong>di</strong> Fq. Co<strong>di</strong>fichiamo ogni messaggio m = (m1, m2, . . . , mk) nella<br />
parola <strong>di</strong> C che si ottiene moltiplicando m per G, dunque m viene co<strong>di</strong>ficata in<br />
⎞<br />
⎟<br />
⎠
3. CODIFICA NEI CODICI LINEARI 42<br />
⎛<br />
⎞<br />
e11 · · · e1k · · · e1n<br />
⎜ e21 · · · e2k · · · e2n ⎟<br />
c = (m1, m2, · · · , mk) ⎜<br />
⎟<br />
⎝<br />
.<br />
⎠ = (c1, c2, · · · , cn)<br />
ek1 · · · ekk · · · ekn<br />
ossia<br />
c = m · G<br />
dove il prodotto è, come <strong>di</strong> consueto, righe per colonne, cioè l’i-esima coor<strong>di</strong>nata<br />
del prodotto m · G è il prodotto scalare ci = m1e1,i + m2e2,i + · · · + mkek,i. In definitiva<br />
l’operazione <strong>di</strong> co<strong>di</strong>fica procede per semplici operazioni algebriche <strong>di</strong> somma<br />
e prodotto.<br />
L’algoritmo descritto associa ad ogni messaggio una ed una sola parola del<br />
co<strong>di</strong>ce e pertanto costituisce uno schema <strong>di</strong> co<strong>di</strong>fica per un (n, k)-co<strong>di</strong>ce lineare.<br />
La co<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare è ancora più semplice se la matrice generatrice<br />
è in forma standard. Sia G = (Ik|A). Si ha<br />
(m1, . . . , mk)(Ik|A) = (m1, m2, . . . , mk, m1e1,k+1+. . .+mkek,k+1, . . . m1e1n+. . .+mkekn)<br />
Il messaggio m = (m1, . . . , mk) viene co<strong>di</strong>ficato nella parola c = (c1, . . . , cn), con<br />
ci = mi, 1 ≤ i ≤ k, e (ck+1, . . . , cn) = (m1, . . . , mk)A.<br />
I simboli ck+1, . . . , cn sono <strong>di</strong> controllo.<br />
Esempio 4.3.1. Sia C il co<strong>di</strong>ce lineare ternario con matrice generatrice G scritta<br />
in forma standard :<br />
⎛<br />
1<br />
G = ⎝ 0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
2<br />
1<br />
⎞<br />
0<br />
1 ⎠ .<br />
0 0 1 2 0 1<br />
Co<strong>di</strong>ficare la sequenza 102101210122 emessa dalla sorgente.<br />
Soluzione - Da G si deduce che C ha lunghezza 6 ed ha tre simboli <strong>di</strong> informazione<br />
e pertanto C è un (6, 3)-co<strong>di</strong>ce ternario. Ogni tre simboli della sequenza data<br />
rappresentano un messaggio e perciò nella co<strong>di</strong>fica ad ogni blocco <strong>di</strong> tre simboli<br />
vengono aggiunti tre simboli <strong>di</strong> controllo. Divi<strong>di</strong>amo la sequenza emessa dalla<br />
sorgente in blocchi <strong>di</strong> lunghezza 3:<br />
e co<strong>di</strong>fichiamo ogni blocco. Si ha:<br />
102, 101, 210, 122<br />
(102) · G = (102222)<br />
(101) · G = (101021)<br />
(210) · G = (210221)
4. TABELLA STANDARD E DECODIFICA DEI CODICI LINEARI 43<br />
(122) · G = (122211)<br />
4. Tabella standard e Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari<br />
Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce lineare costruito su Fq = GF (q). Il gruppo (C, +)<br />
è un sottogruppo <strong>di</strong> (F n q , +) e |C| = q k e pertanto (C, +) in (F n q , +) ha m = q n−k<br />
laterali C0 = C, C1, . . . , Cm−1. Si ha :<br />
• Ogni elemento <strong>di</strong> F n q appartiene ad uno ed un solo laterale Ci, i =<br />
0, . . . , m − 1 e perciò un qualsiasi vettore y ricevuto appartiene ad un<br />
solo Ci, ossia y = ai + c, essendo c una parola del co<strong>di</strong>ce C ed ai un<br />
elemento <strong>di</strong> F n q .<br />
• Se è stata trasmessa la parola x e si riceve y, si ha e = y −x = ai +c−x =<br />
ai + ¯c, che è un elemento <strong>di</strong> Ci quin<strong>di</strong> l’errore è un elemento dello stesso<br />
laterale a cui appartiene l’elemento ricevuto.<br />
• Poichè l’errore più probabile è quello <strong>di</strong> peso minimo, il deco<strong>di</strong>ficatore<br />
sceglie come vettore errore il vettore e ∗ <strong>di</strong> peso minimo fra i vettori<br />
appartenenti a Ci e deco<strong>di</strong>fica la n-upla ricevuta come y − e ∗ .<br />
Per ogni laterale Ci, i = 0, . . . , m − 1, occorre fissare una parola ai ∈ C quale<br />
leader (o <strong>di</strong>rettrice) del laterale. Il leader deve essere scelto fra i vettori <strong>di</strong> peso<br />
minimo appartenenti a quel laterale.<br />
Teorema 4.4.1. Sia C ⊆ F n q . Se y ∈ F n q appartiene al laterale Ci, ossia<br />
se y = ai + cj, essendo ai il leader del laterale Ci e cj una parola <strong>di</strong> C, allora<br />
d(y, cj) ≤ d(y, c) per ogni c ∈ C.<br />
Dimostrazione. Da y = ai+cj si ha d(y, cj) = d(ai+cj, cj) = w(ai+cj−cj) =<br />
w(ai), inoltre d(y, c) = d(ai + cj, c) = w(ai + cj − c). Poichè ai + cj − c ∈ Ci ed ai<br />
è il leader <strong>di</strong> Ci, segue che w(ai) ≤ w(ai + cj − c), quin<strong>di</strong> d(y, cj) ≤ d(y, c) ossia cj<br />
è la parola <strong>di</strong> C più vicina al vettore ricevuto y. <br />
I laterali del gruppo (C, +) permettono <strong>di</strong> deco<strong>di</strong>ficare i co<strong>di</strong>ci lineari tramite<br />
una tabella , detta tabella standard, costruita nel seguente modo.<br />
Tutti gli elementi <strong>di</strong> F n q si <strong>di</strong>stribuiscono in una matrice-tabella Σ = (σij) con<br />
q n−k righe e q k colonne. Ogni riga contiene gli elementi <strong>di</strong> un laterale e sono<br />
sod<strong>di</strong>sfatte le seguenti proprietà.<br />
(1) La prima riga contiene tutti gli elementi del co<strong>di</strong>ce C, iniziando dal vettore<br />
nullo ossia σ11 = (00 · · · 0).
4. TABELLA STANDARD E DECODIFICA DEI CODICI LINEARI 44<br />
(2) Per ogni in<strong>di</strong>ce <strong>di</strong> riga i, nella prima colonna (ossia come elemento σi1) si<br />
scrive la parola ai scelta come il leader del laterale; ai deve essere scelto<br />
fra i vettori <strong>di</strong> peso minimo appartenenti a quel laterale.<br />
(3) Per ogni coppia <strong>di</strong> in<strong>di</strong>ci (i, j) è σij = ai + σ1j, pertanto la riga i-esima<br />
contiene tutti gli elementi del laterale ai + C.<br />
Un semplice algoritmo per costruire una tabella standard Σ <strong>di</strong> C è il seguente:<br />
• primo passo: <strong>di</strong>stribuire le parole <strong>di</strong> C sulla prima riga <strong>di</strong> Σ con l’unica<br />
con<strong>di</strong>zione σ11 = 0;<br />
• secondo passo: scegliere una parola a2 <strong>di</strong> peso minimo in F n q \C e porre<br />
σ21 = a2;<br />
• terzo passo: <strong>di</strong>stribuire sulla seconda riga <strong>di</strong> Σ le parole <strong>di</strong> a2 + C in<br />
modo che sia σ2j = a2 + σ1j;<br />
• quarto passo: scegliere una parola a3 <strong>di</strong> peso minimo in F n q \{C∪(a2+C)}<br />
e porre σ31 = a3;<br />
• quinto passo: <strong>di</strong>stribuire sulla terza riga <strong>di</strong> Σ le parole <strong>di</strong> a3 +C in modo<br />
che sia σ3j = a3 + σ1j;<br />
. . . continuare in questo modo fino all’esaurimento delle parole <strong>di</strong> F n q .<br />
La tabella così costruita contiene ogni elemento <strong>di</strong> F n q una ed una sola volta.<br />
Se il deco<strong>di</strong>ficatore riceve un elemento y ∈ Ci, trova y nella tabella e deco<strong>di</strong>fica y<br />
come la parola del co<strong>di</strong>ce che si trova nella stessa colonna, cioè come y − ai che è<br />
la parola del co<strong>di</strong>ce più vicina ad y.<br />
Esempio 4.4.2. Sia C = {0000, 1011, 0101, 1110} un (4, 2)-co<strong>di</strong>ce binario<br />
lineare. La tabella standard è:<br />
C0 = C (0 0 0 0) (1 0 1 1) (0 1 0 1) (1 1 1 0)<br />
C1 (1 0 0 0) (0 0 1 1) (1 1 0 1) (0 1 1 0)<br />
C2 (0 1 0 0) (1 1 1 1) (0 0 0 1) (1 0 1 0)<br />
C3 (0 0 1 0) (1 0 0 1) (0 1 1 1) (1 1 0 0)<br />
Se ad esempio viene ricevuto y = (1111), allora la parola trasmessa è c =<br />
y − (0100) = (1111) − (0100) = 1011 che è proprio la parola <strong>di</strong> C che si trova nella<br />
stessa colonna <strong>di</strong> y.<br />
Nel paragrafo 6 <strong>di</strong> questo capitolo, si vedrà che questo schema <strong>di</strong> deco<strong>di</strong>fica può<br />
essere semplificato usando il concetto <strong>di</strong> co<strong>di</strong>ce duale e <strong>di</strong> sindrome <strong>di</strong> un vettore.
5. CODICE DUALE 45<br />
5. Co<strong>di</strong>ce duale<br />
Per trovare meto<strong>di</strong> che semplifichino la deco<strong>di</strong>fica del co<strong>di</strong>ce, occorre introdurre<br />
alcune nozioni.<br />
Poichè l’insieme delle parole <strong>di</strong> un co<strong>di</strong>ce lineare costituisce un sottospazio<br />
<strong>di</strong> uno spazio vettoriale finito, in questi spazi vettoriali non si può introdurre la<br />
nozione <strong>di</strong> prodotto scalare in senso euclideo; è però ugualmente possibile definire<br />
la nozione <strong>di</strong> prodotto scalare e il concetto <strong>di</strong> ortogonalità fra vettori.<br />
Definizione 4.5.1. Comunque presi x, y ∈ F n q<br />
x • y = (x1, x2, . . . , xn) • (y1, y2, . . . , yn) =<br />
n<br />
i=1<br />
xiyi<br />
è detto prodotto scalare <strong>di</strong> x e y.<br />
Due vettori si <strong>di</strong>cono ortogonali se il loro prodotto scalare è nullo.<br />
Un vettore si <strong>di</strong>ce isotropo se è ortogonale a se stesso.<br />
Si ricor<strong>di</strong> che la somma della definizione precedente è calcolata in GF (q).<br />
Inoltre è facile verificare che, comunque presi x, y, z ∈ F n q , λ ∈ Fq, si ha<br />
(1) x • y = y • x<br />
(2) x • (y + z) = x • y + x • z<br />
(3) (λx) • y = λ(x • y) .<br />
Si noti che a <strong>di</strong>fferenza <strong>di</strong> quanto accade nella geometria euclidea, quando si<br />
′′ opera ′′ in un campo finito il prodotto scalare <strong>di</strong> un vettore non nullo per se stesso<br />
può essere zero. Per esempio, in GF (2) risulta (1, 1, 0, 0) • (1, 1, 0, 0) = 1 + 1 = 0.<br />
Definizione 4.5.2. Sia C ⊆ F n q un sottospazio <strong>di</strong> <strong>di</strong>mensione k. Si definisce<br />
spazio ortogonale a C e si denota con C ⊥ l’insieme<br />
C ⊥ = {x ∈ F n q | x • c = 0 ∀ c ∈ C}.<br />
C ⊥ prende il nome <strong>di</strong> co<strong>di</strong>ce duale o ortogonale a C. Se C = C ⊥ , il co<strong>di</strong>ce C si<br />
<strong>di</strong>ce autoduale .<br />
Nota 4.5.3.<br />
(1) C ⊥ è un sottospazio vettoriale <strong>di</strong> F n q perchè è chiuso rispetto alle operazioni<br />
<strong>di</strong> ad<strong>di</strong>zione <strong>di</strong> vettori e <strong>di</strong> moltiplicazione <strong>di</strong> un vettore per uno scalare.<br />
(2) A <strong>di</strong>fferenza degli spazi vettoriali definiti su R, i sottospazi C e C ⊥ <strong>di</strong> F n q<br />
possono avere in comune vettori <strong>di</strong>versi dal vettore nullo, tali vettori sono<br />
i vettori isotropi.<br />
(3) (C ⊥ ) ⊥ = C.
5. CODICE DUALE 46<br />
(4) Sia C ⊆ F n q autoduale, allora x • y = 0 per ogni coppia <strong>di</strong> parole non<br />
necessariamente <strong>di</strong>stinte e pertanto si ha<br />
<strong>di</strong>m C = <strong>di</strong>m C ⊥ = k = n<br />
2<br />
Ricor<strong>di</strong>amo che se A è una matrice, con A t si in<strong>di</strong>ca la matrice trasposta <strong>di</strong><br />
A, ossia la matrice che ha per colonne le righe <strong>di</strong> A. Ovviamente le righe <strong>di</strong> A t<br />
coincidono con le colonne <strong>di</strong> A.<br />
Teorema 4.5.4. Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce generato dalla matrice G. Allora<br />
un vettore x ∈ F n q è una parola del co<strong>di</strong>ce duale C ⊥ se e solo se è ortogonale a tutti<br />
i vettori riga <strong>di</strong> G:<br />
x ∈ C ⊥ ⇔ xG t = 0<br />
dove 0 è la matrice 1 × k i cui elementi sono tutti nulli.<br />
Dimostrazione. Sia x ∈ C ⊥ , allora x è ortogonale ad ogni parola <strong>di</strong> C e in<br />
particolare alle parole che costituiscono una base <strong>di</strong> C e pertanto xG t = 0.<br />
Viceversa, sia xG t = 0. Allora x è ortogonale a tutti i vettori e1, e2, . . . , ek che<br />
costituiscono una base <strong>di</strong> C. Poichè per ogni parola c ∈ C si ha c = λ1e1+. . .+λkek<br />
segue che<br />
x • c = x • (λ1e1 + . . . + λkek) = λ1(x • e1) + . . . + λk(x • ek) = 0.<br />
Pertanto x è ortogonale ad ogni parola <strong>di</strong> C e <strong>di</strong> conseguenza x ∈ C ⊥ . <br />
Teorema 4.5.5. Se C ⊆ F n q è un (n, k)-co<strong>di</strong>ce lineare allora C ⊥ è un<br />
(n, n − k)-co<strong>di</strong>ce lineare.<br />
Dimostrazione. Dal teorema precedente segue che i vettori x ∈ C ⊥ sono<br />
tutti e soli i vettori <strong>di</strong> F n q ortogonali ai vettori <strong>di</strong> una base {ei}, i = 1, . . . , k, <strong>di</strong> C.<br />
Questi vettori sono dati da tutte e sole le soluzioni del sistema<br />
⎧<br />
⎪⎨<br />
⎪⎩<br />
e11x1 + e12x2 + · · · + e1nxn = 0<br />
e21x1 + e22x2 + · · · + e2nxn = 0.<br />
ek1x1 + ek2x2 + · · · + eknxn = 0<br />
Questo è un sistema lineare omogeneo <strong>di</strong> k equazioni in n incognite con rango<br />
della matrice <strong>dei</strong> coefficienti uguale a k quin<strong>di</strong> ha q n−k autosoluzioni delle quali<br />
esattamente n−k linearmenti in<strong>di</strong>pendenti. Segue che n−k autosoluzioni qualsiasi,<br />
linearmente in<strong>di</strong>pendenti, sono una base <strong>di</strong> C ⊥ e perciò <strong>di</strong>m C ⊥ = n − k. <br />
<strong>di</strong>m C + <strong>di</strong>m (C ⊥ ) = n
5. CODICE DUALE 47<br />
Definizione 4.5.6. Sia C un (n, k)-co<strong>di</strong>ce lineare. Una matrice generatrice <strong>di</strong><br />
C ⊥ è detta matrice <strong>di</strong> controllo (o matrice <strong>di</strong> controllo <strong>di</strong> parità ) del co<strong>di</strong>ce<br />
C, si denota con H ed è <strong>di</strong> tipo (n − k) × n.<br />
Teorema 4.5.7. Un vettore x ∈ F n q , x = (x1x2 · · · xn), è una parola del co<strong>di</strong>ce<br />
C se e solo se xH t = 0, dove 0 è la matrice 1 × (n − k) i cui elementi sono tutti<br />
nulli.<br />
Dimostrazione. Un vettore x ∈ F n q è una parola <strong>di</strong> C se e solo se è ortogonale<br />
a C ⊥ ossia se e solo se è ortogonale a tutti i vettori y ∈ C ⊥ ossia se e solo se è<br />
ortogonale a tutti i vettori <strong>di</strong> una base <strong>di</strong> C ⊥ . Poichè le componenti <strong>dei</strong> vettori<br />
<strong>di</strong> una base <strong>di</strong> C ⊥ sono le righe <strong>di</strong> H, un vettore x è una parola <strong>di</strong> C se e solo se<br />
xH t = 0. <br />
Dunque la conoscenza <strong>di</strong> H permette <strong>di</strong> controllare facilmente se un vettore<br />
<strong>di</strong> F n q è una parola del co<strong>di</strong>ce C. Questo è il motivo per cui H si chiama matrice<br />
<strong>di</strong> controllo <strong>di</strong> C e le equazioni del sistema xH t = 0 sono dette equazioni <strong>di</strong><br />
controllo.<br />
Così come la matrice generatrice, anche la matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce non<br />
è unica, in generale. Se come matrice generatrice <strong>di</strong> C si sceglie quella standard<br />
allora la costruzione della matrice H è semplice ed imme<strong>di</strong>ata.<br />
Teorema 4.5.8. Sia G = (Ik | A) una matrice generatrice standard <strong>di</strong> un<br />
(n, k)-co<strong>di</strong>ce lineare C. Allora H = (−A t | In−k) è una matrice <strong>di</strong> controllo per C.<br />
Dimostrazione. Sia<br />
G =<br />
⎛<br />
⎜<br />
⎝<br />
1 0 . . . 0 e1,k+1 . . . e1,n<br />
0 1 . . . 0 e2,k+1 . . . e2,n<br />
.<br />
0 0 . . . 1 ek,k+1 . . . ek,n<br />
una matrice generatrice rispetto alle basi {ei} <strong>di</strong> C e {bj} <strong>di</strong> F n q , per i = 1, . . . , k; j =<br />
1, . . . , n. Un vettore x = (x1, . . . , xn) ∈ F n q è una parola <strong>di</strong> C ⊥ se e solo se xG t = 0,<br />
cioè se e solo se è soluzione del sistema<br />
⎧<br />
⎪⎨<br />
⎪⎩<br />
x1 + e1,k+1xk+1 + · · · + e1,nxn = 0<br />
x2 + e2,k+1xk+1 + · · · + e2,nxn = 0.<br />
xk + ek,k+1xk+1 + · · · + ek,nxn = 0<br />
Esso ha n −k autosoluzioni linearmente in<strong>di</strong>pendenti perchè è lineare omogeneo <strong>di</strong><br />
k equazioni in n incognite con caratteristica della matrice <strong>dei</strong> coefficienti uguale a<br />
⎞<br />
⎟<br />
⎠
5. CODICE DUALE 48<br />
k. Troviamo le (n−k) autosoluzioni assegnando alle incognite xk+1, . . . , xn successivamente<br />
i valori (1, 0, . . . , 0), (0, 1, . . . , 0), (0, 0, . . . , 1). In questo modo otteniamo<br />
una base <strong>di</strong> C ⊥ data dai vettori:<br />
(−e1,k+1, −e2,k+1, . . . , −ek,k+1, 1, 0, . . . , 0)<br />
(−e1,k+2, −e2,k+2, . . . , −ek,k+2, 0, 1, . . . , 0)<br />
. . . . . . . . .<br />
(−e1,n, −e2,n, . . . , −ek,n, 0, 0, . . . , 1)<br />
e pertanto la matrice<br />
⎛<br />
H =<br />
⎜<br />
⎝<br />
−e1,k+1 −e2,k+1 . . . −ek,k+1 1 0 . . . 0<br />
−e1,k+2 −e2,k+2 . . . −ek,k+2 0 1 . . . 0<br />
.<br />
−e1,k+n −e2,k+n . . . −ek,k+n 0 0 . . . 1<br />
⎞<br />
⎟<br />
⎠ = (−At | In−k)<br />
è una matrice <strong>di</strong> controllo per C. <br />
Esempio 4.5.9.<br />
(1) La matrice <strong>di</strong> controllo del co<strong>di</strong>ce binario (7, 4) <strong>di</strong> Hamming è<br />
⎛<br />
⎞<br />
1 0 1 1 1 0 0<br />
H = ⎝ 1 1 0 1 0 1 0 ⎠ = (−A<br />
1 1 1 0 0 0 1<br />
t | In−k)<br />
la quale ha effettivamente rango 3.<br />
(2) Sia C il (7, 4)-co<strong>di</strong>ce sopra Z3 con matrice generatrice<br />
⎛<br />
⎞<br />
0 0 0 2 1 1 0<br />
⎜<br />
G = ⎜ 0 0 1 1 0 2 0 ⎟<br />
⎝ 2 1 0 2 0 2 0 ⎠<br />
2 0 0 1 0 0 1<br />
Per trovare una matrice del tipo G ′ = (I4|A) che generi un co<strong>di</strong>ce D equivalente<br />
a C, permutiamo le colonne <strong>di</strong> G in modo che assumano l’or<strong>di</strong>ne<br />
5, 3, 2, 7, 1, 4, 6, ossia applichiamo alle posizioni (colonne) la permutazione<br />
1 ↦→ 5, 2 ↦→ 3, 3 ↦→ 2, 4 ↦→ 6, 5 ↦→ 1, 6 ↦→ 7, 7 ↦→ 4,<br />
ossia moltiplichiamo a destra G per la matrice <strong>di</strong> permutazione<br />
⎛<br />
0 0 0 0 1 0<br />
⎞<br />
0<br />
⎜ 0<br />
⎜ 0<br />
⎜<br />
P = ⎜ 0<br />
⎜ 1<br />
⎝<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0 ⎟<br />
0 ⎟<br />
1 ⎟<br />
0 ⎟<br />
0<br />
⎠<br />
0 0 0 0 0 1 0
5. CODICE DUALE 49<br />
In questo modo si ottiene una matrice standard G ′ che genera un co<strong>di</strong>ce<br />
D equivalente a C<br />
G ′ ⎛<br />
1<br />
⎜<br />
= ⎜ 0<br />
⎝ 0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
2<br />
2<br />
1<br />
2<br />
⎞<br />
1<br />
2 ⎟<br />
2 ⎠<br />
0 0 0 1 2 1 0<br />
= (I4|A),<br />
⎛<br />
0<br />
⎜<br />
A = ⎜ 0<br />
⎝ 2<br />
2<br />
1<br />
2<br />
⎞<br />
1<br />
2 ⎟<br />
2 ⎠<br />
2 1 0<br />
.<br />
Una matrice generatrice <strong>di</strong> D⊥ è allora<br />
H ′ = (−A t ⎛<br />
0<br />
| I3) = ⎝ 1<br />
0<br />
2<br />
1<br />
1<br />
1<br />
2<br />
1<br />
0<br />
0<br />
1<br />
⎞<br />
0<br />
0 ⎠ .<br />
2 1 1 0 0 0 1<br />
Moltiplicando H ′ a destra per la matrice <strong>di</strong> permutazione<br />
P t ⎛<br />
0 0 0 0 1 0<br />
⎞<br />
0<br />
⎜ 0<br />
⎜ 0<br />
⎜<br />
= ⎜ 0<br />
⎜ 1<br />
⎝<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0 ⎟<br />
0 ⎟<br />
0 ⎟<br />
0 ⎟<br />
1<br />
⎠<br />
0 0 0 1 0 0 0<br />
si ottiene la seguente matrice generatrice per C⊥ :<br />
⎛<br />
1<br />
H = ⎝ 0<br />
1<br />
1<br />
0<br />
2<br />
0<br />
0<br />
0<br />
1<br />
1<br />
2<br />
⎞<br />
0<br />
1 ⎠ .<br />
0 1 1 1 2 0 0<br />
Osserviamo che GH t = 0; inoltre H ha, come previsto, rango n − k = 3.<br />
Esempio 4.5.10. Trovare la matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce lineare binario C<br />
assegnato tramite la matrice<br />
⎛<br />
1<br />
G = ⎝ 0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
1<br />
⎞<br />
1<br />
0 ⎠ .<br />
0 0 1 0 1<br />
Un vettore x ∈ F 5 2 è ortogonale a C se e solo se xGt = 0. Se x = (x1x2x3x4x5), in<br />
forma estesa significa:<br />
⎧<br />
⎨ x1 +x4 +x5 = 0<br />
⎧<br />
⎨ x1 = x2 + x3<br />
⎩<br />
+x2<br />
+x3<br />
+x4<br />
+x5<br />
=<br />
=<br />
0<br />
0<br />
,<br />
⎩<br />
x4 = x2<br />
x5 = x3
5. CODICE DUALE 50<br />
E pertanto C⊥ {x | x = (x2 + x3, x2, x3, x2, x3)}.<br />
Una base <strong>di</strong> C⊥ è {(1, 1, 0, 1, 0), (1, 0, 1, 0, 1)} quin<strong>di</strong> una matrice <strong>di</strong> controllo <strong>di</strong> C<br />
è<br />
<br />
1 1 0 1 0<br />
H =<br />
.<br />
1 0 1 0 1<br />
Un vettore x ∈ F 5 2 è una parola <strong>di</strong> C se e solo se xH t = 0 ossia<br />
x1 +x2 +x4 = 0<br />
x1 +x3 +x5 = 0<br />
Queste due equazioni sono equazioni <strong>di</strong> controllo del co<strong>di</strong>ce C.<br />
Come mostra il seguente teorema, partendo da una matrice <strong>di</strong> controllo si può<br />
anche calcolare la <strong>di</strong>stanza minima del co<strong>di</strong>ce lineare.<br />
Teorema 4.5.11. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />
C ⊆ F n q . Allora la <strong>di</strong>stanza minima del co<strong>di</strong>ce è il minimo or<strong>di</strong>ne <strong>di</strong> un insieme<br />
linearmente <strong>di</strong>pendente <strong>di</strong> colonne della matrice H.<br />
Dimostrazione. Si rinvia a [1] pag. 146 − 148. <br />
Corollario 4.5.12. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />
C ⊆ F n q con <strong>di</strong>stanza minima d. Si ha :<br />
(1) d − 1 colonne <strong>di</strong> H sono sempre linearmente in<strong>di</strong>pendenti.<br />
(2) H ha rango almeno d − 1.<br />
Dimostrazione. Segue dal teorema precedente. <br />
Nel Corollario 3.2.8 si è <strong>di</strong>mostrato che un (n, k)-co<strong>di</strong>ce con <strong>di</strong>stanza minima<br />
d = 2h+1 corregge h errori. Allora, per il teorema precedente, la costruzione <strong>di</strong> un<br />
co<strong>di</strong>ce h-correttore equivale alla costruzione <strong>di</strong> una matrice H <strong>di</strong> tipo (n−k)×n con<br />
rango n − k e tale che 2h colonne qualsiasi <strong>di</strong> essa siano linearmente in<strong>di</strong>pendenti.<br />
In particolare, costruire un (n, k)-co<strong>di</strong>ce lineare 1-correttore equivale a costruire<br />
una matrice H <strong>di</strong> tipo (n − k) × n con rango (n − k) e nella quale due colonne<br />
qualsiasi siano linearmente in<strong>di</strong>pendenti. In generale per h ≥ 2 il problema risulta<br />
<strong>di</strong>fficile.<br />
Esempio 4.5.13. Consideriamo la seguente matrice H <strong>di</strong> rango 3 e con elementi<br />
in GF (3) :<br />
⎛<br />
2<br />
H = ⎝ 0<br />
0<br />
2<br />
0<br />
0<br />
1<br />
0<br />
⎞<br />
1<br />
2 ⎠ .<br />
0 0 1 2 0
6. DECODIFICA DEI CODICI LINEARI PER SINDROME 51<br />
Le colonne <strong>di</strong> H sono a due a due linearmente in<strong>di</strong>pendenti e ne esistono tre<br />
linearmente <strong>di</strong>pendenti (ad esempio la prima, la seconda e la quinta) e pertanto 3<br />
è il minimo numero <strong>di</strong> colonne linearmente <strong>di</strong>pendenti. Quin<strong>di</strong> H è una matrice<br />
<strong>di</strong> controllo <strong>di</strong> un (5, 2)-co<strong>di</strong>ce ternario con d = 3. Questo co<strong>di</strong>ce è 1-correttore<br />
perchè d = 2 · 1 + 1.<br />
Se d è la <strong>di</strong>stanza minima <strong>di</strong> un (n, k)-co<strong>di</strong>ce C la limitazione <strong>di</strong> Singleton<br />
d ≤ n − k + 1 ci dà una con<strong>di</strong>zione necessaria per l’esistenza <strong>di</strong> C ma ciò non<br />
assicura che C esista. In generale, il problema dell’esistenza <strong>di</strong> un co<strong>di</strong>ce avente<br />
parametri assegnati è <strong>di</strong>fficile. Se il co<strong>di</strong>ce è lineare, un modo per affrontarlo è<br />
quello <strong>di</strong> dare con<strong>di</strong>zioni per l’esistenza <strong>di</strong> una matrice <strong>di</strong> controllo <strong>di</strong> C.<br />
Teorema 4.5.14. Si ha<br />
(1) Un (n, k)-co<strong>di</strong>ce lineare C ⊆ F n 2 avente <strong>di</strong>stanza minima d esiste se vale<br />
<br />
n − 1 n − 1<br />
1 + + . . . , < 2<br />
1<br />
d − 2<br />
n−k<br />
(2) Un (n, k)-co<strong>di</strong>ce lineare C ⊆ F n q avente <strong>di</strong>stanza minima d esiste se vale<br />
d−2<br />
(q − 1) s<br />
<br />
n − 1<br />
< q<br />
s<br />
n−k<br />
s=0<br />
Dimostrazione. Si rinvia a [1] pag. 149, 150. <br />
6. Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari per sindrome<br />
La nozione <strong>di</strong> co<strong>di</strong>ce ortogonale si rivela particolarmente utile per costruire<br />
algoritmi <strong>di</strong> deco<strong>di</strong>fica specifici per i co<strong>di</strong>ci lineari. Ricor<strong>di</strong>amo che con F n q si<br />
intende lo spazio vettoriale <strong>di</strong> <strong>di</strong>mensione n ad elementi in Fq = GF (q).<br />
Definizione 4.6.1. Sia H una matrice <strong>di</strong> controllo del (n, k)-co<strong>di</strong>ce lineare<br />
.<br />
C ⊆ F n q . Si definisce sindrome <strong>di</strong> un vettore x ∈ F n q il vettore s = x · H t ∈ F n−k<br />
q<br />
Nota 4.6.2. L’utilità della matrice <strong>di</strong> controllo H associata al co<strong>di</strong>ce C ⊆ F n q<br />
<strong>di</strong>scende dalla seguente fondamentale osservazione:<br />
un vettore v dello spazio vettoriale F n q è una parola del co<strong>di</strong>ce C se e<br />
solo se vH t = 0.<br />
Se durante la trasmissione <strong>di</strong> una parola non entrano errori, la sindrome è<br />
zero, ma non vale il viceversa. Infatti potrebbero entrare un numero <strong>di</strong> errori tale
6. DECODIFICA DEI CODICI LINEARI PER SINDROME 52<br />
da trasformare la parola trasmessa in un’altra parola del co<strong>di</strong>ce. In questo caso,<br />
pur essendo zero la sindrome della parola in uscita, essa è <strong>di</strong>versa dalla parola<br />
trasmessa. Senza fare nessuna ipotesi sul numero massimo <strong>di</strong> errori che possono<br />
entrare in una parola durante la trasmissione e sulla <strong>di</strong>stanza minima del co<strong>di</strong>ce, in<br />
effetti non si può <strong>di</strong>re se la parola ricevuta è quella trasmessa. Ma se, per esempio,<br />
sappiamo che in ogni parola entra al più un errore durante la trasmissione e che<br />
d = 3, allora una parola non può <strong>di</strong>ventare un’altra parola del co<strong>di</strong>ce durante la<br />
trasmissione e quin<strong>di</strong> se la sindrome della parola in uscita è zero, si è certi che<br />
la parola ricevuta è quella trasmessa, mentre se la sindrome è <strong>di</strong>versa da zero è<br />
entrato un errore.<br />
Come si vedrà in seguito, la sindrome risulta anche un aiuto fondamentale per<br />
la correzione <strong>di</strong> errori.<br />
Il metodo <strong>di</strong> deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari basato sui laterali <strong>di</strong> un sottogruppo<br />
viene semplificato dal seguente teorema.<br />
Teorema 4.6.3. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />
C ⊆ F n q . Allora due vettori x, y ∈ F n q sono in uno stesso laterale <strong>di</strong> C se e solo se<br />
hanno la stessa sindrome.<br />
Dimostrazione. Siano x, y ∈ F n q , risulta<br />
x + C = y + C ⇔ y − x ∈ C ⇔ (y − x)H t = 0 ⇔ yH t − xH t = 0 ⇔ xH t = yH t<br />
ossia i vettori x e y appartengono ad uno stesso laterale <strong>di</strong> C se e solo se hanno la<br />
stessa sindrome. <br />
Dal teorema ora <strong>di</strong>mostrato si ha in particolare che le sindromi sono in corrispondenza<br />
biunivoca con i laterali <strong>di</strong> C e che la sindrome <strong>di</strong> un qualsiasi vettore<br />
<strong>di</strong> un laterale Ci è uguale alla sindrome del leader scelto per Ci. Assegnata H, la<br />
corrispondenza che associa ad ogni leader la sua sindrome è biunivoca, ciò semplifica<br />
la deco<strong>di</strong>fica tramite la tabella standard. E’ questo un ulteriore vantaggio <strong>di</strong><br />
un co<strong>di</strong>ce lineare. L’algoritmo <strong>di</strong> deco<strong>di</strong>fica <strong>di</strong>venta il seguente.<br />
Algoritmo <strong>di</strong> deco<strong>di</strong>fica assistita me<strong>di</strong>ante sindrome.<br />
• Passo 1. Si calcola la sindrome s = y · H t del vettore ricevuto y.<br />
• Passo 2. Si trova il leader ai avente come sindrome s.<br />
• Passo 3. Si deco<strong>di</strong>fica y come la parola y − ai.
6. DECODIFICA DEI CODICI LINEARI PER SINDROME 53<br />
Esempio 4.6.4. Sia C il (4, 2)-co<strong>di</strong>ce lineare binario avente come matrice generatrice<br />
<br />
1 1 1 0<br />
G =<br />
.<br />
0 1 1 1<br />
Operando sulle righe, la G può essere trasformata nella matrice standard<br />
G ′ <br />
1 0 0 1<br />
=<br />
= (I2|A).<br />
0 1 1 1<br />
Una matrice <strong>di</strong> controllo per C è allora:<br />
<br />
0 1 1 0<br />
H =<br />
1 1 0 1<br />
Costruiamo ora la TABELLA standard:<br />
= (−A t |I4−2).<br />
a0 = 0 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1<br />
a1 = 1 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1<br />
a2 = 0 1 0 0 1 0 1 0 0 0 1 1 1 1 0 1<br />
a3 = 0 0 1 0 1 1 0 0 0 1 0 1 1 0 1 1<br />
La sindrome <strong>dei</strong> leader a0, a1, a2, a3 è rispettivamente<br />
s0 = a0H t = (00), s1 = a1H t = (01), s2 = a2H t = (11), s3 = a3H t = (10).<br />
Supponiamo si riceva il vettore y = (0101). Si ha yH t = (10) = s3, allora y viene<br />
deco<strong>di</strong>ficato nella parola y − a3 = 0111.<br />
Teorema 4.6.5. Se C ⊆ F n 2 è un co<strong>di</strong>ce lineare binario allora la sindrome<br />
<strong>di</strong> una parola ricevuta è una matrice riga avente come elementi la somma degli<br />
elementi delle colonne <strong>di</strong> H corrispondenti ai posti in cui sono entrati errori.<br />
Dimostrazione. Sia x la parola <strong>di</strong> C trasmessa. Allora xH t = 0. Supponiamo<br />
che entrino degli errori e sia e il vettore errore il quale ha tante componenti non<br />
nulle quanti sono gli errori entrati; infatti la parola ricevuta è y = x + e e si ha<br />
yH t = (x + e)H t = xH t + eH t = eH t .<br />
Sia e = (0, . . . , 1a, . . . , 1b, . . . , 0).<br />
Se<br />
⎛<br />
⎜<br />
H = ⎜<br />
⎝<br />
h1,1<br />
h2,1<br />
.<br />
. . .<br />
. . .<br />
h1,a<br />
h2,a<br />
. . .<br />
. . .<br />
h1,b<br />
h2,b<br />
. . .<br />
. . .<br />
h1,n<br />
h2,n<br />
segue<br />
hn−k,1 . . . hn−k,a . . . hn−k,b . . . hn−k,n<br />
yH t = eH t = h1,a + h1,b h2,a + h2,b . . . hn−k,a + hn−k,b<br />
⎞<br />
⎟<br />
⎠
6. DECODIFICA DEI CODICI LINEARI PER SINDROME 54<br />
Dal teorema ora <strong>di</strong>mostrato segue che se le colonne <strong>di</strong> una matrice <strong>di</strong> controllo<br />
H <strong>di</strong> un co<strong>di</strong>ce binario C sono a due a due linearmente in<strong>di</strong>pendenti (cioè <strong>di</strong>stinte<br />
e non nulle), allora si può decidere dove è un singolo errore e correggerlo.<br />
D’altra parte se le colonne <strong>di</strong> H sono a due a due linearmente in<strong>di</strong>pendenti e<br />
ne esistono tre linearmente <strong>di</strong>pendenti, allora d = 3 e C è 1-correttore.<br />
Co<strong>di</strong>ci lineari 1-correttori<br />
La deco<strong>di</strong>fica tramite tabella standard è molto utile nei co<strong>di</strong>ci lineari che correggono<br />
almeno 2 errori mentre la deco<strong>di</strong>fica nei co<strong>di</strong>ci lineari 1-correttori può<br />
essere fatta più semplicemente.<br />
Schema <strong>di</strong> Deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari 1-correttori binari<br />
• Passo 1. Si calcola la sindrome yH t del vettore y ricevuto.<br />
• Passo 2. Se yH t = 0, si suppone che la parola trasmessa coincida con il<br />
vettore ricevuto.<br />
• Passo 3. Se yH t = 0 e yH t è uguale ad una colonna, la j-esima, <strong>di</strong> H,<br />
si ha che la j-esima componente del vettore ricevuto è errata e si corregge<br />
l’errore.<br />
• Passo 4. Se yH t = 0 e yH t non è uguale ad una colonna <strong>di</strong> H, certamente<br />
sono entrati almeno due errori e non è possibile correggerli.<br />
Schema <strong>di</strong> Deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari 1-correttori q-ari<br />
Sia C ⊆ F n q un co<strong>di</strong>ce lineare con d(C) ≥ 3, ossia sia C un co<strong>di</strong>ce 1-correttore.<br />
Sia H una sua matrice <strong>di</strong> controllo e supponiamo che in ogni parola entri al più<br />
un errore ossia che per ogni errore e dovuto al canale si abbia w(e) ≤ 1.<br />
Sia trasmessa una parola x ∈ C e sia ricevuto il vettore y = x + e. Si ha<br />
yH t = (x + e)H t = xH t + eH t = eH t , cioè la sindrome del vettore ricevuto<br />
uguaglia la sindrome del vettore errore. Se eH t = 0, poichè e non può essere una<br />
parola (non nulla) <strong>di</strong> C, essendo w(e) ≤ 1, il deco<strong>di</strong>ficatore decide che e = 0 e<br />
quin<strong>di</strong> y è la parola trasmessa.<br />
Supponiamo ora che eH t = 0. In questo caso necessariamente e = 0 e<br />
dall’ipotesi w(e) ≤ 1 segue che e ha un’unica componente non nulla, sia e =<br />
(0, 0, . . . , ei, 0, . . . , 0). In questo caso si ha<br />
eH t = h1,iei h2,iei . . . hn−k,iei<br />
<br />
= ei h1,i h2,i . . . hn−k,i<br />
cioè la sindrome è il prodotto tra un elemento <strong>di</strong> GF (q), che dà la ′′ grandezza ′′ dell’errore,<br />
e la colonna <strong>di</strong> H corrispondente alla componente dove è entrato l’errore.<br />
In questo caso la n-upla y ricevuta viene deco<strong>di</strong>ficata nella parola<br />
x = y − e = (y1, . . . , yi, . . . , yn) − (0, . . . , 0, ei, 0, . . . , 0) =<br />
= (yi, . . . , yi−1, yi − ei, yi+1, . . . , xn).
In sintesi:<br />
6. DECODIFICA DEI CODICI LINEARI PER SINDROME 55<br />
• Passo 1. Si calcola la sindrome yH t del vettore y ricevuto.<br />
• Passo 2. Se yH t = 0, si suppone y sia proprio la parola trasmessa.<br />
• Passo 3. Se yH t = s = 0, si confronta s con ogni colonna <strong>di</strong> H.<br />
• Passo 4. Se s è multiplo <strong>di</strong> una colonna, sia la i-esima, <strong>di</strong> H secondo<br />
lo scalare ei, allora l’errore è dato dalla n-upla avente come componente<br />
i-esima ei e tutte le altre componenti nulle. Si deco<strong>di</strong>fica y come la parola<br />
x = y − e.<br />
• Passo 5. Se non si verifica nessuno <strong>dei</strong> casi detti, la n-upla ricevuta<br />
contiene almeno due errori e quin<strong>di</strong> non si può risalire alla parola<br />
trasmessa.<br />
Esempio 4.6.6. Consideriamo il (5, 2)-co<strong>di</strong>ce ternario dell’esempio 4.5.13. Supponiamo<br />
che venga trasmessa la parola x = (1 0 1 1 0) e che in uscita arrivi il<br />
vettore y = (1 0 0 1 0). Si ha<br />
yH t = 0 0 2 = 2 0 0 1 <br />
che implica l’esistenza <strong>di</strong> un errore <strong>di</strong> ′′ grandezza ′′ 2 nella terza posizione. Allora<br />
x = (1 0 0 1 0) − (0 0 2 0 0) = (1 0 1 1 0).<br />
Nota 4.6.7. L’affidabilità che offre il canale è molto importante. Se si usa ad<br />
esempio un co<strong>di</strong>ce 1-correttore, l’evento che in una parola possano entrare due o più<br />
errori deve avere una probabilità quasi nulla. Infatti se in una parola entrano due<br />
errori, la sindrome del vettore ricevuto può essere ancora uguale ad una colonna <strong>di</strong><br />
H, in tal caso i due errori non vengono rivelati e la deco<strong>di</strong>fica è errata. Ciò <strong>di</strong>pende<br />
dal fatto che, se è trasmessa una parola x ed arriva la sequenza y contenente due<br />
errori, la sequenza y viene deco<strong>di</strong>ficata nella parola x ′ che <strong>di</strong>fferisce da y per una<br />
sola componente, se esiste nel co<strong>di</strong>ce una parola x ′ con d(y, x ′ ) = 1, e ciò può<br />
accadere se d(x, x ′ ) = 3.<br />
Ad esempio riferendoci sempre al co<strong>di</strong>ce ternario dell’esempio 4.5.13, supponiamo<br />
<strong>di</strong> trasmettere ancora la parola x = (1 0 1 1 0) e <strong>di</strong> ricevere y = (1 0 0 0 0),<br />
contenente due errori. Risulta yH t = (2 0 0), che è uguale alla prima colonna<br />
<strong>di</strong> H, così che y verrebbe deco<strong>di</strong>ficata nella parola (0 0 0 0 0). In questo caso la<br />
deco<strong>di</strong>fica risulterebbe errata.
7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 56<br />
7. Riepilogo relativo alla co<strong>di</strong>fica e deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare<br />
L’operazione <strong>di</strong> co<strong>di</strong>fica (ve<strong>di</strong> paragrafo 3) consiste nel porre in corrispondenza<br />
biunivoca q k messaggi assegnati con le parole <strong>di</strong> C e ovviamente non è restrittivo<br />
supporre che l’insieme <strong>dei</strong> messaggi sia l’insieme <strong>dei</strong> vettori <strong>di</strong> F k q , lo spazio<br />
vettoriale k-<strong>di</strong>mensionale su Fq.<br />
Se G è una matrice generatrice <strong>di</strong> C, della quale denotiamo con gi i vettori riga<br />
(sono delle n-ple), si sceglie come funzione <strong>di</strong> co<strong>di</strong>fica l’applicazione<br />
m = (m1 m2 . . . mk) ∈ F k q → m1g1 + m2g2 + · · · + mkgk ∈ C<br />
che è un isomorfismo <strong>di</strong> spazi vettoriali. Poichè<br />
m1g1 + m2g2 + · · · + mkgk = mG<br />
l’algoritmo <strong>di</strong> co<strong>di</strong>fica è semplicemente il prodotto (righe per colonne) <strong>di</strong> vettori<br />
numerici <strong>di</strong> lunghezza k per la matrice G. Di solito la matrice G è data in forma<br />
standard G = (Ik|A). In questo caso le prime k lettere <strong>di</strong> mG coincidono<br />
or<strong>di</strong>natamente con le componenti <strong>di</strong> m, rappresentano cioè il messaggio, mentre le<br />
rimanenti n − k sono quelle <strong>di</strong> controllo. Sia dunque<br />
x = mG<br />
la parola <strong>di</strong> C con la quale è stato co<strong>di</strong>ficato il messaggio m; trasmettiamo la<br />
parola x e supponiamo che questa sia ricevuta in errore; ossia il deco<strong>di</strong>ficatore<br />
riceva una parola y = x. Supponiamo inoltre d(x, y) ≤ e. In questo caso y ∈ C e il<br />
deco<strong>di</strong>ficatore deve risalire in modo automatico a x secondo il principio del nearest<br />
neighbour deco<strong>di</strong>ng (massima somiglianza); deve quin<strong>di</strong> usare un algoritmo <strong>di</strong><br />
deco<strong>di</strong>fica che gli permetta <strong>di</strong> trovare la parola z ∈ C a <strong>di</strong>stanza minima da<br />
y. Essendo d(x, y) ≤ e, risulta z = x. Assegnata una tabella standard <strong>di</strong> C, un<br />
possibile schema <strong>di</strong> deco<strong>di</strong>fica è il seguente: se i è l’in<strong>di</strong>ce della riga della tabella<br />
cui y appartiene, si deco<strong>di</strong>fica y come z = y − ai. Poichè il peso <strong>di</strong> ai = y − z, che<br />
è uguale alla <strong>di</strong>stanza fra y e z, è per costruzione il più piccolo possibile, al variare<br />
<strong>di</strong> z ∈ C, siamo sicuri <strong>di</strong> aver usato uno schema <strong>di</strong> deco<strong>di</strong>fica secondo il principio<br />
<strong>di</strong> nearest neighbour deco<strong>di</strong>ng. L’algoritmo corrispondente alla deco<strong>di</strong>fica tramite<br />
tabella standard consta <strong>di</strong> questi passi:<br />
primo passo: scorrere la tebella standard, iniziando dal primo elemento della<br />
prima riga e continuando in successione, fino a trovare la parola ricevuta y;<br />
secondo passo: deco<strong>di</strong>ficare y come la prima parola della colonna della tabella<br />
cui y appartiene.<br />
Osserviamo esplicitamente che lo schema <strong>di</strong> deco<strong>di</strong>fica descritto si fonda su due<br />
fatti:<br />
(1) l’errore e = y − x, che il deco<strong>di</strong>ficatore non conosce e deve scoprire, e la<br />
parola y ricevuta sono nello stesso laterale <strong>di</strong> C;
7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 57<br />
(2) la speranza che durante la trasmissione non si siano verificati troppi errori;<br />
ossia il peso <strong>di</strong> e sia abbastanza piccolo in modo che e abbia buona probabilità <strong>di</strong><br />
coincidere con il leader del laterale y + C.<br />
Quando il numero delle parole <strong>di</strong> C è molto grande, il primo passo del nostro<br />
algoritmo <strong>di</strong> deco<strong>di</strong>fica può richiedere molto tempo e l’intero sistema <strong>di</strong> comunicazione<br />
corre il rischio <strong>di</strong> essere troppo lento. In questo caso conviene servirsi <strong>di</strong><br />
sistemi <strong>di</strong> deco<strong>di</strong>fica più veloci. Uno <strong>di</strong> questi si basa sulla deco<strong>di</strong>fica a sindromi<br />
che funziona nel seguente modo:<br />
(1) si estende una tabella standard <strong>di</strong> C aggiungendo la colonna delle sindromi,<br />
ossia la colonna il cui elemento generico è la sindrome delle parole del laterale<br />
corrispondente alla riga cui l’elemento stesso appartiene;<br />
(2) si calcola la sindrome s(y) <strong>di</strong> y e, scorrendo la colonna delle sindromi, si<br />
trova l’in<strong>di</strong>ce i della riga cui s(y) e y appartengono;<br />
(3) y si deco<strong>di</strong>fica come z = y − ai.<br />
Questo schema <strong>di</strong> deco<strong>di</strong>fica necessita quin<strong>di</strong> <strong>di</strong> una matrice M con due sole<br />
colonne, la prima delle quali coincida con la prima colonna <strong>di</strong> una tabella standard<br />
Σ <strong>di</strong> C (ossia con la colonna delle parole leader), la seconda con la colonna<br />
delle sindromi <strong>di</strong> Σ. Allora anche in questo caso l’algoritmo <strong>di</strong> deco<strong>di</strong>fica è molto<br />
semplice e, detta H una matrice controllo <strong>di</strong> parità <strong>di</strong> C, consiste <strong>dei</strong> seguenti passi:<br />
primo passo: si calcola la sindrome s(y) = yH t della parola ricevuta y;<br />
secondo passo: si scorre la colonna delle sindromi fino a trovare s(y);<br />
terzo passo: si deco<strong>di</strong>fica y come la <strong>di</strong>fferenza z tra y e la parola che si trova<br />
a sinistra <strong>di</strong> s(y) nella matrice M.<br />
Si noti che la parola z ottenuta alla fine dell’algoritmo è la stessa che si otterrebbe<br />
usando il primo schema <strong>di</strong> deco<strong>di</strong>fica descritto. Si noti ancora che, al fine<br />
della deco<strong>di</strong>fica <strong>di</strong> y, il primo algoritmo deve scorrere una tabella con q n−k righe<br />
e q k colonne, mentre il secondo soltanto la colonna delle sindromi, che ha q n−k<br />
elementi. E’ chiaro quin<strong>di</strong> che, se C è abbastanza grande, il secondo algoritmo è<br />
molto più veloce del primo.<br />
Esempio 4.7.1. Consideriamo il (4, 2)-co<strong>di</strong>ce binario<br />
avente come matrice <strong>di</strong> controllo<br />
C = {(0000), (1011), (0101), (1110)}<br />
H =<br />
1 0 1 0<br />
1 1 0 1
7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 58<br />
Una tabella standard <strong>di</strong> C, ampliata me<strong>di</strong>ante la colonna s delle sindromi<br />
(prima colonna), è data da<br />
s leader<br />
(0 0) (0 0 0 0) (1 0 1 1) (0 1 0 1) (1 1 1 0)<br />
(1 1) (1 0 0 0) (0 0 1 1) (1 1 0 1) (0 1 1 0)<br />
(0 1) (0 1 0 0) (1 1 1 1) (0 0 0 1) (1 0 1 0)<br />
(1 0) (0 0 1 0) (1 0 0 1) (0 1 1 1) (1 1 0 0)<br />
Gli algoritmi descritti sono applicabili a tutti i co<strong>di</strong>ci lineari. In particolari<br />
classi <strong>di</strong> co<strong>di</strong>ci essi possono essere mo<strong>di</strong>ficati e resi più efficienti.<br />
Esempio 4.7.2. Sia C il (6, 3)-co<strong>di</strong>ce binario le cui matrici generatrice e <strong>di</strong><br />
controllo <strong>di</strong> parità sono date, rispettivamente, da<br />
⎛<br />
G = ⎝<br />
1 1 0 1 0 0<br />
0 1 1 0 1 0<br />
1 0 1 0 0 1<br />
⎞<br />
⎛<br />
⎠ , H = ⎝<br />
1 0 0 1 0 1<br />
0 1 0 1 1 0<br />
0 0 1 0 1 1<br />
Tale co<strong>di</strong>ce ha <strong>di</strong>stanza minima d = 3. La tabella standard <strong>di</strong> C è<br />
leader<br />
000000 110100 011010 101001 101110 110011 011101 000111<br />
000001 110101 011011 101000 101111 110010 011100 000110<br />
000010 110110 011000 101011 101100 110001 011111 000101<br />
000100 110000 011110 101101 101010 110111 011001 000011<br />
001000 111100 010010 100001 100110 111011 010101 001111<br />
010000 100100 001010 111001 111110 100011 001101 010111<br />
100000 010100 111010 001001 001110 010011 111101 100111<br />
001100 111000 010110 100101 100010 111111 010001 001011<br />
Possiamo semplificare il proce<strong>di</strong>mento limitandoci a considerare la corrispondenza<br />
biunivoca fra i leader e le rispettive sindromi. Rappresentiamo questa corrispondenza<br />
con la seguente tabella formata<br />
• dalla colonna <strong>dei</strong> vettori leader scelti fra quelli <strong>di</strong> peso minimo nella<br />
rispettiva classe Ci, i = 0, 1, . . . , 7 (Ci sono gli elementi del quoziente F 6 2<br />
C );<br />
• dalla colonna s delle sindromi<br />
⎞<br />
⎠ .
7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 59<br />
leader s<br />
000000 000<br />
000001 101<br />
000010 011<br />
000100 110<br />
001000 001<br />
010000 010<br />
100000 100<br />
001100 111<br />
Supponiamo <strong>di</strong> ricevere la parola y = (100011). Calcoliamo y = H t = (010);<br />
poichè (010) è la sindrome del leader a5 della classe C5, deco<strong>di</strong>fichiamo y come<br />
y − ai = (100011) − (010000) = (110011).<br />
Nota 4.7.3. L’algoritmo <strong>di</strong> deco<strong>di</strong>fica tramite sindrome, richiede <strong>di</strong> precomputare<br />
e memorizzare la corrispondenza fra tutte le possibili sindrome e i leader<br />
delle classi. Se il co<strong>di</strong>ce C utilizza parole molto lunghe, può occupare notevole<br />
spazio. Se il co<strong>di</strong>ce è binario, un metodo <strong>di</strong> implementazione finalizzato a ridurre<br />
l’occupazione <strong>di</strong> memoria <strong>di</strong> un deco<strong>di</strong>ficatore è quello presentato nel seguente<br />
algoritmo <strong>di</strong> deco<strong>di</strong>fica.<br />
Algoritmo <strong>di</strong> Deco<strong>di</strong>fica ′′ passo-passo ′′ per co<strong>di</strong>ci binari<br />
(1) Costruire la tabella Σ che associa ad ogni sindrome s il peso minimo <strong>di</strong><br />
un elemento con sindrome s; denotiamo tale numero con Σ(s).<br />
(2) Porre i = 1.<br />
(3) Calcolare la sindrome del vettore ricevuto s = yH t e determinare, tramite<br />
la tabella Σ, il peso w = Σ(s) del corrispondente leader <strong>di</strong> classe.<br />
(4) • Se w = 0, allora non sono in<strong>di</strong>viduati errori, il proce<strong>di</strong>mento <strong>di</strong><br />
deco<strong>di</strong>fica termina restituendo la parola p = y.<br />
• Se w = 0 e Σ((y + ei)H t ) ≤ Σ(yH t ), sostituire y con y + ei dove ei<br />
è un vettore le cui componenti sono tutte 0 tranne la i-esima.<br />
(5) Porre i = i + 1.<br />
(6) Se i > n, segnalare che non si è riusciti a correggere l’errore.<br />
(7) Tornare al passo 3.<br />
Nel funzionamento dell’algoritmo, il punto fondamentale è che, durante tutto<br />
il processo <strong>di</strong> deco<strong>di</strong>fica, il peso dell’errore non può mai crescere. Dopo al più n<br />
passi, rimane determinato un vettore che può cadere nella classe il cui leader ha<br />
peso nullo; se questo si verifica, allora il vettore è stato deco<strong>di</strong>ficato correttamente.
8. L’ENUMERATORE DEI PESI DI UN CODICE LINEARE 60<br />
Esempio 4.7.4. Sia C il co<strong>di</strong>ce dell’esempio 4.7.2. Al posto della tabella che<br />
associa ad ogni leader <strong>di</strong> classe la corrispettiva sindrome, è sufficiente considerare<br />
la tabella in cui i leader delle classi laterali sono sostituiti con i propri pesi.<br />
s w(Cj)<br />
000 0<br />
101 1<br />
011 1<br />
110 1<br />
001 1<br />
010 1<br />
100 1<br />
111 2<br />
8. L’enumeratore <strong>dei</strong> pesi <strong>di</strong> un co<strong>di</strong>ce lineare<br />
Nello stu<strong>di</strong>o <strong>di</strong> un co<strong>di</strong>ce lineare C <strong>di</strong> lunghezza n, uno <strong>dei</strong> problemi centrali<br />
è il calcolo del numero wi = wi(C) <strong>di</strong> tutte le parole <strong>di</strong> C <strong>di</strong> peso i, per ogni<br />
i = 1, 2, . . . , n. A tale proposito spesso si considera il polinomio<br />
W (x, y) = WC(x, y) = <br />
x w(a) y n−w(a) n<br />
= wix i y n−i ,<br />
a∈C<br />
che prende il nome <strong>di</strong> enumeratore <strong>dei</strong> pesi <strong>di</strong> C.<br />
Una importante relazione fra l’enumeratore <strong>dei</strong> pesi W (x, y) <strong>di</strong> C e l’enumeratore<br />
<strong>dei</strong> pesi W ⊥ (x, y) del co<strong>di</strong>ce duale <strong>di</strong> C, è data dal seguente teorema <strong>di</strong> cui<br />
non riportiamo la <strong>di</strong>mostrazione.<br />
Teorema 4.8.1 ( F. J. MacWilliams, 1963 ). Siano W (x, y) e W ⊥ (x, y) gli<br />
enumeratori <strong>dei</strong> pesi rispettivamente <strong>di</strong> un (n, k)-co<strong>di</strong>ce C su Fq e del suo duale.<br />
Allora risulta<br />
e quin<strong>di</strong>, se C è autoduale, risulta<br />
i=0<br />
W ⊥ (x, y) = q −k W (y − x, y + (q − 1)x)<br />
W (x, y) = q −n/2 W (y − x, y + (q − 1)x).
8. L’ENUMERATORE DEI PESI DI UN CODICE LINEARE 61<br />
Nota 4.8.2. In alcuni casi la conoscenza <strong>dei</strong> pesi delle parole <strong>di</strong> una matrice<br />
generatrice G <strong>di</strong> un co<strong>di</strong>ce lineare fornisce informazioni sui coefficienti del polinomio<br />
enumeratore <strong>dei</strong> pesi. Per esempio, se due parole a e b <strong>di</strong> un co<strong>di</strong>ce binario C<br />
hanno peso pari 2s e 2t, rispettivamente, detto m il numero degli in<strong>di</strong>ci j tali che<br />
aj = bj = 1, risulta<br />
w(a + b) = 2s − m + 2t − m = 2(s + t − m).<br />
Ne segue che, se le parole <strong>di</strong> G hanno tutte peso pari, allora si <strong>di</strong>ce che C è un<br />
co<strong>di</strong>ce pari, cioè tutte le sue parole hanno peso pari. Analogamente si prova che,<br />
se C è autoortogonale e tutte le parole <strong>di</strong> G hanno peso <strong>di</strong>visibile per 4, la stessa<br />
proprietà è vera per tutte le parole <strong>di</strong> C. In questo caso C si <strong>di</strong>ce doppiamente<br />
pari.
CAPITOLO 5<br />
Co<strong>di</strong>ci Ciclici<br />
In questo capitolo trattiamo i co<strong>di</strong>ci ciclici. Si tratta <strong>di</strong> una famiglia <strong>di</strong> co<strong>di</strong>ci<br />
lineari fra le più importanti. I co<strong>di</strong>ci ciclici sono tali che se contengono una parola<br />
allora contengono anche tutte le sue permutazioni cicliche. Essi possono essere<br />
implementati in modo molto semplice e per questo sono molto usati, inoltre, i<br />
co<strong>di</strong>ci ciclici si possono rappresentare algebricamente facendo uso <strong>dei</strong> polinomi e<br />
sfruttando un isomorfismo fra gli spazi vettoriali F n q e Fq[x]<br />
(x n −1) .<br />
Con abuso <strong>di</strong> linguaggio denoteremo un polinomio p(x) ∈ Fq[x] e la<br />
sua classe nell’anello Fq[x]<br />
(xn−1) con lo stesso simbolo.<br />
Ogni co<strong>di</strong>ce <strong>di</strong> questa famiglia gode <strong>di</strong> notevoli proprietà fra cui:<br />
• può essere costruito a partire da un singolo vettore;<br />
• ammette degli algoritmi <strong>di</strong> deco<strong>di</strong>fica efficienti;<br />
• può rivelarsi particolarmente efficace per correggere alcune tipologie <strong>di</strong><br />
errore.<br />
Per tutto il capitolo con Fq in<strong>di</strong>cheremo il campo <strong>di</strong> Galois GF (q).<br />
1. Definizioni e proprietà<br />
Definizione 5.1.1. Un co<strong>di</strong>ce lineare C ⊆ F n q si <strong>di</strong>ce ciclico se applicando<br />
una permutazione ciclica ad una qualsiasi sua parola c si ottiene un’altra parola<br />
<strong>di</strong> C:<br />
c = (c0, c1, . . . , cn−1) ∈ C ⇒ (cn−1, c0, . . . , cn−2) ∈ C<br />
Sia Fq[x] l’anello <strong>dei</strong> polinomi nella variabile x. Fissato il polinomio (xn − 1),<br />
sia Rn[x] = ( Fq[x]<br />
(xn−1) , +, ·) l’anello <strong>dei</strong> polinomi su Fq modulo (xn − 1). In questo<br />
modo, ogni polinomio a coefficienti in Fq viene sostanzialmente identificato col<br />
resto della sua <strong>di</strong>visione per xn − 1.<br />
62
Sia f : F n q → Rn[x] l’applicazione definita da<br />
Si ha :<br />
1. DEFINIZIONI E PROPRIETÀ 63<br />
f(c) = c0 + c1x + . . . , cn−1x n−1 per ogni c = (c0, . . . , cn−1) ∈ F n q .<br />
(1) L’applicazione f è biettiva. Infatti Rn[x] ha come elementi i polinomi <strong>di</strong><br />
Fq[x] <strong>di</strong> grado minore o uguale ad n − 1 (si ricor<strong>di</strong> che se il prodotto <strong>di</strong><br />
due polinomi ha grado maggiore o uguale ad n, occorre prendere il suo<br />
resto nella <strong>di</strong>visione per (x n − 1)). Dunque ogni parola può essere vista<br />
come una n-upla <strong>di</strong> F n q o, equivalentemente, come un polinomio <strong>di</strong> Rn[x].<br />
(2) Rn[x] è uno spazio vettoriale <strong>di</strong> <strong>di</strong>mensione n isomorfo allo spazio vettoriale<br />
F n q . Infatti la biezione f precedente è chiaramente un isomorfismo<br />
<strong>di</strong> spazi vettoriali e C(x) è un sottospazio vettoriale <strong>di</strong> Rn[x].<br />
Quanto osservato assicura che la definizione 5.1.1 equivale a<br />
c(x) ∈ C ⇒ xc(x) ∈ C<br />
e ciò porta imme<strong>di</strong>atamente ad una caratterizzazione algebrica <strong>dei</strong> co<strong>di</strong>ci<br />
ciclici.<br />
(3) In Rn[x] moltiplicare un polinomio c(x) per x corrisponde a permutare<br />
ciclicamente, ossia a shiftare <strong>di</strong> un posto a destra le componenti della<br />
n-pla corrispondente a c(x). Infatti, poichè in Rn[x] risulta x n = 1, si ha<br />
xc(x) = c0x + c1x 2 + . . . + cn−2x n−1 + cn−1x n =<br />
= cn−1 + c0x + c1x 2 + . . . + cn−2x n−1 .<br />
Esempio 5.1.2. Consideriamo il co<strong>di</strong>ce lineare binario <strong>di</strong> lunghezza 3:<br />
C = {(000), (110), (101), (011)}<br />
Esso può essere rappresentato come insieme <strong>di</strong> polinomi nella variabile x:<br />
C = {0, 1 + x, 1 + x 2 , x + x 2 }.<br />
Shiftando <strong>di</strong> un posto a destra le componenti <strong>di</strong> ogni terna, si ottiene l’insieme<br />
{(000), (011), (110), (101)} ossia si ottiene sempre una parola <strong>di</strong> C e dunque C è<br />
un co<strong>di</strong>ce ciclico. Alla stessa conclusione si arriva se in Rn[x] si moltiplica ogni<br />
parola-polinomio <strong>di</strong> C per x, infatti si ha .<br />
0·x = 0, (1+x)·x = x+x 2 , (1+x 2 )·x = x+x 3 = x+1, (x+x 2 )·x = x 2 +x 3 = x 2 +1.<br />
Teorema 5.1.3. Un co<strong>di</strong>ce lineare C <strong>di</strong> lunghezza n è ciclico se e solo se è un<br />
ideale <strong>di</strong> Rn[x].
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 64<br />
Dimostrazione. Sia C un ideale <strong>di</strong> Rn[x]. Allora comunque preso c(x) ∈ C<br />
si ha xc(x) ∈ C e pertanto C è ciclico.<br />
Viceversa, sia C ciclico. Essendo C lineare, se c1(x), c2(x) ∈ C allora c1(x) −<br />
c2(x) ∈ C. Inoltre essendo C ciclico, se c(x) ∈ C anche xc(x), x 2 c(x), . . . , x n−1 c(x) ∈<br />
C, pertanto per la linearità <strong>di</strong> C, anche λ0c(x) + λ1xc(x) + . . . + λn−1x n−1 c(x) =<br />
(λ0+λ1x+. . .+λn−1x n−1 )c(x) è una parola <strong>di</strong> C. Facendo variare i coefficienti λi in<br />
Fq, l’espressione (λ0 + λ1x + . . . + λn−1x n−1 ) fornisce tutti i polinomi <strong>di</strong> Rn[x]. <br />
Il prossimo teorema assicura che ogni co<strong>di</strong>ce ciclico C ∈ F n q è un ideale principale<br />
<strong>di</strong> Rn[x]. Ciò significa che Rn[x] è un anello ad ideali principali.<br />
C = {0} è un ideale principale <strong>di</strong> Rn[x]. Nel seguito supporremo C = {0}.<br />
Teorema 5.1.4. Sia g(x) un polinomio monico non nullo <strong>di</strong> grado minimo<br />
appartenente ad un co<strong>di</strong>ce ciclico C <strong>di</strong> lunghezza n. Allora ogni elemento c(x) ∈ C<br />
può essere scritto nella forma c(x) = f(x)g(x) per un opportuno f(x) ∈ Rn[x].<br />
Dimostrazione. Supponiamo per assurdo che c(x) ∈ C non sia multiplo <strong>di</strong><br />
g(x). Poichè g(x) è <strong>di</strong> grado minimo in C, si ha c(x) = q(x)g(x)+r(x) con gr[r(x)] <<br />
gr[g(x)]. Poichè c(x), q(x)g(x) ∈ C e C è lineare, segue che r(x) = c(x)−q(x)g(x) ∈<br />
C. Se r(x) = 0 si ha un assurdo perchè r(x) ha grado minore <strong>di</strong> g(x). <br />
2. Polinomio generatore e matrice generatrice<br />
Definizione 5.2.1. Si definisce polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico C<br />
un polinomio g(x) ∈ C non nullo, monico, <strong>di</strong> grado minimo.<br />
Teorema 5.2.2. Il polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico è unico.<br />
Dimostrazione. Supponiamo per assurdo che g(x) e g1(x) siano due generatori<br />
del co<strong>di</strong>ce ciclico C e dunque monici e <strong>di</strong> grado minimo. Poichè C è un ideale,<br />
segue che il polinomio g(x) − g1(x) appartiene a C e ha grado minore del grado <strong>di</strong><br />
g(x) e g1(x) e ciò è assurdo. <br />
Per la ricerca del polinomio generatore, vengono in aiuto i seguenti teoremi.<br />
Teorema 5.2.3. Se g(x) è il polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico <strong>di</strong><br />
lunghezza n, allora g(x) <strong>di</strong>vide x n − 1.
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 65<br />
Dimostrazione. Supponiamo per assurdo che g(x) non <strong>di</strong>vida x n − 1. Allora<br />
x n − 1 = g(x)q(x) + r(x) con r(x) non nullo e <strong>di</strong> grado minore <strong>di</strong> g(x). Poichè<br />
g(x)q(x) ∈ C e r(x) = −g(x)q(x) (mod(x n − 1)), segue r(x) ∈ C ma ciò è assurdo<br />
perchè g(x) è <strong>di</strong> grado minimo in C. <br />
Teorema 5.2.4. Sia g(x) un polinomio monico <strong>di</strong>visore <strong>di</strong> x n − 1. Allora g(x)<br />
genera il co<strong>di</strong>ce ciclico C = {f(x)g(x), f(x) ∈ Rn[x]}.<br />
Dimostrazione. Sia C = {f(x)g(x), f(x) ∈ Rn[x]}. Basta provare che g(x)<br />
è il polinomio <strong>di</strong> grado minimo appartenente a C. Sia g1(x) ∈ C un polinomio<br />
monico <strong>di</strong> grado minimo, sia cioè un generatore <strong>di</strong> C. Per il teorema precedente<br />
g1(x) è un <strong>di</strong>visore <strong>di</strong> x n − 1. Poichè g1(x) ∈ C si ha g1(x) = f(x)g(x) ∈ Rn[x] e<br />
in Fq[x] <strong>di</strong>venta g1(x) = f(x)g(x) + p(x)(x n − 1). Poichè g(x) <strong>di</strong>vide x n − 1, dalla<br />
relazione precedente segue che g(x) <strong>di</strong>vide g1(x). D’altra parte g1(x) <strong>di</strong>vide g(x)<br />
essendo g1(x) il generatore <strong>di</strong> C. Allora g(x) = g1(x) perchè i due polinomi sono<br />
monici. <br />
Teorema 5.2.5. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato da g(x) <strong>di</strong><br />
grado n − k. Allora ogni parola c(x) ∈ C si può esprimere in modo unico nella<br />
forma c(x) = f(x)g(x), con f(x) ∈ Rn[x], gr(f(x)) ≤ k − 1.<br />
Dimostrazione. Per la definizione <strong>di</strong> co<strong>di</strong>ce ciclico, ogni parola <strong>di</strong> C è del<br />
tipo c(x) = f(x)g(x). Distinguiamo due casi.<br />
1 ◦ caso. Sia gr(f(x)) ≤ k − 1. Occorre solo provare l’unicità della rappresentazione.<br />
Supponiamo c(x) = f(x)g(x) = f1(x)g(x), si ha [f(x) − f1(x)]g(x) = 0 e<br />
quin<strong>di</strong> necessariamente f(x) = f1(x).<br />
2 ◦ caso. Sia gr(f(x)) ≥ k. Allora gr(c(x)) ≥ n e si ha c(x) = f(x)g(x) =<br />
q(x)(x n − 1) + r(x), con gr(r(x)) ≤ n − 1 oppure gr(r(x)) = 0. Poichè g(x) <strong>di</strong>vide<br />
x n − 1 si ha che g(x) è un <strong>di</strong>visore <strong>di</strong> r(x) ed esiste un unico polinomio f1(x) tale<br />
che r(x) = f1(x)g(x) con gr(f1(x)) ≤ k − 1. Si ha quin<strong>di</strong> c(x) = f(x)g(x) =<br />
q(x)(x n − 1) + f1(x)g(x), che in Rn[x] <strong>di</strong>venta c(x) = f1(x)g(x). <br />
Ricor<strong>di</strong>amo che l’anello Fq[x] è ad ideali principali e, quin<strong>di</strong>, ogni suo ideale J<br />
contiene qualche polinomio<br />
c(x) = c0 + c1(x) + · · · + cm−1x m−1 + cmx m<br />
che lo genera. I generatori <strong>di</strong> J sono, allora, tutti e soli i polinomi che <strong>di</strong>fferiscono<br />
da c(x) per una costante moltiplicativa non nulla e, tra essi, ve ne è uno solo<br />
monico, il polinomio minimo <strong>di</strong> J. Inoltre, se J1 = (c1(x)) e J2 = (c2(x)) sono<br />
ideali <strong>di</strong> Fq[x], risulta J1 ⊆ J2 se e solo se c2(x) <strong>di</strong>vide c1(x). Osserviamo, ora, che<br />
ogni ideale C(x) <strong>di</strong> Rn[x] è un quoziente J/(x n −1), con J ideale <strong>di</strong> Fq[x] contenente<br />
l’ideale ((x n − 1)), e ogni generatore c(x) <strong>di</strong> J, per poter essere un generatore <strong>di</strong>
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 66<br />
C(x) deve <strong>di</strong>videre x n − 1. Tenendo presente 5.2.3, ne segue che il numero degli<br />
(n, k)-co<strong>di</strong>ci ciclici su Fq è uguale al numero <strong>dei</strong> polinomi <strong>di</strong> Fq[x] che <strong>di</strong>vidono<br />
x n − 1, a meno <strong>di</strong> una costante moltiplicativa non nulla.<br />
Se i polinomi fattori irriducibili <strong>di</strong> x n −1 sono h, ossia x n −1 = f1(x)f2(x) · · · fh(x),<br />
allora i co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza n sono 2 h (includendo anche i banali) e si ottengono<br />
scegliendo come polinomio generatore uno qualsiasi <strong>dei</strong> 2 h fattori <strong>di</strong> x n − 1.<br />
Poichè i co<strong>di</strong>ci banali sono due, quello contenente la sola parola nulla e Rn[x], si<br />
ha che i co<strong>di</strong>ci ciclici non banali sono 2 h − 2. Quin<strong>di</strong> c’è un modo automatico <strong>di</strong><br />
costruire tutti i co<strong>di</strong>ci ciclici <strong>di</strong> data lunghezza una volta che si scompone x n − 1<br />
in fattori irriducibili.<br />
Nel seguito consideriamo co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza n su Fq = GF (q) <strong>di</strong><br />
caratteristica p, q = p t , con n e q primi fra loro, cioè MCD(n, q) = 1.<br />
Questo perchè si vuole che i fattori irriducibili in cui si scompone x n − 1 sia-<br />
no <strong>di</strong>stinti. Se fosse MCD(n, q) = pr = 1, si avrebbe n = apr con r intero e<br />
MCD(a, q) = 1 e sarebbe xn − 1 = (xa − 1) pr.<br />
Sotto l’ipotesi MCD(n, q) = 1 i<br />
fattori irriducibili nei quali si scompone x n − 1 sono tutti <strong>di</strong>stinti.<br />
Esempio 5.2.6. Costruiamo i co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza 3. Fissato x 3 +1,<br />
è R3[x] = F2[x]/(x 3 + 1). Poichè risulta x 3 + 1 = (x + 1)(x 2 + x + 1), oltre ai co<strong>di</strong>ci<br />
banali ci sono 2 h − 2 = 2 2 − 2 = 2 co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza 3.<br />
Se g(x) = (1 + x) il co<strong>di</strong>ce C da esso generato è<br />
C = {0; 1 + x; 1 + x 2 ; x + x 2 }<br />
perchè gli elementi <strong>di</strong> C sono i prodotti <strong>di</strong> g(x) per i polinomi <strong>di</strong> R3[x] <strong>di</strong> grado<br />
minore o uguale a 1, ossia g(x) per i polinomi 0; 1; x; 1 + x.<br />
Se consideriamo come polinomio generatore g(x) = 1 + x + x 2 , si ottiene il<br />
co<strong>di</strong>ce<br />
C1 = {0; 1 + x + x 2 }<br />
I co<strong>di</strong>ci C e C1, come terne (c0 c1 c2) <strong>di</strong> elementi <strong>di</strong> GF (2), sono rappresentati da:<br />
C = {(0 0 0), (1 1 0), (1 0 1), (0 1 1)} e C1 = {( 0 0 0), (1 1 1)}<br />
Esempio 5.2.7. Il polinomio x 4 − 1 ∈ F3[x] ha la seguente decomposizione in<br />
fattori irriducibili:<br />
x 4 − 1 = (x − 1)(x + 1)(x 2 + 1)<br />
e quin<strong>di</strong> ci sono polinomi a coefficienti in F3 che <strong>di</strong>vidono x 4 − 1, sono<br />
1; x − 1; x + 1; x 2 + 1; (x − 1)(x + 1); (x − 1)(x 2 + 1); (x + 1)(x 2 + 1); x 4 − 1.<br />
Esistono dunque otto co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza 4 su F3 (compresi i due banali).
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 67<br />
Esempio 5.2.8. Determiniamo tutti i possibili co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza<br />
7. Questi co<strong>di</strong>ci sono sottospazi <strong>di</strong> F 7 2 . Poniamo f(x) = x 7 − 1. In F2 il polinomio<br />
f(x) si fattorizza in fattori irriducibili come:<br />
x 7 − 1 = (x + 1)(x 3 + x 2 + 1)(x 3 + x + 1)<br />
perciò i <strong>di</strong>visori monici <strong>di</strong> f(x) sono tutti e soli i seguenti:<br />
g1(x) = 1; g2(x) = x + 1; g3(x) = x 3 + x 2 + 1; g4(x) = x 3 + x + 1;<br />
g5(x) = (x + 1)(x 3 + x 2 + 1); g6(x) = (x + 1)(x 3 + x + 1);<br />
g7(x) = (x 3 + x 2 + 1)(x 3 + x + 1); g8(x) = f(x).<br />
Ne segue che F 7 2 contiene esattamente otto sottospazi ciclici.<br />
Ad esempio, g6(x) genera il sottospazio ciclico<br />
C = {0000000; 1011100; 0101110; 0010111; 1001011; 1100101; 1110010; 0111001}<br />
Analogamente g7(x) genera il co<strong>di</strong>ce:<br />
C = {0000000; 1111111}.<br />
Esempio 5.2.9. Si voglia costruire un (15, 9)-co<strong>di</strong>ce ciclico binario. Poichè<br />
g(x) = (1 + x + x2 )(1 + x + x4 ) è un <strong>di</strong>visore monico <strong>di</strong> x15 − 1, si ha che g(x)<br />
genera un sottospazio ciclico <strong>di</strong> <strong>di</strong>mensione 9 in F 15<br />
2 .
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 68<br />
Tavola della Fattorizzazione <strong>di</strong> x n − 1 su GF (2) per n ≤ 25.<br />
n Fattorizzazione<br />
1 1 + x<br />
2 (1 + x) 2<br />
3 (1 + x)(1 + x + x 2 )<br />
4 (1 + x) 4<br />
5 (1 + x)(1 + x + x 2 + x 3 + x 4 )<br />
6 (1 + x) 2 (1 + x + x 2 ) 2<br />
7 (1 + x)(1 + x + x 3 )(1 + x 2 + x 3 )<br />
8 (1 + x) 8<br />
9 (1 + x)(1 + x + x 2 )(1 + x 3 + x 6 )<br />
10 (1 + x) 2 (1 + x + x 2 + x 3 + x 4 ) 2<br />
11 (1 + x)(1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 )<br />
12 (1 + x) 4 (1 + x + x 2 ) 4<br />
13 (1 + x)(1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 + x 11 + x 12 )<br />
14 (1 + x) 2 (1 + x + x 3 )(1 + x 2 + x 3 ) 2<br />
15 (1 + x)(1 + x + x 2 )(1 + x + x 2 + x 3 + x 4 )(1 + x + x 4 )(1 + x 3 + x 4 )<br />
16 (1 + x) 16<br />
17 (1 + x)(1 + x + x 2 + x 4 + x 6 + x 7 + x 8 )(1 + x 3 + x 4 + x 5 + x 8 )<br />
18 (1 + x) 2 (1 + x + x 2 ) 2 (1 + x 3 + x 6 ) 2<br />
19 (1 + x)(1 + x + x 2 + x 3 + x 4 + · · · + x 16 + x 17 + x 18 )<br />
20 (1 + x) 4 (1 + x + x 2 + x 3 + x 4 ) 4<br />
21 (1 + x)(1 + x + x 2 )(1 + x 2 + x 3 )(1 + x + x 3 )(1 + x 2 + x 4 + x 5 + x 6 )(1 + x+<br />
+x 2 + x 4 + x 6 )<br />
22 (1 + x) 2 (1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 ) 2<br />
23 (1 + x)(1 + x + x 5 + x 6 + x 7 + x 9 + x 11 )(1 + x 2 + x 4 + x 5 + x 6 + x 10 + x 11 )<br />
24 (1 + x) 8 (1 + x + x 2 ) 8<br />
25 (1 + x)(1 + x + x 2 + x 3 + x 4 )(1 + x 5 + x 10 + x 15 + x 20 )<br />
Matrice Generatrice<br />
Un co<strong>di</strong>ce ciclico è lineare e pertanto ad esso si può associare una matrice<br />
generatrice. Illustriamo due meto<strong>di</strong> per costruirla.<br />
Primo metodo - Come mostra il prossimo teorema, la forma naturale per<br />
la matrice generatrice <strong>di</strong> un co<strong>di</strong>ce ciclico è quella detta ′′ a scala ′′ ossia ottenuta<br />
considerando k scorrimenti ciclici del vettore corrispondente ai coefficienti del polinomio<br />
generatore. In particolare, la sottomatrice quadrata ottenuta considerando<br />
le prime k colonne è triangolare superiore e ha determinante non nullo. Pertanto,<br />
le prime k posizioni sono posti <strong>di</strong> informazione e bastano a ricostruire, in assenza
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 69<br />
<strong>di</strong> errori, la parola originariamente trasmessa. Questa forma ciclica non risulta<br />
quasi mai standard e pertanto la co<strong>di</strong>fica non è ′′ sistematica ′′ .<br />
Teorema 5.2.10. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato dal polinomio<br />
monico g(x) = g0 + g1x + · · · + gn−k−1x n−k−1 + x n−k . Allora una sua matrice<br />
generatrice è<br />
⎛<br />
g(x)<br />
xg(x)<br />
G =<br />
⎜<br />
⎝<br />
.<br />
x k−1 g(x)<br />
⎞<br />
⎟<br />
⎠ =<br />
⎛<br />
⎜<br />
⎝<br />
g0 g1 · · · · · · gn−k−1 1 0 · · · 0<br />
0 g0 · · · · · · · · · gn−k−1 1 · · · 0<br />
. . . . . . . . .<br />
0 0 · · · g0 · · · · · · · · · gn−k−1 1<br />
Dimostrazione. G ha rango k perchè le righe sono linearmente in<strong>di</strong>pendenti,<br />
infatti è una matrice ridotta per righe e non c’è la riga nulla. Dobbiamo provare che<br />
ogni parola <strong>di</strong> C si può esprimere come combinazione lineare <strong>dei</strong> vettori riga <strong>di</strong> G.<br />
Dalla definizione <strong>di</strong> co<strong>di</strong>ce ciclico segue che un elemento c = (c0, c1, . . . , cn−1) ∈ F n q<br />
sta in C se e solo se il polinomio c(x) = c0 + c1x + . . . + cn−1x n−1 ad esso associato<br />
è della forma c(x) = g(x)f(x) mod(x n − 1), con f(x) ∈ Rn[x], gr(f(x)) ≤ k − 1,<br />
ossia se e solo se<br />
c(x) = g(x)(f0 + f1x + . . . + fk−1x k−1 ) =<br />
= f0g(x) + f1xg(x) + . . . + fk−1x k−1 g(x) =<br />
= f0(g0, g1, . . . , 1, . . . , 0)+<br />
+f1(0, g0, g1, . . . , 1, . . . , 0)+<br />
+f2(0, 0, g0, . . . , 1, . . . , 0)+<br />
+ . . . . . . +<br />
+fk−1(0, 0, . . . , g0, . . . , 1).<br />
Segue che una qualsiasi parola c ∈ C si può esprimere come combinazione lineare<br />
delle righe <strong>di</strong> G e pertanto G è una matrice generatrice <strong>di</strong> C. <br />
Corollario 5.2.11. Un co<strong>di</strong>ce ciclico C avente come polinomio generatore un<br />
polinomio <strong>di</strong> grado n − k, ha <strong>di</strong>mensione k e pertanto è un (n, k)-co<strong>di</strong>ce.<br />
Secondo metodo - Per un co<strong>di</strong>ce ciclico è sempre possibile costruire una matrice<br />
generatrice in una forma standard, detta ′′ antisistematica ′′ , particolarmente<br />
comoda in fase <strong>di</strong> implementazione <strong>di</strong> algoritmi <strong>di</strong> deco<strong>di</strong>fica perchè una copia<br />
della parola originale si trova nelle ultime k posizioni trasmesse.<br />
Teorema 5.2.12. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato dal polinomio<br />
g(x) con gr(g(x)) = (n − k). Per C è sempre possibile determinare una matrice<br />
generatrice della forma G = (A|Ik).<br />
⎞<br />
⎟<br />
⎠
2. POLINOMIO GENERATORE E MATRICE GENERATRICE 70<br />
Dimostrazione.<br />
• Divi<strong>di</strong>amo i monomi x i per g(x), con n − k ≤ i ≤ n − 1, si ottiene<br />
x i = qi(x)g(x) + ri(x)<br />
dove ri(x) hanno grado minore <strong>di</strong> n − k oppure sono nulli.<br />
• Consideriamo una matrice avente come righe i coefficienti delle parole<br />
pi(x) = qi(x)g(x) = −ri(x)+x i or<strong>di</strong>nate per i = n−k, n−k +1, . . . , n−1,<br />
inoltre or<strong>di</strong>niamo ogni polinomio in senso crescente. Se<br />
si ha<br />
ri(x) = r0,i + r1,ix + · · · + rn−k−1,ix n−k−1<br />
pi(x) = −ri(x) + x i = −r0,i − r1,ix − · · · − rn−k−1,ix n−k−1 + x i ∈ C<br />
• La matrice cercata è la matrice <strong>di</strong> tipo k × n<br />
⎛<br />
−r0,n−k<br />
⎜ −r0,n−k+1<br />
G = ⎜<br />
⎝<br />
.<br />
−r1,n−k<br />
−r1,n−k+1<br />
.<br />
· · ·<br />
· · ·<br />
.<br />
−rn−k−1,n−k<br />
−rn−k−1,n−k+1<br />
.<br />
1<br />
0<br />
.<br />
0<br />
1<br />
.<br />
· · ·<br />
· · ·<br />
.<br />
⎞<br />
0<br />
0 ⎟<br />
.<br />
⎠<br />
−r0,n−1 −r1,n−1 · · · −rn−k−1,n−1 0 0 · · · 1<br />
Ogni riga <strong>di</strong> G è una parola del co<strong>di</strong>ce C generato da g(x), inoltre G ha rango k e<br />
quin<strong>di</strong> le righe sono linearmente in<strong>di</strong>pendenti. G è dunque una matrice generatrice<br />
<strong>di</strong> C ed è del tipo G = (A | Ik) in cui le righe <strong>di</strong> A corrispondono a −ri(x), n−k ≤<br />
i ≤ n − 1. <br />
Esempio 5.2.13. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato dal<br />
polinomio g(x) = 1 + x + x3 . Trovare la matrice generatrice <strong>di</strong> C applicando sia il<br />
primo metodo che il secondo metodo.<br />
Soluzione - Poichè gr(g(x)) = n − k, risulta 3 = 7 − 4 e pertanto C è un<br />
(7, 4)-co<strong>di</strong>ce.<br />
Primo metodo<br />
G =<br />
⎛<br />
⎜<br />
⎝<br />
g(x)<br />
xg(x)<br />
x 2 g(x)<br />
x 3 g(x)<br />
⎞<br />
⎟<br />
⎠ =<br />
⎛<br />
⎜<br />
⎝<br />
1 1 0 1 0 0 0<br />
0 1 1 0 1 0 0<br />
0 0 1 1 0 1 0<br />
0 0 0 1 1 0 1<br />
Secondo metodo<br />
Poichè gr(g(x)) = 3, <strong>di</strong>vi<strong>di</strong>amo per g(x) i monomi x 3 , x 4 , x 5 , x 6 . Si ottiene<br />
x 3 = (x 3 + x + 1) + (x + 1)<br />
x 4 = x(x 3 + x + 1) + (x 2 + x)<br />
x 5 = (x 2 + 1)(x 3 + x + 1) + (x 2 + x + 1)<br />
x 6 = (x 3 + x + 1)(x 3 + x + 1) + (x 2 + 1)<br />
⎞<br />
⎟<br />
⎠
3. POLINOMIO DI CONTROLLO E MATRICE DI CONTROLLO 71<br />
Allora i polinomi qi(x)g(x) sono parole <strong>di</strong> C ossia sono parole <strong>di</strong> C i polinomi<br />
1(x 3 + x + 1) = 1 + x + x 3 ; x(x 3 + x + 1) = x + x 2 + x 4 ; (x 2 + 1)(x 3 + x + 1) =<br />
1 + x + x 2 + x 5 ; (x 3 + x + 1)(x 3 + x + 1) = 1 + x 2 + x 6 .<br />
Considerando i polinomi resto, con il secondo metodo, si ottiene la matrice:<br />
⎛<br />
⎞<br />
−1 −1 0 1 0 0 0<br />
⎜<br />
¯G = ⎜ 0 −1 −1 0 1 0 0 ⎟<br />
⎝ −1 −1 −1 0 0 1 0 ⎠<br />
−1 0 −1 0 0 0 1<br />
3. Polinomio <strong>di</strong> controllo e matrice <strong>di</strong> controllo<br />
In un co<strong>di</strong>ce ciclico C, oltre al polinomio generatore g(x) c’è un altro polinomio<br />
<strong>di</strong> Rn[x] che in<strong>di</strong>vidua univocamente il co<strong>di</strong>ce. Questo polinomio gioca un ruolo<br />
analogo a quello della matrice <strong>di</strong> controllo per i co<strong>di</strong>ci lineari.<br />
Supponiamo che sia x n −1 = f1(x)f2(x) · · · fs(x) e sia g(x) un <strong>di</strong>visore <strong>di</strong> x n −1.<br />
Sia x n −1 = g(x)h(x) nell’anello Fq[x] e quin<strong>di</strong> g(x)h(x) = 0 in Rn[x]. Poichè h(x)<br />
è un <strong>di</strong>visore <strong>di</strong> x n − 1, esso genera un co<strong>di</strong>ce ciclico.<br />
Se g(x) = g0 + g1x + . . . + gn−k−1x n−k−1 + x n−k è <strong>di</strong> grado n − k, allora h(x)<br />
ha grado k ed è del tipo h(x) = x k + hk−1x k−1 + . . . + h1x + h0.<br />
Teorema 5.3.1. Una parola c appartiene al co<strong>di</strong>ce ciclico C generato da g(x)<br />
se e solo se c(x)h(x) = 0 in Rn[x], con g(x)h(x) = x n − 1 in Fq[x].<br />
Dimostrazione. Se c è una parola <strong>di</strong> C, allora il polinomio c(x) associato a<br />
c è un multiplo <strong>di</strong> g(x), cioè c(x) = p(x)g(x) da cui c(x)h(x) = p(x)g(x)h(x) =<br />
p(x)(x n − 1) in Fq[x]. Ciò significa c(x)h(x) = 0 in Rn[x].<br />
Viceversa, supponiamo c(x)h(x) = 0 in Rn[x]. Ciò significa che in Fq[x] è<br />
c(x)h(x) = p(x)(x n − 1) = p(x)g(x)h(x) da cui segue c(x) = p(x)g(x) e quin<strong>di</strong><br />
c(x) è una parola del co<strong>di</strong>ce. <br />
Definizione 5.3.2. Sia C ⊆ F n q un co<strong>di</strong>ce ciclico generato da g(x). Si definisce<br />
polinomio <strong>di</strong> controllo <strong>di</strong> C il polinomio h(x) tale che g(x)h(x) = (x n − 1) in<br />
Fq[x] ossia g(x)h(x) = 0 in Rn[x].<br />
Se <strong>di</strong>m C = k ( ossia gr(g(x)) = n−k e gr(h(x)) = k ) allora il co<strong>di</strong>ce generato<br />
da h(x) ha <strong>di</strong>mensione n − k che è la stessa <strong>di</strong>mensione del co<strong>di</strong>ce duale C ⊥ , ma in<br />
generale non coincide con esso. Questo perchè l’essere c(x)h(x) = 0 in Rn[x] non<br />
equivale all’ortogonalità <strong>dei</strong> vettori c ed h associati a c(x) ed h(x), rispettivamente.
3. POLINOMIO DI CONTROLLO E MATRICE DI CONTROLLO 72<br />
Però, in ogni caso, il co<strong>di</strong>ce generato da h(x) è equivalente a C ⊥ , come mostra il<br />
prossimo teorema.<br />
Teorema 5.3.3. Sia C un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) ed avente come<br />
polinomio <strong>di</strong> controllo<br />
h(x) = h0 + h1x + . . . + hkx k .<br />
Allora la matrice <strong>di</strong> tipo (n − k) × n<br />
⎛<br />
hk<br />
⎜ 0<br />
H = ⎜<br />
⎝<br />
.<br />
hk−1<br />
hk<br />
.<br />
· · ·<br />
hk−1<br />
.<br />
· · ·<br />
· · ·<br />
.<br />
· · ·<br />
· · ·<br />
.<br />
h0<br />
0<br />
.<br />
0<br />
h0<br />
.<br />
· · ·<br />
· · ·<br />
.<br />
0<br />
0<br />
.<br />
0 0 0 · · · hk hk−1 · · · · · · h0<br />
è una matrice <strong>di</strong> controllo per C. Inoltre C ⊥ è un co<strong>di</strong>ce ciclico generato dal<br />
polinomio<br />
¯h = hk + hk−1x + . . . + h0x k .<br />
Dimostrazione. Le righe <strong>di</strong> H sono evidentemente in<strong>di</strong>pendenti. Sia G la<br />
matrice generatrice <strong>di</strong> C in<strong>di</strong>viduata dall’unico polinomio generatore c(x) per cui<br />
è c(x)h(x) = x n − 1. In c(x)h(x) sono allora nulli i coefficienti <strong>di</strong> x s , per ogni<br />
s = 0, n, e ciò implica che GH t = 0, cioè H è una matrice <strong>di</strong> controllo <strong>di</strong> C.<br />
Osserviamo ora che risulta<br />
¯h = x k h(x −1 ),<br />
¯c(x) = cn−k + cn−k−1x + cn−k−2x 2 + · · · + c1x n−k−1 + c0x n−k = x n−k c(x −1 ),<br />
1 − x n = x n (x −n − 1) = x n c(x −1 )h(x −1 ) = x k h(x −1 )x n−k c(x −1 ) = ¯ h(x)¯c(x),<br />
cioè ¯ h(x) <strong>di</strong>vide x n − 1. Dalla 5.3.1 segue allora che C ⊥ è ciclico con polinomio<br />
generatore ¯ h(x) e il teorema è completamente <strong>di</strong>mostrato.<br />
<br />
Definizione 5.3.4. Sia h(x) = h0 + h1x + . . . + hkx k polinomio <strong>di</strong> controllo<br />
del (n, k)-co<strong>di</strong>ce ciclico C. Si chiama polinomio reciproco <strong>di</strong> h(x) il polinomio<br />
¯h = hk + hk−1x + . . . + h0x k .<br />
Esempio 5.3.5. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato da<br />
g(x) = 1 + x + x 3 . Si ha:<br />
(1) C ha <strong>di</strong>mensione 4.<br />
(2) Il polinomio <strong>di</strong> controllo è h(x) = x7 +1<br />
g(x) = 1 + x + x2 + x4 ; esso genera<br />
un co<strong>di</strong>ce ciclico C1 <strong>di</strong> <strong>di</strong>mensione 3.<br />
⎞<br />
⎟<br />
⎠
4. SCHEMI DI CODIFICA 73<br />
(3) Una matrice generatrice <strong>di</strong> C (costruita con il primo metodo, teorema<br />
5.2.10) è<br />
⎛<br />
1<br />
⎜<br />
G = ⎜ 0<br />
⎝ 0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
⎞<br />
0<br />
0 ⎟<br />
0 ⎠<br />
0 0 0 1 1 0 1<br />
(4) Una matrice <strong>di</strong> controllo <strong>di</strong> C è<br />
⎛<br />
1 0 1<br />
H = ⎝ 0 1 0<br />
1<br />
1<br />
1<br />
1<br />
0<br />
1<br />
⎞<br />
0<br />
0 ⎠<br />
0 0 1 0 1 1 1<br />
(5) Il polinomio reciproco <strong>di</strong> h(x) è il polinomio ¯ h(x) = x k h( 1<br />
x ) = x4 (1 + 1<br />
1<br />
x2 + 1<br />
x4 ) = x4 + x3 + x2 + 1.<br />
(6) Determiniamo una matrice generatrice <strong>di</strong> C nella forma standard G ′ =<br />
(A|Ik), utilizzando il secondo metodo (teorema 5.2.12). Le righe <strong>di</strong> G ′<br />
sono date dai coefficienti <strong>dei</strong> polinomi −ri(x)+xi , dove ri(x) è il resto della<br />
<strong>di</strong>visione <strong>di</strong> xi per g(x), essendo n − k ≤ i ≤ n − 1. La prima, la seconda,<br />
la terza, la quarta riga <strong>di</strong> G ′ sono date rispettivamente dai coefficienti <strong>dei</strong><br />
polinomi (x + 1) + x3 , (x2 + x) + x4 , (x2 + x + 1) + x5 , (x2 + 1) + x6 .<br />
Risulta pertanto:<br />
⎛<br />
G ′ =<br />
⎜<br />
⎝<br />
1 1 0 1 0 0 0<br />
0 1 1 0 1 0 0<br />
1 1 1 0 0 1 0<br />
1 0 1 0 0 0 1<br />
⎞<br />
⎟<br />
⎠ = (A|I4).<br />
(7) Se la matrice generatrice <strong>di</strong> C è G ′ allora la matrice <strong>di</strong> controllo è<br />
H = (I3| − A t ⎛<br />
⎞<br />
1 0 0 1 0 1 1<br />
) = ⎝ 0 1 0 1 1 1 0 ⎠<br />
0 0 1 0 1 1 1<br />
4. Schemi <strong>di</strong> co<strong>di</strong>fica<br />
Sia C un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) <strong>di</strong> grado n − k.<br />
Primo schema <strong>di</strong> co<strong>di</strong>fica<br />
Al messaggio m = (m0, m1, . . . , mk−1) associamo il polinomio m(x) = m0 +<br />
m1x + . . . + mk−1x k−1 . Per 5.2.5 il messaggio m(x) può essere co<strong>di</strong>ficato nella<br />
parola c(x) = m(x)g(x).<br />
Secondo schema <strong>di</strong> co<strong>di</strong>fica<br />
x +
4. SCHEMI DI CODIFICA 74<br />
Per questo secondo schema, illustreremo due mo<strong>di</strong> <strong>di</strong> co<strong>di</strong>fica: il primo utilizza<br />
la matrice generatrice standard mentre il secondo opera solo con polinomi ossia<br />
non occorre scrivere la matrice generatrice. In entrambi i casi i posti <strong>di</strong><br />
informazione sono gli ultimi k posti ed è importante notare che in questi posti<br />
ritroviamo inalterati i k simboli <strong>di</strong> informazione del messaggio da co<strong>di</strong>ficare. Questo<br />
fatto assicura che per l’operazione <strong>di</strong> co<strong>di</strong>fica è sufficiente un algoritmo che<br />
determini le componenti <strong>dei</strong> soli n − k posti <strong>di</strong> controllo.<br />
1 ◦ modo - Sia m = (m0, m1, . . . , mk−1) il messaggio da co<strong>di</strong>ficare.<br />
Sia G = (A|Ik) la matrice generatrice standard <strong>di</strong> tipo k × n del (n, k)-co<strong>di</strong>ce<br />
C ottenuta a partire dal polinomio generatore g(x). Una matrice <strong>di</strong> questo tipo<br />
si può sempre costruire come illustrato nel paragrafo 2 <strong>di</strong> questo capitolo (ve<strong>di</strong><br />
teorema 5.2.12).<br />
• Si co<strong>di</strong>fica il messaggio m come c = mG.<br />
Poichè G è standard, si ha c = (c0, . . . , cn−k−1, m0, . . . mk−1) e dunque i simboli<br />
<strong>di</strong> informazione m0, m1, . . . mk−1 rimangono inalterati e occupano le ultime k<br />
posizioni mentre i simboli <strong>di</strong> controllo sono i primi n − k.<br />
2 ◦ modo - Sia m = (m0, m1, . . . , mk−1) il messaggio da co<strong>di</strong>ficare e sia m(x) =<br />
m0 + m1x + · · · + mk−1x k−1 il polinomio ad esso associato. Divi<strong>di</strong>amo il polinomio<br />
x n−k m(x) per il polinomio generatore g(x); si ottiene x n−k m(x) = q(x)g(x) + r(x)<br />
da cui c(x) = q(x)g(x) = −r(x) + x n−k m(x).Consideriamo c(x) or<strong>di</strong>nato secondo<br />
potenze crescenti,<br />
c(x) = −r0 − r1x − r2x 2 − . . . − rn−k−1x n−k−1 + mn−kx n−k + mn−1x n−1 .<br />
• Il messaggio m viene co<strong>di</strong>ficato nella parola<br />
c = (−r0, −r1, . . . , −rn−k−1, mn−k, . . . , mn−1).<br />
che ha i k simboli <strong>di</strong> informazione m0, m1, . . . mk−1 negli ultimi k posti e gli n − k<br />
simboli <strong>di</strong> controllo, che sono i coefficienti <strong>di</strong> −r(x), nelle prime n − k posizioni.<br />
Esempio 5.4.1. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato da<br />
g(x) = 1 + x + x 3 . Costruiamo la matrice generatrice standard come descritto nel<br />
teorema 5.2.12. Con l’algoritmo euclideo determiniamo:<br />
x 3 = 1 · (x 3 + x + 1) + (1 + x)<br />
x 4 = x · (x 3 + x + 1) + (x + x 2 )<br />
x 5 = (x 2 + 1) · (x 3 + x + 1) + (1 + x + x 2 )<br />
x 6 = (x 3 + x + 1) · (x 3 + x + 1) + (1 + x 2 )
4. SCHEMI DI CODIFICA 75<br />
Si ottiene così la seguente matrice generatrice (ve<strong>di</strong> anche esempio 5.2.13):<br />
⎛<br />
⎞<br />
⎛ ⎞<br />
1 1 0 1 0 0 0<br />
1 1 0<br />
⎜<br />
G = (A|Ik) = ⎜ 0 1 1 0 1 0 0 ⎟<br />
⎜<br />
⎟<br />
⎝ 1 1 1 0 0 1 0 ⎠ ; A = ⎜ 0 1 1 ⎟<br />
⎝ 1 1 1 ⎠<br />
1 0 1 0 0 0 1<br />
1 0 1<br />
Le righe <strong>di</strong> A corrispondono ai vettori <strong>dei</strong> coefficienti <strong>dei</strong> polinomi resto 1 +<br />
x; x + x 2 ; 1 + x + x 2 ; 1 + x 2 .<br />
Sia dato il messaggio m = (1110) e co<strong>di</strong>fichiamo utilizzando il secondo schema.<br />
• Co<strong>di</strong>fica con il secondo schema, 1 ◦ modo.<br />
Per co<strong>di</strong>ficare m utilizziamo la matrice standard G. Il messaggio viene<br />
co<strong>di</strong>ficato in c = mG = (0101110).<br />
• Co<strong>di</strong>fica con il secondo schema, 2 ◦ modo.<br />
Ad m si associa il polinomio m(x) = 1 + x + x 2 . Si considera il polinomio<br />
x n−k m(x) e si <strong>di</strong>vide per g(x); nel nostro caso si ottiene x 3 (1 + x + x 2 ) =<br />
(x + x 2 )(1 + x + x 3 ) + x, e pertanto la parola associata ad m(x) è c(x) =<br />
x n−k m(x)−r(x) = x 3 (1+x+x 2 )−x = x+x 3 +x 4 +x 5 , ossia c = (0101110).<br />
Algoritmo <strong>di</strong> Co<strong>di</strong>fica<br />
Descriviamo un algoritmo <strong>di</strong> co<strong>di</strong>fica per un (n, k)-co<strong>di</strong>ce ciclico basato su quanto<br />
esposto nel secondo schema, 2 ◦ modo (ve<strong>di</strong> [3] pag. 114.)<br />
DATI<br />
• Un (n, k)-co<strong>di</strong>ce ciclico C con polinomio generatore g(x) = g0 +g1x+· · ·+<br />
gn−k−1x n−k−1 + x n−k .<br />
• Un messaggio m = (m0 m1 · · · mk−1).<br />
DETERMINARE Un vettore c = (c0 c1 . . . cn−k−1) <strong>di</strong> simboli <strong>di</strong> controllo tale che<br />
m sia co<strong>di</strong>ficato in (c0 c1 . . . cn−k−1 m0 m1 . . . mk−1) ∈ C.<br />
Posto g = (g0 g1 . . . gn−k−1) l’algoritmo è il seguente.<br />
(1) Si pone c 0 j = 0 per 0 ≤ j ≤ n − k − 1.<br />
(2) Per ogni i, 1 ≤ i ≤ k, proce<strong>di</strong>amo come segue:<br />
1◦ caso : mk−i = c (i−1)<br />
n−k−1 . Allora si pone cij = c (i−1)<br />
j−1<br />
e c i 0 = 0.<br />
per n − k − 1 ≤ j ≤ 1<br />
2 ◦ caso : mk−i = c (i−1)<br />
n−k−1 . Allora si pone ci j = c (i−1)<br />
j−1 + gj per n − k − 1 ≤<br />
j ≤ 1 e c i 0 = g0.<br />
(3) Il vettore cercato è il vettore ottenuto per i = k.<br />
Il grande vantaggio <strong>di</strong> questo algoritmo è che non si richiede <strong>di</strong> memorizzare<br />
tutta la matrice generatrice G = (A|Ik) e nemmeno <strong>di</strong> calcolare a priori i polinomi<br />
ri(x).
4. SCHEMI DI CODIFICA 76<br />
Esempio 5.4.2. Consideriamo il (7, 4)-co<strong>di</strong>ce ciclico binario C generato da<br />
g(x) = 1+x+x 3 (ve<strong>di</strong> esempio 5.3.5 ed esempio 5.4.1). Sia m = (m0 m1 m2 m3) =<br />
(1 0 1 1) il messaggio da trasmettere. Determinare un vettore c = (c0 c1 c2) <strong>di</strong><br />
simboli <strong>di</strong> controllo tale che p = (c0 c1 c2 m0 m1 m2 m3) ∈ C.<br />
Soluzione - Consideriamo g = (g0 g1 g2) = (1 1 0) e calcoliamo<br />
i c i 0 c i 1 c i 2 m4−i<br />
0 0 0 0<br />
1 1 1 0 m3 = 1<br />
2 1 0 1 m2 = 1<br />
3 1 0 0 m1 = 0<br />
4 1 0 0 m0 = 1<br />
Primo passo i = 1: (c 0 0 c 0 1 c 0 2) = (0 0 0) e m3 = 1 = c 0 2 = 0 allora<br />
c 1 2 = c 0 1 + g2 = 0 + 0 = 0<br />
c 1 1 = c 0 0 + g1 = 0 + 1 = 1<br />
c 1 0 = g0 = 1<br />
Secondo passo i = 2: (c 1 0 c 1 1 c 1 2) = (1 1 0) e m2 = 1 = c 1 2 = 0 allora<br />
c 2 2 = c 1 1 + g2 = 1 + 0 = 1<br />
c 2 1 = c 1 0 + g1 = 1 + 1 = 0<br />
c 2 0 = g0 = 1<br />
Terzo passo i = 3: (c 2 0 c 2 1 c 2 2) = (1 0 1) e m1 = 0 = c 2 2 = 1 allora<br />
c 3 2 = c 2 1 + g2 = 0 + 0 = 0<br />
c 3 1 = c 2 0 + g1 = 1 + 1 = 0<br />
c 3 0 = g0 = 1<br />
Quarto passo i = 4: (c 3 0 c 3 1 c 3 2) = (1 0 0) e m0 = 1 = c 3 2 = 0 allora<br />
c 4 2 = c 3 1 + g2 = 0 + 0 = 0<br />
c 4 1 = c 3 0 + g1 = 1 + 1 = 0<br />
c 4 0 = g0 = 1<br />
Il vettore cercato è (1 0 0) e pertanto il messaggio viene co<strong>di</strong>ficato in<br />
p = (1 0 0 1 0 1 1) ∈ C.
5. DECODIFICA 77<br />
Esempio 5.4.3. Sia g(x) = 1 + x 4 + x 6 + x 7 + x 8 il polinomio generatore <strong>di</strong> un<br />
(15, 7)-co<strong>di</strong>ce ciclico binario C. Per co<strong>di</strong>ficare il messaggio<br />
m = (m0 m1 m2 m3 m4 m5 m6) = (1 0 1 1 0 1 1)<br />
consideriamo g = (g0 g1 g2 g3 g4 g5 g6 g7) = (1 0 0 0 1 0 1 1) e calcoliamo<br />
i c i 0 c i 1 c i 2 c i 3 c i 4 c i 5 c i 6 c i 7 m7−i<br />
0 0 0 0 0 0 0 0 0<br />
1 1 0 0 0 1 0 1 1 1 = m6<br />
2 0 1 0 0 0 1 0 1 1 = m5<br />
3 1 0 1 0 1 0 0 1 0 = m4<br />
4 0 1 0 1 0 1 0 0 1 = m3<br />
5 1 0 1 0 0 0 0 1 1 = m2<br />
6 1 1 0 1 1 0 1 1 0 = m1<br />
7 0 1 1 0 1 1 0 1 1 = m0<br />
Il vettore cercato è (0 1 1 0 1 1 0 1) e pertanto il messaggio m = (1 0 1 1 0 1 1) è<br />
co<strong>di</strong>ficato in p = (0 1 1 0 1 1 0 1 1 0 1 1 0 1 1) ∈ C.<br />
Come si è visto, per la co<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce ciclico è necessario moltiplicare<br />
e/o <strong>di</strong>videre polinomi a coefficienti in GF (q). Per fare questo vengono in aiuto<br />
degli apparecchi elettronici chiamati registri a scorrimento lineare ( linear shift<br />
register). Per la loro descrizione si rinvia a [1] pag. 206 − 215.<br />
5. Deco<strong>di</strong>fica<br />
Se il co<strong>di</strong>ce ciclico viene usato solo come co<strong>di</strong>ce rivelatore <strong>di</strong> errori, si procede<br />
come segue.<br />
Se si riceve un vettore y(x), il deco<strong>di</strong>ficatore deve stabilire se è oppure no un<br />
elemento del co<strong>di</strong>ce. Per fare ciò si può usare il polinomio <strong>di</strong> controllo e vedere<br />
se y(x)h(x) = 0 in Rn[x]. Inoltre, poichè h(x) = xn−1, la relazione y(x)h(x) = 0<br />
g(x)<br />
equivale a 0 = y(x)<br />
g(x) (xn − 1) che significa y(x)<br />
g(x) ≡ 0 mod (xn − 1). Pertanto se<br />
y(x)h(x) = 0, <strong>di</strong>videndo y(x) per g(x) si ottiene come resto 0. Allora, per vedere<br />
se ci sono errori, il deco<strong>di</strong>ficatore può <strong>di</strong>videre il vettore ricevuto per g(x), invece<br />
<strong>di</strong> moltiplicarlo per h(x).<br />
Gli schemi <strong>di</strong> deco<strong>di</strong>fica veri e propri <strong>di</strong>pendono dal singolo tipo <strong>di</strong> co<strong>di</strong>ce. In<br />
ogni caso anche la deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce ciclico può essere implementata in modo<br />
conciso in termini <strong>di</strong> polinomi.
5. DECODIFICA 78<br />
Fissiamo un (n, k)-co<strong>di</strong>ce ciclico C ⊆ F n q con polinomio generatore g(x). Per<br />
quanto visto precedentemente, è sempre possibile rappresentare l’operazione <strong>di</strong> co<strong>di</strong>fica<br />
me<strong>di</strong>ante una matrice generatrice G della forma G = (A|Ik). Di conseguenza<br />
la matrice <strong>di</strong> controllo <strong>di</strong> C deve essere del tipo<br />
H = (In−k| − A t ).<br />
In termini <strong>dei</strong> polinomi ri(x) si vede imme<strong>di</strong>atamente che<br />
H =<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0 ( ) x r<br />
r 1( x)<br />
Sia h(x) il polinomio <strong>di</strong> controllo <strong>di</strong> C e sia y una sequenza ricevuta. Poniamo<br />
s = yH t ; il vettore s è la sindrome associata ad y. Per costruzione la matrice <strong>di</strong><br />
controllo H è la matrice generatrice <strong>di</strong> un co<strong>di</strong>ce ciclico con polinomio generatore<br />
h(x). In particolare, il calcolo della sindrome corrisponde, in termini polinomiali,<br />
ad un prodotto del polinomio s(x) associato alla sequenza ricevuta y per il<br />
polinomio h(x), il tutto calcolato nell’anello F n−k<br />
q [x].<br />
Il seguente teorema mostra che c’è una particolare convenienza nello scegliere<br />
per C una matrice <strong>di</strong> controllo H del tipo H = (In−k| − At ).<br />
Teorema 5.5.1. Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) e sia H<br />
una sua matrice <strong>di</strong> controllo del tipo H = (In−k| − A t ). Sia v ∈ F n q un vettore e<br />
in<strong>di</strong>chiamo con s la sua sindrome rispetto ad H. Siano v(x) e s(x) le rispettive<br />
rappresentazioni polinomiali. Allora s(x) è il resto della <strong>di</strong>visione <strong>di</strong> v(x) per g(x).<br />
Dimostrazione. Si rinvia a [3] pag. 116. <br />
In altre parole, il teorema assicura che la sindrome <strong>di</strong> una sequenza può essere<br />
determinata semplicemente eseguendo una <strong>di</strong>visione fra polinomi me<strong>di</strong>ante l’algoritmo<br />
euclideo. Questo può risultare molto più agevole da implementare che non<br />
l’usuale prodotto fra matrice e vettore.<br />
Esempio 5.5.2. Sia C il (7, 4)-co<strong>di</strong>ce ciclico binario generato dal polinomio<br />
g(x) = 1+x+x 3 . Una sua matrice generatrice del tipo G = (A|I4) è (ve<strong>di</strong> esempio<br />
5.2.13)<br />
G =<br />
⎛<br />
⎜<br />
⎝<br />
1 1 0 1 0 0 0<br />
0 1 1 0 1 0 0<br />
1 1 1 0 0 1 0<br />
1 0 1 0 0 0 1<br />
⎞<br />
⎟<br />
⎠<br />
r k−<br />
1( x)
6. CODICI BCH 79<br />
e pertanto una matrice <strong>di</strong> controllo è data da<br />
⎛<br />
⎞<br />
1 0 0 1 0 1 1<br />
H = ⎝ 0 1 0 1 1 1 0 ⎠ = (I3| − A<br />
0 0 1 0 1 1 1<br />
t )<br />
Supponiamo <strong>di</strong> aver ricevuto la sequenza r = (1 0 1 1 0 1 1). La sindrome <strong>di</strong> r è<br />
s = rH t = (0 0 1). Consideriamo la rappresentazione polinomiale <strong>di</strong> r : r(x) = 1+<br />
x 2 +x 3 +x 5 +x 6 . Dividendo r(x) per g(x) si ottiene : r(x) = (x 3 +x 2 +x+1)g(x)+x 2 .<br />
Come previsto, il polinomio associato alla sindrome <strong>di</strong> r è s(x) = x 2 .<br />
Per maggiori approfon<strong>di</strong>menti si rinvia a [3] pag. 117 − 123.<br />
6. Co<strong>di</strong>ci BCH<br />
I co<strong>di</strong>ci BCH, dalle iniziali <strong>dei</strong> loro inventori R. C. Bose, D. K. Ray-Chaudhuri,<br />
A. Hocquenghem (1959-60), sono co<strong>di</strong>ci ciclici pluri-correttori.<br />
Scegliendo ′′ opportunamente ′′ il polinomio generatore, si può fare in modo che,<br />
entro certi limiti, la <strong>di</strong>stanza minima del co<strong>di</strong>ce sia maggiore <strong>di</strong> un intero prefissato.<br />
Fissato un campo Fq, si vuole costruire un co<strong>di</strong>ce su Fq che abbia <strong>di</strong>stanza<br />
minima d ≥ δ, dove δ è un intero arbitrario. L’idea base è quella <strong>di</strong> lavorare in<br />
un’estensione algebrica <strong>di</strong> Fq.<br />
Definizione 5.6.1. Un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n su Fq è detto co<strong>di</strong>ce<br />
BCH con <strong>di</strong>stanza garantita δ se è generato da un polinomio g(x) che è il<br />
minimo comune multiplo <strong>dei</strong> polinomi minimi (su Fq) degli elementi<br />
α l , α l+1 , . . . , α l+δ−2<br />
con α ra<strong>di</strong>ce primitiva n-esima dell’unità e l ≥ 0 intero fissato.<br />
Poichè l’elemento α è una ra<strong>di</strong>ce n-esima dell’unità, anche ogni sua potenza α j<br />
è ra<strong>di</strong>ce n-esima dell’unità. Pertanto<br />
x − α j<br />
<strong>di</strong>vide sempre x n − 1; perciò il polinomio g(x) della definizione 5.6.1 deve, anche<br />
esso, <strong>di</strong>videre x n − 1 e il co<strong>di</strong>ce generato ha lunghezza n e <strong>di</strong>mensione n−gr(g(x)).<br />
Dalla definizione segue che il polinomio g(x) che genera il co<strong>di</strong>ce BCH è il<br />
polinomio <strong>di</strong> grado minimo su GF (q) avente α l , α l+1 , . . . , α l+δ−2 come ra<strong>di</strong>ci.<br />
Definizione 5.6.2. Sia C un co<strong>di</strong>ce BCH <strong>di</strong> lunghezza n su Fq, con <strong>di</strong>stanza<br />
garantita δ. C è detto BCH in senso stretto se nella definizione 5.6.1 si ha l = 1.
6. CODICI BCH 80<br />
In generale, con il simbolo BCHq(n, δ) in<strong>di</strong>cheremo un co<strong>di</strong>ce BCH in senso<br />
stretto q-ario <strong>di</strong> lunghezza n e <strong>di</strong>stanza garantita δ.<br />
Il numero δ non è necessariamente la <strong>di</strong>stanza minima del co<strong>di</strong>ce BCH, ma<br />
ne dà una limitazione inferiore, come afferma il seguente teorema <strong>di</strong> cui, per la<br />
<strong>di</strong>mostrazione, si rinvia a [3] pag. 159.<br />
Teorema 5.6.3 (Limitazione BCH). Sia C un co<strong>di</strong>ce BCH sopra Fq <strong>di</strong> <strong>di</strong>stanza<br />
garantita δ. Allora C ha <strong>di</strong>stanza minima d ≥ δ.<br />
Ricor<strong>di</strong>amo che per determinare una ra<strong>di</strong>ce primitiva n-esima dell’unità, in<br />
generale, si deve trovare l’estensione algebrica Fq m ⊇ Fq definita dal più piccolo<br />
intero m tale che n <strong>di</strong>vida q m − 1. Determinato m, sia q m − 1 = kn e sia ξ un<br />
elemento primitivo <strong>di</strong> Fq m. Poichè ξqm −1 = ξ nk = 1, si ha che α = ξ k è una ra<strong>di</strong>ce<br />
primitiva n-esima dell’unità.<br />
Esempio 5.6.4. Costruiamo un co<strong>di</strong>ce C = BCH2(9, 2). Per poterlo costruire<br />
ci serve anzittutto una ra<strong>di</strong>ce primitiva nona dell’unità su F2. Il campo <strong>di</strong> spezzamento<br />
<strong>di</strong> x 9 − 1 è F 2 6 perchè il più piccolo intero tale che 9|2 m − 1 è m = 6.<br />
In<strong>di</strong>chiamo con ξ un generatore del gruppo moltiplicativo <strong>di</strong> F 2 6 e sia<br />
x 6 + x 4 + x 3 + x + 1<br />
il polinomio minimo <strong>di</strong> ξ in GF (2) (è irriducibile e ha grado 6 perchè determina<br />
l’estensione F 6 2 <strong>di</strong> F2). Il periodo <strong>di</strong> ξ è 2 6 − 1 = 63. Ne segue che α = ξ 63/9 = ξ 7 è<br />
una ra<strong>di</strong>ce primitiva nona dell’unità. Poichè l + δ − 2 = l + 2 − 2 = l, per costruire<br />
il co<strong>di</strong>ce BCH richiesto occorre una ra<strong>di</strong>ce ra<strong>di</strong>ce nona dell’unità; consideriamo<br />
pertanto la ra<strong>di</strong>ce α. Essa ha polinomio minimo<br />
x 6 + x 3 + 1.<br />
Il co<strong>di</strong>ce BCH cercato, essendo generato dal minimo comune multiplo <strong>dei</strong> polinomi<br />
minimi, in questo caso, è generato da g(x) = (x6 + x3 + 1) e poichè gr(g(x)) =<br />
n − k = 6, la <strong>di</strong>mensione del co<strong>di</strong>ce cercato è 9 − 6 = 3. Da g(x) = x6 + x3 + 1<br />
possiamo scrivere esplicitamente una matrice generatrice per C :<br />
⎛<br />
G = ⎝<br />
1 0 0 1 0 0 1 0 0<br />
0 1 0 0 1 0 0 1 0<br />
0 0 1 0 0 1 0 0 1<br />
Le otto parole <strong>di</strong> C sono date da<br />
• il vettore nullo (peso 0);<br />
• le tre righe della matrice G (peso 3);<br />
• le tre combinazioni delle righe <strong>di</strong> G a due a due (peso 6);<br />
• il vettore ottenuto sommando tutte e tre le righe <strong>di</strong> G (peso 9).<br />
⎞<br />
⎠
6. CODICI BCH 81<br />
Ne segue che il co<strong>di</strong>ce C ha <strong>di</strong>stanza minima 3, strettamente maggiore della <strong>di</strong>stanza<br />
garantita.<br />
Per costruire un co<strong>di</strong>ce BCH si deve lavorare contemporaneamente su due<br />
campi, potenzialmente <strong>di</strong>stinti: il campo Fq cui appartengono le componenti delle<br />
parole del co<strong>di</strong>ce e su cui è definito lo spazio vettoriale che viene considerato, C ⊆<br />
F n q , e il campo Fqm in cui giacciono le ra<strong>di</strong>ci dell’unità utilizzate nella costruzione<br />
e detto campo <strong>di</strong> calcolo del co<strong>di</strong>ce.<br />
Esempio 5.6.5. Mostriamo come si può ottenere il co<strong>di</strong>ce BCH2(15, 7).<br />
La lunghezza del co<strong>di</strong>ce è 15, pertanto serve una ra<strong>di</strong>ce 15-esima dell’unità:<br />
in<strong>di</strong>chiamo con α questa ra<strong>di</strong>ce. Poichè 15 = 2 4 − 1, possiamo scegliere come α<br />
un elemento primitivo <strong>di</strong> F 2 4. Poichè 16 = 2 4 , possiamo scegliere una ra<strong>di</strong>ce del<br />
seguente polinomio <strong>di</strong> grado 4, irriducibile in GF (2):<br />
x 4 + x + 1<br />
Per avere δ = 7, occorre considerare un polinomio g(x) generatore del co<strong>di</strong>ce BCH<br />
che abbia come ra<strong>di</strong>ci sei potenze consecutive <strong>di</strong> α.<br />
(1) In GF (2 4 ) gli elementi α, α 2 , α 3 , α 4 , α 5 , α 6 sono ra<strong>di</strong>ci 15-esime dell’unità.<br />
Le ra<strong>di</strong>ci α, α 2 , α 4 hanno come polinomio minimo irriducibile su GF (2) il<br />
polinomio p(x) = 1 + x + x 4 ; α 5 ha come polinomio minimo irriducibile<br />
su GF (2) il polinomio q(x) = 1 + x + x 2 ; α 6 ha come polinomio minimo<br />
irriducibile su GF (2) il polinomio r(x) = 1 + x + x 2 + x 3 + x 4 . Il co<strong>di</strong>ce<br />
BCH cercato è allora generato dal minimo comune multiplo <strong>dei</strong> polinomi<br />
p(x), q(x), r(x) ossia è generato dal polinomio g(x) = 1 + x + x 2 + x 4 +<br />
x 5 + x 8 + x 1 0. Poichè g(x) è una parola del co<strong>di</strong>ce <strong>di</strong> peso 7, si ha che in<br />
questo caso d = δ. Inoltre, poichè l = 1, il co<strong>di</strong>ce è BCH in senso stretto.<br />
(2) In GF (2 4 ) gli elementi α 9 , α 10 , α 11 , α 12 , α 13 , α 14 sono sei potenze consecutive<br />
<strong>di</strong> α e sono ra<strong>di</strong>ci 15-esime dell’unità. Le ra<strong>di</strong>ci α 9 , α 12 hanno come polinomio<br />
minimo irriducibile su GF (2) il polinomio p(x) = 1+x+x 2 +x 3 +x 4 ;<br />
α 10 ha come polinomio minimo irriducibile su GF (2) il polinomio q(x) =<br />
1 + x + x 2 ; α 11 , α 13 , α 14 hanno come polinomio minimo irriducibile su<br />
GF (2) il polinomio r(x) = 1 + x 3 + x 4 . Il co<strong>di</strong>ce BCH cercato è allora<br />
generato dal minimo comune multiplo <strong>dei</strong> polinomi p(x), q(x), r(x) ossia è<br />
generato dal polinomio g(x) = 1+x 2 +x 5 +x 6 +x 8 +x 9 +x 1 0. Poichè g(x)<br />
è una parola del co<strong>di</strong>ce <strong>di</strong> peso 7, come nel caso precedente si ha d = δ<br />
ma il co<strong>di</strong>ce non è BCH in senso stretto perchè l = 9.<br />
Per costruire un co<strong>di</strong>ce BCH, è <strong>di</strong> grande utilità considerare le classi ciclotomiche<br />
del campo <strong>di</strong> calcolo del co<strong>di</strong>ce; infatti con queste si determinano imme<strong>di</strong>atamente<br />
i polinomi minimi con cui ottenere il polinomio generatore del<br />
co<strong>di</strong>ce.
6. CODICI BCH 82<br />
Esempio 5.6.6. Si vuole costruire un BCH co<strong>di</strong>ce binario <strong>di</strong> lunghezza 15. Sia<br />
α un elemento primitivo <strong>di</strong> GF (2 4 ), ne segue che α è una ra<strong>di</strong>ce primitiva 15-esima<br />
dell’unità. Le classi ciclotomiche modulo 15 su GF (2) sono:<br />
C0 = {0}, C1 = {1, 2, 4, 8}, C3 = {3, 6, 9, 12}, C5 = {5, 10}, C7 = {7, 11, 13, 14}.<br />
Se mi(x) è il polinomio minimo <strong>di</strong> α i , ossia mi(x) = m α i(x), mi(α i ) = 0, otteniamo:<br />
m0(x) = (x − 1)<br />
m1(x) = (x − α)(x − α 2 )(x − α 4 )(x − α 8 )<br />
m3(x) = (x − α 3 )(x − α 6 )(x − α 9 )(x − α 12 )<br />
m5(x) = (x − α 5 )(x − α 10 )<br />
m7(x) = (x − α 7 )(x − α 11 )(x − α 13 )(x − α 14 ) .<br />
Ovviamente ogni mi(x) è <strong>di</strong>visore <strong>di</strong> x 15 − 1 e perciò se g(x) è il prodotto <strong>di</strong> un<br />
certo numero <strong>di</strong> polinomi mi(x), allora g(x) è un <strong>di</strong>visore <strong>di</strong> x 15 −1 e quin<strong>di</strong> genera<br />
un co<strong>di</strong>ce ciclico. Se g(x) ha δ − 1 potenze consecutive <strong>di</strong> α come ra<strong>di</strong>ci, allora il<br />
co<strong>di</strong>ce C da esso generato ha <strong>di</strong>stanza garantita δ.<br />
Se costruiamo l’ampliamento GF (2 4 ) <strong>di</strong> GF (2) tramite il polinomio 1 + x + x 4 ,<br />
ossia 1 + α + α 4 = 0, otteniamo<br />
m1(x) = (x 2 + α 2 x + αx + α 3 )(x 2 + α 8 x + α 4 x + α 12 ) =<br />
= x 4 + (α 8 + α 4 + α 2 + α)x 3 + (α 12 + α 10 + α 9 + α 6 + α 5 + α 3 )x 2 +<br />
+(α 14 + α 13 + α 11 + α 7 )x + 1<br />
= x 4 + x + 1 ;<br />
analogamente<br />
m3(x) = x 4 + x 3 + x 2 + x + 1<br />
m5(x) = x 2 + x + 1<br />
m7(x) = x 4 + x 3 + 1 .<br />
• Se fissiamo g(x) = m3(x)m5(x)m7(x), le potenze α 9 , α 10 , α 11 , α 12 , α 13 , α 14<br />
sono ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive e perciò g(x) genera un co<strong>di</strong>ce<br />
BCH con <strong>di</strong>stanza garantita δ = 7 perchè 9 + δ − 2 = 14. In questo caso<br />
si tratta <strong>di</strong> un (15, 5)-co<strong>di</strong>ce perchè g(x) ha grado 10.<br />
• Se fissiamo g(x) = m1(x)m3(x)m5(x), le potenze α, α 2 , α 3 , α 4 , α 5 , α 6 sono<br />
ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive e perciò otteniamo ancora un (15, 5)co<strong>di</strong>ce<br />
con <strong>di</strong>stanza garantita δ = 7 perchè 1 + δ − 2 = 6.<br />
• Se fissiamo g(x) = m1(x)m3(x) otteniamo un (15, 7)-co<strong>di</strong>ce ciclico, avendo<br />
g(x) grado 8. Inoltre, essendo α, α 2 , α 3 , α 4 ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive,<br />
C è un BCH co<strong>di</strong>ce con <strong>di</strong>stanza garantita δ = 5.<br />
Si ha g(x) = m1(x)m3(x) = x 8 + x 7 + x 6 + x 4 + 1 ed essendo 5 il peso <strong>di</strong><br />
g(x), si ha d(C) = δ = 5.<br />
• Se fissiamo g(x) = m0(x)m1(x)m3(x), otteniamo ancora un (15, 6)-co<strong>di</strong>ce<br />
con <strong>di</strong>stanza garantita δ = 6.
6. CODICI BCH 83<br />
In generale, se g(x) ha come ra<strong>di</strong>ce α e genera un BCH co<strong>di</strong>ce con <strong>di</strong>stanza<br />
garantita δ, il co<strong>di</strong>ce generato da m0(x)g(x) ha <strong>di</strong>stanza garantita δ + 1.<br />
Esempio 5.6.7. Si vuole costruire un BCH co<strong>di</strong>ce ternario <strong>di</strong> lunghezza 8. Sia<br />
α un elemento primitivo <strong>di</strong> GF (3 2 ), ne segue che α è una ra<strong>di</strong>ce primitiva ottava<br />
dell’unità. Le classi ciclotomiche modulo 8 su GF (3) sono:<br />
C0 = {0}, C1 = {1, 3}, C2 = {2, 6}, C4 = {4}, C5 = {5, 7}.<br />
Se denotiamo con mi(x) il polinomio minimo <strong>di</strong> α i , si ha:<br />
m0(x) = (x − 1)<br />
m1(x) = (x − α)(x − α 3 )<br />
m2(x) = (x − α 2 )(x − α 6 )<br />
m4(x) = (x − α 4 )<br />
m5(x) = (x − α 5 )(x − α 7 ) .<br />
Se fissiamo g(x) = m2(x)m5(x), otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza garantita<br />
δ = 4, essendo α 5 , α 6 , α 7 ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive. Inoltre poichè g(x)<br />
ha peso esattamente 4, si ha d(C) = δ = 4. Il co<strong>di</strong>ce C è un (8, 4)-co<strong>di</strong>ce perchè il<br />
grado <strong>di</strong> g(x) è 4.<br />
Esempio 5.6.8. Si vuole costruire un BCH co<strong>di</strong>ce ternario <strong>di</strong> lunghezza 13. Il<br />
minimo or<strong>di</strong>ne m <strong>di</strong> un ampliamento algebrico <strong>di</strong> GF (3) tale che 3 m − 1 = 13k è<br />
3, infatti 3 3 − 1 = 2 · 13.<br />
Sia α un elemento primitivo <strong>di</strong> GF (3 3 ), ad esempio α sia ra<strong>di</strong>ce del polinomio<br />
x 3 + 2x 2 + 1; allora β = α k = α 2 è ra<strong>di</strong>ce 13-esima primitiva dell’unità.<br />
Le classi ciclotomiche modulo 13 su GF (3) sono:<br />
C0 = {0}, C1 = {1, 3, 9}, C2 = {2, 5, 6}, C4 = {4, 10, 12}, C7 = {7, 8, 11}.<br />
Se denotiamo con mi(x) il polinomio minimo <strong>di</strong> β i , si ha:<br />
m0(x) = (x − 1)<br />
m1(x) = (x − β)(x − β 3 )(x − β 9 ) = x 3 + 2x 2 + 2x + 2<br />
m2(x) = (x − β 2 )(x − β 5 )(x − β 6 ) = x 3 + 2x + 2<br />
m4(x) = (x − β 4 )(x − β 10 )(x − β 12 ) = x 3 + 2x 2 + x + 2<br />
m7(x) = (x − β 7 )(x − β 8 )(x − β 11 ) = x 3 + x 2 + 2 .<br />
• Se fissiamo g(x) = m0(x)m1(x)m2(x) = x 7 + x 6 + 2x 5 + x 4 + 2x + 2,<br />
otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza garantita δ = 5.<br />
• Se fissiamo g(x) = m1(x)m2(x), otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza<br />
garantita δ = 4.
6. CODICI BCH 84<br />
Una limitazione superiore per la <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce BCH è data dal<br />
seguente teorema che riportiamo senza <strong>di</strong>mostrazione.<br />
Teorema 5.6.9. Sia C un co<strong>di</strong>ce BCH primitivo binario <strong>di</strong> <strong>di</strong>stanza garantita<br />
δ. Allora la <strong>di</strong>stanza minima d <strong>di</strong> C sod<strong>di</strong>sfa<br />
δ ≤ d ≤ 2δ − 1.
CAPITOLO 6<br />
Co<strong>di</strong>ci <strong>di</strong> Hamming<br />
I co<strong>di</strong>ci <strong>di</strong> Hamming sono co<strong>di</strong>ci lineari 1-correttori perfetti e per questo particolarmente<br />
adatti a situazioni in cui è necessaria la correzione <strong>di</strong> un singolo errore.<br />
Costituiscono una famiglia <strong>di</strong> co<strong>di</strong>ci molto importante perchè per essi è facile sia<br />
la co<strong>di</strong>fica che la deco<strong>di</strong>fica.<br />
Scoperti dallo stesso Hamming nel 1950, l’approccio da noi seguito non è quello<br />
originale ma è geometrico basato sull’insieme <strong>dei</strong> sottospazi 1-<strong>di</strong>mensionali <strong>di</strong> uno<br />
spazio vettoriale.<br />
1. Definizioni e Proprietà<br />
Parliamo <strong>dei</strong> co<strong>di</strong>ci <strong>di</strong> Hamming descrivendoli tramite una loro matrice <strong>di</strong><br />
controllo.<br />
Occorre costruire una matrice H <strong>di</strong> un (n, k)-co<strong>di</strong>ce 1-correttore. Per in<strong>di</strong>viduare<br />
sempre un errore, nessuna colonna <strong>di</strong> H deve essere nulla (altrimenti un<br />
errore nella posizione corrispondente a tale colonna non darebbe contributo alla<br />
sindrome e quin<strong>di</strong> l’errore non sarebbe rivelato). Inoltre le colonne devono essere<br />
a due a due <strong>di</strong>stinte, altrimenti, se ci fosse un errore in una delle due posizioni<br />
corrispondenti alle due colonne uguali, non si potrebbe decidere in quale <strong>dei</strong> due<br />
posti è l’errore. D’altra parte, se le colonne sono tutte non nulle e <strong>di</strong>verse fra loro,<br />
il singolo errore nella i-esima componente viene scoperto perchè la sindrome, in<br />
questo caso, uguaglia proprio la i-esima colonna <strong>di</strong> H (cfr. 4.6.5).<br />
La matrice <strong>di</strong> controllo H è una matrice <strong>di</strong> tipo (n−k)×n avente rango (n−k).<br />
Sia n − k = r e determiniamo il numero massimo <strong>di</strong> r-ple a due a due linearmente<br />
in<strong>di</strong>pendenti che si possono costruire con q elementi. Il numero <strong>di</strong> r-ple <strong>di</strong>stinte<br />
non nulle che si ottengono con q elementi è q r − 1 ; ma per ogni r-pla fissata<br />
ci sono (q − 2) altre r-ple linearmente <strong>di</strong>pendenti da essa e pertanto l’insieme<br />
<strong>di</strong> tutte le r-ple si sud<strong>di</strong>vide in sottoinsiemi ad ognuno <strong>dei</strong> quali appartengono<br />
(q − 1) r-ple a due a due linearmente <strong>di</strong>pendenti. Quin<strong>di</strong> delle (q r − 1) r-ple non<br />
nulle, esattamente (q r − 1)/(q − 1) sono a due a due linearmente in<strong>di</strong>pendenti.<br />
Ne segue che il massimo numero <strong>di</strong> r-ple a due a due linearmente in<strong>di</strong>pendenti è<br />
n = (q r − 1)/(q − 1); inoltre da r = n − k segue k = n − r = [(q r − 1)/(q − 1)] − r.<br />
85
1. DEFINIZIONI E PROPRIETÀ 86<br />
Definizione 6.1.1. Sia n = qr−1 , k = n − r. Un co<strong>di</strong>ce C è definito co<strong>di</strong>ce <strong>di</strong><br />
q−1<br />
Hamming <strong>di</strong> or<strong>di</strong>ne r su Fq se è un (n, n − r)- co<strong>di</strong>ce la cui matrice <strong>di</strong> controllo<br />
H è una matrice r × n tale che ogni colonna è linearmente in<strong>di</strong>pendente da ogni<br />
altra colonna.<br />
La definizione ora data ha senso in quanto il numero <strong>di</strong> sottospazi 1-<strong>di</strong>mensionali<br />
<strong>di</strong> F r q è esattamente (q r − 1)/(q − 1). A priori un co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong>pende dalla<br />
scelta <strong>di</strong> opportuni rappresentanti per i sottospazi <strong>di</strong> F r q , ma, come si può verificare,<br />
i co<strong>di</strong>ci ottenuti selezionando rappresentanti <strong>di</strong>versi <strong>dei</strong> medesimi spazi risultano<br />
fra loro equivalenti e pertanto un co<strong>di</strong>ce <strong>di</strong> Hamming è, a meno <strong>di</strong> equivalenza,<br />
univocamente in<strong>di</strong>viduato dai suoi parametri.<br />
Per k ≥ 2 il rango della matrice <strong>di</strong> controllo H è sempre 2 perchè due qualunque<br />
colonne c1, c2 sono linearmente in<strong>di</strong>pendenti, ma il sottospazio generato da c1 + c2<br />
è, a sua volta, rappresentato in H. Per il corollario 4.5.12 ne segue che tutti<br />
i co<strong>di</strong>ci <strong>di</strong> Hamming con r ≥ 2 hanno <strong>di</strong>stanza minima d = 3 e sono<br />
pertanto in grado <strong>di</strong> correggere automaticamente 1 errore in ogni blocco ricevuto<br />
o, alternativamente, <strong>di</strong> identificarne 2.<br />
Un metodo semplice per scrivere una matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce q-ario <strong>di</strong><br />
Hamming è quello <strong>di</strong> scegliere come colonne tra le r-ple non nulle possibili, quelle<br />
che hanno il primo elemento non nullo uguale ad 1. Ovviamente ciò equivale a<br />
scegliere una r-pla in ogni sottoinsieme <strong>di</strong> (q − 1) r-ple a due a due linearmente<br />
in<strong>di</strong>pendenti.<br />
Per la definizione data, le colonne <strong>di</strong> una matrice <strong>di</strong> controllo H <strong>di</strong> un co<strong>di</strong>ce <strong>di</strong><br />
Hamming sono tutte le r-ple <strong>di</strong> elementi <strong>di</strong> Fq a due a due linearmente in<strong>di</strong>pendenti.<br />
Segue che, data una matrice <strong>di</strong> controllo H <strong>di</strong> un ( qr−1 q−1 , qr−1 − r)-co<strong>di</strong>ce, tutte le<br />
q−1<br />
altre si possono ottenere da H tramite trasformazioni elementari su righe e colonne.<br />
Allora, a meno <strong>di</strong> equivalenze, i co<strong>di</strong>ci <strong>di</strong> Hamming sono co<strong>di</strong>ci lineari in<strong>di</strong>viduati<br />
univocamente dai loro parametri.<br />
Esempio 6.1.2. Sia q = 3, r = 2. Il co<strong>di</strong>ce <strong>di</strong> Hamming che si ottiene è un<br />
( 32−1 3−1 , 32−1 − 2) = (4, 2)-co<strong>di</strong>ce ternario. Per scrivere una matrice <strong>di</strong> controllo,<br />
3−1<br />
<strong>di</strong>amo la rappresentazione in base 3 <strong>dei</strong> numeri compresi fra 1 e 8.<br />
1 = 1 · 3 0 = 0 1 2 = 2 · 3 0 = 0 2<br />
3 = 1 · 3 1 + 0 · 3 0 = 1 0 4 = 1 · 3 1 + 1 · 3 0 = 1 1<br />
5 = 1 · 3 1 + 2 · 3 0 = 1 2 6 = 2 · 3 1 + 0 · 3 0 = 2 0<br />
7 = 2 · 3 1 + 1 · 3 0 = 2 1 8 = 2 · 3 1 + 2 · 3 0 = 2 2<br />
Si osservi che la coppia (0 2) è proporzionale alla coppia (0 1); così come (2 0) è<br />
proporzionale a (1 0); (1 2) è proporzionale a (2 1); (2 2) è proporzionale a (1 1),
1. DEFINIZIONI E PROPRIETÀ 87<br />
ovviamente nell’aritmetica modulo 3. Una matrice <strong>di</strong> controllo del (4, 2)-co<strong>di</strong>ce<br />
ternario <strong>di</strong> Hamming è allora<br />
<br />
0<br />
H =<br />
1<br />
1<br />
0<br />
1<br />
1<br />
<br />
1<br />
2<br />
La deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci q-ari <strong>di</strong> Hamming viene fatta usando lo schema <strong>di</strong><br />
deco<strong>di</strong>fica descritto nel paragrafo 4.6 per i co<strong>di</strong>ci lineari 1-correttori.<br />
Esempio 6.1.3. Se q = 5 ed r = 2 si ha un (6, 4)-co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong> or<strong>di</strong>ne<br />
5 avente come matrice <strong>di</strong> controllo<br />
<br />
0<br />
H =<br />
1<br />
1<br />
0<br />
1<br />
1<br />
1<br />
2<br />
1<br />
3<br />
<br />
1<br />
4<br />
Supponiamo <strong>di</strong> ricevere y = (2 0 3 0 3 1). Si ha yH t = (2 3) = 2(1 4). Si deduce<br />
che l’errore è nella sesta componente e la ′′ grandezza ′′ <strong>di</strong> tale errore è 2 per cui la<br />
parola trasmessa è<br />
x = y − (0 0 0 0 0 2) = (2 0 3 0 3 4).<br />
Teorema 6.1.4. I co<strong>di</strong>ci <strong>di</strong> Hamming sono 1-correttori perfetti.<br />
Dimostrazione. Si veda [1] pag. 161 oppure [3] pag. 83. <br />
I parametri <strong>dei</strong> co<strong>di</strong>ci perfetti sopra alfabeti con un numero primo <strong>di</strong> simboli<br />
sono stati completamente determinati, si veda [3] pag. 242.<br />
Esempio 6.1.5. Il co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong> or<strong>di</strong>ne r = 3 sopra F2 è definito dalla<br />
seguente matrice <strong>di</strong> controllo<br />
⎛<br />
1<br />
H = ⎝ 0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
1<br />
0<br />
⎞<br />
1<br />
1 ⎠<br />
0 0 1 0 1 1 1<br />
E’ un (7, 4)-co<strong>di</strong>ce con <strong>di</strong>stanza minima d = 3. Calcoliamo l’enumeratore <strong>dei</strong> pesi:<br />
il co<strong>di</strong>ce ha <strong>di</strong>mensione 4 e perciò contiene 2 4 = 16 parole. Poichè il co<strong>di</strong>ce è<br />
lineare A0 = 1. Poichè la <strong>di</strong>stanza minima è almeno 3, si ha A1 = A2 = 0. Il<br />
numero <strong>di</strong> entrate non nulle in ogni riga della matrice <strong>di</strong> controllo è pari, dunque<br />
(1 1 1 1 1 1 1) è una parola del co<strong>di</strong>ce per cui A7 = 1. Poichè il co<strong>di</strong>ce è lineare <strong>di</strong><br />
<strong>di</strong>mensione 4, se x è una parola del co<strong>di</strong>ce <strong>di</strong> peso p allora (1 1 1 1 1 1 1) − x è una<br />
parola del co<strong>di</strong>ce <strong>di</strong> peso 7 − p; ne segue A5 = A1 = 0, A6 = A2 = 0. Rimangono<br />
A3 = A7 = 1. Il polinomio enumeratore del co<strong>di</strong>ce risulta dunque<br />
1 + 7x 3 + 7x 4 + x 7 .
2. CODICI DI HAMMING BINARI 88<br />
Altri co<strong>di</strong>ci perfetti, oltre a quelli <strong>di</strong> Hamming, sono stati scoperti nel 1949 da<br />
Golay. Uno è un (23, 12)-co<strong>di</strong>ce binario 3-correttore con <strong>di</strong>stanza d = 7; l’altro è<br />
un (11, 6)-co<strong>di</strong>ce ternario 2-correttore con <strong>di</strong>stanza d = 5.<br />
I co<strong>di</strong>ci <strong>di</strong> Golay e i co<strong>di</strong>ci <strong>di</strong> Golay estesi sono co<strong>di</strong>ci spora<strong>di</strong>ci associati ai<br />
<strong>di</strong>segni <strong>di</strong> Mathieu ; insieme ai co<strong>di</strong>ci <strong>di</strong> Hamming sono gli unici co<strong>di</strong>ci lineari<br />
perfetti non banali. Sono particolarmente interessanti non solo perchè sono co<strong>di</strong>ci<br />
perfetti, ma anche perchè hanno una struttura algebrica molto ricca e perciò si<br />
prestano ad essere deco<strong>di</strong>ficati con facilità tanto che le prime sonde interplanetarie<br />
utilizzavano co<strong>di</strong>ci <strong>di</strong> Golay per la trasmissione <strong>dei</strong> dati.<br />
Si può <strong>di</strong>mostrare che un co<strong>di</strong>ce q-ario <strong>di</strong> Hamming <strong>di</strong> lunghezza (q r −1)/(q−1)<br />
è equivalente ad un co<strong>di</strong>ce ciclico se r e (q − 1) sono primi tra loro.<br />
Nel teorema 6.2.3 mostreremo invece che ogni co<strong>di</strong>ce binario <strong>di</strong> Hamming è<br />
equivalente ad un co<strong>di</strong>ce ciclico.<br />
2. Co<strong>di</strong>ci <strong>di</strong> Hamming binari<br />
Un caso particolarmente interessante <strong>di</strong> co<strong>di</strong>ci <strong>di</strong> Hamming è quello binario.<br />
In questo caso la matrice <strong>di</strong> controllo H contiene tutti e soli i vettori non nulli <strong>di</strong><br />
F r 2 . In altre parole<br />
si definisce co<strong>di</strong>ce binario <strong>di</strong> Hamming un (2 r −1, 2 r −1−r)-co<strong>di</strong>ce avente come<br />
matrice <strong>di</strong> controllo una matrice H le cui colonne sono tutte le r-ple non nulle <strong>di</strong><br />
elementi <strong>di</strong> GF (2).<br />
Ad esempio per r = 2 si ottiene un (3, 1)-co<strong>di</strong>ce; per r = 3 si ottiene un<br />
(7, 4)-co<strong>di</strong>ce; per r = 4 si ottiene un (15, 11)-co<strong>di</strong>ce.<br />
Esempio 6.2.1. Per avere la matrice <strong>di</strong> controllo <strong>di</strong> un (7, 4)-co<strong>di</strong>ce <strong>di</strong> Hamming<br />
è sufficiente scrivere una matrice le cui colonne sono la rappresentazione in base<br />
due <strong>dei</strong> numeri 1, 2, 3, 4, 5, 6, 7. Si ha<br />
⎛<br />
H = ⎝<br />
0 0 0 1 1 1 1<br />
0 1 1 0 0 1 1<br />
1 0 1 0 1 0 1<br />
Verifichiamo che un co<strong>di</strong>ce binario <strong>di</strong> Hamming è 1-correttore provando il<br />
seguente teorema.<br />
Teorema 6.2.2. La <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce C binario <strong>di</strong> Hamming è<br />
esattamente tre.<br />
⎞<br />
⎠
2. CODICI DI HAMMING BINARI 89<br />
Dimostrazione. Dalla definizione <strong>di</strong> co<strong>di</strong>ce binario <strong>di</strong> Hamming sopra ricordata<br />
segue che d(C) ≥ 3. Inoltre d(C) = 3, perchè in C esistono parole <strong>di</strong> peso 3,<br />
come ad esempio la parola avente soltanto le prime tre componenti non nulle, se<br />
le colonne <strong>di</strong> H sono or<strong>di</strong>nate in senso crescente cioè la prima, la seconda, . . . , la<br />
(2 r − 1)-esima colonna sono rispettivamente la rappresentazione in base due <strong>dei</strong><br />
numeri 1, 2, . . . , 2 r − 1. <br />
Prima <strong>di</strong> <strong>di</strong>mostrare il prossimo teorema, ricor<strong>di</strong>amo alcuni noti risultati <strong>di</strong><br />
algebra:<br />
• Sia K un campo <strong>di</strong> caratteristica p e sia α un elemento non nullo <strong>di</strong> K.<br />
Un polinomio monico m(x) a coefficienti in GF (p) <strong>di</strong> grado minimo tale<br />
che m(α) = 0 è detto polinomio minimo <strong>di</strong> α rispetto a GF (p) e si denota<br />
con mα(x).<br />
• Il polinomio minimo <strong>di</strong> un elemento non nullo α <strong>di</strong> GF (q) = GF (ph ) è<br />
mα(x) = <br />
(x − β).<br />
β∈C(α)<br />
• Se f(x) ∈ GF (p)[x] è tale che f(α) = 0, α ∈ GF (p h ), allora mα(x) <strong>di</strong>vide<br />
f(x).<br />
Teorema 6.2.3. I (2 r − 1, 2 r − 1 − r)-co<strong>di</strong>ci C binari <strong>di</strong> Hamming sono co<strong>di</strong>ci<br />
ciclici generati dal polinomio minimo mα(x) <strong>di</strong> un elemento primitivo a <strong>di</strong> GF (2 r ).<br />
Dimostrazione. Sia α un elemento primitivo del campo GF (2 r ). Dalla definizione<br />
<strong>di</strong> co<strong>di</strong>ce binario <strong>di</strong> Hamming segue che una sua matrice <strong>di</strong> controllo <strong>di</strong><br />
lunghezza 2 r − 1 si può rappresentare come<br />
H = 1 α α 2 · · · α 2r −2 <br />
Per 4.5.7 un vettore c = (c0, c1, . . . , cn−1) è in C se e solo se cH t = 0 e, passando ai<br />
polinomi, c(x) = c0+c1x+. . .+cn−1x n−1 è in C se e solo se c0+c1α+. . .+cn−1α n−1 =<br />
0, cioè se e solo se c(α) = 0. Dalle proprietà algebriche prima ricordate, segue<br />
che mα(x) <strong>di</strong>vide ogni polinomio-parola c(x) ∈ C, quin<strong>di</strong> mα(x) è il polinomio<br />
generatore <strong>di</strong> C. <br />
Nota 6.2.4. Il co<strong>di</strong>ce duale <strong>di</strong> un co<strong>di</strong>ce <strong>di</strong> Hamming binario è un co<strong>di</strong>ce<br />
equi<strong>di</strong>stante ossia è un co<strong>di</strong>ce in cui tutte le parole <strong>di</strong>verse da 0 hanno il medesimo<br />
peso che è 3 (ve<strong>di</strong> [3] pag. 84 − 85).
CAPITOLO 7<br />
Co<strong>di</strong>ci <strong>di</strong> Goppa<br />
I co<strong>di</strong>ci <strong>di</strong> Goppa sono co<strong>di</strong>ci lineari <strong>di</strong> cui ci limitiamo a dare la definizione.<br />
Per una loro trattazione si rinvia a [2] pag. 427.<br />
Il motivo per cui, prima <strong>di</strong> concludere la parte de<strong>di</strong>cata ai co<strong>di</strong>ci, si vogliono<br />
citare i co<strong>di</strong>ci Goppa, è che nella teoria <strong>dei</strong> co<strong>di</strong>ci essi aprono la strada all’uso <strong>di</strong><br />
idee e tecniche <strong>di</strong> geometria algebrica.<br />
Definizione 7.0.5. Sia Fq un campo finito, sia m un intero positivo e f(x)<br />
un polinomio monico <strong>di</strong> grado t > 0 su Fqm. Sia inoltre L = {γ1, γ2, . . . , γn} un<br />
insieme <strong>di</strong> n elementi <strong>di</strong>stinti <strong>di</strong> Fqm tali che f(γh) = 0, per h = 1, . . . , n. Il co<strong>di</strong>ce<br />
<strong>di</strong> Goppa C(L, f(x))q,m è il sottoinsieme delle n-ple (c1, c2, . . . , cn) <strong>di</strong> elementi <strong>di</strong><br />
Fq tali che<br />
n ci<br />
≡ (mod f(x)).<br />
x − γi<br />
i=1<br />
90
CAPITOLO 8<br />
Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni<br />
Nella teoria <strong>dei</strong> co<strong>di</strong>ci, l’uso <strong>di</strong> insiemi <strong>di</strong> permutazioni è stato stu<strong>di</strong>ato fin<br />
dagli anni ′ 70. Solo negli ultimi anni ha preso vigore anche lo stu<strong>di</strong>o <strong>di</strong> co<strong>di</strong>ci<br />
correttori che sono gruppi <strong>di</strong> permutazioni, si veda ad esempio il lavoro <strong>di</strong><br />
R.F.Bailey Error-correcting codes from permutation groups, Discrete Mathematics<br />
309, 4253 − 4265, 2009.<br />
1. Gruppi come co<strong>di</strong>ci e <strong>di</strong>stanza <strong>di</strong> Hamming<br />
Considerato un co<strong>di</strong>ce le cui parole hanno lunghezza n, <strong>di</strong>re che il co<strong>di</strong>ce è<br />
un gruppo significa considerare un sottogruppo del gruppo simmetrico Sn e le<br />
parole del co<strong>di</strong>ce sono permutazioni dell’alfabeto A = {1, 2, . . . , n}. Ogni parola<br />
del co<strong>di</strong>ce può allora essere rappresentata con una stringa i cui elementi sono,<br />
rispettivamente, le immagini degli elementi 1, 2, . . . , n considerati nel loro or<strong>di</strong>ne<br />
naturale. Ad esempio, in S9, la stringa<br />
123456789<br />
rappresenta la permutazione identità, mentre la stringa<br />
in<strong>di</strong>ca la seguente permutazione <strong>di</strong> S9<br />
231794685<br />
1 2 3 4 5 6 7 8 9<br />
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓<br />
2 3 1 7 9 4 6 8 9<br />
Se le parole <strong>di</strong> un co<strong>di</strong>ce C sono permutazioni su n elementi, risulta molto utile<br />
interpretare la <strong>di</strong>stanza <strong>di</strong> Hamming in termini <strong>di</strong> punti fissi.<br />
Teorema 8.1.1. Siano g, h ∈ Sn, allora si ha<br />
d(g, h) = n − |F ix(gh −1 )|<br />
dove Fix(g) denota l’insieme <strong>dei</strong> punti fissi <strong>di</strong> g.<br />
91
2. GRUPPI STRETTAMENTE K-TRANSITIVI 92<br />
Dimostrazione. Moltiplicando per h −1 sia g che h si ottiene<br />
d(g, h) = d(gh −1 , id.)<br />
ossia la <strong>di</strong>stanza <strong>di</strong> Hamming fra g ed h è il numero <strong>di</strong> posti in cui gh −1 <strong>di</strong>fferisce<br />
dall’identità e questo numero è proprio n − |F ix(gh −1 )|. <br />
Dal teorema precedente segue che la <strong>di</strong>stanza minima <strong>di</strong> un insieme C <strong>di</strong><br />
permutazioni è uguale a<br />
d(C) = ming,h∈C,g=h {n − |F ix(gh −1 )|} = n − maxg,h∈C,g=h |F ix(gh −1 )|.<br />
Quando l’insieme <strong>di</strong> permutazioni forma un gruppo G, la relazione soprascritta<br />
<strong>di</strong>venta<br />
d(G) = n − maxg,h∈C,g=h |F ix(gh −1 )|.<br />
2. Gruppi strettamente k-transitivi<br />
Un ovvio punto <strong>di</strong> partenza per questa teoria sono i gruppi strettamente ktransitivi<br />
perchè la <strong>di</strong>stanza minima <strong>di</strong> questi gruppi è facile da calcolare. Se G<br />
è un gruppo <strong>di</strong> permutazioni su A = {1, . . . , n}, ossia G <strong>di</strong> grado n, si <strong>di</strong>ce che<br />
G è strettamente k-transitivo se comunque prese due k-ple or<strong>di</strong>nate <strong>di</strong> elementi<br />
<strong>di</strong>stinti <strong>di</strong> A, esiste uno ed un solo elemento <strong>di</strong> G che manda la prima k-pla nella<br />
seconda. Nel seguito, poichè l’applicazione è ai co<strong>di</strong>ci, si supporrà sempre k ≥ 2.<br />
I gruppi strettamente k-transitivi, k ≥ 2, sono tutti classificati:<br />
k ≥ 6 : Sk, Sk+1, Ak+2.<br />
k = 5 : S5, S6, A7, il gruppo <strong>di</strong> Mathieu M12.<br />
k = 4 : S4, S5, A6, il gruppo <strong>di</strong> Mathieu M11.<br />
k = 3 :<br />
• Il gruppo proiettivo lineare su GF (q) ∪ {∞}<br />
P GL(2, q) = {α : x → ax+b,<br />
a, b, c, d ∈ GF (q), ad − bc = 0}.<br />
cx+d<br />
• Il gruppo Gσ su GF (q) ∪ {∞}, q = p2m , p = 2 così definito<br />
Gσ =<br />
α : x → ax+b<br />
cx+d , a, b, c, d ∈ GF (q), ad − bc ∈ H∗ ;<br />
β : x → aσ(x)+b<br />
cσ(x)+d , a, b, c, d ∈ GF (q), ad − bc ∈ GF (q)∗ \ H ∗<br />
dove σ : x → xpm è l’automorfismo involutorio <strong>di</strong> GF (q), H∗ gruppo <strong>dei</strong><br />
quadrati non nulli <strong>di</strong> GF (q).
k = 2 : Il gruppo delle affinità sulla retta affine<br />
dove F è un quasicorpo finito.<br />
3. UNCOVERINGS 93<br />
AG(1, F ) = {α :→ ax + b, a, b ∈ F, a = 0},<br />
Teorema 8.2.1. Sia G un gruppo <strong>di</strong> permutazioni strettamente k-transitivo <strong>di</strong><br />
grado n. Allora la <strong>di</strong>stanza minima <strong>di</strong> G è n − k + 1.<br />
Dimostrazione. Per definizione <strong>di</strong> stretta k-transitività, solo l’identità fissa<br />
k punti e pertanto il massimo numero <strong>di</strong> punti fissati da un elemento <strong>di</strong> G che non<br />
sia l’identità è k − 1. Quin<strong>di</strong> la <strong>di</strong>stanza minima è n − (k − 1) = n − k + 1. <br />
Esempio 8.2.2. Il gruppo simmetrico Sn è sia strettamente n-transitivo che<br />
strettamente (n−1)-transitivo, mentre il gruppo alterno An è strettamente (n−2)transitivo.<br />
Pertanto la <strong>di</strong>stanza minima <strong>di</strong> Sn è n − (n − 1) + 1 = 2, mentre la<br />
<strong>di</strong>stanza minima <strong>di</strong> An è n − (n − 2) + 1 = 3.<br />
Se considerato come co<strong>di</strong>ce, il gruppo simmetrico non è molto utile perchè può<br />
correggere h = ⌊(d − 1)/2⌋ = ⌊(2 − 1)/2⌋ = 0 errori. Il gruppo alterno può invece<br />
correggere 1 errore.<br />
3. Uncoverings<br />
Considerato come co<strong>di</strong>ce, la capacità correttiva <strong>di</strong> un gruppo strettamente<br />
k-transitivo G <strong>di</strong> grado n è<br />
d − 1 − k + 1) − 1 n − k<br />
h = ⌊ ⌋ = ⌊(n ⌋ = ⌊ ⌋.<br />
2 2<br />
2<br />
Per cui il metodo <strong>di</strong> deco<strong>di</strong>fica presentato da Bailey e qui riportato, assume come<br />
con<strong>di</strong>zione iniziale che si siano verificati al più h errori, cioè che almeno n−h simboli<br />
siano corretti.Per la stretta k-transitività, ogni k-pla <strong>di</strong> simboli corretti identifica<br />
unicamente la parola del co<strong>di</strong>ce, tuttavia, non sappiamo in quali t posizioni siano gli<br />
errori, c’è quin<strong>di</strong> bisogno <strong>di</strong> un metodo per scegliere un insieme <strong>di</strong> k-ple in modo da<br />
poter essere certi che almneno una non contenga errori. Ovvero, abbiamo bisogno<br />
<strong>di</strong> un insieme <strong>di</strong> k-sottoinsiemi <strong>di</strong> A = {1, 2, . . . , n} tali che ogni t-sottoinsieme sia<br />
<strong>di</strong>sgiunto da almeno un k-sottoinsieme.<br />
Definizione 8.3.1. Un insieme U <strong>di</strong> k-sottoinsiemi <strong>di</strong> A = {1, 2, . . . , n} è detto<br />
un (n, k, h)-uncovering se per ogni h-sottoinsieme R ⊂ A, esiste S ∈ U tale che<br />
R ∩ S = ∅.
4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 94<br />
Purchè sia k ≤ n − h, un uncovering esisterà sempre, basta prendere l’insieme<br />
<strong>di</strong> tutti i k-sottoinsiemi <strong>di</strong> A. Il problema <strong>di</strong>venta quin<strong>di</strong> quello <strong>di</strong> trovare il più<br />
piccolo uncovering possibile per un dato insieme <strong>di</strong> parametri, ossia un minimo<br />
(n, k, h)-uncovering.<br />
Il problema complementare, ossia quello <strong>di</strong> trovare un insieme <strong>di</strong> m-sottoinsiemi<br />
<strong>di</strong> A tale che ogni h-sottoinsieme <strong>di</strong> A (con h < m) sia contenuto in almeno un<br />
m-sottoinsieme, è molto interessante e stu<strong>di</strong>ato nell’ambito della teoria <strong>dei</strong> <strong>di</strong>segni.<br />
Un tale insieme è noto come (n, m, h)covering design, e gli insiemi <strong>di</strong> m elementi<br />
sono detti blocchi del <strong>di</strong>segno. Ne segue che prendendo i complementari <strong>dei</strong> blocchi<br />
<strong>di</strong> un (n, m, h) covering design si ottiene un (n, n − m, h)-uncovering. Per questo<br />
motivo chiameremo coblocchi gli elementi <strong>di</strong> un uncovering.<br />
Per quanto detto, per la ricerca degli uncoverings è utile la letteratura sui<br />
coverings design. Ad esempio, esiste in internet una raccolta <strong>di</strong> coverings design per<br />
piccoli parametri: la Jolla Covering Repository 1 . Molte delle costruzioni contenute<br />
nella raccolta sono descritte in un articolo <strong>di</strong> Gordon 2 , mentre un quadro più<br />
generale si trova nel lavoro <strong>di</strong> MacWilliams-Mullin 3<br />
Esempio 8.3.2. Consideriamo il gruppo P GL(2, 7) strettamente 3-transitivo su<br />
A = {1, 2, 3, 4, 5, 6, 7, 8}, si ha n = 8, k = 3, h = ⌊(8 − 3)/2⌋ = 2. Se consideriamo<br />
U = {(1, 2, 3), (4, 5, 6), (2, 3, 7), (1, 7, 8)}, esso è un (8, 3, 2)-uncovering. Infatti per<br />
ogni (a, b) con a, b ∈ A, in U esiste almeno un elemento che ha intersezione vuota<br />
con (a, b).<br />
4. Algoritmo <strong>di</strong> deco<strong>di</strong>fica per gruppi strettamente k-transitivi<br />
Algoritmo <strong>di</strong> deco<strong>di</strong>fica<br />
Sia G un gruppo <strong>di</strong> permutazioni strettamente k-transitivo su A, |A| = n. Sia<br />
h = ⌊(n − k)/2⌋ e sia U un uncovering <strong>di</strong> G.<br />
Supponiamo <strong>di</strong> ricevere la parola w = w1w2 . . . wn. Consideriamo S1 ∈ U e<br />
per i ∈ S1 analizziamo le componenti wi della parola ricevuta (ricor<strong>di</strong>amo che S1<br />
è un k-sottoinsieme <strong>di</strong> A). Innanzitutto controlliamo che, in quelle posizioni, non<br />
ci siano simboli ripetuti. Se non ce ne sono, per la stretta k-transitività <strong>di</strong> G,<br />
esiste un’unica permutazione <strong>di</strong> G che manda wi nel posto i, per ogni i ∈ S1, ossia<br />
c’è una sola parola del co<strong>di</strong>ce con componente wi nel posto i, per ogni i ∈ S1.<br />
1Gordon, D.M.,La Jolla Covering Repository, htpp://www.ccrwest.org/cover.html<br />
2Gordon D., Kuperberg G., Patashnik O., New constructions for covering designs, J. Comb.<br />
Des., 3, 1995, 269 − 284.<br />
3MacWilliams F., Mullin R.,Coverings and packings, Contemporary Design Theory: A<br />
collection of survey, New York, John Wiley et Sons, 1992.
4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 95<br />
Cerchiamo questa parola tra gli elementi <strong>di</strong> G, sia p, e calcoliamo la sua <strong>di</strong>stanza<br />
dalla parola w ricevuta. Se la <strong>di</strong>stanza è d(p, w) ≤ h allora p è la parola corretta<br />
ossia deco<strong>di</strong>fichiamo w con la parola p e terminiamo la procedura <strong>di</strong> deco<strong>di</strong>fica.<br />
Se invece d(p, w) > h, consideriamo un altro elemento S2 ∈ U e ripetiamo la<br />
procedura. Ovviamente se in qualche passo t le componenti <strong>di</strong> w in<strong>di</strong>viduate da<br />
St ∈ U presentano un simbolo ripetuto, è certo che nella trasmissione si è verificato<br />
un errore e consideriamo imme<strong>di</strong>atamente un altro elemento <strong>di</strong> c<br />
Il seguente schema descrive l’Algoritmo <strong>di</strong> deco<strong>di</strong>fica sopra riportato.<br />
START<br />
Scelta <strong>di</strong> una<br />
k-upla <strong>di</strong><br />
Ricerca della parola p<br />
in<strong>di</strong>viduata dalla k-upla<br />
La <strong>di</strong>stanza <strong>di</strong> p dalla<br />
parola ricevuta è ≤ h<br />
SI<br />
STOP<br />
Scelta <strong>di</strong> un’altra<br />
k-upla <strong>di</strong><br />
EsempioFigura 8.4.1. widht Sia 11.5 G = cm P GL(2, per 9.0 7) cm e consideriamo l’uncovering U dell’esempio<br />
8.3.2. Supponiamo <strong>di</strong> trasmettere la parola (permutazione)<br />
e che venga ricevuta la parola<br />
NO<br />
g = 1 2 3 4 5 6 7 8<br />
w = 4 2 3 6 5 6 7 8 .<br />
Consideriamo S1 = (1, 2, 3) ∈ U e troviamo l’elemento <strong>di</strong> P GL(2, 7) che manda la<br />
terna (1, 2, 3) in (w1, w2, w3) = (4, 2, 3). E’ la parola<br />
p = 4 2 3 6 8 7 5 1.<br />
Poichè d(p, w) = 4, la parola p non si accetta. Consideriamo un altro elemento<br />
dell’uncovering, sia S2 = (4, 5, 6) ∈ U, in w le componenti relative ai posti in<strong>di</strong>cati<br />
da S2 sono (w4, w5, w6) = (6, 5, 6) perciò non può esservi nessuna permutazione <strong>di</strong>
4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 96<br />
G con quei valori essedoci una ripetizione. Consideriamo quin<strong>di</strong> un altro elemento<br />
dell’uncovering, sia S3 = (2, 3, 7) ∈ U, in w nelle posizioni in<strong>di</strong>cate da S3 troviamo<br />
le componenti (2, 3, 7); in G la permutazione che manda (2, 3, 7) in (2, 3, 7) è la<br />
permutazione<br />
g = 1 2 3 4 5 6 7 8,<br />
poichè d(g, w) = 2 la parola è quella corretta per deco<strong>di</strong>ficare w.<br />
Per tutti i gruppi strettamente k-transitivi è possibile trovare degli uncoverings,<br />
fatta eccezione per il gruppo simmetrico Sn perchè la sua capacità correttiva è zero<br />
.<br />
Costruzione <strong>di</strong> un uncovering per il gruppo alterno.<br />
Consideriamo come co<strong>di</strong>ce il gruppo alterno An, esso è strettamente (n − 2)transitivo<br />
e pertanto è 1-correttore poichè risulta h = ⌊(n − k)/2⌋ = 1. Sia<br />
Ω = {1, 2, . . . , n}, per costruire un uncovering occorre determinare un insieme U i<br />
cui elementi sono degli (n−2)-sottoinsiemi <strong>di</strong> Ω con la proprietà che ogni elemento<br />
<strong>di</strong> Ω non appartenga ad almeno uno <strong>dei</strong> sottoinsiemi elementi <strong>di</strong> U.<br />
Sia T l’insieme i cui elementi sono coppie <strong>di</strong> elementi <strong>di</strong> Ω e definito come<br />
segue:<br />
• Se n è pari, consideriamo T costituito dalle 1n<br />
coppie <strong>di</strong>sgiunte <strong>di</strong> elementi<br />
2<br />
<strong>di</strong> Ω.<br />
• Se n è <strong>di</strong>spari, consideriamo T costituito dalle 1(n<br />
− 1) coppie <strong>di</strong>sgiunte<br />
2<br />
<strong>di</strong> elementi <strong>di</strong> Ω e dalla coppia formata dal rimanente elemento <strong>di</strong> Ω e da<br />
un qualsiasi altro elemento.<br />
Costruiamo il (n, n − 2, 1)-uncovering U considerando gli (n − 2)-sottoinsiemi <strong>di</strong> Ω<br />
che sono i complementari delle coppie appartenenti a T .<br />
Esempio 8.4.2. Consideriamo il gruppo alterno A7, il (7, 5, 1)-uncovering <strong>di</strong><br />
A7 costruito con il metodo precedente è il seguente<br />
U = {(3, 4, 5, 6, 7), (1, 2, 5, 6, 7), (1, 2, 3, 4, 7), (2, 3, 4, 5, 6)}.<br />
Supponiamo <strong>di</strong> trasmettere la permutazione<br />
e che venga ricevuta la parola<br />
g = 2 3 1 4 6 7 5<br />
w = 2 3 1 4 4 7 5<br />
in cui è presente un errore nella quinta posizione. Deco<strong>di</strong>fichiamo utilizzando<br />
l’uncovering U. Consideriamo S1 = (3, 4, 5, 6, 7) ∈ U e cerchiamo in A7 l’elemento<br />
che nei posti (3, 4, 5, 6, 7) ha come componenti rispettivamente (1, 4, 4, 7, 5) (ossia<br />
la permutazione che manda (3, 4, 5, 6, 7) rispettivamente in (1, 4, 4, 7, 5)). Poichè
5. I GRUPPI DI MATHIEU M11 E M12 97<br />
le componenti che stanno nel quarto e quinto posto sono uguali, in A7 non può<br />
esservi nessuna permutazione con quelle componenti.<br />
Consideriamo ora S2 = (1, 2, 5, 6, 7) ∈ U e cerchiamo in A7 l’elemento che<br />
nei posti (1, 2, 5, 6, 7) ha come componenti rispettivamente (2, 3, 4, 7, 5) (ossia la<br />
permutazione che manda (1, 2, 5, 6, 7) rispettivamente in (2, 3, 4, 7, 5)). E’ la permutazione<br />
p = 2 3 6 1 4 7 5<br />
(l’unica altra possibilità <strong>di</strong> permutazione su Ω sarebbe stata p ′ = 2 3 1 6 4 7 5 che<br />
è <strong>di</strong> classe <strong>di</strong>spari e dunque non appartenente ad A7).<br />
Poichè d(p, w) = 2(> h) la parola p non è accettata.<br />
Consideriamo ora S3 = (1, 2, 3, 4, 7) ∈ U e cerchiamo in A7 l’elemento che<br />
nei posti (1, 2, 3, 4, 7) ha come componenti rispettivamente (2, 3, 1, 4, 5) (ossia la<br />
permutazione che manda (1, 2, 3, 4, 7) rispettivamente in (2, 3, 1, 4, 5)). E’ la permutazione<br />
p = 2 3 1 4 6 7 5.<br />
Poichè d(p, w) = 1(≤ h) la parola p è accettata ossia deco<strong>di</strong>fichiamo w con p che<br />
è proprio la parola g trasmessa.<br />
Nota 8.4.3. Il metodo <strong>di</strong> deco<strong>di</strong>fica descritto con l’algoritmo presentato in<br />
questo paragrafo, non è il metodo <strong>di</strong> deco<strong>di</strong>fica noto come permutation deco<strong>di</strong>ng .<br />
5. I gruppi <strong>di</strong> Mathieu M11 e M12<br />
I gruppi <strong>di</strong> Mathieu sono cinque gruppi finiti scoperti dal matematico francese<br />
Emile Mathieu (1835 − 1890). Questi gruppi vengono denotati con Mn, per i<br />
valori n = 11, 12, 22, 23, 24. In particolare, M12 è strettamente 5-transitivo e ha<br />
grado 12; M11 è lo stabilizzatore <strong>di</strong> un elemento <strong>di</strong> M12 e pertanto è strettamente<br />
4-transitivo e <strong>di</strong> grado 11. Esistono vari meto<strong>di</strong> per costruirli, ma, per M12, quello<br />
presentato per il seguente schema è sicuramente il più semplice da ricordare 4<br />
4 Le origini <strong>di</strong> questo <strong>di</strong>agramma sono nella teoria <strong>di</strong> Groethen<strong>di</strong>eck ′′ dessin d’enfants ′′ . G.<br />
Jones,1998; Characters and syrfaces: a survey. The Atlas of finite Groups: Ten Years On<br />
(eds Curtis e Wilson), London Mathematical Society Lecture Notes Series (249). Cambridge<br />
University Press .
5. I GRUPPI DI MATHIEU M11 E M12 98<br />
1 2<br />
10 12<br />
Figura widht 4.0 cm per 7.0 cm<br />
9<br />
3<br />
4<br />
7<br />
8<br />
5 6<br />
11<br />
Generatori per M12<br />
Il gruppo M12 è generato dalle due permutazioni ottenute nel seguente modo:<br />
• Una permutazione è la composizione <strong>dei</strong> 2-cicli formati dai numeri che<br />
sono alle estremità <strong>dei</strong> segmenti rappresentati con ◮—◭ ossia<br />
(1 2)(3 4)(5 6)(7 8)(9 10)(11 12).<br />
• L’altra permutazione è la composizione <strong>dei</strong> 3-cicli ottenuti leggendo in<br />
senso antiorario i numeri posti attorno ai punti rappresentati con • ossia<br />
(1 3 2)(4 7 5)(8 9 11).<br />
M12 è strettamente 5-transitivo su n = 12 elementi, ha <strong>di</strong>stanza minima d =<br />
12 − 5 + 1 = 8 e pertanto è 3-correttore.<br />
M11 è strettamente 4-transitivo su n = 11 elementi, ha <strong>di</strong>stanza minima d =<br />
11 − 4 + 1 = 8 e pertanto è 3-correttore.<br />
Se i gruppi M12 e M11 sono utilizzati come co<strong>di</strong>ci, essendo strettamente transitivi,<br />
per la loro deco<strong>di</strong>fica si può usare il metodo degli uncoverings. Riportiamo <strong>di</strong><br />
seguito un (12, 5, 3)-uncovering per M12 e un (11, 4, 3)-uncovering per M11.<br />
(12, 5, 3)-uncovering per M12<br />
(11, 4, 3)-uncovering per M11<br />
1 2 3 4 5 1 2 3 4<br />
1 2 6 11 12 1 2 5 6<br />
1 3 7 8 9 3 4 5 6<br />
1 4 6 7 10 7 8 9 10<br />
1 5 8 9 11 7 8 9 11<br />
2 4 8 9 12 7 8 10 11<br />
2 5 7 10 11 7 9 10 11<br />
3 4 7 11 12 8 9 10 11<br />
3 5 6 10 12<br />
3 6 8 9 11<br />
6 7 8 9 10
6. ESTENSIONE A GRUPPI NON STRETTAMENTE k-TRANSITIVI 99<br />
6. Estensione a gruppi non strettamente k-transitivi<br />
L’algoritmo presentato nel paragrafo 8.4 vale per i gruppi strettamente ktransitivi,<br />
tuttavia è possibile darne una generalizzazione applicabile ai gruppi<br />
non strettamente k-transitivi.<br />
Definizione 8.6.1. Sia G un gruppo su un insieme finito A. Una base per G<br />
è un insieme B = {x1, . . . , xb} ⊆ A tale che G(x1,...,xb) =< 1 >, ossia lo stabilizzatore<br />
<strong>di</strong> B è l’elemento identità. Una base non ridondante è una base tale che<br />
G(x1,...,xi,xi+1) = G(x1,...,xi) per i = 1, . . . , b − 1.<br />
Esempio 8.6.2. In un gruppo G strettamente k-transitivo su A, ogni k-pla <strong>di</strong><br />
elementi <strong>di</strong> A costituisce una base non ridondante.<br />
Esempio 8.6.3. Sia G = GL(n, q) il gruppo generale lineare che agisce sui<br />
vettori non nulli <strong>di</strong> F n q . Una base dello spazio vettoriale F n q costituisce una base<br />
non ridondante per G.<br />
Teorema 8.6.4. Sia G un gruppo e sia (x1, . . . , xb) una sua base. Considerati<br />
due elementi g, h ∈ G, se (x1, . . . , xb) g = (x1, . . . , xb) h allora g = h, ossia<br />
l’azione <strong>di</strong> un elemento g ∈ G su una base (x1, . . . , xb) determina univocamente<br />
quell’elemento.<br />
Dimostrazione. Siano g, h ∈ G e sia (x1, . . . , xb) una base <strong>di</strong> G. Se x g<br />
i =<br />
x h i per ogni i = 1, . . . , b, allora x gh−1<br />
i = xi per ogni i = 1, . . . , b, ossia gh −1 ∈<br />
G(x1,...,xb) =< 1 >, e pertanto gh −1 = 1 da cui segue g = h. <br />
Il teorema ora <strong>di</strong>mostrato assicura che se un gruppo G viene utilizzato come<br />
co<strong>di</strong>ce e nella trasmissione si riceve una parola contenente errori in posizioni <strong>di</strong>verse<br />
da quelle in<strong>di</strong>viduate da una base, nella operazione <strong>di</strong> deco<strong>di</strong>fica gli errori vengono<br />
corretti. Ne consegue che per generalizzare l’algoritmo <strong>di</strong> deco<strong>di</strong>fica presentato nel<br />
paragrafo 8.4 per i gruppi strettamente k-transitivi, basta sostituire ′′ k-pla ′′ con<br />
′′ base ′′ . La nozione <strong>di</strong> ′′ uncovering ′′ dovrà invece essere sostituita con quella più<br />
generale <strong>di</strong> ′′ uncovering-by-bases ′′ .<br />
Definizione 8.6.5. Sia G un gruppo su A, |A| = n, con capacità correttiva h.<br />
Si <strong>di</strong>ce che U è un uncovering-by-bases per G se U è un insieme <strong>di</strong> basi per G<br />
tali che ogni h-sottoinsieme <strong>di</strong> A è <strong>di</strong>sgiunto da almeno una base.
6. ESTENSIONE A GRUPPI NON STRETTAMENTE k-TRANSITIVI 100<br />
Chiaramente, nel caso in cui G sia un gruppo strettamente k-transitivo, un<br />
uncovering-by-bases è un (n, k, h)-uncovering.<br />
L’algoritmo che utilizza gli uncovering-by-bases si <strong>di</strong>fferenzia da quello che<br />
utilizza gli uncovering per due aspetti<br />
• ammette la possibilità che le basi dell’uncovering abbiano <strong>di</strong>mensioni<br />
<strong>di</strong>verse;<br />
• l’esistenza <strong>di</strong> un elemento del gruppo che, nelle posizioni in<strong>di</strong>viduate da<br />
una data base, concor<strong>di</strong> con la parola ricevuta non assicura la correttezza<br />
e pertanto l’algoritmo include un controllo <strong>di</strong> non esistenza.<br />
Algoritmo <strong>di</strong> deco<strong>di</strong>fica<br />
Sia G un gruppo <strong>di</strong> permutazioni su A, |A| = n. Sia U un uncovering-by-bases <strong>di</strong><br />
G.<br />
Supponiamo <strong>di</strong> ricevere la parola w = w1w2 . . . wn. Consideriamo una base<br />
B1 ∈ U e per i ∈ B1 analizziamo le componenti wi della parola ricevuta . Innanzitutto<br />
controlliamo che, in quelle posizioni, non ci siano simboli ripetuti. Supposto<br />
che queste componenti siano tutte <strong>di</strong>stinte, verifichiamo se in G esiste un elemento<br />
che manda wi nel posto i, per ogni i ∈ B1, ossia se c’è una parola del co<strong>di</strong>ce con<br />
componente wi nel posto i, per ogni i ∈ B1. Se questa parola esiste, sia p. Calcoliamo<br />
la sua <strong>di</strong>stanza dalla parola w ricevuta. Se la <strong>di</strong>stanza è d(p, w) ≤ h allora<br />
possiamo concludere che la parola trasmessa è p ossia deco<strong>di</strong>fichiamo w con la parola<br />
p e terminiamo la procedura <strong>di</strong> deco<strong>di</strong>fica. Se invece d(p, w) > h, consideriamo<br />
un’altra base B2 ∈ U e ripetiamo la procedura. Ovviamente se in qualche passo t<br />
le componenti <strong>di</strong> w in<strong>di</strong>viduate da St ∈ U presentano un simbolo ripetuto, è certo<br />
che nella trasmissione si è verificato un errore e consideriamo imme<strong>di</strong>atamente<br />
un’altra base.<br />
Non è detto che per un qualunque gruppo G esista sempre un uncovering-bybases,<br />
ma, come assicura il prossimo teorema, ciò è vero per ogni gruppo finito.<br />
Teorema 8.6.6. Per ogni gruppo finito G su un insieme A, |A| = n, esiste<br />
sempre un uncovering-by-bases.<br />
Dimostrazione. Sia d la <strong>di</strong>stanza minima <strong>di</strong> G, h = ⌊(d−1)/2⌋. Supponiamo<br />
per assurdo che esista un h-sottoinsieme R ⊆ A che intersechi ogni base <strong>di</strong> G. Allora<br />
lo stabilizzatore puntuale <strong>di</strong> ¯ R = A\R non è banale perchè ¯ R non contiene una<br />
base. Esiste pertanto g ∈ G, g <strong>di</strong>verso dall’ identità, che fissa ¯ R punto per punto<br />
e perciò |F ix(g)| ≥ | ¯ R| = n − r. Ma il massimo numero <strong>di</strong> punti fissati da un<br />
elemento che non sia l’identità è n − d < n − r e pertanto si ha un assurdo. <br />
Si noti che il teorema ora <strong>di</strong>mostrato assicura solo l’esistenza <strong>di</strong> un uncoveringby-bases<br />
ma non fornisce nessuna in<strong>di</strong>cazione costruttiva.
7. SIMBOLI RIPETUTI 101<br />
7. Simboli ripetuti<br />
Supponiamo <strong>di</strong> usare un gruppo come co<strong>di</strong>ce e <strong>di</strong> trasmettere pertanto come<br />
parola una permutazione. Se la parola ricevuta contiene errori, allora potrebbe non<br />
essere più una permutazione, ossia potrebbe contenere uno o più simboli ripetuti.<br />
Esaminiamo come i simboli ripetuti possono aiutare nella deco<strong>di</strong>fica, in particolare<br />
possono essere <strong>di</strong> aiuto nel ridurre il numero <strong>di</strong> passi da eseguire. Per illustrare<br />
questo, utilizziamo il caso del gruppo <strong>di</strong> Mathieu M12. La <strong>di</strong>mensione <strong>di</strong> questo<br />
co<strong>di</strong>ce è tale che le possibilità in cui possono presentarsi gli errori sono in numero<br />
sufficientemente piccolo da poterle esaminare una ad una. Per co<strong>di</strong>ci più gran<strong>di</strong>,<br />
si può comunque applicare quanto illustreremo per M12, basta isolare nelle parole<br />
alcune cifre dove sappiamo esserci un errore e applicare un algoritmo simile alle<br />
rimanenti cifre per in<strong>di</strong>viduare errori e in un numero minore <strong>di</strong> passi.<br />
Consideriamo il gruppo M12, ricor<strong>di</strong>amo che M12 ha capacità correttiva 3. Per<br />
la deco<strong>di</strong>fica, se una parola ricevuta è una permutazione allora applichiamo l’Algoritmo<br />
presentato nel paragrafo 8.4. Se si riceve una parola che non è una permutazione,<br />
si può migliorare l’algoritmo andando a considerare i posti dove figurano<br />
simboli ripetuti. Ad esempio, se i tre errori sono tre repliche dello stesso simbolo<br />
(il simbolo si presenta quin<strong>di</strong> quattro volte), allora sappiamo che i rimanenti<br />
otto simboli sono corretti e perciò (essendo il gruppo strettamente 5-transitivo)<br />
possiamo imme<strong>di</strong>atamente trovare l’unica parola del co<strong>di</strong>ce in<strong>di</strong>viduata da una<br />
qualunque 5-pla presa fra gli otto simboli corretti. In un solo passo si è così giunti<br />
a deco<strong>di</strong>ficare correttamente la parola ricevuta, un notevole miglioramento.<br />
Analizziamo nel dettaglio il caso del gruppo M12 quando la parola ricevuta non<br />
è una permutazione. Supponiamo venga trasmessa la parola identità<br />
1 2 3 4 5 6 7 8 9 10 11 12<br />
1 ◦ caso: la parola ricevuta contiene tre errori.<br />
• Un simbolo ripetuto, due simboli spostati:<br />
esempio: 1 1 4 3 5 6 7 8 9 10 11 12<br />
Occorre un (10, 5, 2)-uncovering perchè sappiamo che almeno uno <strong>dei</strong> due<br />
1 è un errore.<br />
• Due <strong>di</strong>versi simboli ripetuti, un simbolo spostato:<br />
esempio: 1 1 3 3 2 6 7 8 9 10 11 12<br />
Occorre un (8, 5, 1)-uncovering.<br />
• Tre <strong>di</strong>versi simboli ripetuti:<br />
esempio: 1 1 3 3 5 5 7 8 9 10 11 12<br />
Sappiamo che ci sono tre errori nelle prime sei posizioni, possiamo quin<strong>di</strong><br />
considerare cinque qualsiasi delle ultime sei posizioni per in<strong>di</strong>viduare la<br />
parola del co<strong>di</strong>ce trasmessa.
7. SIMBOLI RIPETUTI 102<br />
• Un simbolo ripetuto tre volte:<br />
esempio: 1 1 1 1 5 6 7 8 9 10 11 12<br />
Possiamo considerare cinque qualsiasi delle ultime otto posizioni per in<strong>di</strong>viduare<br />
la parola del co<strong>di</strong>ce trasmessa.<br />
• Un simbolo ripetuto due volte, un altro simbolo ripetuto:<br />
esempio: 1 1 1 4 4 6 7 8 9 10 11 12<br />
Possiamo considerare cinque qualsiasi delle ultime sette posizioni per<br />
in<strong>di</strong>viduare la parola del co<strong>di</strong>ce trasmessa.<br />
• Un simbolo ripetuto due volte, un simbolo spostato:<br />
esempio: 1 1 1 2 5 6 7 8 9 10 11 12<br />
Occorre un (9, 5, 1)-uncovering.<br />
• Un simbolo ripeturo due volte, entrambi in posizioni non corrette, un<br />
simbolo spostato:<br />
esempio: 3 3 1 4 5 6 7 8 9 10 11 12<br />
Occorre un (10, 5, 2)-uncovering.<br />
2 ◦ caso: la parola ricevuta contiene due errori.<br />
• Due simboli ripetuti:<br />
esempio: 1 1 3 3 5 6 7 8 9 10 11 12<br />
Occorre un (8, 5, 1)-uncovering perchè sappiamo che almeno uno <strong>dei</strong> due<br />
1 è un errore.<br />
• Un simbolo ripetuto due volte:<br />
esempio: 1 1 1 4 5 6 7 8 9 10 11 12<br />
Occorre un (9, 5, 1)-uncovering.<br />
3 ◦ caso: la parola ricevuta contiene un errore.<br />
• Un simbolo ripetuto:<br />
esempio: 1 1 3 4 5 6 7 8 9 10 11 12<br />
Occorre un (10, 5, 1)-uncovering.<br />
Riportiamo gli uncovering che, dall’analisi fatta, occorrono per la deco<strong>di</strong>fica.
8. OTTIMIZZAZIONE 103<br />
(12, 5, 3)-uncovering per M12<br />
(10, 5, 2)-uncovering per M12<br />
1 2 3 4 5 1 2 3 4 5<br />
1 2 6 11 12 1 2 7 8 10<br />
1 3 7 8 9 1 5 6 7 9<br />
1 4 6 7 10 2 3 6 8 9<br />
1 5 8 9 11 3 4 7 9 10<br />
2 4 8 9 12 4 5 6 8 10<br />
2 5 7 10 11<br />
3 4 7 11 12<br />
3 5 6 10 12<br />
3 6 8 9 11<br />
6 7 8 9 10<br />
(9, 5, 1)-uncovering per M12<br />
(8, 5, 1)-uncovering per M12<br />
1 2 3 4 5 1 2 3 4 5<br />
1 6 7 8 9 1 2 6 7 8<br />
5 6 7 8 9 4 5 6 7 8<br />
8. Ottimizzazione<br />
Fino ad ora, quando si è considerato un uncovering-by-bases non si è tenuto<br />
conto in quale or<strong>di</strong>ne prendere le basi. Tuttavia, applicando l’algoritmo <strong>di</strong> deco<strong>di</strong>fica,<br />
l’or<strong>di</strong>ne con cui si considerano le basi è importante perchè influisce sui tempi<br />
<strong>di</strong> prestazione. Sebbene gli uncovering siano sempre stati presentati in or<strong>di</strong>ne lessicografico,<br />
non c’è ragione per cui questo or<strong>di</strong>namento debba essere usato nella<br />
pratica. Ve<strong>di</strong>amo come or<strong>di</strong>nare un uncovering-by-bases in modo ottimale.<br />
Sia G un gruppo <strong>di</strong> grado n e capacità correttiva h. Sia U, |U| = u, un<br />
uncovering-by-bases così or<strong>di</strong>nato: (B1, B2, . . . , Bu). Per un dato insieme E, |E| ≤<br />
h, <strong>di</strong> posizioni d’errore, in<strong>di</strong>chiamo con i il numero delle prove che si devono effettuare<br />
per trovare la prima base <strong>di</strong>sgiunta da E (quin<strong>di</strong> i è il numero <strong>di</strong> volte in<br />
cui deve essere eseguito l’algoritmo). Possiamo allora calcolare il numero me<strong>di</strong>o <strong>di</strong><br />
prove, che <strong>di</strong>penderà dall’or<strong>di</strong>ne con cui si prendono le basi.<br />
Per contare il numero me<strong>di</strong>o delle prove necessarie per j ≤ h errori, definiamo<br />
la successione sj = (s1j, s2j, . . . , suj), dove sij è il numero <strong>di</strong> sottoinsiemi <strong>di</strong> or<strong>di</strong>ne
8. OTTIMIZZAZIONE 104<br />
j <strong>di</strong> {1, 2, . . . , n} <strong>di</strong>sgiunti da Bi ma non da B1, . . . , Bi−1. Pertanto il numero me<strong>di</strong>o<br />
<strong>di</strong> prove è<br />
aj =<br />
u i=1 isij<br />
n j<br />
.<br />
Esempio 8.8.1. Si consideri il gruppo <strong>di</strong> Mathieu M12, esso ha grado 12 e capacità<br />
correttiva 3. Consideriamo il (12, 5, 3)-uncovering del paragrafo precedente<br />
in or<strong>di</strong>ne lessicografico. Supponiamo che si verifichino tre errori e <strong>di</strong> ricevere la<br />
sequenza<br />
35, 31, 30, 23, 17, 21, 20, 15, 17, 8, 3<br />
Utilizzando la formula precedente troviamo che il numero me<strong>di</strong>o <strong>di</strong> prove è a3 =<br />
1016<br />
220 .<br />
Un modo per ottimizzare l’or<strong>di</strong>ne con cui considerare gli elementi <strong>di</strong> un uncovering,<br />
è quello <strong>di</strong> minimizzare il numero ah. In generale non è un problema <strong>di</strong><br />
facile risoluzione, tuttavia, esiste un metodo relativamente semplice per migliorare<br />
l’efficienza <strong>di</strong> un dato or<strong>di</strong>namento.<br />
Algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′<br />
Consideriamo l’uncovering nell’or<strong>di</strong>ne (B1, B2, . . . , Bu) che determina la successione<br />
s = (s1, s2, . . . , su). Assumiamo j = h e supponiamo s1 ≥ s2 ≥ . . . ≥ sl e<br />
che sia<br />
sl < sl+1<br />
ovvero che sia il primo punto in cui la successione si incrementa. Otteniamo un<br />
nuovo or<strong>di</strong>namento (B ′ 1, B ′ 2, . . . , B ′ u) scambiando Bl e Bl+1 e lasciando inalterati<br />
tutti gli altri elementi. In questo modo abbiamo<br />
B ′ 1 = B1, . . . , B ′ l−1 = Bl−1<br />
B ′ l = Bl+1, B ′ l+1 = Bl<br />
B ′ l+2 = Bl+2, . . . , B ′ u = Bu<br />
Questo nuovo or<strong>di</strong>namento genera la successione s = (s ′ 1, . . . , s ′ u. Osserviamo<br />
che:<br />
• s ′ 1 = s1, . . . , s ′ l−1 e s′ l+2 = sl+2, . . . , s ′ u = su;<br />
• s ′ l ≥ sl+1 e s ′ l+1 ≤ sl;<br />
• s ′ l + s′ l+1 = sl + sl+1.<br />
Questo nuovo or<strong>di</strong>ne è effettivamente un miglioramento, come assicura il seguente<br />
teorema.<br />
.
8. OTTIMIZZAZIONE 105<br />
Teorema 8.8.2. Con riferimento alle notazioni sopra riportate, si ha<br />
u<br />
is ′ u<br />
i < isi.<br />
i=1<br />
Dimostrazione. Poichè s ′ 1 = s1, . . . , s ′ l−1 e s′ l+2 = sl+2, . . . , s ′ u = su, è sufficiente<br />
mostrare che<br />
i=1<br />
ls ′ l + (l + 1)s ′ l+1 < lsl + (l + 1)sl+1.<br />
Dalle <strong>di</strong>suguaglianze sl < sl+1, s ′ l ≥ sl+1 e s ′ l+1 ≤ sl, si ha sl < sl+1 ≤ s ′ l , pertanto<br />
s ′ l = sl + d per qualche d > 0. Ricordando che s ′ l + s′ l+1 = sl + sl+1, otteniamo<br />
s ′ l − sl = sl+1 − s ′ l+1 = d.<br />
Pertanto si ha che l(s ′ l − sl = l(sl+1 − s ′ l+1 ) < (l + 1)(sl+1 − s ′ l+1 ), da cui otteniamo<br />
ls ′ l + (l + 1)s ′ l+1 < lsl + (l + 1)sl+1.<br />
Rimane dunque provato che l’algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′ precedentemente<br />
riportato, riduce effettivamente il numero me<strong>di</strong>o <strong>di</strong> prove. Possiamo<br />
pertanto iterarlo per ottenere una successione decrescente.<br />
Esempio 8.8.3. Consideriamo l’uncovering dell’esempio 8.8.1. Il quinto termine<br />
della successione ottenuta è più piccolo del sesto e perciò cambiamo l’or<strong>di</strong>ne<br />
nell’uncovering scambiando la quinta base con la sesta, otteniamo<br />
(12, 5, 3)-uncovering per M12<br />
1 2 3 4 5<br />
1 2 6 11 12<br />
1 3 7 8 9<br />
1 4 6 7 10<br />
2 4 8 9 12<br />
1 5 8 9 11<br />
2 5 7 10 11<br />
3 4 7 11 12<br />
3 5 6 10 12<br />
3 6 8 9 11<br />
6 7 8 9 10<br />
Questo nuovo or<strong>di</strong>ne genera la seguente successione:<br />
35, 31, 30, 23, 23, 15, 20, 15, 17, 8, 3.
8. OTTIMIZZAZIONE 106<br />
Iteriamo poi l’algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′ finchè non otteniamo il seguente<br />
or<strong>di</strong>ne:<br />
(12, 5, 3)-uncovering per M12<br />
1 2 3 4 5<br />
1 2 6 11 12<br />
1 3 7 8 9<br />
1 4 6 7 10<br />
2 4 8 9 12<br />
2 5 7 10 11<br />
3 5 6 10 12<br />
3 4 7 11 12<br />
1 5 8 9 11<br />
3 6 8 9 11<br />
6 7 8 9 10<br />
che genera la seguente successione decrescente:<br />
35, 31, 30, 23, 23, 23, 20, 13, 11, 8, 3.<br />
Con questo or<strong>di</strong>ne il numero me<strong>di</strong>o <strong>di</strong> prove (per tre errori) è ora 988<br />
220 .<br />
Si noti che il teorema 8.8.2 non assicura l’esistenza <strong>di</strong> or<strong>di</strong>namento migliore,<br />
ma assicura che il miglior or<strong>di</strong>namento possibile eve generare una successione decrescente.<br />
Un’esaustiva ricerca fatta utilizzando GAP, ha rivelato che per M12 il<br />
valore minimo per il numero me<strong>di</strong>o <strong>di</strong> prove è 959 e che 288 degli 11! possibili<br />
220<br />
or<strong>di</strong>namenti generano quel valore. possibili or<strong>di</strong>namenti generano quel valore.
CAPITOLO 9<br />
Elementi <strong>di</strong> Crittografia<br />
Da sempre, soprattutto in tempi <strong>di</strong> guerra, si è sentita la necessità <strong>di</strong> trovare<br />
stratagemmi per inviare messaggi in modo da non farli scoprire all’avversario. Un<br />
modo può essere quello <strong>di</strong> nascondere il messaggio: questa tecnica prende il nome<br />
<strong>di</strong> stenografia. Un altro modo per spe<strong>di</strong>re un messaggio senza che il nemico lo<br />
possa capire, si ottiene nascondendo non il messaggio ma il suo significato: in<br />
questo caso si parla <strong>di</strong> crittografia.<br />
1. Introduzione<br />
Compito primario della crittografia è quello <strong>di</strong> fornire strumenti che permettano<br />
la trasmissione <strong>di</strong> informazioni in modo che solo persone autorizzate siano in grado<br />
<strong>di</strong> capirle.<br />
Il problema <strong>di</strong> sviluppare meto<strong>di</strong> efficienti per comunicare in modo segreto e sicuro<br />
è <strong>di</strong>ventato estremamente attuale con lo sviluppo <strong>dei</strong> sistemi <strong>di</strong> comunicazione<br />
(in particolare <strong>di</strong> quelli elettronici e informatici).<br />
GLOSSARIO <strong>di</strong> CRITTOGRAFIA<br />
Testo in chiaro, messaggio in chiaro: Messaggio originale che si vuole<br />
mandare in modo segreto, oppure stringa <strong>di</strong> simboli che rappresenta il messaggio<br />
o il testo che si vuole cifrare.<br />
Testo cifrato, messaggio cifrato: Versione alterata, nascosta del testo in<br />
chiaro.<br />
Crittare, cifrare, crittografare: Passare dal testo in chiaro al testo cifrato.<br />
Decifrare : Passare dal testo cifrato al testo in chiaro.<br />
Cifratura : Metodo usato per mo<strong>di</strong>ficare il testo in chiaro nel testo cifrato.<br />
107
1. INTRODUZIONE 108<br />
Decifratura : Passaggio dal testo cifrato al testo in chiaro, si tratta del<br />
processo inverso della cifratura.<br />
Chiave : Determina una ben precisa trasformazione <strong>di</strong> cifratura, ma anche la<br />
regola inversa <strong>di</strong> decifratura, fra tutte quelle possibili che si possono usare: nel<br />
primo caso si parla <strong>di</strong> chiave per cifrare, nel secondo <strong>di</strong> chiave per decifrare.<br />
Crittologia : Scienza della cifratura <strong>dei</strong> messaggi.<br />
Crittoanalisi : Scienza dell’interpretazione <strong>di</strong> messaggi cifrati.<br />
Compito del crittologo è <strong>di</strong> inventare sistemi (detti crittosistemi) per trasformare<br />
un messaggio in chiaro in un messaggio cifrato. Compito del crittoanalista<br />
è <strong>di</strong> contrastare questa operazione trovando <strong>dei</strong> mo<strong>di</strong> per interpretare i messaggi<br />
cifrati riportandoli in chiaro senza autorizzazione.<br />
Messaggi Unitari : Generalmente i messaggi, sia quelli in chiaro sia quelli<br />
cifrati, vengono spezzati in messaggi unitari che possono essere costituiti da una<br />
singola lettera o da blocchi <strong>di</strong> lettere. Il vantaggio <strong>di</strong> <strong>di</strong>videre un messaggio in<br />
blocchi <strong>di</strong> lunghezza prefissata è quello <strong>di</strong> evitare la possibilità <strong>di</strong> riconoscere facilmente<br />
inizio e fine <strong>di</strong> parole, rendendo così più <strong>di</strong>fficile la crittoanalisi basata sulle<br />
frequenze.<br />
Crittografia simmetrica : Sin dall’antichità, i meto<strong>di</strong> classici per cifrare<br />
sono costruiti in modo che mittente e destinatario abbiano una chiave comune con<br />
la quale il mittente cifra e il destinatario decifra; un algoritmo <strong>di</strong> questo tipo si<br />
<strong>di</strong>ce simmetrico.<br />
Crittografia asimmetrica o a Chiave Pubblica : Occorrono più <strong>di</strong> due<br />
millenni per arrivare ad una grande svolta nella crittografia, ciò avviene nel 1975<br />
con l’introduzione <strong>di</strong> algoritmi in cui solo il destinatario ha bisogno <strong>di</strong> una chiave<br />
segreta; questo tipo <strong>di</strong> algoritmo è detto asimmetrico o a chiave pubblica. I sistemi<br />
asimmetrici furono proposti da W.Diffie e M. Hellman dell’Università <strong>di</strong> Stanford<br />
in un lavoro del 1976 dal titolo New <strong>di</strong>rections in Cryptography.<br />
In un cifrario a chiave pubblica, per calcolare in un tempo ragionevolmente<br />
breve la decifratura <strong>di</strong> un messaggio, è necessario essere in possesso <strong>di</strong> altre informazioni<br />
oltre a quelle rese pubbliche, ossia, per decifrare senza avere opportune<br />
informazioni aggiuntive occorre un tempo <strong>di</strong> calcolo incre<strong>di</strong>bilmente lungo. Anche<br />
i sistemi asimmetrici sono comunque attaccabili e nella prospettiva <strong>di</strong> computer<br />
con capacità <strong>di</strong> calcolo molto più avanzate rispetto a quelle attuali, la crittografia<br />
si sta orientando verso nuove metodologie che trovano riferimento nella crittografia<br />
quantistica.
2. CRITTOSISTEMI A CHIAVE PUBBLICA 109<br />
Crittografia Quantistica : La crittografia quantistica rappresenta, dopo<br />
quella a chiave pubblica, una seconda vera rivoluzione perchè, ad oggi, risulta<br />
inattaccabile. La crittografia quantistica sfrutta delle peculiarità della meccanica<br />
quantistica nella fase dello scambio delle chiavi per evitare che queste possano<br />
essere intercettate da un attaccante senza che i due interlocutori se ne accorgano.<br />
Il principio che sta alla base della crittografia quantistica è il principio <strong>di</strong> indeterminazione<br />
<strong>di</strong> Heisenberg. Questo principio afferma che non è possibile conoscere,<br />
simultaneamente e con precisione assoluta, alcune particolari coppie <strong>di</strong> caratteristiche<br />
<strong>di</strong> un oggetto quantistico, come ad esempio la posizione e la velocità <strong>di</strong> un<br />
elettrone. Se si cerca <strong>di</strong> misurare esattamente la posizione, si perde la possibilità<br />
<strong>di</strong> verificare la velocità dell’elettrone. Se invece si misura con precisione assoluta<br />
la velocità, si perdono inevitabilmente informazioni sul luogo in cui l’elettrone si<br />
trova.<br />
Secondo la meccanica quantistica, per quante tecniche nuove e più precise si<br />
possano sviluppare per eseguire queste misure, il limite rimane e non è concettualmente<br />
eliminabile.<br />
Realizzando una chiave quantistica (cioè realizzata con elementi come i fotoni<br />
che rispondono alle leggi della meccanica quantistica) chi volesse, non autorizzato,<br />
cercare <strong>di</strong> decriptare il messaggio, mo<strong>di</strong>ficherebbe inevitabilmente la chiave,<br />
oltretutto in maniera puramente casuale quin<strong>di</strong> incontrollabile e verrebbe quin<strong>di</strong><br />
certamente scoperto. Nell’ambito della crittografia quantistica, un algoritmo che<br />
permette lo scambio <strong>di</strong> una chiave tra due utenti e garantisce che questa non possa<br />
essere intercettata da terzi senza che i due interlocutori se ne accorgano, è chiamato<br />
BB84, dal nome <strong>dei</strong> suoi ideatori: Bennet e Brassard che lo realizzarono nel<br />
1984.<br />
2. Crittosistemi a chiave pubblica<br />
I sistemi <strong>di</strong> crittografia a chiave pubblica, come già detto, sono stati ideati da<br />
Diffie e Hellman nel 1975. Essi utilizzano una chiave pubblica che permette la cifratura<br />
ma non la decifratura <strong>di</strong> un messaggio. Ogni utente pubblica la propria chiave<br />
<strong>di</strong> cifratura per permettere a chiunque voglia comunicare con lui segretamente <strong>di</strong><br />
poterlo fare.<br />
Per descrivere i cifrari a chiave pubblica, supponiamo che ogni partecipante P<br />
al sistema <strong>di</strong> cifratura abbia una coppia <strong>di</strong> chiavi:<br />
• una chiave pubblica C = CP per cifrare;<br />
• una chiave privata (segreta) D = DP per decifrare;
3. VANTAGGI, SVANTAGGI, APPLICAZIONI DEI CRITTOSISTEMI A CHIAVE PUBBLICA110<br />
con la proprietà che non è possibile calcolare DP conoscendo CP . Tutte le chiavi<br />
pubbliche sono utilizzabili pubblicamente, esse possono essere raccolte in un archivio<br />
pubblico al pari <strong>di</strong> un elenco telefonico. Al contrario le chiavi private sono<br />
note solo ai loro proprietari.<br />
Per como<strong>di</strong>tà denotiamo con C(m) il testo cifrato ottenuto dal messaggio m<br />
usando la chiave C.<br />
Supponiamo che ogni partecipante ad un sistema <strong>di</strong> cifratura asimmetrica abbia<br />
sia la chiave pubblica sia quella privata:<br />
(1) Se P1 vuole mandare il messaggio m a P2, allora P1<br />
• trova la chiave pubblica CP2 <strong>di</strong> P2,<br />
• cifra il messaggio m usando CP2,<br />
• manda CP2(m) a P2.<br />
(2) P2 è in grado <strong>di</strong> decifrare il testo cifrato CP2(m) poichè P2 (e solo P2)<br />
conosce la chiave DP2 :<br />
DP2(CP2(m)) = m.<br />
(3) Nessun altro partecipante può decifrare CP2(m), perchè nessuno può dedurre<br />
DP2 nè da CP2 nè da CP2(m).<br />
3. Vantaggi, svantaggi, applicazioni <strong>dei</strong> crittosistemi a chiave pubblica<br />
Vantaggi<br />
I vantaggi offerti dai sistemi <strong>di</strong> cifratura a chiave pubblica sono molteplici.<br />
• Non è necessario nessun scambio <strong>di</strong> chiavi tra i partecipanti. Si può mandare<br />
un messaggio segreto senza nessun bisogno <strong>di</strong> scegliere prima, insieme<br />
al destinatario, una chiave segreta.<br />
• Occorre un numero <strong>di</strong> chiavi relativamente piccolo. Usando sistemi simmetrici,<br />
ogni coppia <strong>di</strong> partecipanti deve avere una chiave segreta personale,<br />
quin<strong>di</strong> se ci sono n partecipanti occorrono n(n−1)<br />
2<br />
chiavi <strong>di</strong>verse. Invece,<br />
usando un algoritmo asimmetrico, ogni partecipante ha bisogno <strong>di</strong> sole<br />
due chiavi e solo una <strong>di</strong> queste deve essere tenuta segreta, quin<strong>di</strong> con n<br />
partecipanti il numero delle chiavi è solo 2n.<br />
• Nuovi utenti possono entrare nel sistema senza alcun problema per i vecchi.<br />
Invece con un sistema simmetrico, se entra un nuovo utente, tutti i<br />
vecchi partecipanti devono scambiare una chiave segreta con lui. In un<br />
sistema asimmetrico, i vecchi utenti non devono scambiare alcun dato con<br />
il neoutente.
4. IL SISTEMA RSA 111<br />
Svantaggi<br />
• Nessun algoritmo asimmetrico è inattaccabile e allo stesso tempo veloce.<br />
• Un algoritmo a chiave pubblica richiede la custo<strong>di</strong>a <strong>di</strong> chiavi e pertanto<br />
ci deve essere la garanzia che le chiavi pubbliche siano autentiche.<br />
Applicazioni<br />
Le applicazioni <strong>dei</strong> sistemi a chiave pubblica sono molteplici, ad esempio:<br />
• l’autentica elettronica della firma;<br />
• l’accesso ad archivi segreti o a sistemi <strong>di</strong> sicurezza;<br />
• l’accesso a servizi come carte <strong>di</strong> cre<strong>di</strong>to, programmi televisivi a pagamento,<br />
ecc. .<br />
4. Il sistema RSA<br />
RSA è un sistema <strong>di</strong> crittografia a chiave pubblica ideato da Diffie e Hellman<br />
ma chiamato sistema RSA dai nomi <strong>di</strong> coloro che, nel 1977, per primi lo hanno<br />
realizzato : R. Rivest, A.Shamir, L.Adleman.<br />
Negli anni, sono stati realizzati altri algoritmi asimmetrici ma l’algoritmo RSA<br />
è certamente il più conosciuto e quello stu<strong>di</strong>ato in modo più approfon<strong>di</strong>to.<br />
RICHIAMI <strong>di</strong> MATEMATICA<br />
• In<strong>di</strong>catore <strong>di</strong> Eulero φ(n). Dato un numero naturale n, con φ(n) (in<strong>di</strong>catore<br />
<strong>di</strong> Eulero) si in<strong>di</strong>ca il numero <strong>dei</strong> numeri naturali minori <strong>di</strong> n e<br />
primi con n. Esempio: φ(1) = 1, φ(2) = 1, φ(3) = 2, φ(4) = 2, φ(6) =<br />
2, φ(10) = 4, φ(15) = 8.<br />
• Se p è un numero primo, allora : φ(p) = p − 1.<br />
• Se p e q sono due numeri primi <strong>di</strong>stinti, allora : φ(pq) = (p − 1)(q − 1).<br />
• Teorema <strong>di</strong> Eulero : Se m ed n sono due numeri naturali primi fra loro,<br />
m < n, allora m φ(n) ≡ 1 mod n.<br />
• Teorema : Se a e b sono due interi primi tra loro, allora esiste un intero<br />
c tale che b · c mod a = 1.<br />
Teorema 9.4.1. Sia n prodotto <strong>di</strong> numeri primi <strong>di</strong>stinti. Se a, b ∈ N ∗ sono<br />
tali che ab − 1 è <strong>di</strong>visibile per p − 1 per ogni p|n, allora<br />
m ab ≡ m mod n<br />
per ogni intero m (anche se m non è primo con n).
4. IL SISTEMA RSA 112<br />
Dimostrazione. Sia n = p1p2 · · · pr con pi numero primo per ogni i = 1, 2, . . . , r<br />
e pi = pj per i = j. Iniziamo con il <strong>di</strong>mostrare che per ogni m ∈ N ∗ risulta<br />
m ab ≡ mod p1.<br />
Distinguiamo due casi.<br />
1 ◦ caso - Gli interi m e p1 non sono primi fra loro. Allora m è multiplo <strong>di</strong> p1<br />
perchè p1 è un numero primo; ovviamente anche m ab è multiplo <strong>di</strong> p1 e pertanto<br />
si ha<br />
m ≡ 0 mod p1, m ab ≡ 0 mod p1<br />
da cui segue<br />
m ab ≡ m mod p1.<br />
2 ◦ caso - Gli interi m e p1 sono primi fra loro. Allora:<br />
(1) φ(p1) = p1 − 1 perchè p1 è primo, inoltre ab − 1 è <strong>di</strong>visibile per (p1 − 1),<br />
ossia ab ≡ 1 mod φ(p1), allora si ha<br />
ab = 1 + kφ(p1) = 1 + k(p1 − 1).<br />
(2) Da (1) si ha m ab = m · m kφ(p1) = m · (m p1−1 ) k ; dal Teorema <strong>di</strong> Eulero<br />
precedentemente richiamato si ha m φ(p1) ≡ 1 mod p1, m p1−1 ≡ 1 mod p1.<br />
Ne segue che m ab ≡ m · 1 k mod p1 ossia<br />
Rimane così provato che<br />
per ogni m ∈ N ∗ .<br />
m ab ≡ m mod p1.<br />
m ab ≡ m mod p1<br />
Quanto <strong>di</strong>mostrato per il numero primo p1, vale per ogni numero primo<br />
pi tale che ab − 1 è <strong>di</strong>visibile per pi − 1 e pertanto, poichè n = p1p2 · · · pr è<br />
prodotto <strong>di</strong> numeri primi <strong>di</strong>stinti sod<strong>di</strong>sfacenti la proprietà richiesta, per<br />
ogni i = 1, 2, . . . , r si ha che pi <strong>di</strong>vide l’intero m ab − m e, per i = j, anche<br />
il prodotto pipj <strong>di</strong>vide m ab − m. Ne segue che per n = p1p2 · · · pr si ha<br />
per ogni m ∈ N ∗ .<br />
GENERAZIONE delle CHIAVI<br />
m ab ≡ m mod n<br />
Poichè ogni partecipante al sistema RSA deve essere fornito <strong>di</strong> due chiavi, prima<br />
<strong>di</strong> descrivere l’algoritmo ve<strong>di</strong>amo come si generano le chiavi pubbliche e le chiavi<br />
private.
4. IL SISTEMA RSA 113<br />
E’ consigliabile affidare ad un centro addetto questa operazione. Per ogni<br />
partecipante il centro sceglie due numeri primi <strong>di</strong>stinti p e q ognuno <strong>dei</strong> quali sia<br />
<strong>di</strong> almeno 100 cifre e li moltiplica ottenendo n = pq.<br />
Successivamente calcola φ(n) = φ(pq) = (p − 1)(q − 1) e infine il centro sceglie<br />
un numero naturale e primo con φ(n), ossia MCD(e, p − 1) = MCD(e, q − 1) = 1,<br />
e calcola d tale che<br />
e · d mod φ(n) = 1.<br />
Ora il partecipante al sistema riceve le sue due chiavi:<br />
- Chiave pubblica: la coppia <strong>di</strong> numeri (n, e).<br />
- Chiave privata: il numero d.<br />
Osservazioni<br />
• Nessun partecipante ha bisogno <strong>di</strong> conoscere i numeri p, q, φ(n). Anche<br />
per questo è consigliabile non lasciare al singolo il compito <strong>di</strong> scegliere<br />
la sua chiave ma lasciare il compito ad un centro addetto che poi cancellerà<br />
imme<strong>di</strong>atamente i dati usati per il calcolo delle chiavi, ciò eviterà<br />
che qualcuno possa impadronirsi <strong>di</strong> p, q, φ(n) e quin<strong>di</strong> calcolare la chiave<br />
segreta.<br />
• Il numero e può essere scelto in modo opportuno affinchè sia facile calcolare<br />
me mod n. Con questo scopo:<br />
– E’ stato proposto <strong>di</strong> scegliere sempre come numero e il quarto numero<br />
<strong>di</strong> Fermat F4 = 224+1 = 65537 perchè la sua rappresentazione binaria<br />
è semplicemente 10000000000000001 e quin<strong>di</strong> è relativamente facile<br />
calcolare me . Ovviamente l’altro numero della chiave pubblica, ossia<br />
il numero n, è <strong>di</strong>verso per ogni partecipante al sistema e questo è<br />
sufficiente per garantire che le chiavi segrete siano tutte <strong>di</strong>verse.<br />
– Un altro modo è quello <strong>di</strong> prendere un numero primo che non <strong>di</strong>vida<br />
φ(n).<br />
– Un terzo modo <strong>di</strong> procedere è quello <strong>di</strong> scegliere a caso un numero e,<br />
calcolare MCD(e, φ(n)) usando l’algoritmo <strong>di</strong> Euclide, e poi <strong>di</strong>videre<br />
e per questo MCD. A questo punto si calcola il numero d (chiave<br />
segreta) corrispondente ad e usando l’algoritmo <strong>di</strong> Euclide. Ovviamente<br />
calcolare φ(n) non è un problema perchè p e q sono primi fra<br />
loro.<br />
• Con la chiave pubblica si può trovare la chiave segreta solo se si riesce a<br />
fattorizzare n nei suoi fattori primi p e q, ma ad oggi non si conoscono<br />
algoritmi per fattorizzare numeri gran<strong>di</strong> in tempi ragionevoli. Si tenga<br />
conto che RSA utilizza numeri primi che hanno da 100 a 200 cifre e quin<strong>di</strong>,<br />
anche con gli algoritmi più evoluti, risulta davvero <strong>di</strong>fficile riuscire a<br />
fattorizzare n in tempi ragionevoli.
ALGORITMO RSA<br />
4. IL SISTEMA RSA 114<br />
L’algoritmo RSA è una <strong>di</strong>retta applicazione del Teorema <strong>di</strong> Eulero precedentemente<br />
richiamato.<br />
Supponiamo che A voglia inviare un messaggio a B. Anzittutto A deve conoscere<br />
la chiave pubblica <strong>di</strong> B che supponiamo sia la coppia (n, e).<br />
• Il messaggio deve essere co<strong>di</strong>ficato in una sequenza <strong>di</strong> uno o più interi<br />
positivi mi tali che per ogni i sia mi < n e MCD(mi, n) = 1.<br />
In realtà la richiesta che sia MCD(mi, n) = 1 è una con<strong>di</strong>zione che semplifica la<br />
procedura, ma non è necessaria, come <strong>di</strong>mostra il Teorema 9.4.1 . La richiesta non<br />
fa perdere in generalità.<br />
Per co<strong>di</strong>ficare in modo che i messaggi mi sod<strong>di</strong>sfino alle richieste soprascritte,<br />
esistono vari mo<strong>di</strong>; nella maggior parte <strong>dei</strong> computers si usa il sistema ASCII (ve<strong>di</strong><br />
esempio 2.5.4). Senza soffermarci sulla procedura <strong>di</strong> co<strong>di</strong>fica, supponiamo che il<br />
messaggio sia stato co<strong>di</strong>ficato nell’intero positivo m con m < n e MCD(m, n) = 1.<br />
CIFRATURA<br />
Nota la chiave pubblica (n, e) del destinatario B, al testo in chiaro m si applica<br />
la formula<br />
m e mod n = t<br />
in questo modo A ottiene il testo cifrato t da trasmettere a B.<br />
DECIFRATURA<br />
Il signor B riceve t e decifra applicando la sua chiave privata con la formula<br />
t d mod n = m.<br />
Questo metodo per cifrare e decifrare funziona perchè applica il Teorema <strong>di</strong><br />
Eulero e il Teorema 9.4.1. Infatti da t ≡ m e mod n segue t d ≡ m ed mod n.<br />
Da ed ≡ 1 mod φ(n) si ha ed = 1 + kφ(n) e pertanto m ed = m 1+kφ(n) da cui<br />
t d ≡ m 1+kφ(n) mod n. Poichè MCD(m, n) = 1 e m < n, per il Teorema <strong>di</strong> Eulero<br />
si ha m 1+kφ(n) ≡ m mod n e quin<strong>di</strong><br />
t d ≡ m mod n.<br />
Poichè m < n non c’è ambiguità nella determinazione del numero congruo a<br />
t d mod n perchè fra 0 e n − 1 ce ne è uno solo.<br />
Esempio 9.4.2. Supponiamo che Carla voglia inviare un messaggio a Ugo con<br />
il metodo RSA.
4. IL SISTEMA RSA 115<br />
(1) Generiamo le chiavi <strong>di</strong> Ugo. Scegliamo due numeri primi molto gran<strong>di</strong> p e<br />
q. Come già detto, solitamente questi vengono scelti dal centro <strong>di</strong> calcolo<br />
e poi cancellati. Nel nostro esempio, per ragioni <strong>di</strong> calcolo, scegliamo<br />
numeri piccoli: sia p = 17 e q = 11.<br />
(2) Calcoliamo n = pq = 17 · 11 = 187 e scegliamo un numero naturale e tale<br />
che sia primo con φ(n) = (p − 1)(q − 1) = 160, sia e = 7.<br />
(3) Calcoliamo d tale che e · d mod φ(n) = 1, ossia tale che 7 · d mod 160 = 1,<br />
pertanto d = 23.<br />
Ugo ha come chiave pubblica la coppia (n, e) = (187, 7) e come chiave<br />
privata d = 23.<br />
(4) Per cifrare il messaggio, Carla deve prima trasformare il messaggio in<br />
un numero m. Supponiamo che Carla utilizzi il sistema ASCII e, per<br />
semplicità, supponiamo che il messaggio sia costituito dalla sola lettera<br />
V . Questa lettera nel co<strong>di</strong>ce ASCII è rappresentata dal numero 86 ossia<br />
m = 86 (e risulta 86 < 187).<br />
(5) Carla per cifrare il messaggio m = 86, prende la chiave pubblica <strong>di</strong> Ugo che<br />
è (n, e) = (187, 7) e calcola t = 86 7 mod 187. Per eseguire questo calcolo<br />
conviene usare le proprietà del calcolo modulare esponenziale. Poichè<br />
7 = 1 + 2 + 2 2 = 1 + 2 + 4, si ha<br />
86 7 mod 187 = (86 1 mod 187) · (86 2 mod 187) · (86 4 mod 187)<br />
e poichè 86 2 = 7396 ≡ 103 mod 187 e 86 4 = 54700816 ≡ 137 mod 187,<br />
si ha<br />
86 7 = 86 · 103 · 137 = 1213546 ≡ 103 mod 187.<br />
Il messaggio che Carla invia e Ugo riceve è t = 103.<br />
(6) Una eventuale spia, vedendo il messaggio t = 103 non riesce a capire cosa<br />
è stato inviato (nel co<strong>di</strong>ce ASCII t = 103 corrisponde alla virgola). Ugo,<br />
invece, avendo la chiave privata, riesce a decifrarlo.<br />
(7) Per decifrare il messaggio e ottenere m, Ugo deve solo calcolare la congruenza<br />
t d mod n ossia 103 23 mod 187.<br />
Poichè 23 = 1 + 2 + 2 2 + 2 4 = 1 + 2 + 4 + 16, si deve calcolare<br />
{(103 1 mod187) · (103 2 mod187) · (103 4 mod187) · (103 16 mod187)} mod 187<br />
e poichè<br />
103 2 mod 187 = 137, 103 4 mod 187 = 69, 103 16 mod 187 = 103<br />
si ha<br />
{(103 · 137 · 69 · 103} mod 187, 100286877 mod 187 = 86<br />
e dunque Ugo decifra che il messaggio inviatogli da Carla è m = 86 che<br />
nel co<strong>di</strong>ce ASCII è la lettera V.
4. IL SISTEMA RSA 116<br />
Esempio 9.4.3. Carla e Francesco utilizzano il sistema RSA per scambiarsi un<br />
messaggio. Francesco ha ricevuto da Carla questo messaggio: qual è il corso che<br />
ti è piaciuto <strong>di</strong> più ?<br />
Francesco vuole rispondere con il seguente messaggio<br />
algebra<br />
Per inviare la risposta a Carla, Francesco dovrà procedere come segue.<br />
(1) Trasforma ogni lettera del messaggio in un intero in base all’equivalenza<br />
numerica a due cifre <strong>di</strong> cui alla tabella sotto riportata (la corrispondenza<br />
lettera-numero assegna ad ogni lettera un numero <strong>di</strong> due cifre ).<br />
Tabella - Equivaleza lettere-numeri a due cifre o binari<br />
a → 00 = 00000 j → 09 = 01001 s → 18 = 10010<br />
b → 01 = 00001 k → 10 = 01010 t → 19 = 10011<br />
c → 02 = 00010 l → 11 = 01011 u → 20 = 10100<br />
d → 03 = 00011 m → 12 = 01100 v → 21 = 10101<br />
e → 04 = 00100 n → 13 = 01101 w → 22 = 10110<br />
f → 05 = 00101 o → 14 = 01110 x → 23 = 10111<br />
g → 06 = 00110 p → 15 = 01111 y → 24 = 11000<br />
h → 07 = 00111 q → 16 = 10000 z → 25 = 11001<br />
i → 08 = 01000 r → 17 = 10001<br />
La sequenza <strong>di</strong> numeri corrispondenti al messaggio algebra è<br />
00 11 06 04 01 17 00<br />
(2) Guarda l’elenco delle chiavi pubbliche e trova<br />
Chiave pubblica <strong>di</strong> Carla (nC, eC) = (1003, 3).<br />
(3) Ora Francesco deve sud<strong>di</strong>videre il messaggio da inviare in messaggi unitari<br />
mi in modo che l’intero associato ad ogni messaggio unitario sia minore<br />
<strong>di</strong> nC = 1003 e relativamente primo con 1003. Osserva che <strong>di</strong>videndo<br />
il messaggio algebra in blocchi <strong>di</strong> due lettere (ossia <strong>di</strong>grafi) nel modo<br />
seguente<br />
al ge br ax,<br />
i numeri corrispondenti ai singoli messaggi unitari sono<br />
0011 0604 0117 0023,<br />
ossia, rispettivamente, i numeri m1 = 11, m2 = 604, m3 = 117, m4 = 23<br />
che sono tutti minori <strong>di</strong> 1003 e relativamente primi con 1003. Per trovare<br />
il MCD tra questi numeri e 1003, Francesco utilizzerà l’algoritmo euclideo<br />
delle <strong>di</strong>visioni successive perchè non conosce la fattorizzazione <strong>di</strong> nC in<br />
fattori primi. Si noti che Francesco ha dovuto aggiungere al messaggio<br />
unitario finale la lettera x, in modo da farlo <strong>di</strong>ventare un <strong>di</strong>grafo. Se<br />
avesse pensato <strong>di</strong> <strong>di</strong>videre il messaggio in blocchi <strong>di</strong> tre lettere anzichè <strong>di</strong>
4. IL SISTEMA RSA 117<br />
due, ci sarebbero <strong>dei</strong> messaggi unitari mi cui corrispondono degli interi<br />
maggiori <strong>di</strong> nC:<br />
alg → m1 = 606 < 1003,<br />
ebr → m2 = 40117 > 1003,<br />
axx → m3 = 2323 > 1003,<br />
e pertanto non varrebbe MCD(mi, nC) = 1 che è una con<strong>di</strong>zione che<br />
semplifica la procedura.<br />
Dunque si considera la sud<strong>di</strong>visione del messaggio algebra in blocchi <strong>di</strong><br />
due lettere e pertanto i messaggi unitari in chiaro saranno rappresentati<br />
dai seguenti numeri:<br />
m1 = 11, m2 = 604, m3 = 117, m4 = 23.<br />
(4) Ora inizia l’operazione <strong>di</strong> cifratura vera e propria per l’invio del messaggio<br />
a Carla in modo tale che quest’ultima lo possa decifrare e sia l’unica a<br />
poterlo fare in un tempo ragionevole. Per cifrare il messaggio da spe<strong>di</strong>re<br />
a Carla, Francesco eleva ogni mi alla potenza eC. Il messaggio cifrato<br />
che Francesco invia sarà dunque rappresentato dai seguenti numeri ti, i =<br />
1, 2, 3, 4.<br />
t1 = m eC<br />
1 mod nC = 11 3 mod 1003 = 328,<br />
t2 = m eC<br />
2 mod nC = 604 3 mod 1003 = 797,<br />
t3 = m eC<br />
3 mod nC = 117 3 mod 1003 = 825,<br />
t4 = m eC<br />
4 mod nC = 23 3 mod 1003 = 131.<br />
A questo punto Francesco ha terminato la sua operazione e invia a Carla<br />
il messaggio cifrato costituito dai messaggi unitari<br />
t1 = 328, t2 = 797, t3 = 825, t4 = 131,<br />
(5) Carla ha ricevuto il messaggio e deve procedere alla decifratura, cioè per<br />
ogni ti deve scoprire il messaggio originario mi sapendo che<br />
ti = m eC<br />
i<br />
mod nC.<br />
Carla, e solo lei, ha la chiave segreta dC che, ricor<strong>di</strong>amo, sod<strong>di</strong>sfa alle<br />
proprietà<br />
• 1 ≤ dC < φ(nC) = (p − 1)(q − 1),<br />
• dC è soluzione della congruenza eCdC ≡ 1 (modφ(nC)).<br />
Inoltre, la congruenza soprascritta ha un’unica soluzione perchè<br />
MCD(eC, φ(nC)) = 1. Nel nostro caso la soluzione, chiave segreta <strong>di</strong><br />
Carla, è<br />
dC = 619<br />
infatti nC = 1003 = 17 · 59, φ(1003) = 16 · 58 = 928, e pertanto la<br />
soluzione della congruenza 3x ≡ 1 mod 928, è dC = 619.<br />
(6) Per decifrare, Carla eleva ogni ti a dC = 619, cioè calcola<br />
328 619 , 797 619 , 825 619 , 131 619 .
4. IL SISTEMA RSA 118<br />
L’esponente 619 è grande allora per il calcolo Carla scrive 619 in base 2:<br />
619 = (1001101011)2 = 512 + 64 + 32 + 8 + 2 + 1.<br />
Allora, per ogni i = 1, 2, 3, 4, si ha<br />
t 619<br />
i<br />
= t 512<br />
i<br />
· t 64<br />
i · t 32<br />
i · t 8 i · t 2 i · t 1 i .<br />
Per i = 1 le potenze si calcolano facilmente utilizzando la seguente tabella<br />
relativa a t1 = 328 :<br />
k C k 1 mod 1003<br />
1 328<br />
2 328 2 mod 1003 = 263<br />
2 2 = 4 263 2 mod 1003 = 965<br />
2 3 = 8 965 2 mod 1003 = 441<br />
2 4 = 16 441 2 mod 1003 = 902<br />
2 5 = 32 902 2 mod 1003 = 171<br />
2 6 = 64 171 2 mod 1003 = 154<br />
2 7 = 128 154 2 mod 1003 = 647<br />
2 8 = 256 647 2 mod 1003 = 358<br />
2 9 = 512 358 2 mod 1003 = 783<br />
Dai calcoli riportati nella tabella, si ottiene<br />
328 619 = 328 512 · 328 64 · 328 32 · 328 8 · 328 2 · 328 1 ≡<br />
≡ 783 · 154 · 171 · 441 · 263 · 328 ≡ 11 mod 1003.<br />
Si noti che, elevando t1 = 328 all’esponente dC = 619, si ottiene il numero<br />
11 = m1, cioè il numero corrispondente al messaggio originario. Carla<br />
procede allo stesso modo con gli altri tre blocchi del messaggio e, in<br />
definitiva, ottiene<br />
328 619 mod 1003 = 11, 797 619 mod 1003 = 604,<br />
825 619 mod 1003 = 117, 131 619 mod 1003 = 23.<br />
Questi numeri vanno pensati a quattro cifre, ossia<br />
0011, 0604, 0117, 0023,<br />
e corrispondono ai quattro blocchi <strong>di</strong> messaggio originali che erano <strong>dei</strong><br />
<strong>di</strong>grafi e pertanto Carla deve <strong>di</strong>videre ciascuno in due parti e ciascuna delle<br />
due parti rappresenta una lettera. Utilizzando la tabella dell’equivalenza<br />
lettere-numeri riportata al punto (1), Carla ottiene<br />
00 11 06 04 01 17 00 23<br />
a l g e b r a x<br />
e quin<strong>di</strong> riesce a capire quale è il corso che è piaciuto <strong>di</strong> più a Francesco.
4. IL SISTEMA RSA 119<br />
Nota 9.4.4. Abbiamo detto che il messaggio unitario deve essere minore <strong>di</strong><br />
n. Dimostriamo con un esempio che la con<strong>di</strong>zione è necessaria. Consideriamo il<br />
messaggio<br />
no<br />
e supponiamo <strong>di</strong> inviarlo a Francesco che ha come chiave pubblica la coppia (nF =<br />
77, eF = 13). Consideriamo l’intera parola no come messaggio unitario (<strong>di</strong>grafo):<br />
(1) trasformiamo il messaggio in un numero associando ad ogni lettera il suo<br />
equivalente numerico (ve<strong>di</strong> Tabella al punto (1) dell’esempio 9.4.3). Il<br />
numero associato risulta essere<br />
1314<br />
che è maggiore <strong>di</strong> nF = 77;<br />
(2) per cifrare eleviamo 1314 alla potenza eF = 13. Si ottiene<br />
(3) Francesco riceve il messaggio<br />
1314 13 ≡ 26 mod 77 , t = 26.<br />
26<br />
Per decifrare questo messaggio Francesco utilizza la sua chiave segreta che<br />
è dF = 37 ( soluzione della congruenza 13 · dF ≡ 1 mod φ(77), cioè 13 ·<br />
dF ≡ 1 mod 60).<br />
Elevando 26 alla potenza 37 e calcolando mod 77, si ottiene 5 che<br />
Francesco interpreta come<br />
f<br />
e quin<strong>di</strong> non ritrova il messaggio che gli era stato inviato (ve<strong>di</strong> tabella<br />
equivalenza lettere-numeri riportata nell’esempio 9.4.3).<br />
Dunque è necessario che il messaggio unitario sia minore <strong>di</strong> nF , altrimenti<br />
è impossibile decifrare il messaggio.<br />
Nota 9.4.5. Nell’esempio 9.4.3 abbiamo visto che per inviare a Carla il messaggio<br />
algebra, Francesco lo ha sud<strong>di</strong>viso in <strong>di</strong>grafi. Per fare ciò ha dovuto procedere<br />
per tentativi, verificando che i numeri corrispondenti ai singoli <strong>di</strong>grafi fossero tutti<br />
minori <strong>di</strong> nC e primi con esso.<br />
C’è però un metodo migliore per scegliere in che modo sud<strong>di</strong>videre il messaggio.<br />
Non conviene <strong>di</strong>videre il messaggio originario algebra, ma conviene <strong>di</strong>videre<br />
il messaggio numerico ottenuto associando un numero a due cifre ad ogni lettera.<br />
Anzi, c’è un modo naturale <strong>di</strong> sud<strong>di</strong>viderlo, ve<strong>di</strong>amo quale.<br />
Dopo che si è trasformato il messaggio in una serie <strong>di</strong> numeri, ciascuno a due cifre,<br />
consideriamo il numero (detto messaggio numerico) costituito dalla successione<br />
<strong>di</strong> tutte le cifre. Sud<strong>di</strong>vi<strong>di</strong>amo questo numero in blocchi <strong>di</strong> k cifre dove<br />
k = numero <strong>di</strong> cifre <strong>di</strong> nC <strong>di</strong>minuito <strong>di</strong> una unità .
4. IL SISTEMA RSA 120<br />
In questo modo, senza dover esaminare il messaggio, il singolo messaggio numerico<br />
unitario è automaticamente minore <strong>di</strong> nC. Non solo, questo modo <strong>di</strong> procedere è<br />
noto a tutti perchè tutti conoscono nC e sanno che il mittente del messaggio <strong>di</strong>vide<br />
il messaggio numerico in blocchi ottenuti in questo modo.<br />
Ve<strong>di</strong>amo un esempio.<br />
Esempio 9.4.6. Supponiamo che Francesco debba inviare a Carla il messaggio<br />
vieni qui<br />
(1) Per prima cosa Francesco trasforma il messaggio, trascurando la spaziatura,<br />
nella sequenza <strong>di</strong> numeri <strong>di</strong> due cifre (Tabella dell’esempio 9.4.3)<br />
che scriveremo come<br />
21 08 04 13 08 16 20 08<br />
2108041308162008.<br />
Ciò non crea ambiguità perchè sappiamo che ogni numero associato ad una<br />
lettera del messaggio originario è costituito da due cifre. Quello ottenuto<br />
è il messaggio numerico.<br />
(2) Come già scritto nell’esempio 9.4.3, le chiavi pubblica e privata <strong>di</strong> Carla<br />
sono, rispettivamente, (nC = 1003, eC = 3) e dC = 619. Osservato<br />
che il numero nC = 1003 ha quattro cifre, Francesco spezza il messaggio<br />
numerico in gruppi <strong>di</strong> 4 − 1 = 3 cifre, ossia in trigrafi, come segue:<br />
210 804 130 816 200 823.<br />
Si noti che Francesco ha aggiunto 23, corrispondente alla lettera x, in<br />
modo che tutti i messaggi numerici unitari siano costituiti da tre cifre.<br />
In questo modo ha spezzato il messaggio numerico in messaggi numerici<br />
unitari che sono <strong>dei</strong> trigrafi e ogni messaggio unitario è sicuramente minore<br />
<strong>di</strong> nC = 1003. Si osservi che questa sud<strong>di</strong>visione non è una sud<strong>di</strong>visione del<br />
messaggio originario vieni qui perchè i blocchi numerici unitari <strong>di</strong> tre cifre<br />
non corrispondono a nessun gruppo <strong>di</strong> lettere. Occorre inoltre controllare<br />
che ogni mi sia relativamente primo con 1003. E’ facile verificare che<br />
l’unica eccezione è quella <strong>di</strong> 816. Ciò però non ha importanza perchè vale<br />
il Teorema 9.4.1 che ci assicura che la con<strong>di</strong>zione MCD(mi, 1003) è solo<br />
<strong>di</strong> utilità ma non strettamente necessaria. In definitiva i singoli messaggi<br />
numerici unitari sono<br />
m1 = 210, m2 = 804, m3 = 130, m4 = 816, m5 = 200, m6 = 823.<br />
Si noti che le operazioni fin qui fatte non corrispondono a nessun tipo <strong>di</strong><br />
cifratura, infatti la trasformazione <strong>di</strong> un messaggio in una successione <strong>di</strong><br />
numeri è standard così come la ripartizione dello stesso in gruppi <strong>di</strong> tre<br />
cifre, che <strong>di</strong>pende dal valore <strong>di</strong> nC che è pubblico.
5. LA FIRMA ELETTRONICA, AUTENTICAZIONE CON IL SISTEMA RSA 121<br />
(3) Si cifrano i messaggi numerici unitari e si ottiene:<br />
t1 = m eC<br />
1 mod nC, 210 3 mod 1003 = 301, t1 = 301,<br />
t2 = m eC<br />
2 mod nC, 804 3 mod 1003 = 975, t2 = 975,<br />
t3 = m eC<br />
3 mod nC, 130 3 mod 1003 = 430, t3 = 430,<br />
t4 = m eC<br />
4 mod nC, 816 3 mod 1003 = 357, t4 = 357,<br />
t5 = m eC<br />
5 mod nC, 200 3 mod 1003 = 72, t5 = 72,<br />
t6 = m eC<br />
6 mod nC, 823 3 mod 1003 = 445, t6 = 445.<br />
(4) Carla riceve la seguente successione <strong>di</strong> messaggi unitari:<br />
t1 = 301, t2 = 975, t3 = 430, t4 = 357, t5 = 72, t6 = 445.<br />
Per decifrare, Carla eleva ogni ti alla sua chiave segreta dC = 619, ossia<br />
calcola<br />
301 619 , 975 619 , 430 619 , 357 619 , 72 619 , 445 619 .<br />
In definitiva, Carla trova<br />
301 619 mod 1003 = 210 = m1, 975 619 mod 1003 = 804 = m2,<br />
430 619 mod 1003 = 130 = m3, 357 619 mod 1003 = 816 = m4,<br />
72 619 mod 1003 = 200 = m5, 445 619 mod 1003 = 823 = m6.<br />
Questi gruppi <strong>di</strong> tre cifre, raggruppati a due a due, danno<br />
21, 08, 04, 13, 08, 16, 20, 08, 23<br />
e quin<strong>di</strong> Carla riesce a leggere il messaggio vieni quix che capisce significa<br />
vieni qui.<br />
5. La firma elettronica, autenticazione con il sistema RSA<br />
Il sistema RSA consente <strong>di</strong> risolvere il problema della autenticazione elettronica<br />
<strong>di</strong> una firma. Ad esempio, se Francesco riceve un messaggio da una persona che<br />
si firma Carla, deve essere certo che sia stata proprio Carla ad inviarglielo. Se<br />
(nC, eC) e dC sono la chiave, rispettivamente, pubblica e privata <strong>di</strong> Carla, per<br />
risolvere questo problema si procede come segue.<br />
(1) Carla scrive il messaggio m1 contenente la sua firma F e, perchè la firma<br />
possa essere autenticata, aggiunge il messaggio m2 con m2 = F dC ( mod nC),<br />
(ricor<strong>di</strong>amo che dC è la sua chiave segreta che solo lei conosce). Poi, con<br />
le solite modalità <strong>di</strong> cifratura, invia a Francesco il messaggio cifrato.<br />
(2) Francesco, con le solite modalità, decifra il messaggio e per verificare<br />
l’autenticità della firma calcola m eC<br />
2 (mod nC).
6. SICUREZZA DEL SISTEMA RSA 122<br />
(3) Se m eC<br />
2 (mod nC) = F, allora la firma è autentica (e solo in questo caso)<br />
perchè<br />
m eC<br />
2 ≡ (F dC ) eC = F dCeC ≡ F( mod nC).<br />
La firma è quella <strong>di</strong> Carla perchè solo lei conosce la propria chiave privata<br />
che è la sola compatibile con eC e nC utilizzati da Francesco.<br />
Notiamo che per l’autentica della firma sono state usate solo le chiavi relative<br />
a colui che spe<strong>di</strong>sce il messaggio (ovviamente per cifrare e decifrare il messaggio<br />
occorreranno, al solito, anche le chiavi del destinatario).<br />
Esempio 9.5.1. Carla invia un documento firmato a Francesco.<br />
• Chiave pubblica <strong>di</strong> Carla : (nC = 77, eC = 13),<br />
• Chiave privata <strong>di</strong> Carla : dC = 37.<br />
(Poichè 77 = 11·7, la chiave privata <strong>di</strong> Carla è dC = 37 perchè 37·13 ≡ 1(mod 60),<br />
dove 60 = φ(77).)<br />
Supponiamo che la firma <strong>di</strong> Carla sia F = 5.<br />
(1) Nell’inviare il messaggio a Francesco, Carla ha autenticato la sua firma<br />
aggiungendo il messaggio<br />
47 (ottenuto calcolando 5 37 mod 77).<br />
(2) Francesco verifica l’autenticità della firma calcolando<br />
47 13 mod 77 (= 5).<br />
(3) La firma è autentica perchè Francesco ottiene 5 che è la firma <strong>di</strong> Carla .<br />
6. Sicurezza del sistema RSA<br />
La sicurezza del sistema RSA sta nel fatto che non esiste a tutt’oggi un algoritmo<br />
efficiente per fattorizzare numeri gran<strong>di</strong>. Se A invia a B un messaggio m,<br />
un estraneo che tentasse <strong>di</strong> decifrarlo abusivamente dovrebbe trovare la fattorizzazione<br />
della chiave pubblica nB <strong>di</strong> B. Nel caso che nB sia prodotto <strong>di</strong> due numeri<br />
primi ciascuno con 100 e più cifre, anche utilizzando i più sofisticati algoritmi e<br />
i calcolatori più veloci, occorrerebbero anni <strong>di</strong> calcolo per fattorizzare nB e pertanto<br />
si ritiene che la fattorizzazione <strong>di</strong> nB sia impossibile per un estraneo non<br />
autorizzato. Questo però è vero in generale, ma non sempre, come ha mostrato il<br />
seguente episo<strong>di</strong>o.<br />
Nell’agosto 1977, dalle colonne della pagina Mathematical Games <strong>di</strong> M. Gardner,<br />
i tre inventori del sistema RSA sfidarono i lettori della rivista Scientific American<br />
a decifrare un messaggio corrispondente ad un numero a 129 cifre, operazione
6. SICUREZZA DEL SISTEMA RSA 123<br />
che secondo loro avrebbe richiesto miliar<strong>di</strong> <strong>di</strong> anni. Offrivano 100 dollari <strong>di</strong> premio<br />
a chi avesse trovato la soluzione. Per decifrare il loro messaggio originale era<br />
necessario fattorizzare il numero<br />
n = 11438162575788886766923577997614661201021829672124236256256184293<br />
5706935245733897830597123563958705058989075147599290026879543541,<br />
che era stato pubblicato assieme al numero e = 9007, ossia (n, e) era la chiave<br />
pubblica <strong>di</strong> Rivest, Shamir e Adleman. Per garantire che il messaggio proveniva<br />
proprio dai tre stu<strong>di</strong>osi, fu aggiunta la seguente autenticazione della loro firma<br />
ottenuta usando la chiave segreta dell’algoritmo<br />
1671786115038084424601527138916839824543690103235831121783503844<br />
6929062655448792237114490509578608655662496577974840004057020373.<br />
Elevando questo numero alla potenza 9007 e riducendo modulo n si otteneva il<br />
numero<br />
0609181920001915122205180023091419001<br />
5140500082114041805040004151212011819<br />
corrispondente alla frase<br />
First solver wins one hundred dollars,<br />
che era la garanzia che il messaggio proveniva proprio da Rivest, Shamir, Adleman.<br />
Diciassette anni dopo il matematico Arjen K. Lenstra insieme ad un gruppo<br />
<strong>di</strong> qualche centinaio <strong>di</strong> persone, in soli otto mesi riuscì a trovare la soluzione. La<br />
tecnica usata per affrontare il problema è quella che prende il nome <strong>di</strong> crivello<br />
quadratico polinomiale multiplo, una tecnica che permette <strong>di</strong> sud<strong>di</strong>videre il lavoro<br />
in tante parti più piccole. Per organizzare questo lavoro, Lenstra si servì <strong>di</strong> centinaia<br />
<strong>di</strong> collaboratori in tutto il mondo impegnando migliaia <strong>di</strong> calcolatori, il tutto<br />
coor<strong>di</strong>nato via internet. Ognuno <strong>di</strong> questi collaboratori mandò a Lenstra i risultati<br />
della parte <strong>di</strong> lavoro da loro svolta. Unendo il tutto, con un supercalcolatore in<br />
due giorni furono trovati i due fattori, uno <strong>di</strong> 64 cifre e uno <strong>di</strong> 65 cifre. Questo<br />
permise a Lenstra <strong>di</strong> decifrare il messaggio <strong>di</strong> Rivest, Shamir e Adleman.<br />
Il messaggio <strong>di</strong>ceva<br />
the magic words are sqeamish ossifrage.<br />
A detta degli stessi autori, si tratta <strong>di</strong> parole senza senso, ma essi non si aspettavano<br />
che le parole potessero mai essere decifrate. Quella che sembrava una sfida<br />
impossibile, dopo 17 anni si era invece rivelata possibile. Si può allora concludere<br />
che la crittografia è ancora una scienza sperimentale. Un sistema ritenuto sicuro<br />
oggi può non esserlo domani!
CAPITOLO 10<br />
Gruppi e Insiemi <strong>di</strong> Permutazioni Equi<strong>di</strong>stanti<br />
Si rinvia al materiale fornito dal docente.<br />
124