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=0000C, 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 vC 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 vC e dunque pw si otterrà sommando tutte le probabilità p(v/w) al variare di vC: pw = p(v/w) = p δ(v,w) (1 p) n δ(v,w) vC vC (valore che ovviamente dipende solo da w). Fissate le parole vC, 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 vC che ha la massima probabilità di essere quella inviata, quindi quella parola vC che rende massimo il valore di p1(v/w) (ovviamente possono essere diverse le parole vC 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 vC 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 vC) 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 zC (la probabilità che in tale caso sia proprio v la codifica è 1/kw dove kw è il numero di parole zC 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 1010C ha distanza 1 da w come v) w=0010 kw=2 (oltre v anche 1010C ha distanza 1 da w come v) w=1100 kw=2 (oltre v anche 1010C ha distanza 2 da w come v) w=1001 kw=2 (oltre v anche 1010C 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,wC, le sfere di centro v,w e raggio s non si intersecano, cioé se Rs(v)Rs(w)=, v,wC, vw. 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 vC tale che wRs(v) con wC, wv, si avrebbe wRs(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 vC la parola inviata, w la parola erroneamente ricevuta, zC una parola di C a distanza minima da w, e per assurdo sia zv: 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 wRs(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,wC 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 tRs(v)Rs(w), contraddizione. (): Basta dimostrare che comunque date 2 parole distinte v,wC si ha Rs(v)Rs(w)=. Se per assurdo esistesse una parola tRs(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=11101C 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 CZ2n 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 è (log2C)/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).