La Rappresentazione dell Informazione Parte III I codici Codici a.a. 27-28 Un codice è una funzione che associa ad una sequenza di simboli un significato Codice : {entità} {sequenze di simboli} Un codice è una rappresentazione La lunghezza di un codice è il numero di simboli utilizzati per rappresentare una entità Un codice serve a: Permettere l elaborazione l e la memorizzazione di entità non gestibili nella loro forma originale I sistemi di numerazione sono codici 2
Codici Tipi di codici codice binario,, se le entità vengono codificate con sequenze di due soli simboli codice alfabetico se le entità codificate sono simboli di un alfabeto esterno codice numerico se le entità codificate sono numeri a.a. 27-28 3 Codici di caratteri Codificano ciascun carattere in una stringa di bit a.a. 27-28 Insieme dei caratteri tipicamente rappresentati: 26 caratteri alfabetici minuscoli e maiuscoli (a,,z,a,,z,a,,z);,z); Caratteri numerici (,,9),9) Segni di punteggiatura (, :! etc.) Altri simboli stampabili ( @,( +,, etc.) Caratteri di controllo (NUL, FF, etc.) Principali codici di caratteri ASCII UNICODE 4 2
Codice ASCII a.a. 27-28 ASCII (American Standard Code for Information Interchange) Ogni simbolo dell alfabeto esterno (carattere) è codificato con byte (8 bit) Max 256 caratteri rappresentabili (elencati nella tabella ASCII) Nelle trasmissioni, può essere usata una variante a 7 bit zone digit........ A B C D 5 Tabella del codice ASCII a.a. 27-28 6 3
Codice UNICODE a.a. 27-28 Il codice ASCII è adatto a rappresentare testi in lingua italiana o inglese, che non fanno uso di caratteri particolari La maggior parte delle lingue utilizzano invece molti caratteri particolari, non compresi nel codice ASCII Per poter rappresentare un maggior numero di caratteri è stato introdotto l UNICODE,, un codice di caratteri a 6 bit Ogni simbolo dell alfabeto esterno è codificato con una stringa di 2 byte detta code point Max 65536 simboli rappresentabili Supportato da alcuni linguaggi di programmazione (es. Java), da alcuni sistemi operativi (es. Windows XP) e da molte applicazioni (es. MS Word) 7 Codice UNICODE a.a. 27-28 8 4
Codice BCD a.a. 27-28 BCD (Binary Coded Decimal) è un codice numerico Dato un numero espresso in formato decimale, la codifica si esprime codificando in binario (con 4 bit) le singole cifre decimali Esempio: il numero (258)( viene codificato in () BCD Ovviamente un numero in formato binario puro e in formato BCD non assumono la stessa configurazione! 9 Codice BCD a.a. 27-28 A differenza del sistema di numerazione binario, nel codice BCD La rappresentazione è ridondante 6 delle 2 4 =6 configurazioni che può assumere una stringa di 4 bit non vengono usate Le operazioni aritmetiche non sono agevoli Se la somma di due cifre dàd un risultato maggiore di 9, questo risultato deve essere corretto per ottenere l esatta rappresentazione BCD (aggiustamento decimale) È un codice orientato alla presentazione dei dati Utilizzato soprattutto nei sistemi con la visualizzazione di cifre digitali (calcolatrici, etc.) 5
Codici a Rilevazione di Errore a.a. 27-28 Sono codici adatti alla trasmissione di dati in canali rumorosi La rilevazione degli errori si ottiene attraverso l introduzione l di ridondanza Un codice è ridondante se è più lungo di quanto richiesto, in modo che solo alcune configurazioni di simboli siano significative se durante la trasmissione di una stringa di codice, questa si trasforma in una configurazione non significativa, significa che si è verificato un errore Codici a Rilevazione di Errore a.a. 27-28 Distanza di Hamming Numero minimo di bit che bisogna cambiare per passare da una configurazione significativa ad un altra Per un codice non ridondante la distanza di Hamming vale variando un solo bit si passa da una configurazione significativa ad una ancora significativa La distanza di Hamming di un codice ridondante deve essere almeno 2 variando un solo bit si passa ad una configurazione non significativa Per ottenere un codice a distanza 2 è sufficiente aumentare di bit la lunghezza del codice Si raddoppiano così le configurazioni possibili 2 6
a.a. 27-28 Codice a controllo di Parità Pari Ogni volta che un dato deve essere trasmesso o memorizzato, alla stringa binaria che lo rappresenta si accoda un bit, detto bit di parità, che vale se il numero di nella stringa è pari, altrimenti Così, il numero di nella stringa è sempre pari Ogni volta che un dato è utilizzato (ricevuto o letto dalla memoria), si calcola nuovamente il bit di parità e lo si confronta con il bit di parità ricevuto Se non coincidono, significa che durante la trasmissione un bit del dato è commutato, quindi viene segnalato un errore (rilevazione( di errore) Cosa succede se commutano due bit? 3 Codice a controllo di Parità Pari Dato Bit di parità trasmissione Controllo della parità a.a. 27-28 Rilevazione di errore 4 7
Codice a controllo di Parità Dispari Esercizio: definire il codice a parità dispari a.a. 27-28 Data una stringa binaria, si accoda se il numero di nella stringa è dispari, altrimenti Così, il numero di è sempre dispari 5 Codici a correzione di errore a.a. 27-28 Sono più potenti dei codici a rilevazione di errore, perché indicano in quale bit si è verificato l errorel In questo modo è possibile correggere l errore (basta complementare il bit errato) Non esiste un codice in grado rilevare/correggere qualsiasi errore! Tuttavia, la probabilità di più errori decresce esponenzialmente 6 8
Codice di Hamming a.a. 27-28 Idea di base: codificare la posizione dell eventuale eventuale errore Si aggiungono alcuni bit di controllo,, tanti quanti ne sono necessari per codificare la posizione del bit errato Poiché anche i bit di controllo sono soggetti ad errore, occorre includere anche le posizioni di questi bit Inoltre si usa un ulteriore ulteriore configurazione per rappresentare un eventuale non-errore Esempio: data una stringa di 8 bit, si aggiungono 4 bit di controllo, per un totale di 2 bit 4 bit di posizione bastano a codificare le 2 posizioni (2 4 =6) 7 Codice di Hamming a.a. 27-28 Ciascun bit di controllo viene inserito in una posizione potenza di due I bit di controllo occupano le posizioni, 2, 4, 8, I bit di dati occupano le posizioni 3,5,6,7,9,, Ogni bit di controllo è un bit di parità,, che esprime la parità di un sottoinsieme opportuno dei bit della stringa Il bit di controllo in posizione 2 j controlla la parità di tutti i bit la cui posizione, scritta in binario, ha il j-j esimo bit a Posizione del bit di controllo 2 4 8 Posizione dei bit controllati,3,5,7,9, 2,3,6,7,, 4,5,6,7,2 8,9,,,2 8 9
Codice di Hamming a.a. 27-28 posizioni 3 2 2 3 4 5 6 7 8 92 Posizioni codificate in binario 9 Codice di Hamming a.a. 27-28 Quando si riceve una sequenza di bit, si effettua nuovamente il controllo di parità e si confrontano i bit di controllo ottenuti con quelli dei bit di controllo ricevuti Se un bit è errato daranno errore di parità tutti i bit che lo controllano La somma delle posizioni dei bit di controllo discordanti fornisce la posizione del bit errato Infatti questi contengono nella loro posizione la codifica binaria dell intero corrispondente alla posizione del bit errato 2
Codice di Hamming Codifica di Hamming Codifica ricevuta Ricalcolo dei bit di controllo dato trasmissione a.a. 27-28 2+4=6 Il bit in posizione 6 è errato 2 Esercizio (prima parte) Supponendo di voler trasmettere la seguente stringa di 7 bit, quale sarà la configurazione della codifica da trasmettere utilizzando un codice di Hamming a parità dispari? a.a. 27-28 posizioni 3 2 2 3 4 5 6 7 8 9 22
Esercizio (seconda parte) Se dopo la trasmissione, la configurazione ricevuta è la seguente, qual è il bit errato? 2 3 4 5 6 7 8 9 a.a. 27-28 +2+8= Il bit in posizione è errato 23 2