• Non ci sono risultati.

Matematica Discreta II Lezione del giorno 28 novembre 2007 Teoria dei codici a rilevazione e correzione d’errore.

N/A
N/A
Protected

Academic year: 2021

Condividi "Matematica Discreta II Lezione del giorno 28 novembre 2007 Teoria dei codici a rilevazione e correzione d’errore."

Copied!
1
0
0

Testo completo

(1)

Matematica Discreta II

Lezione del giorno 28 novembre 2007

Teoria dei codici a rilevazione e correzione d’errore.

Supponiamo che un soggetto A debba spedire un’informazione ad un soggetto B attraverso un canale di comunicazione.

Poiché i canali attuali sono per lo più digitali, è necessario effettuare prima una codifica dell’informazione: se supponiamo, per semplicità, che il canale di comunicazione sia un canale binario, saranno spediti numeri binari, quindi blocchi di n cifre binarie a1a2…….an con ai=0,1 (supporremo anche che la lunghezza n del blocco sia costante).

Ognuno di tali blocchi in termini combinatori è una parola di lunghezza n sull’alfabeto {0,1}.

Se identifichiamo {0,1} con l’insieme Z2 delle classi di congruenza modulo 2, ogni parola di lunghezza n sull’alfabeto {0,1} può essere identificata con una n-upla di elementi di Z2 , quindi con un elemento del prodotto cartesiano di n insiemi tutti coincidenti con Z2 , che indicheremo con Z2n: Z2n = { v / v= a1a2…….an con ai=0,1Z2 }

Dal calcolo combinatorio sappiamo che le parole in Z2n sono in totale in numero di 2n .

Se l’informazione da spedire attraverso il canale è composta da elementi minimi di informazione contenuti in un insieme S (che possono per esempio essere singoli caratteri alfanumerici, oppure blocchi di alcuni di essi, o in generale qualunque elemento che contenga un’informazione di qualche natura), la codifica consiste nell’associare ad ogni elemento di S una parola di lunghezza n in Z2n : tale parola viene spedita lungo il canale, ricevuta da B, il quale effettua la decodifica, risalendo all’elemento di S che rappresenta l’informazione originaria (ovviamente per garantire l’univocità della decodifica, due elementi distinti di S devono avere codifiche diverse in Z2n ).

In termini formali la codifica è una funzione iniettiva f: S  Z2n , mentre la decodifica è una funzione g: Z2n  S tale che g(f(s))=s per ogni sS (quindi la composizione gf è la funzione identica di S). Si può notare che deve essere necessariamente S≤ 2n, dunque n≥log2S.

Tutte le possibili immagini di elementi di S mediante f (quindi tutte le possibili codifiche degli elementi di S) formano un sottoinsieme C di Z2n (che ha la stessa cardinalità di S), detto codice (binario) di lunghezza n: quindi un codice (binario) di lunghezza n non è altro che un sottoinsieme (non vuoto) di parole di lunghezza n in Z2n, dette appunto parole del codice.

Il canale di trasmissione attraverso il quale vengono trasmesse le informazioni può però essere disturbato da interferenze, rumori etc., e dunque una parola vZ2n trasmessa dal soggetto A può essere modificata da alcuni errori ed essere ricevuta come parola diversa wZ2n dal soggetto B.

Chiameremo errore (di trasmissione) la modifica di 1 singolo bit della parola inviata: quindi un bit 0 che si trasforma in 1 o viceversa.

Esempio.

Supponiamo che l’informazione trasmessa sia un’indicazione di direzione in una delle direzioni cardinali N,S,E,O, e che la codifica utilizzi un codice C1 di lunghezza 2 nel modo seguente:

N  00, S  01, E  10, O  11 Dunque in questo caso C1= Z22.

Questo codice è “economico” (le parole del codice hanno lunghezza “breve”), ma se si verifica 1 errore nella trasmissione esso non può essere rilevato: se una parola vC1 viene modificata in 1 bit, essa si trasforma in ogni caso in un’altra parola del codice, quindi in una parola “accettabile” e il soggetto B non può accorgersi dell’errore di trasmissione.

Supponiamo invece che la codifica utilizzi un codice C2 di lunghezza 3 nel modo seguente:

N  000, S  110, E  011, O  101 quindi C2={000,110,011,101}Z23 .

(2)

Questo codice, di lunghezza maggiore del precedente, è capace di rilevare il verificarsi di 1 singolo errore nella trasmissione: se una parola vC2 viene modificata in 1 bit, essa si trasforma in ogni caso in un’altra parola che non appartiene al codice, e il soggetto B si accorge che la parola ricevuta non è corretta. D’altronde questo codice non è capace di rilevare il verificarsi di 2 errori nella trasmissione: se per esempio la parola inviata é v=000C2 e viene modificata nel 2° e 3° bit, essa si trasforma nella parola w=011C2, e il soggetto B non può accorgersi dell’errore di trasmissione.

Pur rilevando 1 singolo errore di trasmissione, il codice C2 non è però sempre in grado di correggerlo, cioè di individuare con certezza la parola esatta che era stata inviata: per esempio se la parola inviata è v=000C2 e viene modificata nel 1° bit, essa si trasforma nella parola w=100C2, e il soggetto B (se è a conoscenza del fatto che al più 1 errore è possibile) dopo avere rilevato che si è verificato l’errore, non può essere certo della parola corretta inviata, perché questa potrebbe ugualmente essere la parola z=110 (con errore nel 2° bit) o la parola r=101 (con errore nel 3° bit).

Infine supponiamo invece che la codifica utilizzi un codice C3 di lunghezza 6 nel modo seguente:

N  000000, S  111000, E  001110, O  110011 quindi C2={000000,111000,001110,110011}Z26 .

Questo codice, di lunghezza ancora maggiore, è capace di rilevare il verificarsi di 1 singolo errore nella trasmissione (come si verifica con ragionamento analogo al precedente) ed anche di 2 errori (perché se una parola vC3 viene modificata in 2 bits, essa si trasforma in ogni caso in un’altra parola che non appartiene al codice, e il soggetto B si accorge che la parola ricevuta non è corretta).

D’altronde questo codice è anche capace di correggere 1 singolo errore nella trasmissione: in ogni caso, partendo da una parola vC3 e modificando 1 solo bit, si ottiene una parola che non può provenire, con la modifica di 1 solo bit, da altre parole del codice diverse da v, quindi il soggetto B è in grado di stabilire con certezza che v è la parola corretta inviata.

Gli esempi precedenti sono relativi a problematiche che riguardano i codici a rilevazione d’errore e i codici a correzione d’errore.

L’origine storica della teoria di fa risalire ad Hamming, in un periodo (dopo la seconda guerra mondiale) in cui egli si occupava della memorizzazione di informazioni su schede perforate, ognuna contenente una parola binaria di 32 bits: avendo osservato che talvolta una scheda conteneva un singolo bit errato, cercò una teoria formale che permettesse di scoprire automaticamente l’errore ed eventualmente correggerlo.

Un concetto alla base della teoria, come si capisce dagli esempi precedenti, è quello di distanza di Hamming: date le parole binarie v,wZ2n di lunghezza n, si chiama distanza (v,w) di v da w il numero di bits (nella stessa posizione) in cui le due parole differiscono.

Per esempio nel codice C3 introdotto sopra, le parole v=000000, w=111000 hanno distanza 3 (differiscono nel 1°, 2°, 3° bit).

Ricordiamo che, dato un insieme A, una metrica su A è una funzione  dal prodotto cartesiano AxA nell’insieme dei numeri reali non negativi tale che:

1) dati comunque a,bA, si ha (a,b)=0  a=b 2) dati comunque a,bA, si ha (a,b)= (b,a)

3) dati comunque a,b,cA, si ha (a,c)≤(a,b)+(b,c) (diseguaglianza triangolare)

Esempio: se A è l’insieme dei punti del piano e se (a,b) è l’usuale misura della distanza del punto a dal punto b, si ottiene una metrica su A (la diseguaglianza triangolare discende dalla nota proprietà geometrica: la misura di un lato di un triangolo è ≤ della somma delle misure degli altri 2 lati).

(3)

Teorema. La distanza di Hamming è una metrica su Z2n. Dimostrazione:

Le proprietà 1) e 2) sono evidenti.

Per quanto riguarda la 3): siano v,w,zZ2n sia D(v,z) l’insieme delle posizioni dei bits in cui le parole v,w differiscono (quindi (v,z) = D(v,z)); analoghe costruzioni per D(v,w), D(w,z) (con

(v,w) = D(v,w), (w,z) = D(w,z).

Se iD(v,z), le parole v,z differiscono nel bit di posizione i, dunque vi sono 2 casi possibili:

a) v,w differiscono nel bit in posizione i (dunque iD(v,w))

b) v,w hanno lo stesso bit in posizione i (dunque iD(v,w)), ma allora in questo caso iD(w,z), perché w,z differiranno nel bit in posizione i.

Dunque ogni elemento iD(v,z) appartiene ad uno fra gli insiemi D(v,w), D(v,z), ossia D(v,z) è contenuto nell’unione insiemistica di D(v,w) e D(v,z) , e passando alle cardinalità:

D(v,z)≤ D(v,w)D(v,z) ≤D(v,w)+D(w,z), da cui la tesi.

Ovviamente la distanza di Hamming è legata al numero di errori nella parola inviata vZ2n : se s è il numero di errori nella trasmissione, e se viene ricevuta la parola wZ2n, il valore di (v,w) coincide esattamente con s.

Possiamo rappresentare la situazione graficamente. Se definiamo, per ogni parola vZ2n la sfera Rs(v) di centro v e raggio s uguale all’insieme delle parole di wZ2n tali che (v,w) ≤ s, fissata una parola vC da inviare, le parole di Rs(v) distinte da v sono esattamente tutte le possibili parole che possono essere ricevute erroneamente al posto di v nell’ipotesi che il numero di errori sia ≤s :

Rs(v) La sfera Rs(v) contiene (oltre v) tutte le parole s che possono essere ricevute al posto di v (se il v il numero degli errori non è superiore ad s).

Diremo che il codice CZ2n è un codice a rilevazione d’errore che rileva s errori se, per ogni parola vC inviata, e in caso di ricezione di una diversa parola wZ2n al posto di v, è possibile rilevare che la parola ricevuta è errata nell’ipotesi che nella trasmissione il numero di errori sia

≤s .

Per potere rilevare che la parola ricevuta w è errata, si deve verificare che wC, dunque (per quanto detto sopra) la definizione precedente equivale ad affermare che per ogni vC la sfera Rs(v) non contiene parole del codice C diverse da v.

Dato un codice CZ2n chiameremo distanza  del codice C la minima distanza di 2 parole distinte v,wC:  = min{(v,w) / v,wC, vw}

Dato un generico codice CZ2n di cardinalità m, per calcolare la distanza  di C si devono calcolare tutte le possibili distanze di coppie di parole distinte (che sono in tutto m(m-1)/2, per la proprietà 2) della metrica).

Esempio. Dato il codice C={0111, 0001, 1010, 1000}Z24, si ha, calcolando le distanze di tutte le coppie di parole distinte del codice:

(0111,0001)=2, (0111, 1010)=3, (0111, 1000)=4, (0001, 1010)=3, (0001, 1000)=2,

(1010, 1000)=1

dunque in questo caso =1.

(4)

Teorema. Sia dato un codice CZ2n di distanza .

C è un codice a rilevazione d’errore che rileva s errori  ≥s+1.

Dimostrazione:

(): Se C è un codice a rilevazione d’errore che rileva s errori, e se per assurdo ≤s , esisterebbero due parole distinte v,wC tali che (v,w)=≤s, dunque wRs(v), contraddizione.

(): Se ≥s+1, fissata una parola vC, per ogni parola wC diversa da v è (v,w)≥≥s+1>s, dunque wRs(v), e C è un codice a rilevazione d’errore che rileva s errori.

Diremo che il codice CZ2n è un codice a correzione d’errore che corregge s errori se, per ogni parola vC inviata, e in caso di ricezione di una diversa parola wZ2n al posto di v, è possibile rilevare che la parola ricevuta è errata ed anche correggerla, ossia calcolare in modo univoco la parola corretta v, nell’ipotesi che nella trasmissione il numero di errori sia ≤s .

Teorema. Il codice CZ2n è un codice a correzione d’errore che corregge s errori  comunque date 2 parole distinte v,wC si ha Rs(v)Rs(w)=.

Dimostrazione:

(): Se per assurdo esistesse una parola zRs(v)Rs(w), essa, se ricevuta, potrebbe provenire (con un numero di errori ≤s) sia da v che da w, quindi l’errore non potrebbe essere corretto in modo univoco, contraddizione.

(): Sia w una parola errata ricevuta al posto della parola vC (quindi wRs(v)): allora si può rilevare l’errore in quanto wC (se per assurdo fosse wC, sarebbe wRs(v)Rs(w), contraddizione).

Ma si può anche correggere l’errore in modo univoco con il metodo della parola più vicina (o della massima verosimiglianza): si calcola la parola tC che abbia distanza minima dalla parola errata w (quindi (t,w)≤(v,w)≤s, ossia wRs(t)); tale parola t coincide con la parola v inviata (in caso contrario sarebbero v,t parole distinte di C tali che wRs(v)Rs(t), contraddizione).

In termini di sfere, il Teorema precedente afferma che il codice CZ2n è un codice a correzione d’errore che corregge s errori  le sfere di raggio s con centro in distinte parole del codice non si intersecano.

Teorema. Sia dato un codice CZ2n di distanza .

C è un codice a correzione d’errore che corregge s errori  ≥2s+1.

Dimostrazione:

(): Se per assurdo fosse <2s+1, esisterebbero 2 parole distinte v,wC tali che (v,w)=≤2s, quindi v,w differiscono in  bits.

Poiché in particolare C è anche un codice a rilevazione d’errore che rileva s errori, per un Teorema precedente si ha ≥s+1.

Possiamo allora costruire una parola tZ2n ottenuta da v modificando s dei  bits in cui v differisce da w: si ha ovviamente (v,t)=s, (t,w)=-s≤s, dunque tRs(v)Rs(w), in contraddizione con il Teorema precedente.

(): Per il Teorema precedente basta dimostrare che comunque date 2 parole distinte v,wC si ha Rs(v)Rs(w)=. Se per assurdo fosse 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 in contraddizione con l’ipotesi.

Riferimenti

Documenti correlati

[r]

Notiamo che in tale caso molte proprietà di (A, ) si trasmettono all’insieme (A/R, ), come si verifica facilmente: se in (A, ) vale la proprietà associativa o la

L’origine della teoria si fa risalire al “problema dei 36 ufficiali di Eulero” (18° secolo): vi sono 36 ufficiali di 6 gradi e 6 reggimenti differenti (sono presenti

Poiché nelle combinazioni l’ordine degli elementi non conta, possiamo ripartire le disposizioni di D n,m in sottoinsiemi, ponendo in ciascun sottoinsieme le disposizioni

Prima osserviamo che se A=(a ij ), B=(b ij ) sono quadrati latini ortogonali (con elementi 1,2,….,n) e se f : {1,2….,n}  {1,2,…..,n} è una funzione biunivoca (una

[r]

Se indichiamo con B l’insieme di tutte le parole sull’alfabeto {0,1} di lunghezza (n+m-1) in cui la lettera 1 compare esattamente (n-1) volte, il procedimento precedente permette

Useremo i seguenti simboli per indicare gli insiemi numerici più comuni: N è l’insieme dei numeri interi &gt;0, detti numeri naturali; Z è l’insieme dei numeri interi relativi