Cyclic Redundancy Check.
Si tratta di un codice rilevatore d’errore tramite controllo a ridondanza ciclica.
Dato il messaggio M e un polinomio generatore G
- si calcola la checksum di M tramite G
- si trasmette P=M+checksum
- il destinatario riceve P e ricalcola la checksum tramite G
- se checksum=0 il messaggio è corretto
Applico i principi del codice CRC ma in base 10…
Siano
- M=25
- G=7
allora
- calcolo checksum
- M/G = 25/7 = 3
- R = 4
- checksum = G-R = 7-4 = 3
- P = M*10+checksum = 250+3 = 253
- spedizione del messaggio P
Ricezione corretta
- Ricezione di P’=253
- Calcolo di R
- P’/G = 253/7 = 36
- R’ = 0
- Il messaggio P’ è corretto
- M = P’/10 = 253/10 = 25.
Ricezione scorretta
- Ricezione di P”=263
- Calcolo di R
- P”/G = 263/7 = 37
- R” = 4
- Il messaggio P” è scorretto.
Polinomio generatore
Due polinomi sono diventati standard internazionali
CRC-16 | x16+x15+x2+1 | 11000000000000101 |
---|---|---|
CRC-CCITT | x16+x12+x5+1 | 10001000000100001 |
Checksum
Dato il messaggio M(x) di m bit e un polinomio generatore G(x) di grado r (r+1 bit)
- Il messaggio M(x) viene shiftato a sinistra di r bit, con r=grado(G(x))
In pratica: P(x)=xr*M(x) - Si calcola R(x), il resto della divisione tra P(x) e G(x)
- Si sottrae(somma) al messaggio: P(x)=P(x)+R(x)
Le operazioni di divisione/resto/somma/sottrazione sono soltanto simili a quelle svolte in base 10…
Rilevamento
- Ricezione di P’
- Si calcola R(x), il resto della divisione tra P'(x) e G(x)
- se R(x)=0 il messaggio P'(x) è corretto e M(x)=P'(x) >> r.
Esempio
Consideriamo la trasmissione di un numero in base 2
- M=…
- G=…
- Calcolo la checksum
- M/G=…
- R=…
- P=M << … | R =
- Spedizione del messaggio P
- Ricezione di P’=…
- Calcolo di R’
- P’/G=…
- Il messaggio P’ è corretto, M=P’ >> r.
- Ricezione di P”=
- Calcolo di R
- P”/G=…
R”= - Il messaggio P” è scorretto.