Appunti: Tecniche di rilevazione e correzione degli errori 1 Tecniche di correzione degli errori Le tecniche di correzione degli errori sono catalogabili in: metodi per il rilevamento degli errori; metodi per il rilevamento e la correzione degli errori. Vedremo un metodo di rilevazione degli errori, quello basato sul bit di parità, ed uno di correzione degli errori rilevati, il codice Hamming. Un metodo per il rilevamento degli errori: la tecnica del Bit di Parità Sia dunque A l entità mittente di un messaggio M comto da 8 bit: M = m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 e B l entità ricevente. Si vuol vedere come l entità B, una volta ricevuto il messaggio M spedito da A, sa essere sicura della sua bontà (correttezza del messaggio). La tecnica del bit di parità consiste nell aggiungere al messaggio da trasmettere un bit p, chiamato appunto bit di parità, in modo tale da rendere pari (o dispari, il discorso è simmetrico) il numero degli 1 presenti nel messaggio spedito. Indicando con: M: Messaggio che l entità A intende spedire; p: bit di parità. MS: Messaggio Spedito; avremo che MS = Mp. L entità ricevente B all arrivo del messaggio MS controllerà il numero degli 1 presenti nello stesso: se tale numero è pari, vuol dire che il messaggio è arrivato in modo corretto, per cui escluderà il bit di parità e farà suo il messaggio M; se, invece, il numero degli 1 è dispari, allora capirà che il messaggio arrivato è errato, quindi chiederà nuovamente la trasmissione di MS all entità A. Ma come fa l entità emittente a determinare correttamente il bit di parità? E in che modo l entità ricevente conta il numero di bit uguali ad 1 presenti nel messaggio spedito? Cerchiamo di capire con due esempi: Sia M = 00110110; per cui il numero di 1 presenti nel messaggio = 4, numero pari. Il bit di parità dovrà essere 0 perché, lo ricordiamo, il numero di 1 nel messaggio spedito MS deve essere pari. L entità emittente calcola il bit di parità effettuando un XOR tra tutti i bit
2 Appunti: Tecniche di rilevazione e correzione degli errori del messaggio M, ovvero: p = m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 dove: m 1 = 0 m 2 = 0 m 3 = 1 m 4 = 1 m 5 = 0 m 6 = 1 m 7 = 1 m 8 = 0 per cui: p= 0 0 1 1 0 1 1 0 = 0 Il messaggio spedito è quindi: MS = Mp = 001101100 Ora B riceve il messaggio e, per rilevare la sua esattezza, effettua un XOR tra tutti i bit di MS, ovvero: m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 p Il risultato non potrà che essere 0 o 1. Ove esso fosse 0 indicherebbe che MS è arrivato correttamente, altrimenti rileverebbe un errore. Supponiamo che il messaggio sia arrivato correttamente, l operazione effettuata da B sarebbe: 0 0 1 1 0 1 1 0 0 = 0 Supponiamo, invece, che il messaggio arrivi in modo errato. Se, per esempio m 6 cambiasse il suo stato da 1 a 0, avremmo una situazione di questo tipo: MS=001101000 questo è il bit errato. questo è il bit di parità. indica messaggio giusto per cui l operazione effettuata da B sarebbe: 0 0 1 1 0 1 0 0 0 = 1 da cui si ricava che c è stato un errore. indica messaggio errato Vediamo un secondo esempio: Sia M = 11010110; per cui il numero di 1 presenti nel messaggio = 5, numero dispari. Da quanto detto risulta che il bit di parità dovrà essere 1. L entità emittente calcola il bit di parità effettuando un XOR tra tutti i bit del messaggio M, ovvero: p = m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8
Appunti: Tecniche di rilevazione e correzione degli errori 3 dove: m 1 = 1 m 2 = 1 m 3 = 0 m 4 = 1 m 5 = 0 m 6 = 1 m 7 = 1 m 8 = 0 per cui: p= 1 1 0 1 0 1 1 0 = 1 Il messaggio spedito è quindi: MS = 110101101 questo è il bit di parità. Ora B riceve il messaggio e, per rilevare la sua esattezza, effettua un XOR tra tutti i bit di MS, ovvero: m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 p Supponiamo che il messaggio arrivi correttamente, l operazione effettuata da B sarebbe: 1 1 0 1 0 1 1 0 1 = 0 Supponiamo, invece, che il messaggio arrivi in modo errato. Se, per esempio, proprio il bit di parità cambiasse il suo stato da 1 a 0, avremmo una situazione di questo tipo: MS=110101100 questo è il bit errato. indica messaggio giusto per cui l operazione effettuata da B sarebbe: 1 1 0 1 0 1 1 0 0 = 1 da cui si ricava che c è stato un errore. indica messaggio errato Alcune considerazioni: questo metodo permette di rilevare un errore, non di correggerlo; la correzione dell errore avviene mediante la ritrasmissione del messaggio; il to occupato dal bit di parità nel messaggio MS può essere uno qualsiasi, l importante è che sia A che B conoscano la sua izione nel messaggio inviato; questo metodo introduce un bit aggiuntivo al messaggio vero e proprio; tutti i metodi di correzione e rilevazione degli errori aggiungono una serie di informazioni aggiuntive rispetto al dato di origine;
4 Appunti: Tecniche di rilevazione e correzione degli errori se, nella trasmissione di un dato, cambiano 2 bit, o comunque un numero pari di bit, il metodo fallisce poiché, B controllando l esattezza del messaggio, ottiene come risultato 0, come mostra l esempio che segue. Riprendiamo l esercizio precedente dove il messaggio spedito è: MS = 110101101 questo è il bit di parità. Supponiamo che cambino i valori di due bit e precisamente m 1 ed m 2 che invertono il loro stato da 1 a 0. Si ottiene che: MS = 000101101 questi sono i 2 bit errati. L operazione di controllo effettuata da B è dunque: 0 0 0 1 0 1 1 0 1 = 0 indica messaggio giusto da cui si ricava, erroneamente, che non c è stato errore nella trasmissione.
Appunti: Tecniche di rilevazione e correzione degli errori 5 Un metodo per il rilevamento e la correzione degli errori: il Codice di Hamming Questo metodo raggiunge l'obiettivo prefissato mediante la trasmissione di un numero di bit maggiore rispetto al bit di parità; ovvero, per ogni byte il codice di Hamming genera un frame comto da 12 bit. Dato un messaggio M da inviare, il procedimento da applicare per ottenere il frame MS effettivamente trasmesso, consiste nel sistemare i bit su di una griglia di 12 izioni, dove le izioni in cui l'indice è potenza di 2 sono occupate dai bit di controllo, mentre tutte le altre ospitano ordinatamente i bit del messaggio M. Vediamo subito un esempio: Sia M = 10110110 con: m 1 = 1 m 2 = 0 m 3 = 1 m 4 = 1 m 5 = 0 m 6 = 1 m 7 = 1 m 8 = 0 La stringa da trasmettere sarà la seguente: 1 2 3 4 5 6 7 8 9 10 11 12 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 h 1 h 2 m 1 h 3 m 2 m 3 m 4 h 4 m 5 m 6 m 7 m 8 2 0 =1 2 1 =2 2 2 =4 2 3 =8 Figura 1: Codice Hamming Osservando la figura 1 si può notare che per ogni byte da spedire il codice di Hammnig utilizza 4 bit di controllo: h 1 h 2 h 3 h 4 nelle izioni 1, 2, 4 e 8; il codice è quindi completato dai bit del messaggio. Nella seconda riga della stessa figura sono mostrati i valori binari delle izioni occupabili dai bit; si noti che tutte le izioni occupate dai bit controllori hanno un solo 1 in tale valore binario, mentre tutte le izioni occupate dai bit controllati, i bit del messaggio, hanno almeno due 1. Vediamo ora come si determinano i valori dei bit di controllo. Il bit h 1 si trova in izione 1 (valore binario 0001) della stringa del codice Hamming. Esso controlla tutti i bit che nel valore binario della izione occupata hanno un 1 in quarta izione incominciando da sinistra, ovvero: h 1 controlla m 1, izione 0011 m 2, izione 0101 m 4, izione 0111 m 5, izione 1001 m 7, izione 1011 Il bit h 2 si trova in izione 2 (valore binario 0010) della stringa del codice Hamming. Esso controlla tutti i bit che nel valore binario della
6 Appunti: Tecniche di rilevazione e correzione degli errori izione occupata hanno un 1 in terza izione incominciando da sinistra, ovvero: h 2 controlla m 1, izione 0011 m 3, izione 0110 m 4, izione 0111 m 6, izione 1010 m 7, izione 1011 Il bit h 3 si trova in izione 4 (valore binario 0100) della stringa del codice Hamming. Esso controlla tutti i bit che nel valore binario della izione occupata hanno un 1 in seconda izione incominciando da sinistra, ovvero: h 3 controlla m 2, izione 0101 m 3, izione 0110 m 4, izione 0111 m 8, izione 1100 Il bit h 4 si trova in izione 8 (valore binario 1000) della stringa del codice Hamming. Esso controlla tutti i bit che nel valore binario della izione occupata hanno un 1 in prima izione incominciando da sinistra, ovvero: h 4 controlla m 5, izione 1001 m 6, izione 1010 m 7, izione 1011 m 8, izione 1100 Nel codice così costruito ogni bit del messaggio da spedire, M, è controllato dal almeno due bit di controllo. I valori dei bit di controllo si ottengono mediante un operazione di XOR tra tutti i bit controllati, per cui avremo che: h 1 = m 1 m 2 m 4 m 5 m 7 = 1 0 1 0 1 = 1 h 2 = m 1 m 3 m 4 m 6 m 7 = 1 1 1 1 1 = 1 h 3 = m 2 m 3 m 4 m 8 = 0 1 1 0 = 0 h 4 = m 5 m 6 m 7 m 8 = 0 1 1 0 = 0 Si ricava, quindi, il seguente codice Hamming: MS = 111001100110 dove in neretto sono individuati i bit di controllo. L entità che riceve il frame verifica la sua bontà mediante un controllo che si basa sull XOR tra tutti i bit controllati con il proprio bit controllore determinando le somme S i, così come mostrato negli esempi che seguono. Dal valore delle somme S i dipende la correttezza del messaggio; i casi sibili sono due; ovvero: 1. messaggio corretto! tutti gli S i sono uguali a 0;
Appunti: Tecniche di rilevazione e correzione degli errori 7 2. messaggio errato! esiste almeno un S i uguale a 1. In tal caso i valori delle quattro somme S 4 S 3 S 2 S 1 indicano la izione del bit errato. Allo scopo vediamo tre esempi in cui si verificano i seguenti eventi: 1. frame arrivato in modo esatto; 2. frame arrivato in modo errato perché è cambiato un bit del messaggio (bit controllato); 3. frame arrivato in modo errato perché è cambiato un bit controllore. Esempio1: Frame arrivato in modo esatto L'entità che riceve il frame determina le somme S i che seguono: S 1 = h 1 m 1 m 2 m 4 m 5 m 7 = 1 1 0 1 0 1 = 0 S 2 = h 2 m 0 m 2 m 3 m 5 m 6 = 0 0 1 1 1 1 = 0 S 3 = h 3 m 1 m 2 m 3 m 7 = 0 0 1 1 0 = 0 S 4 = h 4 m 4 m 5 m 6 m 7 = 0 0 1 1 0 = 0 indica messaggio giusto Come volevasi dimostrare: tutti gli S i sono uguale a 0, per cui il frame è arrivato in modo corretto. Esempio2: Frame arrivato in modo errato, cambia un bit controllato Supponiamo che il frame arrivi in modo errato; per esempio, m 7 inverta il suo stato da 1 a 0; otterremmo che l'entità ricevente leggerà il seguente messaggio: MS = 111001100100 questo è il bit errato. L entità che riceve verifica l esattezza del messaggio calcolando i valori di S 1, S 2, S 3 e S 4, ovvero: S 1 = h 1 m 1 m 2 m 4 m 5 m 7 = 1 1 0 1 0 0 = 1 S 2 = h 2 m 1 m 3 m 4 m 6 m 7 = 1 1 1 1 1 0 = 1 S 3 = h 3 m 2 m 3 m 4 m 8 = 0 0 1 1 0 = 0 S 4 = h 4 m 5 m 6 m 7 m 8 = 0 0 1 0 0 = 1 Il bit errato è quindi quello che si trova nella izione: S 4 S 3 S 2 S 1 = (1011) 2, = (11) 10
8 Appunti: Tecniche di rilevazione e correzione degli errori (l undicesima izione) del codice Hamming. In quella izione si trova proprio m 7 ; per cui, per ottenere il messaggio corretto, basterà invertire il bit della izione numero 11, da 0 a 1. La tecnica del Codice di Hamming ha consentito, dunque, di: rilevare un errore, visto che almeno un valore S i ha assunto valore 1 correggere l errore, effettuando il complemento a 1 del bit rilevato errato; ovvero quel bit indicato dalla sequenza S 4 S 3 S 2 S 1 Esempio3: Frame arrivato in modo errato: cambia un bit controllore Vediamo un ulteriore esempio, e supponiamo che cambi proprio un bit di controllo, per esempio h 4 (da 0 a 1) to nell ottava izione del codice Hamming, ottenendo in output la seguente stringa: MS = 111001110110 questo è il bit errato. L entità che riceve, verifica l esattezza del messaggio calcolando i valori di S 0, S 1, S 2 e S 3, ovvero: S 1 = h 1 m 1 m 2 m 4 m 5 m 7 = 1 1 0 1 0 1 = 0 S 2 = h 2 m 1 m 3 m 4 m 6 m 7 = 1 1 1 1 1 1 = 0 S 3 = h 3 m 2 m 3 m 4 m 8 = 0 0 1 1 0 = 0 S 4 = h 4 m 5 m 6 m 7 m 8 = 1 0 1 1 0 = 1 Il bit errato è quindi quello che si trova nella izione: S 4 S 3 S 2 S 1 = (1000) 2, = (8) 10 (l ottava izione) del codice Hamming. In quella izione si trova proprio h 4, per cui, per ottenere il byte corretto, basterà trascurare il bit sbagliato, visto che era un bit di controllo e non un bit del messaggio. Il byte giusto sarà, quindi, quello che si otterrà eliminando tutti i bit di controllo; ovvero: 10110110
Appunti: Tecniche di rilevazione e correzione degli errori 9 Esercizio 4 Determinare il Codice di Hamming del seguente byte: 00001111 m1 = 0 m2 = 0 m3 = 0 m4 = 0 m5 = 1 m6 = 1 m7 = 1 m8 = 1 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 h1 h2 m1 h3 m2 m3 m4 h4 m5 m6 m7 m8 0 0 0 0 1 1 1 1 h1 = m1 m2 m4 m5 m7 = 0 0 0 1 1 = 0 h2 = m1 m3 m4 m6 m7 = 0 0 0 1 1 = 0 h3 = m2 m3 m4 m8 = 0 0 0 1 = 1 h4 = m5 m6 m7 m8 = 1 1 1 1 = 0 Per cui, il Codice di Hamming è quello che segue: 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 H1 H2 M1 H3 M2 M3 M4 H4 M5 M6 M7 M8 0 0 0 1 0 0 0 0 1 1 1 1 Ora, supponiamo che durante la trasmissione vari il bit m6; per cui avremo che: 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 H1 H2 M1 H3 M2 M3 M4 H4 M5 M6 M7 M8 0 0 0 1 0 0 0 0 1 0 1 1 m1 m2 m4 m5 m7 h1 = 0 0 0 1 1 0 = 0 m1 m3 m4 m6 m7 h2 = 0 0 0 0 1 0 = 1 m2 m3 m4 m8 h3= 0 0 0 1 1 = 0 m5 m6 m7 m8 h4 = 1 0 1 1 0 = 1 Il bit sbagliato è, quindi, quello in izione 1010; ovvero, proprio m6. Si otterrà quindi il giusto byte effettuando il complemento a 1 del bit m6 che da 0 diventerà 1 ed eliminando i bit di controllo si otterrà il byte che si voleva trasmettere; ovvero: 00001111.