codici per la rilevazione e correzione di errori

Transcript

codici per la rilevazione e correzione di errori
CODICI
PER LA RILEVAZIONE E CORREZIONE
DI ERRORI
1
Alfabeto: un insieme non vuoto e finito di simboli
A = {0, 1} è l’alfabeto binario, dove 0 e 1 sono i simboli dell’alfabeto
B = {A, B, …, X, Y, Z} è l’alfabeto delle lettera latine maiuscole
Parola: successione di simboli (anche ripetuti) dell’alfabeto
011010101011
AGDCCEKTJZLCIAO
Nel caso dell’alfabeto binario, avendo a disposizione n bit posso rappresentare
2n parole.
Disponendo di 3 bit:
000, 001, 010, 011, 100, 101, 110, 111
2
Codice binario a n bit: funzione totale che stabilisce una corrispondenza fra un
insieme finito di oggetti da rappresentare, detto dominio, e l’insieme di tutte le
possibili sequenze di bit di lunghezza n, detto codominio, biunivoca fra il
dominio e la sua immagine nel codominio detta insieme delle codifiche.
01
O1
00
O2
11
insieme delle
codifiche
10
dominio
insieme delle
non-codifiche
codominio
Se l’insieme delle codifiche è un sottoinsieme del codominio il codice si dice
ridondante, altrimenti si dice non ridondante.
3
Distanza: Date due parole x, y di lunghezza n sull'alfabeto binario, si
dice distanza distanza d(x, y) il numero di posizioni in cui esse
differiscono.
Siano x = 10110, y = 11011 su A={0, 1}; allora d(x, y) = 3.
Distanza di un codice: minimo valore delle distanze tra ogni coppia di
codifiche.
4
Rilevazione e correzione di errori
• Per rilevare k errori, un codice deve avere distanza d con
d  k+1
• Per correggere k errori, un codice deve avere distanza d con
d  2k+1
NOTA: queste regole si riferiscono alla capacità di correzione/rilevazione di
un codice in generale, ovvero per qualunque codifica e qualunque sia la
distribuzione degli errori!!!
5
ESERCIZIO (Appello dell’11 set 2003)
Qual è la distanza fra le seguenti due codifiche (a 8 bit)
00101000 e 00011001 ?
Un codice con distanza 2 è in grado in generale di rivelare due errori? [2].
6
Soluzione
a)
00101000
00011001
**
*
distanza tra le codifiche = 3
b) Per rilevare k errori il codice deve avere distanza (=distanza minima tra tutte
le codifiche)  k+1.
Quindi per rilevare 2 errori deve essere
d3
mentre un codice con distanza 2 può rivelare in generale al più un errore.
7
ESERCIZIO d’esame
Per codificare i tre simboli D, F, I si utilizza il seguente codice a 5 bit:
D  00000
F  11100
I  10011
Errori di trasmissione possono dar luogo alla modifica di uno o più bit.
a) Quanti errori è in grado di rivelare il codice in generale?
b) E quanti errori è in grado di correggere in generale?
c) Se viene ricevuta la sequenza 10100:
- Cosa è possibile sapere su eventuali modifiche di bit?
- Si supponga di decodificare la sequenza con il simbolo corrispondente
alla codifica che da essa ha distanza minima: sotto quali ipotesi tale
decodifica è sicuramente corretta?
8
Soluzione:
d12 = 3
d23 = 4
d13 = 3
la distanza del codice è pari a 3
a) Errori rivelati:
d  e+1 quindi emax = 2
(possono essere rivelati 2 errori)
b) Errori corretti:
d  2e+1 quindi emax = (3-1)/2=1 (può essere corretto 1 errore)
9
c) Ricezione di 10100
D
00000
10100
dist = 2
F
11100
10100
dist = 1
I
10011
10100
dist = 3
Di sicuro c’è stato almeno un errore (la sequenza ricevuta non corrisponde a
nessuna delle tre codifiche).
La codifica più vicina è quella corrispondente a “F”: ipotizzabile (ma non certa)
la trasmissione di 11100 con la modifica del secondo bit (a partire dal più
significativo). Tale decodifica è in ogni caso corretta se è possibile sapere che le
modifiche avvenute sono al più una (non c’è modo partendo da “D” o “I” di
ottenere 10100).
10
NB: il codice è in grado di rivelare al più due errori,
ma in generale non è in grado di correggerli: se possono essere commessi
fino a due errori, non sono sicuro in generale sulla codifica originaria
ES: trasmetto D
00000
alterazione di due bit
11000
rivelo l’errore (nessuna codifica corrispondente) ma si ha che
F:
Seq_ric
11100
11000
dist =1
Se decodifico con “F” commetto un errore!
NB: se decodifico con “D” allora lo commetto quando viene
trasmesso “F” con un solo errore sul terzo bit!
11
ESERCIZIO d’esame
Si consideri il codice a 3 valori originari
1
2
3
000000
000001
111111
a) Trovare quanti errori può correggere e rivelare in generale.
b) Si supponga di ricevere la sequenza 001111.
Assumendo che possano essere stati compiuti al più 2 errori, è possibile
decodificare correttamente la sequenza?
Come si giustifica la risposta in relazione al risultato trovato nel punto a)?
Soluzione
a) Risulta:
d12 = 1
d23 = 5
d13 = 6
12
quindi la distanza del codice è 1
 il codice non può (in generale) rivelare né tantomeno correggere
alcun errore [e rivelati: d  e+1, quindi con e=1 serve d 2]
b) Ricevo 001111, mentre avevo:
1
2
3
000000
001111
000001
001111
111111
001111
dist1 = 4
dist2 = 3
dist3 = 2
In questo caso posso decodificare 001111 con il valore “3”. Se sono stati
commessi al più due errori, sono sicuro che la decodifica è corretta, perché:
dist1 = 4 > 2 [000000 non può essere modificato in 001111]
dist2 = 3 > 2 [000001 non può essere modificato in 001111]
13
NB: Come mai posso correggere due errori anche se (cfr. punto a) il codice ha
distanza 1?
La distanza del codice si riferisce al “caso peggiore” (distanza minima)
 le relative formule garantiscono le proprietà del codice di rilevazione
e correzione di errori in ogni caso, ovvero per qualunque simbolo
rappresentato e per qualunque posizione degli errori
Per esempio, nel caso venga trasmesso 1 (codificato con 000000), è sufficiente
un errore sull’ultimo bit per ottenere 000001, che è pari alla codifica di 2: in tal
caso l’errore non verrebbe neppure rivelato!
14