Beruflich Dokumente
Kultur Dokumente
Betti
Reti di calcolatori
Lezione 7
Lez. 7 — 1 M. Cesati / E. Betti
Il modello di riferimento
5 Application
4 Transport
3 Network
2 Data Link
1 Fisico
Lez. 7 — 2 M. Cesati / E. Betti
J
J
J
J
@
@ @
@ @
@ @
@ @
SI NO C0 è parola @@ NO
@ @
C0 == C ?
@
@ @ Q
Q
Errore rilevato
di codice?
@ @
@ @
@ @
@ @
@ @
@ @
@
@ @
@
SI
J
J
J
J
J
J
• I bit della parola di codice vengono numerati da sinistra verso destra e comin-
ciando con l’indice 1
• I bit di controllo sono quelli aventi come indice una potenza di due
(1, 2, 4, 8, 16, . . . )
• I bit del messaggio sono tutti gli altri bit della parola di codice, nell’ordine
• il bit di controllo con indice 2k è il bit di parità dei bit del messaggio i cui indici
hanno il termine 2k nella loro scomposizione in somma di potenze di due
Lez. 7 — 5 M. Cesati / E. Betti
• Se tutti i valori dei bit di controllo sono corretti, la parola di codice viene accettata
• Se alcuni bit di controllo hanno valori non corretti, l’indice del bit in cui si è ve-
rificato l’errore è dato dalla somma degli indici dei bit di controllo con valore
sbagliato
Lez. 7 — 6 M. Cesati / E. Betti
010110011010
r1 r2 0 r3 1 0 1 r4 1 0 0 1 1 0 1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 7 M. Cesati / E. Betti
r1 r2
0 r3
1 0
1 r4
1 0
0 1
1 0
1 r5
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1 r2
0 r3
1 0
1 r4
1 0
0 1
1 0
1 r5
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 8 M. Cesati / E. Betti
Il bit di parità r2 controlla i bit con indice la cui scomposizione in binario include 21
(3=2+1, 6=4+2, 7=4+2+1, 10=8+2, 11=8+2+1, . . . )
r1 r2
0 r3 1
0
1 r4 1
0
0 1 1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
r1
0
0 r3 1
0
1 r4 1
0
0 1 1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 9 M. Cesati / E. Betti
Il bit di parità r3 controlla i bit con indice la cui scomposizione in binario include 22
(5=4+1, 6=4+2, 7=4+2+1, 12=8+4, 13=8+4+1, . . . )
r1 r2 0 r3
1
0
1 r4 1 0 0
1
1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
r1 r2 0
1
1
0
1 r4 1 0 0
1
1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 10 M. Cesati / E. Betti
Il bit di parità r4 controlla i bit con indice la cui scomposizione in binario include 23
(9=8+1, 10=8+2, 11=8+2+1, 12=8+4, 13=8+4+1, . . . )
r1 r2 0 r3 1 0 1 r4
1
0
0
1
1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
r1 r2 0 r3 1 0 1
0
1
0
0
1
1
0
1 r5 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 11 M. Cesati / E. Betti
Il bit di parità r5 controlla i bit con indice la cui scomposizione in binario include 24
(17=16+1)
r1 r2 0 r3 1 0 1 r4 1 0 0 1 1 0 1 r5
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
r1 r2 0 r3 1 0 1 r4 1 0 0 1 1 0 1
0
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Lez. 7 — 12 M. Cesati / E. Betti
Il messaggio
010110011010
10011010100110100
Lez. 7 — 13 M. Cesati / E. Betti
10011010110110100
1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 0 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Supponiamo di voler invece correggere un burst di al più k errori (ma non tutti i k bit
sono necessariamente sbagliati!)
Se il burst di errori è lungo al più k, ciascuna riga della matrice può avere al più 1 bit
errato, quindi il codice è in grado di correggerlo
Lez. 7 — 15 M. Cesati / E. Betti
1 2 3 n
1 S
S
S
2 S
S
S
3
S
S
##
S
S
SS
S %
S%
%% SS
S %
S%
% S
% S
e %
e%
% ee
%
e %
L L L e% L
L L L L
k L L L %% ee L
Lez. 7 — 16 M. Cesati / E. Betti
I codici per il rilevamento di errori sono in pratica più diffusi dei codici per la correzione
di errori:
• i codici per il rilevamento sono molto più efficienti dei codici per la correzione
(meno ridondanza nei bit trasmessi)
Bit di parità
I burst di errori vengono rilevati solo quando il numero effettivo di bit sbagliati è
dispari, ossia con probabilità 50%
Lez. 7 — 18 M. Cesati / E. Betti
Un metodo per rilevare interi burst di al più k errori basato sul bit di parità è il
seguente:
Un burst di al più k errori è sempre rilevato, perché modifica al più un bit per ciascuna
colonna
#l ,
# ,e ,,@ e %@ , ,l l %
l
, ,
e @ %
e @
, l l
%
, l, e @% e , @ l
l% ll
l ,e
,
l
,l e
, l e
aa
a
!
!!
A A A A A A A A A A A
aa
a
!
!!
Lez. 7 — 20 M. Cesati / E. Betti
Codice polinomiale
Il codice polinomiale, detto anche cyclic redundancy code (CRC), è il codice per il
rilevamento di errori più diffuso
Una sequenza di k bit rappresenta un polinomio di grado (al più) k − 1; ciascun bit è
il valore di un coefficiente. Ad esempio:
10001001001
corrisponde al polinomio
x10 + x6 + x3 + 1
Lez. 7 — 22 M. Cesati / E. Betti
Polinomio generatore
Idea chiave: appendere al messaggio una stringa di bit di controllo in modo tale che
il polinomio corrispondente alla parola di codice sia divisibile per G(x)
1. Aggiungere r bit “0” in coda agli m bit del messaggio (la nuova stringa rappre-
senta il polinomio xr M (x))
2. Dividere la stringa corrispondente a xr M (x) per la stringa corrispondente a
G(x)
3. Sottrarre il resto (che ha sempre al più r bit) dalla stringa corrispondente a
xr M (x)
4. Il risultato è il polinomio T (x) da trasmettere: è divisibile per G(x) ed i primi m
bit sono uguali a quelli di M (x)
Il polinomio T 0(x) ricevuto viene diviso per G(x): il messaggio viene accettato se e
solo se il resto della divisione è zero
Lez. 7 — 24 M. Cesati / E. Betti
Passo 2: dividiamo x4M (x) per G(x): scartiamo il risultato e memorizziamo il resto
Lez. 7 — 25 M. Cesati / E. Betti
1 0 1 1 0 1 0 0 0 0 1 0 0 1 1
1 0 0 1 1 1
0 0 1 0 1 1 0
0 0 0 0 0
1 0 1 1 0 1
1 0 0 1 1
0 1 0 1 0 0
0 0 0 0 0
1 0 1 0 0 1
1 0 0 1 1
0 1 1 1 0 0
0 0 0 0 0
1 1 1 0 1 0 1 0 1 0
Lez. 7 — 26 M. Cesati / E. Betti
1 0 1 1 0 1 0 0 0 0 -
1 1 1 0 =
1 0 1 1 0 1 1 1 1 0
1011011110
Lez. 7 — 27 M. Cesati / E. Betti
Se G(x) ha due o più termini, il codice polimoniale rileva tutti gli errori singoli
(E(x) = xi non può essere multiplo di G(x), perché G(x) contiene sempre almeno
due termini)
Se G(x) ha come fattore x + 1, il codice polinomiale rileva tutti gli errori consistenti
di un numero dispari di bit (non esiste alcun polinomio con numero dispari di termini
che abbia x + 1 come fattore)
Lez. 7 — 29 M. Cesati / E. Betti
E(x) = xi(xk−1 + . . . + 1)
Dato che G(x) contiene il termine x0, G(x) non può avere xi come fattore;
se k − 1 < r, l’altro fattore di E(x) non può essere multiplo di G(x).
Perciò il resto di E(x)/G(x) non può essere nullo
Dato un burst di r + 1 errori, la probabilità che esso non sia rilevato è 1/2r−1; la
probabilità di non rilevare un burst di più di r + 1 errori è 1/2r (assumendo che
all’interno del burst gli errori si distribuiscano in modo casuale)
Lez. 7 — 30 M. Cesati / E. Betti
In realtà la stima teorica per i burst lunghi 33 o più bit è troppo ottimistica,
in quanto i bit erronei non sono distribuiti all’interno del burst in modo veramente
casuale