Matematica Discreta III
Lezione del giorno 10 marzo 2008
Esempio: Nel codice di lunghezza 4 e cardinalità m=3:
C={ 0000, 1010, 0111 }
la probabilità che, supponendo trasmessa la parola v=0000C, venga ricevuta la parola w=1110 è
p(v/w)=p(1-p)3 (p=probabilità d’errore del canale simmetrico, (v,w)=3). Se per es. p=0,01 (cioè
statisticamente 1 bit ogni 100 è trasmesso errato), allora p(v,w)0,0097 (ossia statisticamente circa
1 volta su 100 la parola v viene ricevuta come w).
La probabilità che v=00000 venga ricevuta correttamente è p(v/v)=(1-p)4 (essendo (v,v)=0). Se per
es. p=0,01 come sopra, allora p(v,v)0,96. Ovviamente tale valore non dipende da vC ed è una
misura statistica della correttezza nella trasmissione delle parole lungo il canale (in pratica circa 4
parole su 100 statisticamente vengono trasmesse in modo errato).
Fissata la parola w{0,1}n, calcoliamo la probabilità pw che (in una generica trasmissione sul
canale) sia w la parola ricevuta. Ovviamente i casi possibili di parola inviata (equiprobabili per
l’ipotesi 1) sul canale) sono tutte le parole vC e dunque pw si otterrà sommando tutte le probabilità
p(v/w) al variare di vC:
pw =  p(v/w) =  p δ(v,w) (1  p) n δ(v,w)
vC
vC
(valore che ovviamente dipende solo da w).
Fissate le parole vC, w{0,1}n, più interessante è il calcolo di p1(v/w)=probabilità che,
supponendo ricevuta la parola w, sia v la parola inviata.
Possiamo ricorrere alla teoria della probabilità condizionata per calcolare p(v/w).
Ricordiamo che se X,Y sono 2 eventi casuali e se p(X/Y) è la probabilità che, supponendo
verificato Y, si verifichi X, si ha (formula di Bayes):
p(X/Y)= p(Y/X)[p(X)]/p(Y)]p(Y/X)
(dove p(X), p(Y) sono rispettivamente le probabilità che si verifichino X, Y).
Se Y={w è la parola ricevuta}, X={v è la parola trasmessa} si ha p(X/Y)=p1(v/w), p(Y/X)=
p(v/w)=pk(1-p)n-k, p(X)=costante (vedi ipotesi 1) sul canale), p(Y)=pw (valore che dipende solo da
w), da cui:
p1(v/w)= pk(1-p)n-kA(w)
dove A(w) è un valore che dipende solo da w.
La correzione dell’errore.
Una volta rilevata la presenza di errori nella trasmissione, si deve cercare, se possibile, di
correggerlo, risalendo alla parola del codice originariamente inviata (è la cosiddetta operazione di
decodifica).
La procedura di decodifica che useremo è quella che da maggiori garanzie dal punto di vista
probabilistico.
Decodifica secondo il principio della massima verosimiglianza (maximum likehood): se C è il
codice, la parola ricevuta w{0,1}n, viene decodificata come la parola vC che ha la massima
probabilità di essere quella inviata, quindi quella parola vC che rende massimo il valore di p1(v/w)
(ovviamente possono essere diverse le parole vC con tale proprietà, nel quale caso si sceglie
random una di esse come decodifica).
Faremo un’ulteriore ipotesi sul canale: supponiamo che la probabilità p dell’errore di trasmissione
su un singolo bit sia <1/2 (ipotesi realistica perché nei casi concreti p è molto minore: d’altronde se
p>1/2, basta modificare la parola ricevuta w sostituendo tutti i bits 1 con 0 e viceversa per ottenere
probabilità di errore 1-p<1/2).
Sotto tale ipotesi la decodifica secondo il principio della massima verosimiglianza coincide con la:
Decodifica secondo il principio della minima distanza (minimum distance): se C è il codice, la
parola ricevuta w{0,1}n viene decodificata come la parola vC che rende minima la distanza
(v,w).
Per dimostrare che (sotto le nostre ipotesi sul canale) i 2 principi coincidono, basta dimostrare che,
fissata w{0,1}n, al diminuire della distanza (v,w) (con vC) aumenta la probabilità p1(v/w) e
viceversa; in effetti se (v1,w)=k>h=(v2,w) come notato sopra è:
p1(v1/w)=pk(1-p)n-kA(w), p1(v2/w)=ph(1-p)n-hA(w)
ma p<1/2, 2p<1, p<1-p, dunque p1(v1/w)< p1(v2/w) (come si può dedurre facilmente notando che il
rapporto
[pk(1-p)n-k]/[ph(1-p)n-h]=pk-h(1-p)k-h=[p/(1-p)]k-h <1
essendo p/(1-p)<1, h-k>0).
Il viceversa si ottiene invertendo i passaggi.
Possiamo anche calcolare, per ogni parola v del codice C, la probabilità che, supponendo trasmessa
v, il principio della minima distanza decodifichi correttamente v. Se w è la parola ricevuta, si
decodifica correttamente v quando la distanza di v da w non è maggiore della distanza di w da
qualunque parola di C cioè quando w soddisfa la proprietà:
() (v,w)≤(z,w) per ogni parola zC
(la probabilità che in tale caso sia proprio v la codifica è 1/kw dove kw è il numero di parole zC tali
che (v,w)=(z,w), visto che nel caso in cui vi sia più di una parola di C a distanza minima da w,
viene decodificata una di esse con scelta random ).
Dunque la probabilità che v sia correttamente decodificata usando il principio della minima distanza
è la somma dei rapporti (v/w)/kw al variare di w fra le parole che soddisfano () .
Esempio. Consideriamo il codice dell’esempio precedente,di lunghezza 4 e cardinalità m=3:
C={ 0000, 1010, 0111 }
Fissiamo v=0000 e calcoliamo la probabilità che, trasmettendo v, essa venga decodificata
correttamente usando il principio della minima distanza.
Le parole w{0,1}4 che soddisfano () sono :
w=0000, 0100, 0001, 1000, 0010, 1100, 1001
I valori di kw sono rispettivamente:
w=0000  kw=1 (ovvio)
w=0100  kw=1 (oltre v nessuna parola di C dista da w meno di v)
w=0001  kw=1 (oltre v nessuna parola di C dista da w meno di v)
w=1000  kw=2 (oltre v anche 1010C ha distanza 1 da w come v)
w=0010  kw=2 (oltre v anche 1010C ha distanza 1 da w come v)
w=1100  kw=2 (oltre v anche 1010C ha distanza 2 da w come v)
w=1001  kw=2 (oltre v anche 1010C ha distanza 2 da w come v)
La probabilità che, inviando la parola v=0000, essa sia correttamente decodificata secondo il
principio della minima distanza è allora:
(1-p)4+p(1-p)3+p(1-p)3+p(1-p)3/2+p2(1-p)2/2+p2(1-p)2/2+p2(1-p)2/2
Se per es. p=0,01 (cioè statisticamente 1 bit ogni 100 è trasmesso errato), allora tale probabilità è
0,985 (ossia statisticamente circa 15 volte su 1.000 la parola v viene erroneamente decodificata).
Invece, inviando la parola v=0111, le parole w{0,1}4 che soddisfano () sono :
w=0111, 0101, 0011, 1000, 1101, 0110, 1111
e per ciascuna di esse si ha kw=1; dunque la probabilità che, inviando la parola v=0111, essa sia
correttamente decodificata secondo il principio della minima distanza è:
(1-p)4+p(1-p)3+p(1-p)3+p4+p2(1-p)2+p2(1-p)2+p(1-p)3
Se per es. p=0,01 (cioè statisticamente 1 bit ogni 100 è trasmesso errato), allora tale probabilità è
0,992 (ossia statisticamente circa 8 volte su 1.000 la parola v viene erroneamente decodificata:
notare che la probabilità di erratata decodifica è circa il doppio del caso in cui sia 0000 la parola
inviata).
Come si vede la probabilità di una corretta decodifica secondo il principio della minima distanza
può dipendere dalla parola inviata: vedremo in seguito che per alcuni particolari codici (i codici
lineari per esempio) tale probabilità è indipendente dalla parola inviata, ed è una caratteristica del
codice.
Ovviamente l’algoritmo di decodifica secondo il principio della minima distanza può essere molto
dispendioso in termini di calcolo se la cardinalità del codice è molto grande: ricevuta la parola w, si
devono calcolare tutte le distanze (v,w) al variare di v nel codice C e scegliere la minima.
Vedremo in seguito che per particolari categorie di codici (i codici lineari per esempio) l’algoritmo
di decodifica ha una complessità di calcolo molto minore.
Fissato un numero naturale s, diremo che il codice C{0,1}n è un s-codice a correzione d’errore
se, comunque date 2 parole distinte v,wC, le sfere di centro v,w e raggio s non si intersecano, cioé
se Rs(v)Rs(w)=, v,wC, vw.
Notiamo che se il codice C{0,1}n è un s-codice a correzione d’errore, certamente è in particolare
un s-codice a rilevazione d’errore: infatti se per assurdo esistesse una parola vC tale che wRs(v)
con wC, wv, si avrebbe wRs(v)Rs(w), contraddizione.
E’ facile dedurre che se le parole dell’s-codice a correzione d’errore C sono utilizzate come codifica
dei messaggi di un insieme M spediti da A a B attraverso un canale di trasmissione in cui il numero
degli errori è ≤s, il destinatario B è in grado di correggere gli errori nella trasmissione, risalendo in
modo univoco alla parola originariamente inviata mediante la decodifica secondo il principio della
minima distanza: infatti siano vC la parola inviata, w la parola erroneamente ricevuta, zC una
parola di C a distanza minima da w, e per assurdo sia zv: essendo il numero degli errori ≤s si
avrebbe (v,w)≤s, e per la minimalità di (v,w) si avrebbe anche (z,w)≤(v,w)≤s, quindi
wRs(v)Rs(z), contraddizione.
Caratterizziamo gli s-codici a correzione d’errore in termini di distanza (C):
Teorema. Sia dato un codice C{0,1}n di distanza =(C). Allora, fissato un numero intero s>0:
C è un s-codice a correzione d’errore  ≥2s+1.
Dimostrazione.
(): Se per assurdo fosse <2s+1, essendo =(C) la distanza minima fra parole distinte di C,
esisterebbero 2 parole distinte v,wC tali che (v,w)=≤2s.
Notiamo che, essendo in particolare C un s-codice a rilevazione d’errore, per un teorema precedente
si ha ≥s+1, dunque v,w differiscono in un numero ≥s+1di bits.
Costruiamo una parola t{0,1}n ottenuta da v modificando a piacere s dei  bits in cui v differisce
da w: si ha ovviamente (v,t)=s, (t,w)=-s≤2s-s=s, dunque tRs(v)Rs(w), contraddizione.
(): Basta dimostrare che comunque date 2 parole distinte v,wC si ha Rs(v)Rs(w)=. Se per
assurdo esistesse una parola tRs(v)Rs(w), sarebbe (v,t)≤s, (w,t)≤s, e per la diseguaglianza
triangolare si avrebbe:
≤(v,w)≤(v,t)+(w,t)≤2s (contraddizione).
Esempio. Nel codice esaminato in uno degli esempi precedenti:
C={ 00000, 01101, 10110, 11011 }
essendo =(C)=3, C è un 1-codice a correzione d’errore, come già osservato “empiricamente”
nella prima lezione (il codice era utilizzato nell’esempio per codificare le 4 direzioni cardinali, e si
era messo in evidenza la capacità di correggere un errore su un singolo bit) .
Utilizzando la decodifica secondo il principio della minima distanza, se viene per esempio ricevuta
la parola w=11101C la si decodifica come la parola di C a distanza minima cioè come v=01101:
se vi è stato un errore in un singolo bit, v è con certezza la parola inviata; in ogni caso v è la parola
che ha la maggiore probabilità di essere stata inviata.
Dal teorema precedente segue che il massimo valore s tale che il codice C sia un s-codice a
correzione d’errore è il massimo intero s tale che s((C)-1)/2, cioé s=((C)-1)/2 errori (dove x
è la parte intera di x): esso è anche il massimo numero di errori che il codice può correggere.
Utilizzando gli ultimi 2 risultati dimostrati (C è un s-codice a rilevazione d’errore  ≥s+1; C è un
s-codice a correzione d’errore  ≥2s+1) possiamo costruire una tabella che lega la distanza  del
codice C al numero (massimo) di errori rilevati o corretti: nella prima colonna indichiamo alcuni
valori possibili della distanza (C) di un codice C, e (in corrispondenza) nella seconda il massimo
numero di errori rilevati, nella terza il massimo numero di errori corretti:
1
2
3
4
5
6
7
0
1
2
3
4
5
6
0
0
1
1
2
2
3
I parametri principali di un codice CZ2n sono la lunghezza n (la lunghezza delle parole del
codice), la cardinalità m=C (il numero delle parole del codice, che coincide con il numero di
messaggi che sono codificati da C), e la distanza : diremo che il codice C è un (n, m, )-codice.
Ovviamente si cerca di rendere la lunghezza n minima possibile (per ragioni di economia di
trasmissione), ma la cardinalità C massima possibile (per codificare un maggior numero di
messaggi), ed anche la distanza  massima possibile (perché, per i 2 Teoremi precedenti ciò
permette di rilevare e correggere l’errore in presenza di un maggior numero di possibili errori nel
canale).
Ricordiamo anche che il rateo di informazione del codice C è (log2C)/n=(log2m)/n .
Esempio: il codice già considerato in precedenza:
C={ 00000, 01101, 10110, 11011 }
é un esempio di (5,4,3)-codice (sono 4 parole di lunghezza 5 e distanza minima 3).