Parte 2 Codifica - Istituto di Scienze e Tecnologie dell`Informazione
Transcript
Parte 2 Codifica - Istituto di Scienze e Tecnologie dell`Informazione
Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo Parte 2 Codifica [Bucci c1.2] Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 1 Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo 1 Concetti generali La codifica delle informazioni in termini di bit è l’operazione che consente di utilizzare i calcolatori elettronici per n elaborare dati di qualsiasi natura. Con n bit si possono formare 2 configurazioni diverse. La codifica è una convenzione che associa un significato ad ogni configurazione di bit. I calcolatori sono oggetti finiti che elaborano e memorizzano un numero finito di bit. Un numero finito di bit permette di codificare un numero finito di informazioni diverse. Una codifica esatta a n bit è possibile solo quando l’insieme delle informazioni da codificare è finito e di n n dimensione inferiore a 2 . Se l’insieme ha cardinalità maggiore di 2 o è infinito, se ne può dare solo una rappresentazione approssimata o parziale. Le operazioni da compiere per ridurre la quantità di informazione da n codificare sono le seguenti: limitazione, rappresentazione di un sottoinsieme di informazioni di dimensione 2 (gli elementi del sottoinsieme sono rappresentati esattamente, gli altri non sono rappresentati); partizionamento, n suddivisione dell’insieme in 2 sottoinsiemi ad ognuno dei quali si associa una diversa configurazione di bit (la codifica permette di discriminare sottoinsiemi diversi, ma non elementi dello stesso sottoinsieme). Un metodo di partizionamento comunemente utilizzato per insiemi numerici è detto discretizzazione o quantizzazione e consiste nella suddivisione regolare in intervalli di uguale ampiezza. Insiemi infiniti e discreti devono essere limitati per poter essere codificati. Insiemi limitati e continui devono essere partizionati. Insiemi illimitati e continui devono essere sia limitati che partizionati. La perdita di informazione associata alle operazioni di limitazione e discretizzazione rende la codifica approssimata. 2 Codifica dei numeri 2.1 Notazione posizionale. Per la rappresentazione dei numeri è particolarmente diffusa la codifica binaria, che fornisce una diretta trasposizione in un alfabeto a due valori della notazione decimale da noi comunemente utilizzata. Il numero di simboli dell'alfabeto è detto base di numerazione. La codifica binaria e quella decimale utilizzano basi diverse (2 e 10, rispettivamente) ma sono entrambe notazioni posizionali, in quanto permettono di rappresentare ogni numero come sequenza di cifre del tipo: cn cn-1 … c1 c0 .c-1 c-2 … c-m Il valore (v) del numero rappresentato è la somma pesata delle cifre, dove il peso di ogni cifra dipende dalla base di numerazione (B) e dalla posizione della cifra: v = cn Bn + cn-1 Bn + … + c1B + c0 + c-1 B-1 + c-2 B-2 + … + c-m B-m Conversione di base [Bucci 1.2.2] 2 1 0 -1 Es: (101.1)(2) = 1 • 2 + 0 • 2 + 1 • 2 + 1 • 2 = (5.5)(10). 2.2 Numeri interi positivi. I numeri interi sono un insieme discreto illimitato. Per poter essere codificati devono essere limitati. In genere ci si n restringe ad un sottoinsieme di N elementi che va da 0 a N-1. Massimo numero rappresentabile con n bit è 2 -1. Aritmetica binaria: somma con riporto e moltiplicazione vengono calcolate come nei sistemi di numerazione decimali. [Bucci 1.2.3] 2.3 Numeri interi con segno. Il segno di un numero è un’informazione binaria, pertanto richiede un bit addizionale per essere rappresentato. Le rappresentazioni convenzionali sono: • Modulo e segno. Il modulo si rappresenta come numero intero positivo, il segno con un bit aggiuntivo (0=positio, 1=negativo). Es: (3)(10) = 0 0011; (-3)(10) = 1 0011. • Complemento a 1. I numeri interi positivi si rappresentano senza utilizzare il bit più signficativo (il più n-1 grande numero rappresentabile sarà quindi 2 -1). I numeri negativi si rappresentano invertendo bit a bit la rappresentazione del modulo. Es: (3)(10) = 0 0011; (-3)(10) = 1 1100. • Complemento a 2. I numeri positivi si rappresentano senza utilizzare il bit più sgnificativo (il più grande n-1 numero rappresentabile sarà quindi 2 -1). I numeri negativi si rappresentano invertendo bit a bit la rappresentazione del modulo e sommandole 1. Es: (3)(10) = 0 0011; (-3)(10) = 1 1101. n Nella rappresentazione complemento a 2, il numero negativo -v è rappresentato come 2 -v. La rappresentazione modulo e segno è la più intuitiva, ma quella in complemento a 2 è la più usata perchè permette di fare somme e sottrazioni (somme algebriche) utilizzando lo stesso algoritmo (e quindi li stessi componenti hardware o software) utilizzato per la somma tra numeri positivi. La moltiplicazione non è altrettanto semplice e a volte si ricorre ad un preventivo cambiamento di rappresentazione in modulo e segno. Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 2 Informatica Applicata - Architetture degli elaboratori 2.4 © Alessandro Bogliolo Numeri reali e razionali. I numeri reali e i numeri razionali sono insiemi illimitati e infinitamente densi. Per poterli rappresentare occorre limitarli (in modo simmetrico rispetto allo 0) e partizionarli. • Rappresentazione in virgola fissa. Degli n bit della parola, 1 rappresenta il segno, a rappresentano le cifre n-1 b prima della virgola e b le cifre dopo la virgola. Il massimo numero rappresentabile è (2 -1)/2 , il minimo b -b -b numero maggiore di zero è 1/ 2 =2 . L’accuratezza assoluta è 2 . • Rappresentazione in virgola mobile (floating-point). Il numero da rappresentare viene espresso nella forma s•0.M•Bse•E dove s rappresenta il segno, M la mantissa, E l’esponente, se il segno dell’esponente e B la base di numerazione. Non tutti i numeri hanno rappresentazione univoca. Questo comporta perdita di efficienza e difficoltà di confronto. Quando esistono rappresentazioni equivalenti dello stesso numero, tra queste si definisce normale quella con l’esponente più piccolo. Da una rappresentazione non normale a quella normale equivalente si passa traslando verso sinistra le cifre della mantissa e sottraendo 1 all’esponente. 3 2 0 -1 -01 -10 -11 Es: 0.02•10 = 0.20•10 ; 0.031•10 = 0.310•10 ; 0.011•2 = 0.110•2 ; 0.011•2 è in forma normale. In base 2, gli n bit disponibili per la codifica del numero vengono così ripartiti: 1 per s, m per M, 1 per se ed e per E. La base è implicita. e •2(2 -1) . e m -(2 -1) . Il minimo numero positivo rappresentabile è 1/2 •2 m m Il massimo numero rappresentabile è (2 – 1)/2 La massima accuratezza relativa, espressa in termini di errore relativo di arrotondamento o troncamento, -(m-1) dipende dal numero di cifre della mantissa e vale 2 . Il numero di cifre della mantissa viene detto precisione della rappresentazione. Nota: il numero di possibili configurazioni è superiore al numero di valori rappresentabili. 3 Codifica di informazioni non numeriche 3.1 Testi Un testo è una sequenza di caratteri alfabetici, separatori e caratteri speciali come punteggiatura, accentuazioni, ecc. La codifica ASCII (American Standard Code for Information Interchange) prevede l'uso di 128 caratteri diversi. Ogni carattere è associato ad una diversa configurazione di 7 bit. Estensioni non standard del codice ASCII utilizzano 8 bit (1 byte) per carattere, portando a 256 il numero di caratteri disponibili. Un testo è rappresentato dalla sequenza di byte associati ai caratteri che lo compongono, nell'ordine in cui essi compaiono. Un testo di 1000 caratteri richiede 1000 byte (1 Kb) per essere rappresentato. Es: Il testo “ciao” richiede 4 byte per essere codificato secondo il codice ASCII a 8 bit. Il testo “ciao a tutti” ne richiede 12; il testo “perche’ no” ne richiede 11, mentre il testo “perché no” ne richiede 10. Il testo “uno” richiede 3 byte, il testo “1” ne richiede solo 1, mentre per distinguere il valore 1 dal valore 0 basta un bit e per distinguere il valore 1 tra altri 7 possibili valori servono 3 bit. 3.2 Immagini Le immagini sono informazioni continue in tre dimensioni: due spaziali ed una colorimetrica. Per codificarle occorre operare tre discretizzazioni. Le due discretizzazioni spaziali riducono l’immagine ad una matrice di punti colorati, detti pixel. La terza discretizzazione limita l’insieme di colori che ogni pixel può assumere. Il modo più elementare per rappresentare un'immagine consiste nel rappresentare il colore di ogni pixel. Il numero di bit necessari a rappresentare ogni pixel dipende dal numero di diversi colori disponibili. Un byte consente di rappresentare 256 colori. Un'immagine a 256 colori è una sequenza di byte. Un'immagine di 100X100 pixel a 256 colori richiede 10000 byte (10 Kb) per essere rappresentata. Un’immagine a due soli colori (ad esempio bianco e nero) richiede un solo bit per pixel e viene detta bitmap. Es: 100x100x8bit 100x100x1bit Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 3 Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo 50x50x8bit 50x50x1bit 10x10x8bit 10x10x1bit 4 Codifica di segnali 4.1 Segnali Segnale: grandezza fisica che varia nel tempo. Segnale analogico: segnale che può assumere un insieme continuo (e quindi infinito) di valori. Segnale digitale: segnale che può assumere solo un insieme discreto (e generalmente finito) di valori. Segnale tempo-continuo: segnale il cui valore è significativo (e può variare) in qualsiasi istante di tempo. Segnale tempo-discreto: segnale il cui valore ha interesse solo in istanti di tempo prestabiliti, generalmente equidistanziati. Es: s s t Segnale analogico tempo-continuo t Segnale digitale tempo-discreto La rappresentazione più naturale di un segnale s è la sequenza dei suoi valori istantanei s(t). Ci poniamo prima il problema di rappresentare un valore istantaneo, e poi quello di rappresentarne la sequenza, 4.2 Valore istantaneo Il valore istantaneo di un segnale è un numero, e come tale può essere codificato utilizzando notazione in virgola fissa o in virgola mobile. Tali codifiche inducono limitazioni e partizionamenti sullo spazio dei possibili valori che il segnale può assumere. Se i limiti e la precisione offerti dalle codifiche dei numeri reali non sono adeguati (perché troppo o troppo poco accurati) si può definire un codice ad-hoc, secondo la seguente procedura: 1. Analizzare l’insieme di valori che il segnale può assumere. 2. Se l’insieme è infinito limitarlo e/o partizionarlo fino a ridursi ad un insieme finito. n 3. Utilizzare un numero n di bit adeguato (tale che 2 superi la cardinalità s dell’insieme di valori o di partizioni a cui ci si è ridotti) e associare una max 11(2) = 3(10) configurazione ad ogni valore o sottoinsieme di valori. Es: 10(2) = 2(10) • Un segnale logico può assumere solo valore 0 o 1 e richiede un solo bit per rappresentare il valore istantaneo. • Un segnale digitale che possa assumere k valori richiede un numero n di bit 01(2) = 1(10) n tale che 2 ≥ k. n • Un segnale analogico che varia tra min e max può essere quantizzato in 2 min 00(2) = 0(10) intervalli e codificato utilizzando n bit (dove n dipende solo dalla precisione desiderata). Se si interpretano le configurazioni di bit associate ad ogni Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 4 Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo partizione di valori come rappresentazioni binarie di numeri interi, una buona regola di codifica è la seguente: n codice = (2 -1) round{(s(t) – min) / (max-min)} Cui corrisponde la decodifica: n s(t) = min + (max-min) codice / (2 -1) 4.3 Sequenza temporale Se il segnale è tempo-discreto, la scelta naturale è quella di rappresentare il valore del segnale in tutti e soli gli istanti in cui esso è significativo. Consideriamo solo il caso in cui l’intervallo temporale in cui il segnale viene osservato sia finito. In tal caso è finito anche l’insieme di istanti in cui il segnale è significativo, e quindi sarà finita la rappresentazione della sequenza di valori. Tipicamente, i segnali tempo-discreti hanno gli istanti di interesse equidistanziati. Se τ è la distanza temporale tra due istanti successivi e T è la durata dell’osservazione, la sequenza ha T / τ elementi. Se il segnale è tempo-continuo, occorre operare una discretizzazione dell’intervallo T per ottenere una rappresentazione finita. L’operazione di discretizzazione più comune è il campionamento, che consiste nell’osservare il segnale tempo-continuo ad istanti di tempo prefissati (generalmente equidistanziati) in modo da ottenere un segnale tempodiscreto che assume lo stesso valore di quello originale nei punti di campionamento. s t Campionamento s t Le operazioni di campionamento e quantizzazione trasformano un segnale analogico tempo-continuo in un segnale digitale tempo-discreto. 4.4 Suoni Il suono è un segnale analogico tempo-continuo. Ci sono diversi modi per descrivere la natura di tale segnale. Per fissare le idee pernsiamo che il suono prodotto da un altoparlante è prodotto dalla vibrazione di una membrana. Descrivendo la posizione della membrana nel tempo (e quindi il suo spostamento) a tutti gli effetti descriviamo il suono. Assumiamo allora che il segnale analogico s(t) esprima la posizione della membrana (rispetto ad un riferimento fissato) all’istante di tempo t. Tale segnale deve essere campionato e discretizzato per poter essere codificato in termini di bit. Per valutare la qualità della codifica possiamo pensare di usare il segnale quantizzato e tempo-discreto (quello cioè effettivamente rappresentato dalla nostra codifica) per muovere la membrana di un altoparlante. Se il campionamento è troppo rado e vengono usati pochi bit per codificare ogni valore istantaneo, la perdita di informazione degrada la qualità del suono (il suono riprodotto è sensibilmente diverso da quello originale). Per quanto riguarda il campionamento, è dimostrato che il suono percepibile dall’orecchio umano viene riprodotto fedelmente se la frequenza di campionamento (il numero di campioni in un secondo) è non inferiore a 30KHz. Per rendere intelligibile il parlato è sufficiente una frequenza di campionamento di 8KHz. La quantizzazione introduce comunque una distorsione. Es: Telefono. La comunicazione telefonica deve riprodurre la voce umana ai due estremi del collegamento garantendo la comprensione del parlato. A tal fine lo standard prevede un campionamento a 8KHz ed una quantizzazione a 256 livelli (codificati con 8 bit). Il segnale digitale che ne risulta usa 64Kbit per codificare ogni secondo di conversazione. 10 minuti di conversazione richiedono 38.4Mbit. 4.5 Immagini in movimento Le immagini in movimento possono essere considerate sequenze di fotogrammi. Questa descrizione ha già in sé l’idea del campionamento: ogni fotogramma è un campione di un’immagine che per sua natura sarebbe tempocontinua, cioè cambierebbe con continuità. Abbiamo già visto come codificare immagini, e quindi sappiamo come codificare ogni fotogramma. Il numero di fotogrammi nell’unità di tempo (ovvero la frequenza di campionamento) determina la qualità del movimento. E’ stato sperimentato che l’occhio umano non percepisce discontinuità nel movimento al di sotto del venticinquesimo di secondo. Pertanto, una frequenza di campionamento superiore a 25Hz sarebbe superflua se lo scopo fosse la riproduzione di un video. D’altro canto potrebbe non esserlo se servisse a documentare un esperimento di brevissima durata o se il video dovesse essere rivisto al rallentatore. Es: Filmato di 10 minuti, con risoluzione di 100x100 pixel a 256 colori: dimensione complessiva di 600x25x100x100x8 = 1.2Gbit. Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 5 Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo 5 Ridondanza e compressione dei dati 5.1 Ridondanza Una codifica è detta ridondante se utilizza più bit del necessario. Es: Per rappresentare numeri interi a due cifre decimali si possono utilizzare due caratteri ASCII, cioè 2*8=16 bit. Ma per rappresentare i 10 valori che ogni cifra può assumere sarebbero sufficienti 4 bit, per un totale di 2*4=8 bit. Del resto, le possibili configurazioni di due cifre decimali sono 100, codificabili mediante 7 bit. Poiché il contenuto informativo di due cifre decimali è di soli 7 bit, le codifiche a 8 e a 16 sono ridondanti. Se le due cifre decimali fossero utilizzate per rappresentare il giorno del mese in una data, le configurazioni utili si ridurrebbero a 31, riducendo a 5 il numero di bit necessari. Se fossero utilizzate per rappresentare il mese dell’anno, le configurazioni utili si ridurrebbero a 12, riducendo a 4 bit il contenuto informativo. 5.2 Osservazioni Se la codifica è ridondante il valore di alcuni bit diventa prevedibile conoscendo gli altri. In altri termini, alcuni bit non aggiungono informazione a quanto già codificato dai precedenti. Es: Ogni linguaggio naturale è ridondante. Per averne prova è sufficiente provare ad omettere un certo numero di lettere (o parole) da un testo e verificare la capacità di una terza persona di indovinare le lettere (o le parole) mancanti. Tutto ciò che si riesce ad indovinare è ridondante nel contesto in cui è utilizzato. 5.3 Utilità della ridondanza L’uso di codifiche ridondanti può avere due motivazioni: la flessibilità e l’affidabilità. • La flessibilità indica la possibilità di utilizzare la stessa codifica in situazioni diverse. Es: la codifica a 7 bit delle due cifre decimali dell’esempio iniziale può essere utilizzata sia per il mese che per il giorno, quella a 4 bit no. La codifica con due caratteri ASCII permette anche di rappresentare parole di due lettere. Es: il cosiddetto “baco del millennio” (millenium bug) che costa al mondo migliaia di miliardi è dovuto alla scarsa lungimiranza con cui i produttori di software hanno deciso di utilizzare due sole cifre decimali per rappresentare l’anno nelle date, dando per scontate (e quindi prive di contenuto informativo) le prime 2, fino ad ora sempre uguali a 19. • L’affidabilità deriva dalla capacità di alcune codifiche ridondanti di rivelare o correggere errori. Un codice non ridondante associa univocamente una configurazione ad un significato. Un errore nella configurazione comporta un errore di interpretazione del significato. Una codifica ridondante a rivelazione d’errore associa significati utili solo ad un sottoinsieme delle configurazioni possibili. Se un errore trasforma una configurazioni significativa in una non significativa, chi la interpreta riconosce la presenza dell’errore. Una codifica ridondante a correzione d’errore associa molte configurazioni allo stesso significato. Se un errore trasforma una configurazione in una a cui è associato lo stesso significato, l’interpretazione resta corretta. Es: dovendo comunicare ad un amico un numero di telefono attraverso una linea telefonica disturbata lo ripetiamo due volte. Chi riceve confronta i due numeri ricevuti. Se sono uguali assume che non vi siano errori, se la prima e la seconda dettatura gli risultano differenti chiede di ripetere il numero una terza volta per decidere quale delle due interpretazioni fosse corretta. Nel primo caso il codice utilizzato prevede la duplicazione dei dati: il numero 0722/343434 viene codificato come “0722/343434 0722/343434”. Se la prima metà della configurazione non è uguale alla seconda la configurazione è non significativa e ad essa non è associato alcun significato. Nel secondo caso il codice utilizzato prevede la triplicazione dei dati: il numero verrebbe codificato come “0722/343434 0722/343434 0722/343434”. Se una delle tre repliche è diversa dalle altre due, le due uguali permettono (a maggioranza) di intepretare correttamente l’informazione. 5.4 Compressione dei dati Chiamiamo compressione dei dati la riduzione del numero di bit di codifica senza perdita di informazione. Codifiche ridondanti si prestano a compressione, come dimostrano gli esempi precedenti, ma esistono anche tecniche di compressione che agiscono su dati irridondanti sfruttando proprietà tipiche dell’informazione da rappresentare. Tali tecniche portano a rappresentazioni la cui dimensione non è costante, ma dipende dal contenuto: se il contenuto è tipico la rappresentazione è compatta, se è atipico lo è meno e può essere meno efficiente della rappresentazione originale. Se le situazioni tipiche sono più probabili di quelle atipiche, la codifica compressa è mediamente vantaggiosa. Es: Per codificare un’immagine di 100x100 pixel a 256 colori occorrono 10kbyte, ognuno dei quali codifica il colore di un pixel a partire dall’angolo superiore sinistro dell’immagine e procedendo per righe. La rappresentazione di un’immagine con la metà superiore nera a quella inferiore bianca è una sequenza di 5000 byte di valore 0 (se 0 e’ il codice associato al colore nero) seguita da una sequenza di 5000 byte di valore 255 (se questo è il codice associato al colore bianco). Tale sequenza potrebbe essere rappresentata in modo più compatto, senza perdita di informazione, indicando il codice del colore e il numero di pixel contigui di quel colore. La rappresentazione Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 6 Informatica Applicata - Architetture degli elaboratori © Alessandro Bogliolo richiederebbe in questo caso solo 4 numeri interi (0,5000,255,5000) codificabili con 6 byte (se si utilizzano due byte per codificare il numero di pixel). Il fattore di compressione da 10.000 a 6 è notevole, ma dipende dalla particolarità dell’immagine utilizzata come esempio. Se l’immagine avesse zone contigue di colore omogeneo più piccole occorrerebbero tante terne di byte quante sono le zone. Nel caso peggiore ogni pixel ha colore diverso da quelli contigui (le zone sono 10.000) e occorrono 30.000 byte anziché 10.000 per rappresentare l’immagine. Il vantaggio di tecniche di compressione di questo tipo si basa sulla constatazione che la maggior parte delle immagini presenta ampie zone di colore omogeneo (quali le zone di cielo in fotografie esterne). Es: Per rappresentare un filmato, si possono rappresentare tutti i fotogrammi indipendentemente gli uni dagli altri, o rappresentare incrementalmente solo ciò che cambia da un fotogramma all’altro. Nel caso migliore (immagine fissa) il fattore di compressione è altissimo. Nel caso peggiore (immagine in continuo movimento) la compressione è controproducente. Tecniche di questo tipo si basano sulla constatazione che in molti casi larghe zone dell’immagine si mantengono invariate da un fotogramma al successivo (si pensi al cielo in un paesaggio o allo sfondo in un telegiornale). Esercizi 1. Quanti bit occorrono per codificare 18 valori diversi? 2. Quanti bit occorrono per codificare i numeri pari da 2 a 16? 3. Quanti byte occorrono per codificare 300 informazioni diverse? 4. Qual e’ il più grande numero intero rappresentabile con 4 bit? A che configurazione corrisponde? 5. Elencare tutti i numeri che possono essere rappresentati in virgola mobile utilizzando 2 bit per la mantissa e due bit per il modulo dell’esponente. 6. Quanti bit occorrono per rappresentare il numero 9.75 in virgola fissa? 7. Quanti numeri diversi si possono rappresentare in virgola mobile con 3 bit di mantissa e due bit di modulo dell’esponente? 8. Il numero decimale 5 ammette rappresentazione in virgola mobile utilizzando 2 cifre per la mantissa e 3 per il modulo dell’esponente? E il numero decimale 6? 9. Quanti bit di mantissa e quanti di esponente occorrono per rappresentare il numero decimale 9? 10. Quanti byte occorrono per codificare il testo tra virgolette (escluse) “Ciao a tutti.” utilizzando il codice ascii a 8 bit? 11. Quanti bit occorrono per rappresentare un’immagine di 20x20 pixel a 10 colori? 12. Quanti bit occorrono per rappresentare un filmato di 1 minuto, con risoluzione di 100x100 pixel a 1024 colori, e frequenza di 50Hz? 13. Convertire in base 2 il numero decimale 10.1. Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002 7