digitale dei dati

Testo completo

(1)

Lab. Programmazione - aa 2011/12

Rappresentazione digitale dei dati

Lab. Programmazione - aa 2011/12

Cosa possiamo rappresentare ?

Numeri (interi e reali)

Simboli (codifica di concetti o simboli: es. vero e falso, caratteri alfanumerici, ecc.)

Dati multimediali

- testi sequenze di simboli (lettere dell’alfabeto) - suoni sequenze di campioni (misure nel tempo) - immagini sequenze di campioni (misure nello spazio)

Lab. Programmazione - aa 2011/12

E’ una rappresentazione di tipo DISCRETO

Se devo rappresentare in modo digitale grandezze continue variabili nel tempo (es. suoni, temperature, grandezze fisiche come velocità e posizione, ecc.) o nello spazio (es. luminosità/colore delle immagini, altitudini in una carta geografica, ecc.) devo CAMPIONARLE.

Rappresentazione digitale

Lab. Programmazione - aa 2011/12

Campionare una grandezza significa approssimarla attraverso una sequenza ordinata nel tempo (o nello spazio) di dati, detti campioni, che descrivono i valori di tale grandezza in un numero limitato di istanti di tempo (punti nello spazio) sufficientemente vicini.

La distanza fra due campioni consecutivi è detta tempo (intervallo, se nello spazio) di

campionamento; il suo inverso frequenza di campionamento (risoluzione spaziale, se nello spazio): indica quanti campioni ho a disposizione per la descrizione nell’unità di tempo (spazio)

Rappresentazione digitale

(2)

Lab. Programmazione - aa 2011/12

La frequenza di campionamento si misura in campioni/secondo

La risoluzione spaziale in campioni (pixel)/millimetro (pixel = PICTure Element)

Quanto più sono elevate, tanto più precisa è l’approssimazione (discreta) della realtà (che è continua) che si può ottenere.

Rappresentazione digitale

Lab. Programmazione - aa 2011/12

Sin(x): rappresentazione continua

fc = 2 fc = 10

fc = 1

Lab. Programmazione - aa 2011/12

1 1/5

1/10

1/100

Lab. Programmazione - aa 2011/12

Per rappresentare un campione si ha a disposizione un numero finito di bit.

Con N bit si possono formare 2N combinazioni diverse

Se si vogliono rappresentare valori in un certo intervallo [min,max] posso rappresentare 2N valori compresi fra min e max ed equispaziati e approssimare tutti gli altri possibili valori

nell’intervallo mediante il valore più vicino fra quelli rappresentabili (QUANTIZZAZIONE): v. esercizi dell’altra volta

Rappresentazione digitale

(3)

Lab. Programmazione - aa 2011/12

In conclusione

La rappresentazione digitale, essendo discreta, introduce due tipi di approssimazioni:

1. Errore di campionamento: dovuto all’approssimazione del valore effettivo della grandezza che sto rappresentando con il valore del campione più vicino, (cioè alla rappresentazione discreta delle ascisse):

produce nel grafico i ‘gradini’ verticali.

Lab. Programmazione - aa 2011/12

In conclusione

2. Errore di quantizzazione: dovuto all’approssimazione del valore effettivo della grandezza che sto rappresentando con il valore rappresentabile più vicino (rappresentazione discreta delle ordinate) Dipende dal numero di bit disponibili per la

rappresentazione: produce come effetto i ‘gradini’

orizzontali.

Lab. Programmazione - aa 2011/12

Rappresentazione di simboli

Con N bit posso rappresentare qualunque insieme numerabile (cioè che può essere messo in corrispondenza con gli interi) di simboli.

Con due bit è possibile generare 4 configurazioni distinte (00, 01, 10, 11) che possono essere associate a 4 informazioni distinte

Esempi di insiemi diversi di informazioni rappresentabili:

00 -> a 1 verde

01 -> b 2 rosso

10 -> c 3 giallo

11 -> d 4 blu

Lab. Programmazione - aa 2011/12

Codifica dei caratteri alfanumerici

26 lettere minuscole e 26 lettere maiuscole, 10 cifre, 10 segni aritmetici, 20 segni di interpunzione (spazi inclusi) e 3 caratteri non stampabili (a capo, tabulazione, backspace) = 95 caratteri, che rappresentano la lingua Inglese

Per 95 simboli sono necessari 7 bit: log2M =7 Una consolidata rappresentazione a 7-bit è il codice ASCII (American Standard Code for Information Interchange)

(4)

Lab. Programmazione - aa 2011/12

Codifica dei caratteri alfanumerici

A metà degli anni ‘60 divenne chiaro che il codice a 7 bit non bastava per rappresentare anche i caratteri dei linguaggi diversi dall’inglese

IBM estese il codice ASCII a 8 bit e 256 simboli Chiamato "Extended ASCII", la prima metà è costituita dall’originale codice ASCII (con uno 0 aggiunto all’inizio di ogni gruppo di bit)

Permette di esprimere la maggior parte dei caratteri degli alfabeti occidentali e include molti altri simboli utili

Lab. Programmazione - aa 2011/12

Codifica dei caratteri alfanumerici

Lab. Programmazione - aa 2011/12

Colori nelle immagini digitali

Codifica RGB per le immagini a colori

Ogni colore è diviso in 3 componenti fondamentali:

Rosso (R), Verde (G), Blu (B).

L’intesità di ogni componente è di solito rappresentata su 8 bit => ogni colore è rappresentato su 24 bit.

Posso quindi rappresentare (quantizzazione) 224 colori diversi (circa 16 milioni).

Se una delle componenti è diversa dalle altre ho percezione del colore, altrimenti vedo una tonalità grigia più o meno intensa (0,0,0 è il nero; 255,255,255 il bianco)

Lab. Programmazione - aa 2011/12

Memoria

(5)

Lab. Programmazione - aa 2011/12

Memoria Centrale

Spazio di lavoro del calcolatore: contiene i dati da elaborare, le istruzioni da eseguire e i risultati delle elaborazioni durante il funzionamento del calcolatore.

Insieme di celle di dimensione 1 byte, ciascuna delle quali è individuata da un indirizzo, che indica la posizione della cella all’interno della memoria

Se ogni indirizzo è lungo 32 bit posso distinguere e accedere singolarmente a 232 celle diverse.

232 celle = 4 Gcelle -> 4 Gbyte (circa 4 x 109 celle)

Si usano normalmente indirizzi a 32 o 64 bit (16x1018 celle)

Poiché è possibile accedere direttamente a ogni cella, una memoria di questo tipo si chiama Random Access Memory (RAM), cioè, alla lettera, memoria ad accesso casuale.

Lab. Programmazione - aa 2011/12

Memoria Centrale

La memoria centrale contiene codici binari

interpretabili come dati o istruzioni (che costituiscono i programmi) durante il funzionamento del

calcolatore. I dati possono essere modificati durante l’esecuzione dei programmi (elaborazione dati) come risultato delle istruzioni eseguite.

Sulla memoria centrale deve quindi essere possibile fare operazioni di lettura (ad es. delle istruzioni da eseguire o dei dati da elaborare) e scrittura (ad es.

dei dati elaborati).

Lab. Programmazione - aa 2011/12

Memoria Centrale

Caratteristiche fondamentali:

Dimensione o capacità (n. di celle, quindi di byte)

Tempo di accesso (il ritardo dopo l’invio del comando di lettura con cui il dato diviene effettivamente disponibile per l’elaborazione)

Tipicamente la dimensione della memoria centrale è dell’ordine del GByte.

Il tempo di accesso è dell’ordine delle decine di nanosecondi.

(1 ns = 10-9 s = un miliardesimo di secondo)

Lab. Programmazione - aa 2011/12

Memoria Centrale

La capacità di una memoria si misura in byte:

240  1.000.000.000.000 (10244) T (tera)

230  1.000.000.000 (10243) G (giga)

220  1.000.000 (10242) M (mega)

210  1000 (1024)

K (kilo)

(6)

Lab. Programmazione - aa 2011/12

Memorie di massa

Memorie permanenti: mantengono il loro contenuto anche dopo lo spegnimento del calcolatore.

Diverse rispetto alla memoria centrale: il loro funzionamento è basato su fenomeni di tipo ottico o magnetico, non su fenomeni elettrici.

Tipicamente organizzate in dischi, fissi o asportabili.

Più economiche rispetto alle memorie RAM/ROM.

Il loro tempo di accesso è tuttavia molto maggiore, cioè, a parità di dati da leggere, il processo di lettura avviene in modo più lento.

Lab. Programmazione - aa 2011/12

Memorie di massa

Il primo tipo di memoria di massa magnetica sono stati i nastri magnetici

L’informazione è divisa su 9 tracce, corrispondenti ciascuna ad un bit in una certa posizione (8 bit + 1 bit di parità per controllo degli errori).

L’accesso ai dati è di tipo sequenziale.

I dati sono divisi in blocchi separati da un gap.

Lab. Programmazione - aa 2011/12

Memorie di massa

Per ottenere una lettura random anziché sequenziale si possono utilizzare supporti magnetici (hard disk) o ottici (CD, DVD) di forma diversa, tipicamente dischi.

Sommando il movimento di rotazione del disco e il movimento radiale della testina è possibile raggiungere rapidamente qualunque punto del disco. In pratica il tempo max per raggiungere una certa posizione è pari al maggiore fra il tempo richiesto per una rotazione e quello necessario alla testina per percorrere il raggio del disco.

Lab. Programmazione - aa 2011/12

Memorie di massa

Invece che in blocchi rettangolari come i nastri, i dischi sono suddivisi in settori circolari.

Poiché il disco ruota, lo stesso punto ripassa sotto la testina periodicamente. Quindi è sufficiente predisporre un unico gap come riferimento per ritrovare le altre posizioni sul disco.

La formattazione del disco consiste nella creazione di questi riferimenti, che dipendono da sistema a sistema.

(7)

Lab. Programmazione - aa 2011/12

Memorie di massa

Recentemente si sono affermate le memorie di massa allo stato solido (es. “chiavette” USB) che non sono basate su supporti magnetici o ottici.

Sono basate su circuiti (flash memory) strutturati in modo simile alle RAM. Tuttavia,nel loro uso come memorie di massa,vengono utilizzati (e gestiti dal computer) come le altre memorie di massa (hard disk).

Lab. Programmazione - aa 2011/12

Rappresentazione dei dati in un linguaggio di

programmazione

Lab. Programmazione - aa 2011/12

Variabile (scalare)

E’ un’astrazione della cella di memoria utile per rappresentare dati e manipolarli in un programma

Formalmente, è un simbolo che viene associato ad un indirizzo fisico (posizione, nella memoria, occupata dalla cella o dalle celle associate al simbolo, che contengono la rappresentazione binaria di un valore)

Es.

Il simbolo x denota il contenuto della cella con indirizzo 1328 (l’indirizzo è invisibile all’utente). Se l’utente stampa x, sul video apparirà il valore 4, cioè il contenuto della cella con indirizzo 1328.

Simbolo indirizzo

Simbolo indirizzo contenutocontenuto

x 1328x 1328 44

Lab. Programmazione - aa 2011/12

Variabile (scalare)

L’indirizzo fisico di una variabile, associato dal sistema al simbolo che la identifica, è fisso e immutabile all’interno del programma; può però cambiare il suo contenuto, cioè il valore della variabile

esempio: x=4;

...

...

1328 4

(8)

Lab. Programmazione - aa 2011/12

Inizializzazione di variabili

Una variabile ‘esiste’ all’interno di un programma dal momento in cui viene dichiarata o in cui le viene assegnato un valore

In alcuni linguaggi (ad es. il C) è obbligatorio dichiarare la variabile prima di usarla

In altri (es. MATLAB) basta assegnarle un valore.

int x; in C, dichiara l’esistenza di x come variabile intera senza assegnarle ancora un valore

speed = 124.6; C/MATLAB assegna un valore a speed e time time = 1.6; in C però bisogna che siano state dichiarate prima km = speed*time; definisco la variabile km assegnandole il

prodotto speed*time

Lab. Programmazione - aa 2011/12

Caratteristiche delle variabili

Campo d’azione (scope): è la parte di programma (unità di codifica) entro cui la variabile è nota e può essere usata

Tipo: specifica l’intervallo di valori che la variabile può assumere (e quindi gli operatori applicabili)

Tempo di vita: l’intervallo di tempo in cui rimane valida l’associazione simbolo/cella di memoria

Valore: è rappresentato (secondo la codifica adottata per il tipo cui la variabile appartiene) nell’area di memoria associata alla variabile.

Lab. Programmazione - aa 2011/12

Strutture di dati

Non sempre è sufficiente un solo valore per descrivere/quantificare un concetto, ma è necessario utilizzare un insieme di valori e riferirsi ad essi in modo omogeneo (in pratica, con lo stesso nome), mantenendo però la possibilità di considerare ciascun valore singolarmente.

Ad es. le temperature massime giornaliere registrate in un anno, i risultati ottenuti da ciascun pilota nel campionato di F1, ecc.

Lab. Programmazione - aa 2011/12

Strutture di dati

Una struttura di dati ha le seguenti proprietà:

è un insieme di dati

Es. una struttura contenente il totale dei ricavi di un’azienda in ognuno dei dodici mesi di un anno

ogni dato dell’insieme può essere singolarmente identificato rispetto agli altri

Es. si deve poter conoscere il totale venduto in un certo mese

(9)

Lab. Programmazione - aa 2011/12

Strutture di dati

La modalità di identificazione dei singoli dati, consente che una stessa istruzione possa operare selettivamente solo su specifici dati della struttura (e non su tutti) utilizzando un opportuno indice

Es. deve essere possibile leggere tutte le fatture emesse da un’azienda in un ordine arbitrario specificato dall’utente

Si possono quindi eseguire operazioni a livello dell’intera struttura e operazioni che operano su singoli elementi della struttura stessa

Lab. Programmazione - aa 2011/12

Vettori

un vettore (array monodimensionale) è un insieme di elementi dello stesso tipo, inseriti in locazioni consecutive di memoria

ha un nome che lo identifica

gli elementi del vettore vengono identificati, oltre che con il nome del vettore di appartenenza, con il valore di un indice numerico

31 28 31 1 2 3

giorni_mese

nome vettore

indice contenuto

giorni_mese(1) giorni_mese(2) giorni_mese(3)

Lab. Programmazione - aa 2011/12

Vettori

per identificare un elemento si utilizza il nome del vettore seguito dal valore dell’indice racchiuso tra parentesi.

es. giorni_mese(3)

il valore dell’indice può essere una qualsiasi espressione;

ad esempio

es. n=0;

giorni_mese(n3)

Lab. Programmazione - aa 2011/12

Array Multidimensionali

Generalizzano il concetto di array

hanno due o più indici (o dimensioni)

i vettori bidimensionali sono denominati matrici Es. a=[1,2,3; 4,5,6]

a(1,2)

a(1,1) 1 2 3 a(1,3)

a(2,1) 4 5 6 a(2,3) a(2,2)

(10)

Lab. Programmazione - aa 2011/12

Array Multidimensionali

Generalizzano il concetto di array

Un array monodimensionale (vettore) è un array di variabili scalari

Un array bidimensionale (matrice) è un array di array monodimensionali

a(1,2) denota il secondo elemento del primo array (riga) che compone la matrice

Un array tridimensionale è un array di matrici

ecc.

Lab. Programmazione - aa 2011/12

Array Multidimensionali

Un array monodimensionale può essere visto come

Un array bidimensionale (matrice) avente una sola riga

Un valore scalare può essere visto come:

Un array monodimensionale di lunghezza 1

Un array bidimensionale (matrice) contenente una sola riga lunga 1, quindi con una sola riga e una sola colonna

In MATLAB le variabili sono considerate tutte matrici. Ad esse possono quindi essere applicati 2 indici, compatibilmente con il loro contenuto.

Es. non posso fare riferimento a f(1,2) se f è scalare perché f(1,2) non esiste, però posso fare riferimento al (singolo) valore di f come f(1,1)

Lab. Programmazione - aa 2011/12

Esercizi

Data una matrice a definita come a = [5, 3, 1; 6, 4, 2; 7, 5, 3]

determinare (usando MATLAB o Octave) il risultato delle seguenti espressioni:

a(1,1)+a(2,2)+a(3,3)

a(2,1) - a(1,1) + a(2,2) - a(1,2) + a(2,3) - a(1,3)

Verificare che il comando trace(a) di MATLAB restituisca lo stesso valore della prima espressione

Verificare il risultato dei seguenti comandi:

2*a (moltiplicazione di tutti i valori per una costante)

a.*a (moltiplicazione elemento per elemento)

a*a (prodotto righe per colonne –lo vedrete a geometria!)

figura

Updating...

Riferimenti

Updating...

Argomenti correlati :