rappresentazione digitale dei dati - computer engineering ... · rappresentazione digitale dei dati...
TRANSCRIPT
1
Lab. Programmazione - aa 2013/14
Rappresentazione
digitale dei dati
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 2013/14
E’ una rappresentazione di tipo DISCRETO (il
numero di elementi con cui posso descrivere un
fenomeno anche continuo è finito; ogni elemento
può assumere un numero finito di valori)
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 2013/14
2
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
Lab. Programmazione - aa 2013/14
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 2013/14
Sin(x): rappresentazione continua
fc = 2
fc = 10
fc = 1
Lab. Programmazione - aa 2013/14
3
1
1/5
1/10
1/100
Lab. Programmazione - aa 2013/14
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 2013/14
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 2013/14
4
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 2013/14
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)
Lab. Programmazione - aa 2013/14
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 2013/14
5
Codifica dei caratteri alfanumerici
Lab. Programmazione - aa 2013/14
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 2013/14
Memoria
Lab. Programmazione - aa 2013/14
6
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 2013/14
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 2013/14
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 2013/14
7
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)
Lab. Programmazione - aa 2013/14
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 2013/14
Memorie di massa I dischi sono suddivisi in settori circolari e tracce. Ogni
blocco di dati è identificabile dal settore e dalla traccia in
cui è memorizzato.
Una testina di lettura/scrittura si muove lungo il raggio.
La posizione della testina mi indica la traccia. Per
contare i settori si usa un riferimento (gap) consistente in
un’area «vuota» riconoscibile dalla testina.
La formattazione del disco consiste nella creazione di
questi riferimenti, che dipendono da sistema a sistema.
Lab. Programmazione - aa 2013/14
8
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 2013/14
Rappresentazione dei dati
in un linguaggio di
programmazione
Lab. Programmazione - aa 2013/14
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 contenuto
x (1328) 4
Lab. Programmazione - aa 2013/14
9
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;
...
...
4 1328
Lab. Programmazione - aa 2013/14
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 2013/14
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 2013/14
10
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 2013/14
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
Lab. Programmazione - aa 2013/14
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 2013/14
11
Strutture di dati
In Excel la memoria è organizzata in «fogli»:
Ogni foglio è una griglia (matrice) di dati suddivisa in
celle
Ogni cella è identificata da due coordinate:
Una lettera che indica la colonna (coordinata x) in cui si
trova la cella
Un numero che indica la riga (coordinata y) in cui si trova la
cella
Le lettere crescono da sinistra a destra (A, B, C, D … AA,
AB ….)
I numeri di riga crescono dall’alto in basso (la riga 2 si trova
sotto la 1, la 3 sotto la 2, ecc.)
Lab. Programmazione - aa 2013/14
Strutture di dati
In MATLAB ogni variabile ha un nome e rappresenta
un area di memoria che può essere visualizzata
come:
Variabile scalare: contiene un solo dato
Vettore: contiene una sequenza di dati, associabile ad una
singola coordinata. Ogni elemento del vettore è denotato
dal nome della variabile e da un numero (fra parentesi) che
ne identifica la posizione all’interno della sequenza.
Matrice: contiene una griglia di dati, che si può immaginare
organizzata come un foglio di Excel. Ogni elemento è
identificato mediante il nome della variabile e da due
coordinate numeriche (fra parentesi) che ne indicano la
posizione (riga, colonna).
Lab. Programmazione - aa 2013/14
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 2013/14
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(n3)
Lab. Programmazione - aa 2013/14
Lab. Programmazione - aa 2013/14
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)
Array Multidimensionali
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 2013/14
13
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 2013/14