caricato da Utente4737

Codice di Hamming

annuncio pubblicitario
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 composto da 8 bit:
M = m1 m2 m3 m4 m5 m6 m7 m8
e B l’entità ricevente.
Si vuol vedere come l’entità B, una volta ricevuto il messaggio M spedito
da A, possa 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 = m1 ⊕ m2 ⊕ m3 ⊕ m4 ⊕ m5 ⊕ m6 ⊕ m7 ⊕ m8
dove:
m1 = 0 m2 = 0 m3 = 1 m4 = 1 m5 = 0 m6 = 1 m7 = 1 m8 = 0
per cui:
p= 0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
Il messaggio spedito è quindi:
MS = Mp = 001101100
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:
m1 ⊕ m2 ⊕ m3 ⊕ m4 ⊕ m5 ⊕ m6 ⊕ m7 ⊕ m8 ⊕ 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
indica messaggio giusto
Supponiamo, invece, che il messaggio arrivi in modo errato. Se, per
esempio m6 cambiasse il suo stato da 1 a 0, avremmo una situazione di
questo tipo:
MS=001101000
questo è il bit errato.
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 = m1 ⊕ m2 ⊕ m3 ⊕ m4 ⊕ m5 ⊕ m6 ⊕ m7 ⊕ m8
Appunti: Tecniche di rilevazione e correzione degli errori
3
dove:
m1 = 1 m2 = 1 m3 = 0 m4 = 1 m5 = 0 m6 = 1 m7 = 1 m8 = 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:
m1 ⊕ m2 ⊕ m3 ⊕ m4 ⊕ m5 ⊕ m6 ⊕ m7 ⊕ m8 ⊕ p
Supponiamo che il messaggio arrivi correttamente, l’operazione
effettuata da B sarebbe:
1⊕1⊕0⊕1⊕0⊕1⊕1⊕0⊕1=0
indica messaggio giusto
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.
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 posto occupato dal bit di parità nel messaggio MS può essere uno
qualsiasi, l’importante è che sia A che B conoscano la sua posizione
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 m1 ed m2
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.
5
Appunti: Tecniche di rilevazione e correzione degli errori
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 composto 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 posizioni, dove le posizioni 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:
m1 = 1 m2 = 0 m3 = 1 m4 = 1 m5 = 0 m6 = 1 m7 = 1 m8 = 0
La stringa da trasmettere sarà la seguente:
pos
1
0001
h1
20=1
pos
2
0010
h2
21=2
pos
3
0011
m1
pos
4
0100
h3
22=4
pos
5
0101
m2
pos
6
0110
m3
pos
7
0111
m4
pos
8
1000
h4
23=8
pos
9
1001
m5
pos
10
1010
m6
pos
11
1011
m7
pos
12
1100
m8
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: h1 h2 h3 h4 nelle posizioni 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
posizioni occupabili dai bit; si noti che tutte le posizioni occupate dai bit
controllori hanno un solo 1 in tale valore binario, mentre tutte le posizioni
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 h1 si trova in posizione 1 (valore binario 0001) della stringa del
codice Hamming. Esso controlla tutti i bit che nel valore binario della
posizione occupata hanno un 1 in quarta posizione incominciando da
sinistra, ovvero:
h1 controlla
m1, posizione 0011
m2, posizione 0101
m4, posizione 0111
m5, posizione 1001
m7, posizione 1011
Il bit h2 si trova in posizione 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
posizione occupata hanno un 1 in terza posizione incominciando da
sinistra, ovvero:
h2 controlla
m1, posizione 0011
m3, posizione 0110
m4, posizione 0111
m6, posizione 1010
m7, posizione 1011
Il bit h3 si trova in posizione 4 (valore binario 0100) della stringa del
codice Hamming. Esso controlla tutti i bit che nel valore binario della
posizione occupata hanno un 1 in seconda posizione incominciando da
sinistra, ovvero:
h3 controlla
m2, posizione 0101
m3, posizione 0110
m4, posizione 0111
m8, posizione 1100
Il bit h4 si trova in posizione 8 (valore binario 1000) della stringa del
codice Hamming. Esso controlla tutti i bit che nel valore binario della
posizione occupata hanno un 1 in prima posizione incominciando da
sinistra, ovvero:
h4 controlla
m5, posizione 1001
m6, posizione 1010
m7, posizione 1011
m8, posizione 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:
h1 = m 1 ⊕ m 2 ⊕ m 4 ⊕ m 5 ⊕ m 7
=1⊕0⊕1⊕0⊕1 =1
h2 = m 1 ⊕ m 3 ⊕ m 4 ⊕ m 6 ⊕ m 7
=1⊕1⊕1⊕1⊕1 =1
h3 = m 2 ⊕ m 3 ⊕ m 4 ⊕ m 8
=0⊕1⊕1⊕0
=0
h4 = 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 Si, così come mostrato negli esempi che
seguono. Dal valore delle somme Si dipende la correttezza del
messaggio; i casi possibili sono due; ovvero:
1. messaggio corretto ! tutti gli Si sono uguali a 0;
7
Appunti: Tecniche di rilevazione e correzione degli errori
2. messaggio errato
esiste almeno un Si uguale a 1. In tal caso i
valori delle quattro somme S4S3S2S1
indicano la posizione 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 Si che seguono:
S1 = h1 ⊕ m 1 ⊕ m 2 ⊕ m 4 ⊕ m 5 ⊕ m 7 = 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1
S2 = h2 ⊕ m 0 ⊕ m 2 ⊕ m 3 ⊕ m 5 ⊕ m 6 = 0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1
S3 = h3 ⊕ m 1 ⊕ m 2 ⊕ m 3 ⊕ m 7
=0⊕0⊕1⊕1⊕0
S4 = h4 ⊕ m 4 ⊕ m 5 ⊕ m 6 ⊕ m 7
=0⊕0⊕1⊕1⊕0
=0
=0
=0
=0
indica messaggio giusto
Come volevasi dimostrare: tutti gli Si 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, m7 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 S1, S2, S3 e S4, ovvero:
S1 = h1 ⊕ m 1 ⊕ m 2 ⊕ m 4 ⊕ m 5 ⊕ m 7 = 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0
=1
S2 = h2 ⊕ m 1 ⊕ m 3 ⊕ m 4 ⊕ m 6 ⊕ m 7 = 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0
=1
S3 = h3 ⊕ m 2 ⊕ m 3 ⊕ m 4 ⊕ m 8
=0⊕0⊕1⊕1⊕0
=0
S4 = h4 ⊕ m 5 ⊕ m 6 ⊕ m 7 ⊕ m 8
=0⊕0⊕1⊕0⊕0
=1
Il bit errato è quindi quello che si trova nella posizione:
S4S3S2S1 = (1011)2, = (11)10
8
Appunti: Tecniche di rilevazione e correzione degli errori
(l’undicesima posizione) del codice Hamming.
In quella posizione si trova proprio m7; per cui, per ottenere il messaggio
corretto, basterà invertire il bit della posizione numero 11, da 0 a 1.
La tecnica del Codice di Hamming ha consentito, dunque, di:
• rilevare un errore, visto che almeno un valore Si ha assunto
valore 1
• correggere l’errore, effettuando il complemento a 1 del bit rilevato
errato; ovvero quel bit indicato dalla sequenza S4S3S2S1
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 h4 (da 0 a 1) posto nell’ottava posizione 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 S0, S1, S2 e S3, ovvero:
S1 = h1 ⊕ m 1 ⊕ m 2 ⊕ m 4 ⊕ m 5 ⊕ m 7 = 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1
=0
S2 = h2 ⊕ m 1 ⊕ m 3 ⊕ m 4 ⊕ m 6 ⊕ m 7 = 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1
=0
S3 = h3 ⊕ m 2 ⊕ m 3 ⊕ m 4 ⊕ m 8
=0⊕0⊕1⊕1⊕0
=0
S4 = h4 ⊕ m 5 ⊕ m 6 ⊕ m 7 ⊕ m 8
=1⊕0⊕1⊕1⊕0
=1
Il bit errato è quindi quello che si trova nella posizione:
S4S3S2S1 = (1000)2, = (8)10
(l’ottava posizione) del codice Hamming.
In quella posizione si trova proprio h4, 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
9
Appunti: Tecniche di rilevazione e correzione degli errori
Esercizio 4
Determinare il Codice di Hamming del seguente byte:
00001111
m1 = 0
m5 = 1
0001
h1
0010
h2
m2 = 0
m6 = 1
0011
m1
0
0100
h3
m3 = 0
m7 = 1
0101
m2
0
0110
m3
0
m4 = 0
m8 = 1
0111
m4
0
1000
h4
1001
m5
1
1010
m6
1
1011
m7
1
h1 = m1 ⊕ m2 ⊕ m4 ⊕ m5 ⊕ m7
=0 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1=0
h2 = m1 ⊕ m3 ⊕ m4 ⊕ m6 ⊕ m7
h3 = m2 ⊕ m3 ⊕ m4 ⊕ m8
=0 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1=0
=0 ⊕ 0 ⊕ 0 ⊕ 1
=1
h4 = m5 ⊕ m6 ⊕ m7 ⊕ m8
=1 ⊕ 1 ⊕ 1 ⊕ 1
1100
m8
1
=0
Per cui, il Codice di Hamming è quello che segue:
0001
H1
0
0010
H2
0
0011
M1
0
0100
H3
1
0101
M2
0
0110
M3
0
0111
M4
0
1000
H4
0
1001
M5
1
1010
M6
1
1011
M7
1
1100
M8
1
Ora, supponiamo che durante la trasmissione vari il bit m6; per cui
avremo che:
0001
H1
0
0010
H2
0
0011
M1
0
0100
H3
1
0101
M2
0
0110
M3
0
0111
M4
0
1000
H4
0
1001
M5
1
1010
M6
0
1011
M7
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 posizione 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.
1100
M8
1
Scarica