Corso di Segnali e Sistemi Prof. Michele Pavon INTRODUZIONE A MATLAB 30 aprile 2015 Chiara Pielli chiara.pielli@studenti.unipd.it
Cos’è Matlab? Matrix LABoratory Calcolo numerico e analisi statistica Applicazioni: sistemi di controllo comunicazioni progettazione elettronica elaborazione di immagini biologia computazionale … Alternativa open source: GNU Octave
Interfaccia
Istruzioni Due modi per fornire le istruzioni: tramite command window: - comandi eseguiti immediatamente - volatile tramite script: - file .m scritto in un editor - salvataggio programma in memoria Se il comando è errato o mal formulato, Matlab segnala l’errore con una risposta in rosso.
Istruzioni – definizione variabili Variabile numerica >> a = 5 >> b = 1.91 >> c = 1+7i Stringa >> s = ‘pippo’ Vettore >> v = [1 5 9] >> u = [3; 0; 4] Matrice >> C = [2 6; 4 9; 3 1] Per sopprimere l’eco, usare il punto e virgola: >> k=10;
Gestione variabili Lista variabili nel workspace: >> who Descrizione variabili nel workspace: >> whos Salvataggio variabili in un file data.mat: >> save data [salvo TUTTO il workspace] >> save data c [salvo solo la variabile c] Cancellazione variabili dal workspace: >> clear all [cancello TUTTE le variabili] >> clear c [cancello solo la variabile c]
Istruzioni – vettori [1/3] Definizione di un vettore: >> v = [1 3 8] Lunghezza di un vettore: >> l = length(v) >> l = 3 Vettore trasposto >> u = v’; >> u = Somma elementi >> s = sum(v) >> s = 11 Vettore simmetrico >> u = wrev(v) >> u = 8 3 1
Istruzioni – vettori [2/3] Sia v= [1 8 0 9]; !!Gli indici in Matlab partono da 1!! Estrazione di elementi: >> v(3) >> ans = 0 >> v(1:2) >> ans = [1 8] >> v(2:2:4) >> ans = [8 9] >> v(3:-1:1) >> ans = [0 8 1]; >> v(:) >> ans = [1; 8; 0; 9];
Istruzioni – vettori [3/3] Siano v = [1 8 0 9] ed u = [4 1 8 2]; Somma fra due vettori >> u + v >> ans = [5 9 8 11] Prodotto interno <u,v> = uTv >> v*u’ >> ans = 30 Prodotto componente per componente >> v.*u >> ans = [4 8 0 18] Elevamento a potenza componente per componente >> v.^2 >> ans = [1 64 0 81]
Istruzioni – matrici [1/2] Definizione matrice: >> M = [7 4; 1 9]; Dimensione matrice: >> size(M) >> ans = [2, 2] >> size(M, 2) >> ans = 2 Estrazione elementi: >> M(1,2) >> ans = 4 >> M(2,:) >> ans = [1 9]; Matrice inversa (! se M è quadrata): >> inv(M) >> ans = 0.1525 -0.0678 -0.0169 0.1186
Istruzioni – matrici [2/2] Siano e Somma: >> A + B >> ans = 7 9 11 13 Prodotto: >> A * B >> ans = 22 25 50 57 Prodotto elemento per elemento: >> A.*B >> ans = 6 14 24 36
Istruzioni logiche Matlab può valutare proposizioni logiche 1 = true e 0 = false Operatori: - ugualianza == >= <= - disuguaglianza ~= > < - and && - or || Esempi: >> ( (a > 0) || (c <= 3) ) >> ( (a ~=0) && (c+d > 7) )
Cicli iterativi Struttura IF: if (condizione){ Struttura WHILE: <istruzioni> }else { }end }elseif { Struttura WHILE: while (condizione){ <istruzioni> }end Struttura FOR: for(j = min:step:max){
Script File contenente una successione di comandi da eseguire Si scrive tramite editor di testo Si salva in un file con estensione .m
Funzioni [1/2] File invocato nel main Parametri di ingresso + valori di ritorno Moltissime funzioni già implementate È possibile creare funzioni personalizzate: - come uno script: editor di testo & estensione .m - sintassi: function [out1, out2, …] = nomeFunzione(in1, in2, ...) - nome file identico al nome della funzione Es: function a = areaTriangolo(b, h) a = (b*h)/2; end
Funzioni [2/2] Informazioni su una funzione: help nomeFunzione » help abs ABS Absolute value. ABS(X) is the absolute value of the elements of X. When X is complex, ABS(X) is the complex modulus(magnitude) of the elements of X. Alcune funzioni utili: real, imag, eye, ones, sin, cos, exp, log, plot, stem, min, max, conv, deconv, abs, phase, ... Cercare funzioni Google
Grafici [1/5] Rappresentiamo la funzione seno nell’intervallo [0, 2π] con passo di campionamento Tc = 0.01 » Tc = 0.01; » x = 0:Tc:2*pi; » plot(x, sin(x));
Grafici [2/5] Aggiungere elementi al grafico: T = 0.01; x = 0:T:2*pi; plot(x,sin(x),'r-.','LineWidth',3) grid on; title('Plot of sin(x)'); xlabel('x'); % nome asse x ylabel('sin(x)'); % nome asse y axis([0 2*pi -1 1]);
Grafici [3/5]
Grafici [4/5] Esercizio: stampare su due figure differenti i segnali entrambi con passo di campionamento T = 0.02.
Grafici [5/5] clear all; close all; % chiudo finestre aperte T = 0.02; % passo di campionamento t = 0:T:50; % crea vettore tempi f = cos(2*t); % crea vettore per f g = exp(-0.1*t).*cos(2* t); % vettore per g figure; % apro una nuova figura plot(t, f) % stampo il primo grafico xlabel('t') % nome asse x ylabel('f(t)' % nome asse y title('primo grafico') % titolo grafico figure; plot(t,g,'r') % stampo il secondo grafico xlabel('t'); ylabel('g(t)‘); title 'secondo grafico');
Esempio riepilogo [1/2] Scrivere uno script esempio.m che calcola i valori massimo e minimo e la media di un vettore aleatorio con distribuzione uniforme nell’intervallo [0,30]. (SUGGERIMENTO: guardare l’help della funzione rand) close all; clear all; L = 100; % lunghezza vettore % genero sequenza casuale uniforme in [a,b] a = 0; b = 30; v = a + (b-a).*rand(L, 1); % calcolo max e min del vettore [vMin, iMin] = min(v); [vMax, iMax] = max(v);
Esempio riepilogo [2/2] % Produciamo il grafico richiesto figure; stem(v); hold on; stem(iMin, vMin,'kx‘); stem(iMax, vMax,'gs'); vMedio = mean(v)*ones(L,1); plot(vMedio,'r–'); grid on; legend('v','valore minimo', 'valore massimo', 'valor medio');
Homework Stampare il segnale: con passo di campionamento T = 0.02 scegliere in maniera opportuna il passo di campionamento