Nel capitolo 30 del video corso informatica-ilcorso abbiamo visto che ogni comunicazione è composta da quattro elementi:

  • Trasmettitore
  • Ricevitore
  • Mezzo trasmissivo
  • Linguaggio comune

Tuttavia ogni comunicazione è anche soggetta ad eventuali errori, ossia il messaggio che il trasmettitore affida al mezzo trasmissivo, arriva al ricevitore modificato in qualche sua parte. Questo accade perché il mezzo trasmissivo stesso può essere sottoposto a dei disturbi di vario genere.

Stiamo ovviamente parlando di segnali digitali o, più precisamente, di segnali binari, composti dai simboli zero e uno. Pertanto in questo caso, possiamo affermare che si ha un errore quando il trasmettitore invia zero, ma il ricevitore riceve uno, o viceversa.



Quando l’errore è accettabile?

Dipende. Prima di tutto bisogna considerare tre cose:

  • Con che probabilità si verifica un errore nella comunicazione che sto considerando?
  • Quanto è importante che il messaggio arrivi al ricevitore senza alcun errore?
  • Quanto costa ritrasmettere il messaggio in caso di errore?

Per quanto riguarda il primo punto, dobbiamo stimare l’affidabilità del sistema trasmissivo. Maggiore è quest’ultima e minore sarà la probabilità che avvengano errori durante la trasmissione.

Passando al secondo punto, è fondamentale stimare che tolleranza agli errori possiamo permetterci. Facciamo un esempio. Supponiamo di voler inviare una fotografia, questo vuol dire tramettere tutti i pixel che la compongono (tralasciamo per ora la variabile della compressione). Un errore qua e là nella foto vorrebbe dire una modifica nel colore del pixel. Ma su una foto, ad esempio, di 2000x2000 pixel, pochi pixel modificati sono praticamente impercettibili per chi osserva la foto. Per cui posso dire che in questo caso ho un’alta tolleranza all’errore. Diversa situazione se considero la trasmissione di un software. Se il trasmettitore ne volesse inviare il codice macchina (o oggetto) al ricevitore, anche un singolo bit errato può inficiare l’esecuzione del dell’intero software. In questo caso la tolleranza all’errore è uguale a zero.


Come faccio per evitare gli errori?

Non è possibile evitare in modo certo gli errori in una comunicazione, tuttavia è possibile ricorrere ad alcuni accorgimenti per verificare se si sono verificati errori ed eventualmente correggerli.

Il ‘trucco’ sta nell’aggiungere al messaggio, che ricordiamo è una sequenza binaria, una serie aggiuntiva di altri bit. Ovviamente non saranno dei bit a caso, ma verranno calcolati a partire dal messaggio originale. Il ricevitore, quindi, oltre al messaggio vero e proprio (chiamato payload) riceve anche ulteriori bit grazie ai quali può riconoscere se il messaggio contiene degli errori oppure no e, a volte, individuare anche esattamente dove si trovano all’interno del messaggio. Questi bit aggiuntivi sono chiamati codici a rilevazione e correzione d’errore. Prima di tornare su questo punto facciamo un semplice esempio per avere un’idea dell’utilità di questi codici.

Supponiamo che una sonda venga inviata nell’atmosfera di Marte e che debba costantemente trasmettere informazioni alla base spaziale in orbita sulla Terra.



Riprendiamo a questo punto i tre punti che abbiamo elencato sopra. Per quanto riguarda la probabilità che si verifichi un errore, questa è molto alta, perché i segnali viaggiano nello spazio e per una distanza molto grande. Possiamo tollerare degli errori? Bhe, i messaggi inviati dalla sonda sono immagini e video, per cui in tal caso posso accettare degli errori sporadici. Ma la sonda invierà al ricevitore anche una serie di valori ambientali e in questo caso i dati trasmessi dalla sonda devono arrivare al ricevitore senza alcuna modifica, poiché invertire degli 0 con 1 e viceversa, rischia di alterare i dati in modo distruttivo.

Supponiamo ora che questi messaggi raggiungano il ricevitore e che questi stabilisca che si sono verificati errori durante la trasmissione. A questo punto l’unica cosa che il ricevitore potrà fare è richiedere alla sonda un nuovo invio degli stessi. Ovviamente però questo è molto oneroso, poiché ci vorrebbero diverse ore, se non giorni, per ogni ritrasmissione. Pertanto quello che invece sarebbe più sensato fare è imporre al trasmettitore ad aggiungere degli ulteriori bit in coda ad ogni messaggio da trasmettere, che serviranno poi al ricevitore al fine di stabilire se si sono verificati errori e, nel caso fosse previsto, a correggerli. Aggiungere dei bit in più da trasmettere ha sicuramente un costo, ma è del tutto trascurabile rispetto al costo che si avrebbe nella ritrasmissione dell’intero messaggio.


Cos’è il codice di parità?

Il codice di parità è il codice a rileazione d’errore più semplice che ci possa essere.

Il suo funzionamento è banale. Se ad esempio consideriamo un payload di un byte, il codice di parità è un bit che va aggiunto al byte iniziale, affinché il numero totale di bit 1 sia sempre pari.

Ad esempio per il seguente payload ho:



Facciamo qualche altro esempio per chiarire:

messaggio = 10011011 bit di parità = 1 Il trasmettitore invia = 100110111

messaggio = 10000010 bit di parità = 0 Il trasmettitore invia = 100000101

messaggio = 11001011 bit di parità = 1 Il trasmettitore invia = 110010111

Quando al ricevitore arrivano i 9 bit, lui sa che i primi 8 sono il messaggio reale e l’ultimo il bit di controllo.

Se il numero di uno è pari, allora vuol dire che non ci sono stati errori, quindi scarta l’ultimo bit e considera solo i primi 8, il payload. In caso contrario, deduce che c’è stato un errore nel messaggio e pertanto in questo caso ne chiede la ritrasmissione.

Però ci sono due problemi da considerare, il codice di parità non permette di capire, in caso di errore, quale bit sia stato effettivamente modificato nella trasmissione. Inoltre, come avrai intuito, in caso di due bit errati (o multipli di due) il ricevitore non potrebbe discernere il doppio errore, poiché il numero di uno resterebbe comunque pari, pertanto il messaggio fallace verrebbe accettato come corretto.

Il codice di parità è un esempio di codice troppo semplice e poco utile e, in genere, è usato solo a scopo didattico.

Si tratta di un codice a sola rilevazione d'errore, ma quelli effettivamente usati in pratica, come detto prima, sono i codici a rilevazione e correzione d'errore. In questo caso per individuare esattamente il bit (o byte) corrotto sono necessari più bit di controllo.



Se ti interessano questi argomenti e ti piace il linguaggio con cui vengono esposti,

ho creato per te un video corso di informatica adatto ai principianti.

Vai alla pagina del corso!