Sei sulla pagina 1di 37

Codici rilevazione degli errori e CRC

Cossu Manca Mannoni Sotgiu Truddaiu

Iti Angioy
Introduzione

All'interno di un calcolatore tra unità di elaborazione e di memoria avvengono


continui scambi di informazioni in formato digitale

L'informazione che "si muove" nell'elaboratore corrisponde al passaggio di


valori di tensione alti o bassi che rappresentano i segnali binari logici 1 e 0
attraverso un insieme di “fili paralleli” che prendono il nome di bus

Inoltre questa informazione può anche esser scambiata con altri elaboratori.

Iti Angioy 1
Introduzione

Lo scambio digitale di informazioni tra


sottosistemi è costituito da un flusso di
elettroni in movimento che generano un
campo magnetico e producono quindi
rumori di natura elettromagnetica: a
volte questi rumori possono arrivare a
sovrapporsi al segnale stesso fino al
punto di distorcere il valore trasmesso
inizialmente, variando uno o più valori
di tensione, e facendo giungere al
destinatario un'informazione diversa da
quella che era stata trasmessa
originariamente .

Iti Angioy 2
Esempio

Nell'esempio riportato nella seguente figura, un bit tra i cinque trasmessi ha


cambiato valore, cioè il valore iniziale del messaggio 10011 giunge al sistema
ricevente 10111 a causa di qualche disturbo presente nel sistema durante la
trasmissione: in questo caso si dice che un bit si è sporcato.

Iti Angioy 3
Introduzione

Potrebbe inoltre verificarsi il malfunzionamento di un dispositivo o di un


componente che potrebbe generare l'alterazione di un segnale. E necessario
introdurre quindi un sistema che ci consenta innanzitutto di individuare la
presenza di una situazione come quella descritta, in modo da accorgerci che
l'informazione trasmessa è errata prima che possa provocare qualche
"disastro".

Iti Angioy 4
Introduzione

In informatica è possibile ottenere entrambe le situazioni "arricchendo" il


contenuto dei dati trasmessi con l'aggiunta di informazioni ridondanti
specifiche, per garantire la sicurezza della trasmissione e il riconoscimento della
correttezza (o meno) del dato ricevuto.

In presenza di errore nei sistemi ci sono sostanzialmente quattro possibile azioni


da intraprendere:

* Scartare il messaggio;

* Richiedere la ritrasmissione del messaggio;

* Migliorare la qualità del canale per rendere uguale a 0 la possibilità di errore;

* Effettuare la correzione.

Noi ci occuperemo della quarta possibilità introducendo delle codifiche


particolari che permettano al sistema digitale di “autocorreggersi"
Iti Angioy 5
Definizioni Fondamentali

Abbiamo detto che all'informazione vengono aggiunti degli elementi che


consentono di effettuare la rilevazione e la successiva correzione dell'errore;
perché questo avvenga è necessario che il codice alla sorgente contenga
configurazioni non utilizzate, disposte in modo tale che un errore trasformi una
configurazione valida in una non utilizzata, e quindi sia riconoscibile in ricezione.

La condizione necessaria affinché si possa riconoscere un errore è la


ridondanza del codice, ma vedremo che questa non sarà una condizione
sufficiente.

Iti Angioy 6
o ff
ON

18

11 - a
Definizioni Fondamentali
Distanza di Hamming

Con distanza di due configurazioni binarie si intende il numero di bit per cui le
due configurazioni differiscono; prende anche il nome di distanza di Hamming.

Vediamo alcuni esempi, dove indichiamo con D(A, B) la distanza tra due
configurazioni binarie di 4 bit:

● D(1000 - 1010) = 1

● D(0110 - 0000) = 2

● D(0100 - 1010) = 3

● D(0100 - 0011) = 3

Per avere chiaro il concetto di distanza è molto utile avvalersi

del reticolo di Hamming.

Iti Angioy 7
1 ed 10d
Definizioni Fondamentali
Reticolo di Hamming

Con un codice a 3 bit il reticolo è quello


riportato a destra, dove si nota la distanza
tra due codici trovando il minor numero di
lati che occorre percorrere per andare dal
primo codice al secondo.

Nella figura è riportato il percorso per


andare da 000 a 101: la strada più breve è
passare da due segmenti:

quindi abbiamo una distanza d = 2.

Operativamente per calcolare la distanza


tra due codifiche si esegue l'operazione di
XOR tra i due codici e si contano quanti
numeri 1 ha il risultato.
Iti Angioy 8
910111
Esempio
Distanza di Hamming

Calcoliamo la distanza tra le due codifiche s1 e s2.

s1 = 10001001

s2= 10110001

s1 XOR s2 = 00111000

La distanza di Hamming tra s1 e s2 è pari a 3.

Iti Angioy 9
Bis Bis 31/02

& 0 &

& 1 1

1 d ↑

P P &
Definizioni Fondamentali
Distanza minima

La distanza minima di un codice è la minima distanza che intercorre tra due


configurazioni qualunque del codice.

Per esempio, il codice ASCII ha:

DMIN (codice ASCII) = 1

in quanto esistono configurazioni che differiscono per un solo bit.

Un codice impiegato per la rilevazione di tutti i possibili errori singoli, o SEDC


(Single Error Detection Code), non deve utilizzare le configurazioni che hanno
distanza uguale a 1 altrimenti un singolo errore porterebbe a una codifica
anch'essa valida e quindi sarebbe impossibile individuarlo.

Iti Angioy 10
*
GORN

2 &08 1

M &8 ↑

I
&10

&11

-100
S 12

31 1&
A 11
Esempio
Distanza minima

Vediamo un esempio in cui dobbiamo memorizzare due informazioni, on e off.

● Codice irridondante on = 0off = 1Se un bit si sporca si passa sempre in


situazioni valide: quindi è impossibile riconoscere la presenza di una
situazione di malfunzionamento.

● Codice ridondante con distanza minima 1on = 00off = 01Se un bit si


sporca si passa in situazioni sia accettate sia non valide: quindi non sempre
è possibile riconoscere la presenza di una situazione di malfunzionamento.

● Codice ridondante con distanza minima 2on = 00off = 11Se un bit si


sporca si passa sempre in situazioni non valide: quindi è sempre possibile
riconoscere la presenza di una situazione di malfunzionamento.

Iti Angioy 11
Definizioni Fondamentali
Codici Ridondanti

Per consentire la rilevazione e la correzione di errori è necessario utilizzare


codici ridondanti, ovvero codici che utilizzano un numero maggiore di bit
rispetto al numero strettamente necessario per codificare l'insieme sorgente.

Indichiamo per esempio:

● m bit di dati contenenti l'informazione da trasmettere;

● r bit di controllo o bit ridondanti.

Ciascuna parola in codice utilizza n = m + r bit, quindi ha lunghezza pari a n bit.

Iti Angioy 12
Definizioni Fondamentali
Codici Ridondanti

L'aggiunta di bit di ridondanza permette di costruire codici che consentono di


controllare eventuali errori di trasmissione; si hanno due tipi di codici ridondanti:

● codici rivelatori di errore: permettono di scoprire solo la presenza di un errore:

- tecnica del bit di parità pari (o dispari),

- tecnica CRC (Controllo a Ridondanza Ciclica);

● codici correttori di errore: permettono di scoprire se c'è un errore, ma anche di


individuarne la posizione per poterlo correggere:

- controllo di parità trasversale e longitudinale (detta anche parità incrociata),

- codice di Hamming.

Iti Angioy 13
Codici rilevatori di errori
Codice BCD con controllo di parità

Il codice più semplice che ci permette di individuare un errore è il codice BCD


con bit di parità, che consiste nell'aggiungere un bit in più alla codifica BCD,
detto appunto bit di parità, in modo tale da rendere pari il numero degli 1
presenti in ogni configurazione.

Bit di parità
Data una sequenza di n - 1 bit, il corrispettivo codice di parità si ottiene
aggiungendo un bit di controllo, detto bit di parità, in modo tale che:

● il numero di bit a 1 sia pari (parità pari);

● il numero di bit a 1 sia dispari (parità dispari).

Questo metodo prende anche il nome di VRC (Vertical Redundancy Check).

Iti Angioy 14
Esempio
Codice BCD con controllo di parità

Parole in codice a 7 bit Bit di Parità Parola con parità a 8 bit Numero di 1

0000000 0 00000000 0

0101010 1 01010101 4

0111011 1 01110111 6

0101011 0 01010110 4

1001100 1 10011001 4

1111111 1 11111111 8

1000100 0 10001000 2

Iti Angioy 15
Definizioni Fondamentali
Codici rilevatori di errori

Due osservazioni:
● Il destinatario è in grado solamente di individuare la parola che arriva errata, ma non
è in grado di correggerla in quanto gli è impossibile scoprire quale degli 8 bit si è
sporcato e, quindi, riportarlo al valore originale. Una volta intercettato l'errore viene
richiesta la ritrasmissione del messaggio;

● Supponiamo che venga trasmesso il byte (10001000) e arrivi a destinazione con tutti
zeri (00000000), cioè che si siano sporcati 2 bit: il destinatario non si accorgerebbe
dell'errore e lo interpreterebbe come dato valido.

Quindi il controllo di parità con ridondanza singola non si accorge di doppi errori e,
comunque, in caso di singolo errore, non sa correggerlo ma riesce solamente a
identificarlo.

Iti Angioy 16
Definizioni Fondamentali
Codici rilevatori di errori

Questo sistema di rilevazione e correzione di un errore è quello normalmente


utilizzato sui bus all'interno dei PC, dato che la frequenza con cui si sporcano i
bit è dell'ordine di "1 ogni qualche migliaia di ore di funzionamento": in questo
caso, come precauzione in caso di errori, sarebbe sufficiente la richiesta di
ritrasmissione, che a tutti gli effetti, diventerebbe un sistema di rilevazione/
correzione degli errori.

Diverso è il caso dei sistemi di trasferimento di dati verso HD o dispositivi


elettromeccanici dove è necessario cautelarsi con sistemi di codifica più
complessi, in grado di effettuare direttamente l'autocorrezione senza richiedere
la duplicazione del dato.

Iti Angioy 17
Definizioni Fondamentali
CRC (Cyclic Redundancy Check)

Il metodo CRC o Codice a Ridondanza Ciclica, noto anche come polynomial


code, è più efficiente del bit di parità per la semplice rilevazione degli errori e
sfrutta la divisione tra polinomi

Iti Angioy 18
Definizioni Fondamentali
CRC (Cyclic Redundancy Check)

A)
Il dato da inviare viene considerato come coefficiente (di valore 0 o 1) dei
termini di un polinomio M(x), dove gli m bit rappresentano i coefficienti di un
polinomio di termini da xᵐ⁻¹ a x⁰, in cui sono presenti i termini che
corrispondono a bit di valore 1 e sono assenti quelli che corrispondono a bit
di valore 0.

Iti Angioy 19
190
178 &a
M(x) x +1
=

M(x) x2 1
=
+

1 0041
↑2102 sa
4(x) x4x 1
=
+

M(y) x3 y3+1
=
+

121d 30

M(X) x3 y
= +
Esempio
CRC (Cyclic Redundancy Check)

● La stringa 111 con m = 3 rappresenta il polinomio di grado 2

M(×) = x²  + x + 1

● La stringa 11001 con m = 5 rappresenta il polinomio di grado 4

M(×) = x⁴ + x³ + 1

● La stringa 1010011 con m = 7 rappresenta il polinomio di grado 6

M(x) = x⁶ + x⁴ +x +1

Iti Angioy 20
Esempio
CRC (Cyclic Redundancy Check)
B)

Viene inoltre utilizzato un polinomio G(x) di grado r, chiamato polinomio


generatore, composto da r + 1 bit, che è noto sia al mittente sia al destinatario e
che deve avere grado inferiore a quello del messaggio M(x) da inviare.
Es.

● Un polinomio generatore G(x) = x²+ 1 di grado 2 equivale ai 3 bit 101.

● Un polinomio generatore G(x) = x³ + 1 di grado 3 equivale ai 4 bit 1001.

● Un polinomio generatore G(x) = x⁵ + 1 di grado 5 equivale ai 6 bit 100001.

Iti Angioy 21
1181 30

M(x) x3 x2 1
=

+ +

G(X) 12 1
=

+
Esempio
CRC (Cyclic Redundancy Check)

C)
Il metodo si basa sul calcolo di una checksum da aggiungere in fondo a M(x) in
modo che la stringa ottenuta sia divisibile per G(x), cioè M'(x) diviso G(x)
produca resto 0.

Iti Angioy 22
Esempio
CRC (Cyclic Redundancy Check)

Operativamente il mittente:

Divide il polinomio M(x) per il polinomio G(x) modulo due, aggiunge il resto
ottenuto dalla divisione al codice da trasmettere, mentre il destinatario: esegue
la divisione tra messaggio ricevuto M'(x) e G(x):se il resto è 0, il codice ricevuto
è esatto, se il resto è diverso da 0 si è sporcato uno o più bit.

Prima di procedere con la divisione bisogna aggiungere alla fine del codice tanti
zeri quanto è il grado del polinomio divisore, necessari per la generazione del
resto.

Iti Angioy 23
Esempio
CRC (Cyclic Redundancy Check)

Iti Angioy 25
M(= 1000
&
((f) 10
=

1 00011 08:121 =

-
101
da 10
15
Tat

Mix 100010
=
Esempio
CRC (Cyclic Redundancy Check)

Iti Angioy 26
Esempio
Distanza di Hamming

Questo metodo è molto potente, infatti un codice polinomiale con r bit:

• rileva tutti gli errori singoli e doppi;

• rileva tutti gli errori di x bit, x dispari;

• rileva tutti gli errori consecutivi (burst) di lunghezza s r.

Tra i polinomi divisori G(x) alcuni sono diventati standard internazionali, come i
seguenti:

• CRC-12: x¹² + x¹¹ + x³ + x² + x¹ + 1;

• CRC-16: x¹⁶ + x¹⁵ + x² + 1;

• CRC-CCITT: x¹⁶ + x¹² + x⁵ + 1

Iti Angioy 27
Grazie dell’attenzione

Iti Angioy

Potrebbero piacerti anche