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