Strumenti Utente

Strumenti Sito


unita_c2

unità C2 - La codifica dei dati

Premessa: gran parte degli argomenti di questa unità sono già stati tratta l'anno scorso nel corso di Tecnologie Informatiche (vedi qui).

In questa pagina compaiono molte formule. Alcune di queste non vengono visualizzate correttamente con Internet Explorer (vedi pagina iniziale):

C2.1 Digitale e analogico

In elettronica possiamo rappresentare le informazioni con segnali:

  • digitali che possono assumere solo un numero finito e prefissato di valori
  • analogici che possono assumere infiniti valori

I segnali digitali sono discreti (tra due valori successivi non ce n'è uno intermedio) mentre quelli analogici sono continui (tra due valori ce ne sono infiniti intermedi). Le grandezze fisiche con cui abbiamo a che fare in natura sono generalmente analogiche mentre l'elettronica utilizza prevalentemente segnali digitali, in particolare segnali binari (vedi paragrafo A2.3).

Un segnale binario è un segnale digitale che può assumere solo due valori - in genere un valore alto e uno basso di tensione - rappresentati con i simboli 0 e 1. L'unità elementare di informazione in grado di memorizzare il valore 0 o 1 è chiamata bit (binary digit o cifra binaria) ma più spesso si fa riferimento al byte che è una sequenza di 8 bit.

C2.2 Codifica e codice

I dispositivi elettronici digitali rappresentano tutte le informazioni con segnali binari. In alcuni casi è facile rappresentare le informazioni con solo due valori (ad esempio quando l'informazione è del tipo vero/falso); in tutti gli altri casi (numeri, caratteri, immagini, ecc.) occorre codificare le informazioni, cioè tradurle in una sequenza di 0 e 1. Per cominciare vediamo come è possibile rappresentare un numero nel sistema binario.

Codifica dei numeri: sistemi di numerazione

I sistemi di numerazione più comunemente usati sono i sistemi:

  • decimale
  • binario
  • ottale
  • esadecimale

L'uomo, che da sempre conta utilizzando le dita delle mani, utilizza il sistema di numerazione decimale. I sistemi digitali invece, dove si opera coi segnali binari, utilizzano il sistema binario. Si tratta di due modi diversi di rappresentare lo stesso numero. Per esempio il numero decimale 4 nel sistema di numerazione binario vale 100 (attenzione, non è il numero decimale 100! Per distinguerlo infatti si legge uno-zero-zero).

I numeri binari sono lunghi, difficili da ricordare e da usare per l'uomo (ad es. il numero 95 è '1011111' in binario); inoltre non è facile convertire un numero decimale in binario e viceversa. Al contrario è semplice fare le conversioni tra numeri espressi nel sistema binario, ottale e esadecimale. Per questo motivo si usano il sistema ottale e quello esadecimale per rappresentare i numeri binari utilizzando meno cifre (ad es. il numero 95 è 5f in esadecimale).

Quando si usa più di un sistema di numerazione, per capire quale si sta usando si indica la base come pedice (cioè la si indica in basso a destra del numero). La base di un sistema di numerazione è il numero di valori che ogni cifra può assumere. Allora:

  • il sistema di numerazione decimale è a base 10; ogni cifra può assumere 10 valori: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • il sistema di numerazione binario è a base 2; ogni cifra può assumere 2 valori: 0, 1
  • il sistema di numerazione ottale è a base 8; ogni cifra può assumere 8 valori: 0, 1, 2, 3, 4, 5, 6, 7
  • il sistema di numerazione esadecimale è a base 16: ogni cifra può assumere 16 valori: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f

Quindi il numero 24(10) indica il numero 24 in base 10, cioè espresso nel sistema decimale, mentre e il numero 35(8) è espresso nel sistema ottale. Possiamo fare alcune osservazioni:

  • il primo valore è sempre 0
  • l'ultimo valore è la base meno uno; per esprimere numeri più grandi serve un'altra cifra (ad esempio nel sistema decimale per esprimere il numero 10 usiamo due cifre)
  • nel sistema esadecimale si usano anche delle lettere (spiegheremo più avanti il loro significato).

I sistemi di numerazione decimale, binario, ottale e esadecimale funzionano più o meno allo stesso modo: ogni numero è composto da più cifre; più una cifra è a sinistra nel numero, più è importante (sistema di numerazione posizionale). Nei prossimi paragrafi vediamo nel dettaglio cosa significa.

Sistema decimale

E' un sistema di numerazione posizionale a base 10. A seconda della posizione occupata una cifra indica le unità, le decine, le centinaia, ecc.

Facciamo un esempio col numero decimale 1953:

`1953_{(10)}=1*1000+9*100+5*10+3*1=1*10^3+9*10^2+5*10^1+3*10^0`

dove ogni cifra, procedendo da destra a sinistra, è moltiplicata per una potenza crescente di 10 partendo dall'esponente 0 (ricordiamo dalla matematica che ogni numero elevato all'esponente 1 è il numero stesso e ogni numero elevato a 0 vale 1).

Naturalmente nessuno di noi fa questi calcoli quando ragiona con i numeri decimali; siamo abituati a questo sistema di numerazione e interpretiamo correttamente i numeri senza fatica. I sistemi di numerazione binario, ottale e esadecimale funzionano allo stesso modo, ma questa volta bisogna fare dei conti per interpretare i numeri, cioè capire a cosa corrispondono (cioè quanto valgono) nel sistema decimale.

Sistema binario

E' un sistema di numerazione posizionale a base 2, quindi le cifre che compongono un numero possono valere 0 o 1.

Facciamo un esempio col numero binario 10110:

`10110_{(2)}=1*2^4+0*2^3+1*2^2+1*2^1+0*2^0=1*16+0*8+1*4+1*2+1*0=22_{(10)}`

dove ogni cifra, procedendo da destra a sinistra, è moltiplicata per una potenza crescente di 2 partendo dall'esponente 0 (nell'espressione sono stati volutamente indicati anche i termini che valgono zero per evidenziare il peso di ogni cifra). Il calcolo mostra che il numero 10110 in base due corrisponde al numero 22 in base dieci (cioè vale 22 nel sistema decimale) ma questa volta per interpretare il numero binario bisogna fare dei conti.

Ogni cifra di un numero binario è un bit; quello più a sinistra è chiamato MSB (most significant bit, bit più significativo) e a quello più a destra LSB (least significant bit, bit meno significativo).

Per interpretare i numeri espressi nel sistema ottale e esadecimale bisogna procedere allo stesso modo.

Sistema ottale

E' un sistema di numerazione posizionale a base 8, quindi le cifre che compongono un numero possono valere 0, 1, 2, 3, 4, 5, 6, 7.

Facciamo un esempio col numero ottale 264:

`264_{(8)}=2*8^2+6*8^1+4*8^0=2*64+6*8+4*1=180_{(10)}`

dove ogni cifra, procedendo da destra a sinistra, è moltiplicata per una potenza crescente di 8 partendo dall'esponente 0. Il calcolo mostra che il numero 264 in base otto corrisponde al numero decimale 180.

Sistema esadecimale

E' un sistema di numerazione posizionale a base 16, quindi le cifre che compongono un numero possono valere 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f dove le lettere a, b, c, d, e, f corrispondono ai numeri decimali 10, 11, 12, 13, 14, 15.

Facciamo un esempio col numero esadecimale 12e:

`12e_{(16)}=1*16^2+2*16^1+14*16^0=1*256+2*16+14*1=302_{(10)}`

dove ogni cifra, procedendo da destra a sinistra, è moltiplicata per una potenza crescente di 16 partendo dall'esponente 0. Il calcolo mostra che il numero 12e in base sedici corrisponde al numero decimale 302.

Conversione da decimale a binario

Fino a qui abbiamo visto come interpretare i numeri nei vari sistemi di numerazione, cioè come convertire numeri binari, ottale e esadecimali in numeri decimali. Naturalmente è possibile anche fare l'inverso.

Per convertire un numero decimale in binario bisogna dividere il numero decimale per 2, segnare il risultato e il resto e continuare dividendo ogni volta il risultato per 2 fino ad ottenere 0. Il numero binario corrisponde alla sequenza formata dai resti partendo dall'ultima divisione. Ad esempio per convertire il numero decimale 13 si procede così:

13:2 = 6 resto 1
 6:2 = 3 resto 0
 3:2 = 1 resto 1
 1:2 = 0 resto 1
 il numero decimale 13 in binario è 1101 
 
 (verifica: 1101 =  = 1x8 + 1x4 + 0x2 + 1x1 = 13)

Conversione da binario a ottale

Abbiamo visto che il sistema ottale e quello esadecimale si usano per rappresentare i numeri binari in maniera più compatta, cioè utilizzando meno cifre. Questo è possibile perché le conversioni tra binario, ottale e esadecimale sono semplici e rapide.

Per convertire un numero binario in ottale bisogna suddividerlo da destra in gruppi di tre cifre e sostituire a ogni gruppo la cifra corrispondente in ottale (riempiendo eventuali spazi vuoti con degli zero).

Esempio: convertire il numero binario `1101_{(2)}` in ottale.

Suddividiamo il numero binario in gruppi di tre (aggiungiamo due zero per formare due gruppi di tre cifre) e scriviamo le cifre corrispondenti in ottale.

binario  001 101
ottale     1   5

Allora il numero binario `1101_{(2)}` corrisponde al numero ottale `15_{(8)}` (`13_{(10)}` in decimale).

Conversione da ottale a binario

Il procedimento appena visto funziona anche al contrario: per convertire un numero ottale in binario si sostituisce ad ogni cifra ottale il numero binario corrispondente usando tre bit.

Esempio: convertire il numero ottale `23_{(8)}` in binario.

Sostituendo a ogni cifra ottale quella corrispondente in binario otteniamo:

ottale     2   3
binario  010 011

Allora il numero ottale `23_{(8)}` corrisponde al numero binario `1001_{(2)}` (`19_{(10)}` in decimale).

Conversione da binario a esadecimale

La conversione tra binario e esadecimale funziona come quella dell'ottale ma utilizzando gruppi di quattro cifre binarie (4 bit) invece che tre.

Esempio: convertire il numero binario `100101_{(2)}` in esadecimale.

Suddividiamo il numero binario in gruppi di quattro (aggiungiamo due zero per formare dei gruppi di quattro cifre) e scriviamo le cifre corrispondenti in esadecimale.

binario      0010 0101
esadecimale     2    5

Allora il numero binario `100101_{(2)}` corrisponde al numero esadecimale `25_{(16)}` (`37_{(10)}` in decimale).

Conversione da esadecimale a binario

Esempio: convertire il numero esadecimale `2d_{(16)}` in binario.

Sostituendo a ogni cifra ottale quella corrispondente in binario otteniamo:

esadecimale     2    d
binario      0010 1101

Allora il numero esadecimale `2d_{(16)}` corrisponde al numero binario `101101_{(2)}` (`45_{(10)}` in decimale).

Numeri binari negativi

Nel sistema binario ci sono due modi per rappresentare i numeri negativi:

  • usare il MSB del numero indicando con lo 0 il “+” e con 1 il “-”
  • rappresentare i numeri negativi come complemento a 2 dei rispettivi numeri positivi

Il sistema più usato è quello del complemento a due perché più pratico da utilizzare nei circuiti elettronici digitali. Per capire come funziona diamo le definizioni di campo, complemento a uno e complemento a due.

Nei sistemi digitali il campo è il numero di bit utilizzati per rappresentare un numero binario. Il complemento a uno di un numero binario si ottiene scambiando gli 1 con gli 0. Ad esempio con campo 4 il complemento a uno del numero `0101_{(2)}` è `1010_{(2)}`. Il complemento a due di un numero binario si ottiene sommando 1 al complemento a uno del numero, cioè si scambiano gli 1 con gli 0 e poi si somma 1. Ad esempio il complemento a due del numero `0101_{(2)}` è `1011_{(2)}` (cioè `1010_{(2)} + 1_{(2)}`).

Ad esempio allora, usando il codice binario con campo 4, il numero decimale -2 vale:

  • `1010_{(2)}`, usando il MSB per il segno
  • `1110_{(2)}`, usando il complemento a due

Il codice BCD e il codice Gray

Esistono altri sistemi di codifica dei numeri; quelli più usati in elettronica sono il codice BCD e il codice Gray.

Nel codice BCD (binary coded digit) ogni cifra di un numero decimale viene rappresentata col corrispondente numero binario espresso con quattro bit. Questo codice viene impiegato perlopiù nei display LCD o nei circuiti aritmetici. Non bisogna confondere il codice BCD con il sistema di numerazione binario; ad esempio il numero decimale 127(10) vale 1111111(2) in binario e 0001 0010 0111 nel codice BCD.

Il codice Gray è un codice binario che ha la particolarità che due numeri successivi differiscono per una sola cifra. Questo permette di evitare errori di lettura ad esempio nei sensori di posizione (ad esempio l'encoder). Nella tabella seguente è possibile confrontare il codice Gray con il sistema di numerazione binario con campo 3.

decimale binario codice Gray
0 000000
1 001001
2 010011
3 011010
4 100110
5 101111
6 110101
7 111100

La codifica dei caratteri

I caratteri alfanumerici vengono codificati usando:

  • la codifica ASCII a 8bit, che permette di rappresentare 256 simboli
  • la codifica Unicode a 16 bit, in grado di rappresentare 65 mila simboli diversi, quindi i caratteri di ogni linuga

C2.3 La codifica delle immagini

Nei dispositivi digitali le e immagini vengono rappresentate come un mosaico con tante tessere uguali tra loro che possono assumere un determinato colori. Queste tessere sono i pixel e più ce ne sono e maggiore sarà la risoluzione (cioè la definizione) dell'immagine. Solitamente ogni pixel può assumere un colore ottenuto miscelando diverse sfumature dei colori primari rosso, verde e blu. Se ognuna di queste sfumature è rappresentata con un codice a 8 bit è possibile ottenere 16 milioni di colori diversi per ogni pixel (3 x 8bit = 24 bit; 224=16,7 milioni).

La risoluzione di un'immagine è indicata specificando il prodotto tra il numero di pixel orizzontali e verticali. Ad esempio le immagini di una TV con un display HD hanno una risoluzione di 1920×1080 pixel mentre quelle prodotte dalle fotocamere digitali hanno risoluzioni ancora maggiori (oggi da 5 megapixel in su). E' facile capire che le immagini ad alta risoluzione occupano una grande quantità di memoria.

Esistono diverse tecniche di codifica digitale delle immagini ma a grandi linee possiamo distinguere tra:

  • formati lossless, che occupano un grande quantitativo di memoria
  • formati lossy, che riducono l'occupazione di memoria scartando le informazioni meno significative
  • formati vettoriali, dove l'immagine viene definita descrivendo le figure geometriche che la formano invece che come un reticolo di pixel

C2.4 La codifica dei suoni

Il suono è per sua natura una grandezza analogica. Per digitalizzare, cioè convertire in digitale, un suono occorre:

  • campionare il segnale analogico, cioè memorizzare il suo valore a intervalli regolari
  • quantizzare i valori, cioè approssimarli a dei valori predeterminati

Ad esempio l'audio digitale di un CD è campionato a 44kHz e quantizzato a 16bit, cioè il suono originale è stato campionato memorizzando 44 mila volte al secondo un valore tra 0 e 65536 (216).

Anche nel caso dell'audio è possibile utilizzare codifiche lossless, come quella dei CD, o lossy, come l'MP3.

C2.5 La codifica dei filmati

La codifica video è ancora più complicata di quelle viste fin qui. Esistono diversi formati e diverse tecniche di codifica ma in tutte i fattori più importanti da considerare sono:

  • la risoluzione del video
  • la profondità di colore (il numero di bit utilizzati per rappresentare i colori)
  • il numero di fotogrammi al secondo
  • il bitrate cioè la quantità di informazioni al secondo necessarie per rappresentare il video

Torna all'indice.

Questo sito Web utilizza i cookie. Utilizzando il sito Web, l'utente accetta la memorizzazione dei cookie sul proprio computer. Inoltre riconosci di aver letto e compreso la nostra Informativa sulla privacy. Se non sei d'accordo, lascia il sito.Maggiori informazioni sui cookie
unita_c2.txt · Ultima modifica: 2020/07/03 15:56 da 127.0.0.1