FONDAMENTI DI INFORMATICA Prof. Alfredo Accattatis ( accattatis@ing.uniroma2.it ) Tutor: prof. Venturino Taggi ( taggi@ing.uniroma2.it )
Fondamenti di Informatica a.a. 16/17- A. Accattatis 2 Dimensioni (Size) di vettori e matrici Problema: dato un vettore (matrice) vogliamo sapere il numero dei suoi elementi: le sue dimensioni. MATLAB fornisce tre funzioni built-in per determinare le dimensioni dei vettori e delle matrici: size(a) quando applicato al vettore (matrice) A restituisce un vettore contenente due quantità: numero di righe e colonne length(a) restituisce il valore massimo tra le dimensioni (righe e colonne); se è un semplice vettore coincide con la sua lunghezza. numel(a) restituisce il numero degli elementi (per una matrice è il prodotto di righe e colonne)
Esempio >> A=rand(1,5) A = 0.4854 0.8003 0.1419 0.4218 0.9157 >> s=size(a) s = 1 5 >> whos s Name Size Bytes Class Attributes s 1x2 16 double Fondamenti di Informatica a.a. 16/17- A. Accattatis 3 >> b=rand(3,1) b = 0.7922 0.9595 0.6557 >> sb=size(b) sb = 3 1
Fondamenti di Informatica a.a. 16/17- A. Accattatis 4 Esempio Verifichiamo che length(a) restituisce il valore massimo tra le dimensioni >> confronto = length(a)==max(s) confronto = 1 >> whos confronto Name Size Bytes Class Attributes confronto 1x1 1 logical >> length(a) ans = 5
Accedere alle componenti (indici) Indica le modalità di accesso e modifica degli elementi di un vettore Gli elementi in un vettore sono numerati sequenzialmente, in MATLAB iniziano dal valore 1 (altri linguaggi da 0; es.: C++) Sintassi: v(index) restituisce l elemento (o gli elementi) alla(e) posizione(i) specificata(e) dall indice v(index)=value modifica gli elementi alla(e) posizione(i) specificata(e) dall indice. Il vettore indice può contenere sia valori numerici che logici Fondamenti di Informatica a.a. 16/17- A. Accattatis 5 >> A=1:3:12 A = 1 4 7 10 >> A(1) %legge primo elemento ans = 1 >> B=[2,4] B: vettore indice B = 2 4 >> A(B) ans = 4 10
Fondamenti di Informatica a.a. 16/17- A. Accattatis 6 Un esempio di vettore indice (index vector) >> A=randn(1,10) %crea A riempita con valori distribuiti normalmente A = Columns 1 through 7 8.8840e-01-1.1471e+00-1.0689e+00-8.0950e-01-2.9443e+00 1.4384e+00 3.2519e-01 Columns 8 through 10-7.5493e-01 1.3703e+00-1.7115e+00 >> A=round(A) A = 1-1 -1-1 -3 1 0-1 1-2 >> iv=2:2:10 iv = 2 4 6 8 10 >> A(iv) ans = -1-1 1-1 -2 >> A(2:2:10) ans = -1-1 1-1 -2
Fondamenti di Informatica a.a. 16/17- A. Accattatis 7 Indici Numerici Il vettore indice può avere qualsiasi lunghezza Deve contenere solo numeri interi positivi Il valore del vettore indice deve seguire le seguenti regole: In lettura tutti i valori dell indice devono essere: 1 <= elemento <= length(vector) In scrittura, tutti i valori dell indice devono essere: 1 <= elemento
Fondamenti di Informatica a.a. 16/17- A. Accattatis 8 Esempio >> B = [-1 0 1 2 3]; >> C=[1 2 4 5 1 1]; >> B(C) ans = -1 0 2 3-1 -1
Fondamenti di Informatica a.a. 16/17- A. Accattatis 9 Effettuare «sostituzioni» di valori negli array o aggiunta di nuovi elementi (aumento delle dimensioni) Puo presentarsi l esigenza di modificare dei valori Questo accade normalmente in molti algoritmi MATLAB rende questo compito molto semplificato Esistono alcune semplici regole
Fondamenti di Informatica a.a. 16/17- A. Accattatis 10 Regole di sostituzione degli elementi di un Array (vettori e matrici) >> A=1:3:12 A = 1 4 7 10 >> A(7)??? Index exceeds matrix dimensions. >> B=[2,4]; >> A(B)=[0,0] A = 1 0 7 0 >> A(4)=99 A = 1 0 7 99 >> A(7)=99 A = 1 0 7 99 0 0 99
1-11 Fondamenti di Informatica a.a. 16/17- A. Accattatis Regole di sostituzione degli elementi di un Array (vettori e matrici) 1. Effettuare una sostituzione oltre la fine del vettore implica l estensione automatica della lunghezza. 2. Tutti gli elementi non esplicitamente sostituiti rimangono invariati. 3. Gli elementi oltre la precedente lunghezza e non direttamente assegnati vengono messi al valore 0 (zero). >> A(7)=99 A = 1 0 7 99 0 0 99
1-12 Fondamenti di Informatica a.a. 16/17- A. Accattatis Indici logici Il vettore indice deve essere di dimensioni minori o uguali lunghezza del vettore originale Deve contenere valori logici (true or false) L accesso agli elementi del vettore è effettuato tramite la posizione relativa del vettore logico In lettura, vengono restituiti solo gli elementi corrispondenti all indice con valore true In fase di sostituzione degli elementi, vengono sostituiti solo quelli corrispondenti all indice con valore true Attenzione I vettori logici sono visualizzati nella command window come 0 e 1 ma non sono assolutamente valori numerici! A = 1 0 7 99 0 0 99 >> a=true a = 1 >> a=false a = 0 >> mask=[true,false,true,true] mask = 1 0 1 1 >> A(mask) ans = 1 7 99 >> A(mask)=[66,66,66]; >> A A = 66 0 66 66 0 0 99
13 Fondamenti di Informatica a.a. 16/17- A. Accattatis Il tipo logico è differente dal tipo double!!! >> mask=[0 1 0 1] mask = 0 1 0 1 >> whos mask Name Size Bytes Class Attributes mask 1x4 32 double >> A A = 1 4 7 10 >> A(mask)??? Subscript indices must either be real positive integers or logicals.
1-14 Fondamenti di Informatica a.a. 16/17- A. Accattatis Shortening, ridurre le dim. di un Array Non è mai effettivamente necessario; è preferibile estrarre i dati voluti tramite indici piuttosto che rimuovere i dati non utili Cambiare le dimensioni di un vettore, ed in generale di una struttura dati, può portare a problemi logici I problemi possono verificarsi in particolari sezioni dell algoritmo: consigliabile pertanto usare sempre le funzioni SIZE e LENGTH ed in generale MAI tenere a mente le dimensioni ma affidiamoci alle primitive Quando è invece utilissimo: per esempio nel caso in cui stiamo manipolando grosse quantità di dati (es. Software che gestiscono riprese video) allora può convenire modificare le dimensioni (risparmio di memoria)
Shortening, ridurre le dim. di un Array Può essere ottenuto applicando l operatore vettore vuoto (usando questo operatore si crea un vettore, appunto, vuoto) ai singoli elementi di un vettore, oppure applicandolo alle intere righe o colonne. Attenzione: eliminare un elemento è diverso che metterlo al valore zero! >> vec = 3:5 vec = 3 4 5 >> vec(2)=[] %rimuove il secondo elemento vec = 3 5 Fondamenti di Informatica a.a. 16/17- A. Accattatis 15 Esempio Creiamo un vettore vuoto. >> E=[] >> whos E Name Size Bytes Class Attributes E 0x0 0 double
Fondamenti di Informatica a.a. 16/17- A. Accattatis 16 Creare un vettore colonna E sufficiente interporre un punto e virgola tra i valori (invece di spazio o virgola), usando la consueta rappresentazione tra parentesi quadre; >> c = [2; 5; 7; 1] c = 2 5 7 1 Non c è modo diretto per usare l operatore due punti nel caso di vettori colonna però si può sempre creare un vettore riga e trasporlo >> r=1:3; % crea un vettore riga >> c = r % trasposizione c = 1 2 3
1-17 Fondamenti di Informatica a.a. 16/17- A. Accattatis Operazioni su vettori Tre tecniche si estendono automaticamente da quelle disponibili sui valori scalari: Operazioni aritmetiche Operazioni logiche Funzioni di libreria Due tecniche sono invece specifiche per gli array in generale ed i vettori in particolare: Concatenazione Slicing (generalized indexing)
18 Fondamenti di Informatica a.a. 16/17- A. Accattatis Precedenza degli operatori Descrizione degli operatori e loro precedenza http://www.mathworks.com/help/techdoc/matlab_prog/f0-40063.html
1-19 Fondamenti di Informatica a.a. 16/17- A. Accattatis Operazioni aritmetiche Nella Command window, digitare le seguenti righe: >> A = [2 5 7 1 3]; >> A + 5 ans = 7 10 12 6 8 >> A.* 2 ans = 4 10 14 2 6 >> B = -1:1:3 B = -1 0 1 2 3
1-20 Fondamenti di Informatica a.a. 16/17- A. Accattatis Operazioni aritmetiche(continued) >> A.* B % moltiplicazione elemento per elemento ans = -2 0 7 2 9 >> A * B % moltiplicazione tra matrici!!??? Error using ==> mtimes Inner matrix dimensions must agree. >> A * B ans = 16 >> C = [1 2 3] C = 1 2 3 >> A.* C % A e C devono avere la stessa lunghezza??? Error using ==> times Matrix dimensions must agree.
1-21 Fondamenti di Informatica a.a. 16/17- A. Accattatis Operazioni logiche >> A = [2 5 7 1 3]; >> B = [0 6 5 3 2]; >> A >= 5 ans = 0 1 1 0 0 >> A >= B ans = 1 0 1 0 1 >> C = [1 2 3] >> A > C??? Error using ==> gt Matrix dimensions must agree.
1-22 Fondamenti di Informatica a.a. 16/17- A. Accattatis Operazioni logiche (continued) >> A = [true true false false]; >> B = [true false true false]; >> A & B ans = 1 0 0 0 >> C = [1 0 0]; % NON è un vettore logico >> A(C) % OK, si.. indicizzare vettori logici ma??? Subscript indices must either be real positive integers or logicals.
1-23 Fondamenti di Informatica a.a. 16/17- A. Accattatis Footnote: la funzione find Continuando dal codice nella slide precedente: >> C = find(b) ans = [1 3] La funzione find(...) prende in ingresso un vettore logico e restituisce un vettore di indici che identificano gli elementi veri (true) del vettore di ingresso.
1-24 Fondamenti di Informatica a.a. 16/17- A. Accattatis Funzioni di libreria Tutte le funzioni MATLAB accettano vettori di numeri piuttosto che singoli valori e restiuiscono un vettore della medesima lunghezza. Funzioni Speciali: sum(v) e mean(v) prende in ingresso un vettore e ritorna uno scalare min(v) e max(v) ritornano il minimo od il massimo valore di un vettore, oltre alla posizione round(v), ceil(v), floor(v), e fix(v) rimuovono la parte frazionaria secondo diverse strategie: arrotondamento, arrotondamento verso l alto, verso il basso, verso lo zero
1-25 Fondamenti di Informatica a.a. 16/17- A. Accattatis Concatenazione MATLAB consente la costruzione di un nuovo vettore (matrice), concatenando più vettori: A = [B C D... X Y Z] I singoli elementi possono essere vettori (matrici) definiti come costanti o variabili, e la lunghezza di A sarà la somma delle lunghezze dei singoli vettori. A = [1 2 3 42] è un caso particolare in cui le singole componenti sono vettori ad una sola componente (scalari).
1-26 Fondamenti di Informatica a.a. 16/17- A. Accattatis Slicing (indicizzazione generalizzata) A(4) crea un vettore indice 1x1 (che indicizza la posizione 4), ed lo usa per estrarre lo specifico elemento dal vettore A In generale, B(<rangeB>) = A(<rangeA>) Dove <rangea> e <rangeb> sono entrambi vettori indice, A è un array già definito, e B può essere un array già definito, oppure un nuovo array, o addirittura omesso (in questo caso B verrà automaticamente rappresentato dalla variabile universale ans). Ai valori in B indicizzati in <rangeb> sono assegnati i valori di A indicizzati da <rangea>.
1-27 Fondamenti di Informatica a.a. 16/17- A. Accattatis Regole per lo Slicing Le dimensioni di <rangeb> devono essere uguali alle dimensioni di <rangea> oppure <rangea> deve avere taglia 1; se B non era preesistente, essa è riempita di valori nulli (zero) per ogni posizione non esplicitamente assegnata se B era invece preesistente, i valori non direttamente assegnati in <rangeb> rimangono invariati
Fondamenti di Informatica - Alfredo Accattatis 28 Vi ricordate la slide introdotta nelle prime lezioni che accennava al. TEOREMA del CAMPIONAMENTO?
Fondamenti di Informatica - Alfredo Accattatis 29 La risposta è: Teorema del campionamento! (Shannon Nyquist) Lo tratteremo in maggior dettaglio. Tramite esso è possibile tradurre qualsiasi grandezza «del mondo esterno» in un formato comprensibile al mondo degli elaboratori (numeri codificati in binario) E fondamentale ed ha reso l Informatica uno strumento universale
Fondamenti di Informatica - Alfredo Accattatis 30 Spettro di un segnale Un segnale periodico «generale» (non sinusoidale) risulta composto da una sommatoria di segnali sinusoidali. Ossia esso può essere matematicamente rappresentato come una somma (infinita) di segnali sinusoidali, a diverse ampiezze e frequenza. Sviluppo in serie di Fourier:
Fondamenti di Informatica - Alfredo Accattatis 31 Spettro di un segnale Le sinusoidi risultano essere, secondo questa scomposizione, dei segnali «atomici» non scomponibili in ulteriori segnali. Sono le ARMONICHE Si definisce SPETTRO DI UN SEGNALE o rappresentazione nel dominio della frequenza, il grafico di ampiezza e fase ottenuto scomponendo il segnale nelle sue componenti basilari detta anche BANDA del segnale
Esempio : onda quadra Fondamenti di Informatica - Alfredo Accattatis 32
Armoniche componenti Fondamenti di Informatica - Alfredo Accattatis 33
Armoniche componenti Fondamenti di Informatica - Alfredo Accattatis 34
Fondamenti di Informatica - Alfredo Accattatis 35 Banda di un segnale, Spettro
Fondamenti di Informatica - Alfredo Accattatis 36 Trasformata di FOURIER E una trasformazione matematica che consente di ricavare, dato il segnale nel «dominio del tempo» s(t) la funzione X(f), ossia ricavare lo SPETTRO del segnale, ossia la rappresentazione nel dominio della frequenza X(f) = F(s(t)) Si usa un algoritmo veloce, detto FFT Fast Fourier Transform. Vale per segnali tempo discreto:
Fondamenti di Informatica - Alfredo Accattatis 37
Fondamenti di Informatica - Alfredo Accattatis 38 Teorema del campionamento Ora possiamo finalmente enunciare il teorema del campionamento Dato un segnale analogico tempo continuo a banda limitata, esso può essere completamente rappresentato (ed eventualmente ricostruito) da un segnale tempo discreto da esso derivato per tramite di un operazione di campionamento
Fondamenti di Informatica - Alfredo Accattatis 39 Teorema del campionamento sia X(t) un segnale a banda limitata, ossia la trasformata di Fourier X(f) sia uguale a zero per f > B (dove B è la banda del segnale). Ossia, sia X(t) un segnale il cui contenuto armonico vari da zero a un massimo (per esempio da 0 a 20000 Hz) sia la frequenza di campionamento maggiore od almeno uguale al doppio di B, ossia si prelevino campioni del segnale con una frequenza almeno doppia di quella della massima frequenza presente nel segnale (ossia B). Allora (tesi).
Fondamenti di Informatica - Alfredo Accattatis 40 Teorema del campionamento il segnale X(t) è rappresentato esaustivamente dai suoi campioni (senza errori) il segnale può essere ricostruito con un filtro passa-basso avente frequenza di taglio Ft tale che B<Ft OPPURE il segnale X(t) può essere ricostruito a partire dai suoi campioni con lo sviluppo in serie definito dalla seguente relazione:
Fondamenti di Informatica - Alfredo Accattatis 41 Campionare (misura cadenzata):
Fondamenti di Informatica - Alfredo Accattatis 42
Quantizzazione Fondamenti di Informatica - Alfredo Accattatis 43
Fondamenti di Informatica - Alfredo Accattatis 44
Fondamenti di Informatica - Alfredo Accattatis 45 Quindi, il nostro segnale analogico originario è ora rappresentato da una serie di WORD (esempio 8 bit) 00101001 10001101 11101001 00101111 11101001
Fondamenti di Informatica - Alfredo Accattatis 46 Ricapitoliamo Il teorema del campionamento ci consente di «trasformare» in sequenze di BIT (numeriche) i segnali analogici del mondo esterno al computer Il segnale è rappresentato in maniera esaustiva dalle sequenze numeriche a meno di un errore dovuto al processo di campionamento e poi quantizzazione I circuiti che usiamo per effettuare fisicamente le trasformazioni si chiamano CONVERTITORI A/D (Analogico Digitale) indicati spesso con la sigla ADC. Il circuito che fa l operazione inversa, si chiama CONVERTITORI D/A (Digitale Analogico = DAC). In questo modo possiamo anche creare digitalmente un segnale (sintesi) e trasformarlo in segnale analogico. Esempio: MUSICA ELETTRONICA
Fondamenti di Informatica - Alfredo Accattatis 47 Circuito universale La trasformazione del segnale (funzione di trasferimento) DIPENDE DA UN ALGORITMO
Fondamenti di Informatica - Alfredo Accattatis 48 Filtro passa basso Elimina tutte le componenti di un segnale maggiori di una certa frequenza, detta frequenza di taglio Esempio di circuito analogico Ingresso : onda quadra, composta da tante sinusoidi Filtro PB: ha la proprietà fisica Uscita: una sola armonica Di far passare solo determinate frequenze Inferiori alla frequenza di taglio
Fondamenti di Informatica - Alfredo Accattatis 49
Fondamenti di Informatica - Alfredo Accattatis 50 Dunque: abbiamo matematicamente ottenuto l equivalente del comportamento fisico di: Con un ALGORITMO implementato in SOFTWARE! Cambiare l algoritmo equivale a cambiare il circuito