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
d3
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