Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni

CD Matlab

Caricato da

albertoalberting
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni

CD Matlab

Caricato da

albertoalberting
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 178

Intro a Matlab per sistemi LTI, 1

Utilizzo di Matlab per l’analisi


di sistemi dinamici

Sistemi dinamici a tempo continuo


ed a tempo discreto

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 2

Indice del materiale

• Breve introduzione a Matlab


– Descrizione generale di Matlab (v. 6.x)
– Quadro delle funzioni predefinite
– Definizione di matrici, vettori e polinomi
– Rappresentazione grafica dei dati

• Analisi e simulazione di sistemi dinamici LTI in ambiente Matlab


– Rappresentazione di sistemi dinamici lineari tempo-invarianti
nell’ambiente Matlab
– Analisi e simulazione di sistemi dinamici lineari tempo-invarianti

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 3

Indice del materiale (2)

• Sistemi lineari interconnessi


– Sistemi dinamici lineari interconnessi in ambiente Matlab
– Utilizzo delle istruzioni Matlab FEEDBACK + CONNECT

• Determinazione della risposta in frequenza di sistemi dinamici


lineari tempo-invarianti nell’ambiente Matlab
– Esempi di utilizzo

• Conversione da tempo continuo a segnali campionati/


tempo discreto e viceversa.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 4

Breve introduzione a Matlab

L’ambiente di lavoro,
le istruzioni fondamentali

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 5

A cosa serve questa presentazione

• Scopi di questo materiale:


– fornire le informazioni necessarie per l’uso di Matlab in
relazione alle esercitazioni del corso;

– dare una panoramica generale (tutt’altro che esauriente)


delle potenzialità di Matlab per la formulazione e la
soluzione di problemi numerici nell’Ingegneria.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 6

Dove trovare altre informazioni?

• Sito web di Mathworks:


www.mathworks.com
seguendo i link alla voce “support” è possibile trovare i manuali di
Matlab in formato Adobe PDF.
( http://www.mathworks.com/access/helpdesk/help/techdoc/matlab.shtml )

• Un testo in italiano di introduzione a Matlab e Simulink:


“Guida Operativa a MATLAB, SIMULINK e Control Toolbox” ,
Alberto Cavallo, Roberto Setola, & Francesco Vasca, Liguori Editore,
1994 in biblioteca

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 7

Descrizione generale di Matlab

• MATLAB ( = MATrix LABoratory):


– un linguaggio di programmazione per applicazioni
scientifiche e numeriche
– vasto set di funzioni predefinite
– interprete di comandi
– possibilità di scrivere nuove funzioni
– libreria di TOOLBOX per svariate applicazioni; ad es.
Signal Processing, Identificazione di modelli, …

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 8

L’interfaccia di Matlab

• Interfaccia utente:
– la Command
Window dà
accesso diretto
all’interprete
– scrittura diretta “Command window”
di comandi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 9

Workspace
&
Launchpad

Command window

Command history &


Current directory

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 10

• Command Window: è la finestra dell’interprete di comandi di


Matlab. Vi si possono scrivere direttamente comandi o lanciare
programmi scritti nel linguaggio di programmazione del Matlab.

• Command History: è la finestra che contiene l’elenco dei


comandi inseriti nella Command Window.

• Current Directory: visualizza in forma grafica il contenuto


della cartella di lavoro.

• Workspace: è la finestra che visualizza il contenuto dell’area di


memoria utilizzata dal Matlab (nomi, tipi e dimensioni delle
variabili).

• LaunchPad: visualizza l’elenco dei comandi/delle funzioni


richiamabili nella Command Window, organizzati secondo
l’appartenenza alle varie categorie di comandi/funzioni
disponibili (elaborazione immagini, filtraggio, controllo …)
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 11

Matlab come calcolatrice...

• La modalità di impiego più “semplice”: per valutare espressioni


numeriche.

• Esempio: per calcolare


è sufficiente digitare al prompt »

»4 + sqrt(2) - sin(0.2*pi)^2 + exp(2)


ans =
12.4578

• Il risultato viene salvato nella variabile ans.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 12

Definizione di variabili

• È possibile definire variabili e espressioni non numeriche più


complesse.

• Esempio:
» a=4; b=2;
» a*b
ans =
8
• Per cancellare una variabile (es. a):
» clear a

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 13

Il Workspace

• Ogni variabile definita in questo modo viene conservata in memoria,


nel Workspace.
• Il comando whos mostra una lista delle variabili definite:
» whos
Name Size Bytes Class
a 1x1 8 double array
ans 1x1 8 double array
b 1x1 8 double array
Grand total is 3 elements using 24 bytes

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 14

Lettura e scrittura su file

Mediante i comandi load e save è possibile salvare su file le variabili


del workspace.

• load nomefile variabile1 variabile2 ... carica dal file nomefile.mat le


variabili elencate

• save nomefile variabile1 variabile2 ... scrive nel file nomefile.mat le


variabili elencate.

• load nomefile carica tutte le variabili in nomefile.

• save nomefile salva tutto il workspace in nomefile.mat

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 15

Quindi...

• Esiste un insieme (molto vasto) di funzioni predefinite (come sin e


sqrt nell’esempio precedente).

• A differenza dei normali linguaggi (C, Pascal…) non occorre


dichiarare le variabili. L’assegnazione coincide con la dichiarazione.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 16

Operazioni matematiche elementari

• Moltiplicazione a*b

• Divisione (divisione “a destra”) a/b

• Divisione “a sinistra” a\b

• Elevamento a potenza a^b

• Addizione e sottrazione a+b


a-b
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 17

Operazioni elementari: precedenza

• La precedenza nello svolgere le operazioni matematiche


elementari in Matlab è quella standard, facendo però attenzione
alle operazioni di “divisione a destra” e “divisione a sinistra”.
• Infatti valgono le regole:
– L’elevamento a potenza viene valutato prima delle
operazioni di moltiplicazione e divisione, che hanno la
medesima priorità,
– L’operazione di “divisione a destra” ha priorità rispetto alla
“divisione a sinistra”;
– Le operazioni di addizione e sottrazione hanno la priorità
più bassa.
– Per assegnare una diversa precedenza nella sequenza dei
calcoli è necessario utilizzare le parentesi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 18

L’operatore di assegnazione “=“

• L’operatore “=“ è utilizzato in Matlab per assegnare un valore


(numerico, come il risultato di un’operazione di calcolo, oppure
testuale o simbolico [ne parliamo più avanti] ) ad una variabile.

• Quindi è appropriato pensare all’operatore “=“ come ad


un’istruzione con la quale si assegna un valore ad una variabile,
in un qualsiasi linguaggio di programmazione (C, Fortran ecc.).

• Se l’assegnazione termina con un “;” allora il risultato


dell’operazione di assegnazione non viene visualizzato,
altrimenti si.
» x = 2; y = 4; z = x*y
z=8
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 19

L’operatore di assegnazione “=“ (2)

• Nel caso di assegnazioni lunghe si può utilizzare il simbolo “…”


per poi proseguire l’assegnazione nella riga seguente

» FirstClassHolders = 72;
» Coach = 121;
» Crew = 8;
» TotalPeopleOnPlane = FirstClassHolders + Coach...
+ Crew

TotalPeopleOnPlane =
201

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 20

Il formato di visualizzazione

• Il risultato di un’operazione numerica viene visualizzato di solito


tramite un numero reale, con sole 4 cifre decimali.
• Questo è il formato di visualizzazione standard.

• Esistono altre possibilità e si scelgono tramite il comando


format:
– format short 4 cifre decimali
• short e 4 cifre decimali, notazione esponenziale
– format long 15 cifre decimali
• long e 15 cifre decimali, notazione esponenziale
– …

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 21

Il formato di visualizzazione

– format rat risultato approssimato tramite la più vicina


frazione
– format bank formato finanziario, con sole due cifre
decimali
– …

»format long
» x = 3 + 11/16 + 2^1.2
x = 5.98489670999407
» format short
» x = 3 + 11/16 + 2^1.2
x = 5.9849

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 22

Esempi di funzioni predefinite


(di uso piu’ comune)

• Funzioni trigonometriche (sin, cos, tan, acos, asin, atan…);

• Esponenziale e logaritmo (exp, log, log10, sqrt…);

• Numeri complessi (abs ⇒ modulo, angle ⇒ fase, real ⇒ parte


reale, imag ⇒ parte immaginaria…);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 23

Alcuni esempi semplici

• Calcolare il modulo di (2+3i):

» abs( 2+3*i )
ans = Unità immaginaria
3.6056

• Calcolare

» 20*log10( abs( (2+3*i) / (4+6*i) ) )


ans =
-6.0206
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 24

Inf e NaN

• Alcune operazioni numeriche possono dare luogo a risultati non


corretti, esprimibili soltanto facendo uso di “forme indeterminate”,
che vengono definite da Matlab tramite le grandezze Inf e NaN.

• Esempi:

» 5/0 » 0/0
Warning: Divide by zero. Warning: Divide by zero.
ans = ans =
Inf NaN

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 25

Help! Una funzione fondamentale!

• help per vedere la lista dei toolbox installati

• help nome_toolbox per vedere la lista dei comandi installati in un


toolbox

• help nome_comando guida ‘on-line’ di MATLAB sullo specifico


comando

• ver info sulla versione di MATLAB

• helpwin finestra di help di MATLAB

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 26

Definizione di matrici

• Come si definisce una matrice in Matlab?


Esempio: definire la matrice 2x2

» A = [ 1, 2; 3, 4 ]
A=
1 2
3 4

• Come si accede agli elementi di una matrice:


» A( 1, 2 )
ans = Indici (riga e colonna)
2 dell’elemento di interesse
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 27

La wildcard :

• Per accedere a intere righe o colonne di una matrice, si usa la


wildcard :

• Es.: selezionare la prima riga di A


» A(1,:)
ans =
1 2
• Es.: selezionare la seconda colonna di A
» A(:,2)
ans =
2
4

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 28

Selezionare sottomatrici
• Se definiamo
» B=[ 1, 2, 3; 4, 5, 6 ]
B=
1 2 3
4 5 6
Sottomatrice di interesse

• scrivendo
» B( 1:2 , 2:3 )
ans =
2 3
5 6

Indici della sottomatrice di interesse

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 29

Operazioni (elementari) sulle matrici

• Sono definiti gli operatori +, -, * e ^

» A = [ 1 2; 3 4 ]; B = [ 5 6; 7 8 ] » A*B
» A+B ans =
ans = 19 22
6 8 43 50
10 12
» A^2
» B-A ans =
ans = 7 10
4 4 15 22
4 4

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 30

Operazioni (elementari) sulle matrici (2)

• Sono definiti gli operatori .*, ./ e .^, che si applicano elemento


per elemento:

» A = [ 1 2; 3 4 ]; B = [ 5 6; 7 8 ];
» A.*B
ans =
5 12
21 32
» A.^B
ans =
1 64
2187 65536

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 31

Operazioni (elementari) sulle matrici (3)

• Determinante: • Matrice inversa:


» det(A) » inv(A)
ans =
ans =
-2.0000 1.0000
-2
1.5000 -0.5000

• Autovalori: • Matrice trasposta:


» eig(A) » A'
ans = ans =
-0.3723 1 3
5.3723 2 4

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 32

Operazioni (elementari)

• Funzioni matematiche di base help elfun

• Funzioni matematiche specifiche help specfun

• Funzioni di manipolazione delle matrici help elmat

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 33

Altre operazioni

• Osservazione importante: NON occorre definire le dimensioni in


modo esplicito!
Per conoscere le dimensioni di una matrice: size

• Altre operazioni:
– rank -> calcolo del rango di una matrice
– trace -> calcolo della traccia di una matrice
– norm -> calcolo della norma di una matrice

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 34

Alcune matrici “speciali”

• eye(n,n) ⇒ matrice identità n x n;

• zeros(n,m) ⇒ matrice di “0” n x m;

• ones(n,m) ⇒ matrice di “1” n x m;

• rand(n,m) ⇒ matrice n x m con elementi distribuiti


uniformemente tra 0 e 1.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 35

Vettori

• I vettori hanno due funzioni fondamentali in Matlab:

– rappresentazione di polinomi (un polinomio è descritto dal


vettore dei suoi coefficienti);

– rappresentazione di segnali (un segnale è rappresentato


mediante la sequenza dei valori che assume in un insieme di
istanti di tempo, quindi mediante un vettore).

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 36

Definizione di vettori (1)

• » v=(0:10)
v=
0 1 2 3 4 5 6 7 8 9 10

• » v=(1:0.5:3) Valore finale


v=
1.0000 1.5000 2.0000 2.5000 3.0000

Passo
Valore iniziale

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 37

Definizione di vettori (2)

• Come matrici riga o colonna:

»v=[3617]
v=
3 6 1 7

• Polinomi: sono rappresentati come vettori


Es.:

» pol = [ 3 2 1 ]
pol =
3 2 1

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 38

Operazioni sui polinomi

• Calcolo delle radici ⇒ roots

» roots( pol )
ans =
-0.3333 + 0.4714i
-0.3333 - 0.4714i

• Valutazione in un punto ⇒ polyval

» polyval( pol, 0 )
ans =
1

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 39

Operazioni sui polinomi (2)

• Prodotto di polinomi ⇒ conv


Esempio:

» pol1 = [ 1 1 ]; pol2 = [ 1 1 ];
» polprod = conv( pol1, pol2 )
polprod =
1 2 1

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 40

Rappresentazione grafica

• Grafici 2D:

– In scala lineare ⇒ plot


plot(x,y) traccia il grafico dei punti che hanno come ascisse
(ordinate) gli elementi del vettore x (y).

– In scala semilogaritmica o logaritmica ⇒ semilogx,


semilogy, loglog
stessa sintassi di plot

– Diagrammi polari ⇒ polar

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 41

Rappresentazione grafica (2)

• Altre funzioni utili:

– cambiamenti di scala ⇒ axis([xmin,xmax,ymin,ymax])


– sovrapposizione di più grafici ⇒ hold
– aggiunta di griglia al grafico ⇒ grid
– titolo al grafico ed etichette agli assi ⇒ title(‘..’),
xlabel(‘..’), ylabel(‘..’)
– più grafici in una finestra ⇒ subplot
– inserimento di testo in una figura ⇒ gtext

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 42

Esempio

• Grafici sovrapposti

» t=(0:0.01:5);
» y1=sin(t);
» y2=cos(2*t-pi/3);
» figure;
» plot(t,y1,'r',t,y2,'g');
» grid on;

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 43

Un tipo di dato “speciale”: cell array

• Il tipo di dato “cell array” sta ad indicare che si vuole creare un


oggetto di tipo array i cui elementi possono essere di tipo
diverso (valori numerici, testo, altri tipi di dati).

• Operativamente, un dato di tipo “cell array” si crea in modo


simile agli array “classici” in Matlab, semplicemente sostituiendo
ai delimitatori classici [ ] i delimitatori { }.

• Esempio: per creare un cell array 2-x-2

A = {[1 4 3; 0 5 8; 7 2 9], 'Paolino Paperino';3+7i, -pi:pi/4:pi};

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 44

Cenni alla programmazione


in ambiente Matlab

Operazioni con vettori, caratteri e testo


Cicli, operazioni e condizioni logiche
Funzioni e struttura di un programma in Matlab

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 45

Operazioni sui vettori e matrici

• I vettori (e le matrici) possono essere manipolati in Matlab non


solo per estrarre parti di essi, ma anche per
– Concatenare più vettori (matrici) assieme

» t1 = [1 :10];
» t2 = [ 20:-1:11];
» t3=[t1, t2];

– Modificare le dimensioni di un vettore (matrice)

» help reshape
» t3bis = reshape(t3,2,10);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 46

– Cancellare/sostituire elementi in un vettore (matrice)

» disp(t3bis);
» t3bis(:,4:6)=[];
» disp(t3bis);
» whos

» disp(t3bis)
» t3bis(1,4:6)=-3;
» whos

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 47

Operazioni su caratteri e testo

• Le stringhe di caratteri sono viste come particolari array in


Matlab, quindi su di esse possono essere applicate le operazioni
di manipolazione sui vettori già descritte:

» t1 = 'A‘
» t2 = 'BCDE‘
» t3 = [t1,t2]
» t4 = [t3,' are the first 5 ';...
'characters in the alphabet.']
• A volte e’ necessario convertire un numero in testo e viceversa:
vedere le istruzioni str2num, num2str, int2str e simili.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 48

Cicli, operazioni e condizioni logiche

• Operazioni cicliche: for indice = inizio:passo:fine


fai_qualcosa;
end

• Operazioni logiche, condizioni logiche elementari:


– “vero” e “falso”: true = 1 false = 0
– Confronti logici:
• x == 2 x e’ uguale a 2?
• x ~= 2 x NON e’ uguale a 2?
• x>2 x e’ maggiore di 2?
• x<2 x e’ minore di 2?
• x >= 2 x e’ maggiore oppure uguale a 2?
• x <= 2 x e’ minore oppure uguale a 2?

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 49

• Attenzione a questo esempio:

» x = pi
x=
Questo non e’ un test,
3.1416 ma una assegnazione!

» x ~= 3, x ~= pi
ans =
1
ans =
Questi sono test logici.
0

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 50

Composizione di operazioni logiche

• Le operazioni logiche elementari si possono comporre con gli


operatori logici “and”, “or”, “xor”, “not”:
– And &
– Or |
– Xor xor
– Not ~

• Per una descrizione completa: help relopt

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 51

Cicli “while”

• La struttura del ciclo e’ quella classica


while test logico
Comandi_da_eseguire mentre la condizione logica
ha valore “true”
end

» S = 1; n = 1;
» while S+ (n+1)^2 < 100
n = n+1; S = S + n^2;
end
» [n, S]

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 52

“if” … “then” … “else” …

• La struttura e’ quella classica


if test_logico_1
Comandi da eseguire se test1 e’ “true”
elseif test_logico_2
Comandi da eseguire quando test2 e’ “true” ma
test1 e’ “false”
...
end

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 53

Un esempio

• Si vuole risolvere l’equazione

• La trasformiamo in una successione e cerchiamo di trovar a


quale valore converge la successione

• Il tutto deve essere uno script Matlab.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 54

% risolvi x= cos(x)

% metodo 1
% spreca memoria, memorizza anche passi intermedi
x = zeros(1,20); x(1) = pi/4;
n = 1; d = 1;
while d > 0.001
n = n+1; x(n) = cos(x(n-1));
d = abs( x(n) - x(n-1) );
end
n,x

% metodo 2
% migliore memorizza solo l'ultimo dato
xold = pi/4; n = 1; d = 1;
while d > 0.001 & n < 20
n = n+1; xnew = cos(xold);
d = abs( xnew - xold );
xold = xnew;
end
[n, xnew, d]

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 55

Matlab function

• Un m-file e’ una Matlab function se e solo se la prima riga del


file contiene il seguente testo

– function [elenco variabili in uscita] =


nome_della_funzione (elenco variabili in ingresso)

• Non e’ necessario terminare il file con una parola chiave, anche


se esiste l’istruzione “return” (vedere help return)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 56

Alcuni esempi

• Calcolo dell’area di un triangolo qualsiasi:

– Vale la formula

– con a,b,c, lunghezze dei lati del triangolo.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 57

• La funzione allora (nella sua versione piu’ semplice) avra’ 3


parametri in ingresso ed 1 solo parametro in uscita

function [A] = area(a,b,c)


% Compute the area of a triangle whose
% sides have length a, b and c.
% Inputs:
% a,b,c: Lengths of sides
% Output:
% A: area of triangle
% Usage:
% Area = area(2,3,4);
% Written by XXX, MM/DD/YY.
s = (a+b+c)/2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
%%%%%%%%% end of area %%%%%%%%%%%

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 58

• Provare a creare il file “my_area.m” e poi a scrivere il comando


“help my_area” nella Command Window di Matlab.

• Utilizzo della funzione


– Assegnando una variabile in uscita

» Area = area(10,15,20)
Area =
72.6184
– non assegnando la variabile d’uscita
» area(10,15,20)
ans =
72.6184

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 59

Un esempio: i numeri di Fibonacci

• Calcolare la sequenza:

• Calcolare il valore a cui tende il rapporto tra due termini


successivi al crescere dell’indice

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 60

F(1) = 0; F(2) = 1;
% inizializzazione
for i = 3:20
F(i) = F(i-1) + F(i-2);
end
% calcolo della sequenza

% grafici
plot(1:19, F(1:19)./F(2:20),'o' )
hold on, xlabel('n')
plot(1:19, F(1:19)./F(2:20),'-' )
legend('rapporto dei termini f_{n-1}/f_n')
plot([0 20], (sqrt(5)-1)/2*[1,1],'--')

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 61

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 62

Cenni alla “vettorializzazione del codice”

• Per “calcolo vettorializzato” si intende un algoritmo che


trae vantaggio dallo sfruttare/eseguire operazioni su
interi vettori/matrici piuttosto che su ciascun singolo
componente di essi.

• Si può “vettorializzare” una discreta varietà di strutture di


programmazione e tale operazione può portare ad incrementare
la velocità d’esecuzione anche di un fattore 10.
• La “vettorializzazione” del codice è una delle pratiche più
efficienti per ottenere codice Matlab molto performante.

• NB “vettorializzare” NON è sinonimo di “parallelizzare” il codice!

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 63

Vettorializzare i cicli

• Vettorializzare in questo caso significa trasformare in operazioni


su vettori/matrici le operazioni contenute in cicli for, oppure
while.
• Esempio
i = 0;
for t = 0:.01:10
i = i + 1;
y(i) = sin(t);
end

• La versione vettoriale del medesimo codice può essere


t = 0:.01:10; y = sin(t);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 64

• Quanto si guadagna?

• Lo script “test_ciclo.m” fornisce il seguente risultato

risultati
primo ciclo
7.6309e-005
secondo ciclo Incremento di velocità del 25% circa
5.6040e-005

• Appare evidente che si riesce ad incrementare la velocità di


esecuzione.

• ATTENZIONE: non sempre è possibile vettorializzare i cicli. In


tal caso si può pensare di precompilare il codice “scalare” per
ottenere comunque un certo incremento di prestazioni. NON
affrontiamo l’argomento.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 65

% test_ciclo
% script che serve a eseguire il timing su due cicli,
% uno vettorializzato e l'altro no.
%
tic;
i = 0;
for t = 0:.01:10
i = i + 1;
y(i) = sin(t);
end
tempo1 = toc;

% secondo ciclo
clear t y
tic;
t = 0:.01:10;
y = sin(t);
tempo2 = toc;

% risultato
messaggio = sprintf('ecco il risultato: primo ciclo %f secondo ciclo
%f',tempo1, tempo2);
disp(messaggio);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 66

Vettorializzazione di algoritmi

• Si può incrementare la velocità di esecuzione vettorializzando


anche altre strutture di codice.

• Esempio: versione “scalare”

function d = minDistance(x,y,z)
% trova in un insieme di punti di R^3
% quello a distanza minima dall’origine e restituisce la distanza min
nPoints = length(x);
d = zeros(nPoints,1); % prealloca (ottimizzazione tempo di calcolo)
for k = 1:nPoints % calcola la distanza per ogni punto
d(k) = sqrt(x(k)ˆ2 + y(k)ˆ2 + z(k)ˆ2);
end
d = min(d); % trova la distanza minima

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 67

• versione “vettoriale” del medesimo algoritmo

function d = minDistance(x,y,z)
% trova la distanza minima dall’origine in R^3
d = sqrt(x.ˆ2 + y.ˆ2 + z.ˆ2); % calcola la distanza per ogni punto
d = min(d); % trova la distanza minima

• Si può migliorare ancora:

d = sqrt(min(x.^2 + y.^2 + z.^2)))

• Provare le tre versioni su di un insieme di punti (es. 10000 punti a


caso), misurando le prestazioni in tutti e tre i casi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 68

1o test (5-10 minuti)

• Risolvere tramite uno script Matlab e/o una Matlab function il


problema di algebra matriciale

• Le matrici del problema vengono assegnate all’inizio dello script.


• È necessario prevedere che la matrice A possa essere non
quadrata e che nel caso sia matrice quadrata possa essere non
invertibile.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 69

• Soluzione del test:

– Molto semplicemente si sfrutta una peculiare istruzione per il


calcolo matriciale

– in ambiente Matlab il comando A/B equivale a risolvere il


problema

sia nel caso di matrice A quadrata, sia nel caso generale di


matrice A non quadrata (quindi soluzione ai minimi
quadrati).

• Si veda help mldivide

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 70

Analisi e simulazione
di sistemi dinamici LTI
in ambiente Matlab

Definizioni
Proprietà

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 71

Sistemi dinamici lineari


• Un sistema dinamico lineare tempo-invariante (LTI system) può
essere descritto:
– in forma di equazioni di stato, assegnando le matrici A,B,C,D

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 72

Sistemi dinamici lineari (…)


• Un sistema dinamico lineare tempo-invariante (LTI system) può
essere descritto:
– in forma di matrice di funzioni di trasferimento
• mediante i polinomi a numeratore e denominatore delle
funzioni di trasferimento

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 73

Sistemi dinamici lineari (…)


• Un sistema dinamico lineare tempo-invariante (LTI system) può
essere descritto:
– in forma di matrice di funzioni di trasferimento
• assegnando zeri, poli e guadagno delle funzioni di
trasferimento

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 74

Sistemi dinamici lineari (…)

• Nell’ambiente Matlab è possibile definire un sistema dinamico


lineare tempo-invariante come oggetto di tipo LTI model a
partire da qualsiasi di queste descrizioni (ne esistono anche altre,
ma non le analizziamo [si veda il comando ltimodels] ).

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 75

Sistemi dinamici lineari (…)

• Utilizzando questi oggetti di tipo LTI model è possibile analizzare


le proprietà del sistema dinamico corrispondente (stabilità ecc.) ed
è possibile simulare l’evoluzione nel tempo del sistema dinamico,
con condizioni iniziali ed ingressi assegnati.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 76

Sistemi lineari LTI SISO

• Nella descrizione dei comandi Matlab e negli


esempi consideriamo soltanto sistemi SISO.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 77

Sistemi lineari SISO: dalle equazioni di stato

• partendo dalle equazioni di stato

– definire le matrici A,B,C,D nel workspace;


– definire il sistema mediante il comando ss

– sintassi del comando ss


• SYS = ss(A,B,C,D) crea un sistema dinamico a tempo
continuo

• SYS = ss(A,B,C,D,Ts) crea un sistema dinamico a tempo


discreto, con intervallo di campionamento specificato da Ts
[s].
• Ponendo Ts pari a -1, si lascia non specificato l’intervallo di
campionamento associato al sistema.
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 78

» A = [ 0 -1;-3 2]; B = [3;0];


Esempi (1) C = [4 0]; D = 2;
» sistema = ss(A,B,C,D)
a=
• Definizione del sistema
x1 x2
dinamico a tempo continuo:
x1 0 -1
x2 -3 2
b=
u1
x1 3
x2 0
c=
x1 x2
y1 4 0
d=
u1
y1 2
Continuous-time model.
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 79

» A = [ 0 -1; -32]; B = [3;0];


Esempi (2) C = [4 0]; D = 2;
» sistema = ss(A,B,C,D,-1)
a=
x1 x2
• Definizione del x1 0 -1
sistema dinamico x2 -3 2
a tempo discreto: b=
u1
x1 3
x2 0
c=
x1 x2
y1 4 0
d=
u1
y1 2
Sampling time: unspecified
Discrete-time model.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 80

Sistemi lineari SISO: dalla FdT

• partendo dalla funzione di trasferimento

– assegnare i coefficienti dei polinomi a numeratore e


denominatore della fdt nel workspace (nel seguito vettori NUM e
DEN);

– definire il sistema mediante il comando tf

– Sintassi del comando tf


• SYS = tf(NUM,DEN) crea un sistema a tempo continuo

• SYS = tf(NUM,DEN,Ts) crea un sistema a tempo discreto


con intervallo di campionamento specificato da Ts [s].
• Ponendo Ts pari a -1, si lascia non specificato l’intervallo di
campionamento associato al sistema.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 81

Esempi (3)
• Definizione del sistema
tramite la funzione di
trasferimento

» num = [ 1 1 ]; den = [ 1 3 16 ];
» sistema = tf( num, den )
Transfer function:
s+1
--------------
s^2 + 3 s + 16

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 82

Esempi (4)
• Definizione del sistema
tramite la funzione di
trasferimento

» num = [ 1 1 ]; den = [ 1 3 16 ];
» sistema = tf( num, den,-1 )
Transfer function:
z+1
--------------
z^2 + 3 z + 16

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 83

Sistemi lineari SISO: dalla FdT (2)

• partendo dalla funzione di trasferimento

– assegnare i vettori degli zeri, dei poli ed il guadagno del sistema nel
workspace (nel seguito vettori Z, P e K);

– definire il sistema mediante il comando zpk.

– Sintassi del comando zpk


• SYS = zpk(Z,P,K) crea un sistema a tempo continuo

• SYS = zpk(Z,P,K,Ts) crea un sistema a tempo discreto con


intervallo di campionamento specificato da Ts [s].
• Ponendo Ts pari a -1, si lascia non specificato l’intervallo di
campionamento associato al sistema.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 84

Esempi (5)

• Definizione del sistema


tramite la funzione di
trasferimento

» Z = [ 1 ]; P = [ -1]; K = [-5]
» sistema = zpk( Z,P,K )
» Zero/pole/gain:
-5 (s-1)
--------
(s+1)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 85

Esempi (6)

• Definizione del sistema


tramite la funzione di
trasferimento

» Z = [ 1]; P = [ -1]; K = [-5]


» sistema =zpk( Z, P, K ,-1)
Zero/pole/gain:
-5 (z-1)
--------
(z+1)
Sampling time: unspecified

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 86

Simulazione in Matlab di sistemi lineari

• Funzioni disponibili per la simulazione:

– impulse ⇒ simulazione risposta all’impulso;

– step ⇒ simulazione risposta a scalino;

– initial ⇒ simulazione movimento libero;

– lsim ⇒ simulazione con ingresso qualsiasi e stato iniziale


qualsiasi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 87

Simulazione in Matlab di sistemi lineari (2)

• Sintassi:
» [y,t]=step(sistema);
» [y,t]=step(sistema,t);
Vettore dei tempi

Vettore d’uscita
Vettore sequenza d’ingresso

» [y,x]=lsim(sistema,u,t);

Vettore d’uscita Vettore dei tempi


Vettore di stato

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 88

Esempio di utilizzo (1)

» a=[-1 ,0;3,-4];
» b=[2;1];c=[1,2];d=0;
» sistema=ss(a,b,c,d);
» t=(0:0.01:5);
» u=2*sin(2*pi*2*t);
» y=lsim(sistema,u,t);
» plot(t,y);

Il risultato della simulazione è stato assegnato ad una


variabile e successivamente visualizzato in un grafico.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 89

Esempio di utilizzo (2)

» a=[-1 ,0;3,-4];
» b=[2;1];c=[1,2];d=0;
» sistema=ss(a,b,c,d);
» t=(0:0.01:5);
» u=2*sin(2*pi*2*t);
» lsim(sistema,u,t);

Utilizzando le funzioni senza assegnare il risultato della


simulazione a variabili d’uscita si ottiene direttamente il
grafico dell’evoluzione temporale.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 90

Esempi di utilizzo (3)

• Analisi della risposta allo scalino unitario:

» step(sistema);
• Interagendo tramite il mouse nella finestra che visualizza
l’andamento della risposta allo scalino è possibile ottenere
informazioni relative a
– Sovraelongazione della risposta
– Valore di regime
– Tempo di salita (rise time)
– Tempo di assestamento (settling time)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 91

Esempio: analisi della risposta allo scalino

• Il codice Matlab dell’esempio:

» % sistema a tempo continuo


» sisc = tf([2 1],[1 2 10]);
»
» % sistema a tempo discreto
» sisd = tf([2 1],[1 0.2 0.5], 0.1);
»
» figure; step(sisc);
» figure;step(sisd);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 92

A seguito di un “click” del


pulsante destro del mouse
compare un menu …

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 93

Esempio:
risposta del
sistema a
tempo
continuo.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 94

Esempio:
risposta del
sistema a
tempo
discreto.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 95

Considerazioni riassuntive

• Come tutti i risultati di operazioni di calcolo numerico,


anche i sistemi LTI, descritti con le istruzioni Matlab viste,
possono essere affetti da errori (errata o mancante
cancellazione di termini nella FdT ecc. …).

• Si vedano l’argomento “Reliable Computations” e


l’argomento “Choice of LTI Model” nella documentazione del
Control Toolbox.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 96

Sistemi lineari interconnessi

Definizioni, proprietà, applicazioni

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 97

Interconnessione di sistemi

• Agli oggetti sistemi lineari si possono applicare i normali


operatori +,*,/, \ con il seguente significato:

– + connessione in parallelo;

– * connessione in serie;

– /, \ usati per definire l’operazione di inversione (a sx, a dx)


per sistemi quadrati.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 98

Esempi di interconnessioni elementari


y1
• Connessione parallelo sys1
u y

sys2 y2

• Connessione serie

u v y
sys1 sys2

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 99

Altri esempi di operazioni elementari

• Inversione (per sistemi quadrati)

• Trasposizione

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 100

Esempio di connessione

u G1 G2 y
-

G3

andata = g1*g2; retroazione = andata/(1+andata*g3)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 101

Interconnessioni tra sistemi


• Funzioni che permettono di descrivere interconnessioni tra
sistemi dinamici:

– concatenazione , (orizz.) ; (vert.)


– connessione diagonale a blocchi append
– connessione parallelo di due blocchi parallel
– connessione serie di due blocchi series
– connessione in retroazione feedback
– connessione generica connect

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 102

Sintassi del comando feedback

Sintassi semplice del comando

SYS = FEEDBACK(SYS1,SYS2) fornisce il sistema LTI


corrispondente al semplice ciclo di reazione seguente
u y
+ SYS 1

SYS 2

Si presuppone che sia uno schema a retroazione negativa. Nel caso


in cui si voglia una retroazione positiva, va specificato nel comando
SYS = FEEDBACK(SYS1,SYS2,+1).

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 103

Sintassi completa

SYS = FEEDBACK(SYS1,SYS2,FEEDIN,FEEDOUT,SIGN) fornisce


il sistema LTI corrispondente alla struttura:

v z
SYS 1
u + y

SYS 2

I vettori FEEDIN e FEEDOUT contengono rispettivamente gli indici


degli ingressi e delle uscite del sistema SYS1 coinvolti nella
retroazione. La variabile SIGN indica se si tratta di retroazione
positiva ( SIGN pari a +1) oppure negativa (SIGN pari a –1 oppure
non assegnato).

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 104

Sintassi del comando connect

L’istruzione CONNECT determina un modello in equazioni di


stato per un sistema descritto da uno schema a blocchi.

SYSc = CONNECT(SYS,Q,INPUTS,OUTPUTS) fornisce un


modello in equazioni di stato per il sistema SYSc, descritto facendo
uso di un sistema ausiliario SYS (un sistema MIMO costituito da
sottosistemi non interconnessi) che contiene la descrizione di tutti i
sottosistemi che compaiono nello schema a blocchi in esame e dalla
matrice di interconnessione Q. Questa matrice viene costruita
in maniera particolare per descrivere come i vari sottosistemi siano
connessi tra loro.

Infine i vettori INPUTS e OUTPUTS indicano quali ingressi e


rispettivamente quali uscite dei vari sottosistemi componenti
diventano ingressi ed uscite del sistema complessivo SYSc.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 105

Esempio: sistemi interconnessi

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 106

Esempio: sistemi interconnessi (2)

• Il sottosistema descritto su base stato è descritto dalle matrici:

• La funzione di trasferimento del sistema è

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 107

Esempio: sistemi interconnessi (3)

• Per poter utilizzare l’istruzione connect è necessario “etichettare”


tutti i rami dello schema a blocchi, evidenziando per ogni
sottosistema (dinamico e non) i corrispondenti segnali d’ingresso e
di uscita

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 108

Esempio: sistemi interconnessi (4)

ecco il sistema dopo l’etichettatura

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 109

Esempio: sistemi interconnessi (5)

• Ulteriori passi
– Assemblaggio di tutti i sottosistemi in un’unica entità, tramite
l’istruzione append (NB sono ancora sistemi non
interconnessi, ma ora sono ordinati!), creando così il sistema
ausiliario SYS
– Creazione della matrice di connessione Q, secondo lo
schema:

Indice dell’ingresso
ad un sottosistema
(nell’ordine imposto
Indice delle uscite di altri sottosistemi,
dall’operazione di da connettere a quell’ingresso.
assemblaggio).
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 110

Esempio: sistemi interconnessi (5)

• Utilizzare l’istruzione connect per ottenere una descrizione su


base stato del sistema complessivo.

• Svantaggi:
– macchinosa procedura di descrizione delle interconnessioni.

• Vantaggi:
– possibilità di ottenere la realizzazione del sistema complessivo
nella forma desiderata (l’ordine di comparizione delle varie
variabili di stato è scelto nella fase di “aggregazione” dei
sottosistemi con l’istruzione append).

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 111

Analisi della
risposta in frequenza

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 112

Risposta in frequenza per sistemi LTI a tempo continuo

• risposta in frequenza di un sistema LTI asintoticamente


stabile a tempo continuo

dove è la fdt del sistema.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 113

Risposta in frequenza per sistemi LTI a tempo discreto

• risposta in frequenza di un sistema LTI asintoticamente


stabile a tempo discreto

dove è la fdt del sistema.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 114

Grafici della
risposta in frequenza

• Comandi Matlab

– bode : rappresentazione della risposta in frequenza tramite


diagrammi di Bode

– nyquist : rappresentazione della risposta in frequenza tramite


diagramma di Nyquist

– nichols : rappresentazione della risposta in frequenza tramite


diagramma di Nichols

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 115

Calcolo ed analisi della


risposta in frequenza

• Comandi Matlab

– freqresp : calcolo di valori della risposta in frequenza di un


sistema dinamico;

– ltiview : strumento interattivo che permette l’analisi delle


risposte nel tempo ed in frequenza di sistemi dinamici LTI.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 116

Sintassi dei comandi (1)

• Sintassi generale dei comandi bode, nyquist, nichols:

– comando(SYS) crea il diagramma voluto della risposta in


frequenza del sistema SYS, creato tramite le istruzioni
ss,tf,zpk. L’intervallo di frequenza ed il numero di punti
utilizzati per i diagrammi sono scelti in modo automatico.

– comando(SYS,{WMIN,WMAX}) crea il diagramma per le


frequenze comprese tra WMIN and WMAX [rad/s].

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 117

Sintassi dei comandi (2)


– comando(SYS,W) utilizza il vettore W specificato dall’utente
come vettore delle frequenze (in rad/s) per le quali determinare
la risposta in frequenza.

– [a,b]=comando(SYS,…) non visualizza alcun grafico, ma


restituisce valori della risposta in frequenza, utilizzabili per
tracciare successivamente il diagramma voluto.

• [m,f]=bode(…) restituisce modulo e fase (in gradi)


• [m,f]=nichols(…) restituisce modulo e fase (in gradi)
• [r,i]=nyquist(…) restituisce parte reale ed immaginaria
dei punti della risposta in frequenza

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 118

Sintassi dei comandi (3)


• Per sistemi LTI a tempo discreto con periodo di campionamento Ts
viene utilizzata la relazione

per mappare la circonferenza unitaria con centro l’origine (in z)


tramite la pulsazione Ω [rad/s] e la pulsazione massima che
compare nei grafici è pari a

Se Ts non è assegnato, viene assunto un periodo di campionamento


pari ad 1 s.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 119

Sintassi dei comandi (4)

• Calcolo della risposta in frequenza

– H = freqresp(SISTEMA,W) calcola la risposta in


frequenza H del sistema dinamico LTI descritto da
SISTEMA in corrispondenza delle pulsazioni assegnate nel
vettore W. Queste pulsazioni sono espresse in rad/s.
H è un array di valori complessi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 120

Sintassi dei comandi (5)

• Analisi nel tempo e in frequenza di un sistema LTI

– ltiview(SISTEMA) apre una finestra grafica interattiva,


nella quale viene visualizzata, come scelta predefinita, la
risposta al gradino unitario di SISTEMA, ma permette di
analizzare sia l’evoluzione temporale che la risposta in
frequenza di SISTEMA.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 121

Sintassi dei comandi (6)

• ltiview(grafico, SISTEMA) specifica quale grafico debba venire


visualizzato. In particolare grafico può essere una delle seguenti
espressioni (oppure una combinazione di esse)

– 'step' risposta al gradino unitario


– 'impulse' risposta all’impulso unitario
– 'bode' diagrammi di Bode
– 'bodemag' diagramma di Bode del modulo
– 'nyquist' diagramma di Nyquist
– 'nichols' diagramma di Nichols
– 'pzmap' mappa poli/zeri
– altro ancora (si veda la sintassi completa del comando …)
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 122

Esempi: diagrammi di Bode

» num=conv([1 0 4],[1 0 4]);


» den=[1 1 4 1 0 0];
» fdt=tf(num,den);
» figure;bode(fdt)

Diagramma del modulo

Esplorazione del diagramma con il


mouse (pulsante sx premuto)

Diagramma della fase

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 123

Esempi: diagrammi di Bode

» num = [0.5]
» den=[1 -0.5];
» fdt1=tf(num,den,-1);
» num = [0.9]
» den=[1 -0.2];
» fdt2=tf(num,den,-1);
» num = [0.1]
» den=[1 -0.9];
» fdt3=tf(num,den,-1);
» figure;bode(fdt1,fdt2,fdt3)

Diagrammi di Bode per sistemi LTI a tempo discreto

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 124

Esempi: diagrammi di Nyquist

» num1=1
» den1=[1 2 1]
» figure;
» nyquist(tf(num1,den1))

Verso di percorrenza
sul diagramma

In evidenza il punto –1+j0

Esplorazione del diagramma con il


mouse (pulsante sx premuto)

Diagramma di Nyquist COMPLETO

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 125

Esempi: diagrammi di Nichols

» num=conv([1 0 4],[1 0 4]);


» den=[1 1 4 1 0 0];
» fdt=tf(num,den);
» figure;nichols(fdt)

Esplorazione del diagramma con il


mouse (pulsante sx premuto)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 126

Diagrammi di Nyquist:
casi particolari

• Attenzione! Il comando nyquist(sistema) traccia il diagramma


completo di Nyquist della risposta in frequenza del sistema in
esame.

• Ciò può portare ad una visualizzazione non ottimale


dell’andamento del diagramma in condizioni particolari

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 127

Diagrammi di Nyquist:
casi particolari

• nel caso di sistema LTI a tempo continuo


– presenza di poli (semplici o multipli) nell’origine;
– presenza di poli (semplici o multipli) immaginari puri;

• nel caso di sistema LTI a tempo discreto


– Presenza di poli (semplici o multipli) complessi, di modulo
unitario

Dott. Gianfranco Fenu Controllo digitale


Esempi: diagrammi di Nyquist Intro a Matlab per sistemi LTI, 128

sistemi a tempo continuo

Zeri imm. puri

Dovrà essere
F(jω) ! 0
per ω ! 2.

Dovrà essere F(jω) ! 0 per ω ! 1,


Polo doppio in 0 poiché c’è un eccesso di poli su zeri.

Dovrà essere F(jω) ! 1 per ω ! 0 ed


essendo doppio il polo nell’origine non ci
sarà alcun asintoto nel diagramma di
Nyquist.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 129

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

» num=conv([1 0 4],[1 0 4]); Ed il comportamento locale per ω ! 1?


» den=[1 1 4 1 0 0]; E per ω ! 2?
» fdt=tf(num,den);
» zpk(fdt)
Zeri imm. puri
Zero/pole/gain:
(s^2 + 4)^2
---------------------------------------
s^2 (s+0.2627) (s^2 + 0.7373s +
3.806)

» figure; nyquist(fdt);

Polo doppio in 0

Diagramma di Nyquist COMPLETO


NB! 104

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 130

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

È possibile selezionare una


modalità di presentazione del
grafico che metta in evidenza la
zona attorno al punto (–1+j0)

[mouse, pulsante dx premuto]

Diagramma di Nyquist COMPLETO

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 131

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

Ecco ciò che si ottiene.

In evidenza il punto –1+j0

Comportamento per ω ! 2
ed anche per ω ! 1
(si vede ancora poco …)

Diagramma di Nyquist: comportamento per ω ! 0

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 132

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

» figure;
» omega = linspace(1.5,200,10000);
» nyquist(fdt1,omega);
» axis([-0.1 0.4 -.4 0.4]);
» % cambia la visualizzazione

Selezione dell’intervallo di pulsazioni


da utilizzare: 1.5 · ω · 200 rad/s.

In evidenza il ramo del diagramma


che corrisponde a pulsazioni positive
Diagramma di Nyquist ottenuto

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 133

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

» num=[10 20];
» den=conv([1 0 4],[1 1]);
» fdt2=tf(num,den)

Transfer function:
10 s + 20
-------------------
s^3 + s^2 + 4 s + 4
» zpk(fdt2)

Zero/pole/gain:
10 (s+2)
----------------
(s+1) (s^2 + 4) Poli immaginari puri e di molteplicità pari a 1:
la curva presenta un asintoto per ω ! 2

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 134

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

» num=[10 20];
» den=conv([1 0 4],[1 1]);
» fdt2=tf(num,den)
» figure;nyquist(num,den)

Questo è ciò che si ottiene,


ma è il grafico corretto?

NB! 1015

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 135
Esempi: diagrammi di Nyquist
sistemi a tempo continuo
Studio per ω · 2

» num=[10 20];
» den=conv([1 0 4],[1 1]);
» fdt2=tf(num,den)
» figure;
»nyquist(num,den, …
linspace(0,1.95,1000))

Selezione dell’intervallo di pulsazioni


da utilizzare: 0 · ω · 1.95 rad/s.

In evidenza il punto –1+j0

In evidenza il ramo corrispondente a pulsazioni ω ¸ 0

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 136
Esempi: diagrammi di Nyquist
sistemi a tempo continuo
Studio per ω ¸ 2

» num=[10 20];
den=conv([1 0 4],[1 1]);
fdt2=tf(num,den)

figure;
nyquist(num,den,linspace(2.8,100.1000))

Selezione dell’intervallo di pulsazioni


da utilizzare: 2.8 · ω · 100 rad/s.

In evidenza il ramo
corrispondente a pulsazioni ω ¸ 0
In evidenza il punto –1+j0

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 137

Esempi: diagrammi di Nyquist


sistemi a tempo continuo

» num = [10 20];


» den = conv([1 0 4] , [1 1]);
» fdt2 = tf(num , den)
» % estrae i dati. NB sono vettori tridimensionali!!
» [ r1 i1] = nyquist(fdt2 , linspace(0 , 1.5 , 1000));
» [ r2 i2] = nyquist(fdt2 , linspace(2.5 , 100 , 1000));
» % ridiventano vettori bidimensionali
» % (obbligatorio per il comando PLOT)
» r1 = reshape(r1 , 1 , 1000); i1 = reshape(i1 , 1 , 1000);
» r2 = reshape(r2 , 1 , 1000); i2 = reshape(i2 , 1 , 1000);
» % diagramma di Nyquist della sola parte per
» % pulsazioni positive
» figure; plot(r1 , i1 , r2 , i2);
» hold on; plot(-1 , 0 , '+r'); grid on
» % con in evidenza il punto (-1+j0)

In evidenza il punto –1+j0

Diagramma esatto; soltanto ω ¸ 0

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 138

Esempi: diagrammi di Nyquist


sistemi a tempo continuo
» num = [10 20];
» den = conv([1 0 4] , [1 1]);
» fdt2 = tf(num , den)
» % estrae i dati. NB sono vettori tridimensionali!!
» [ r1 i1] = nyquist(fdt2 , linspace(0 , 1.5 , 1000));
» [ r2 i2] = nyquist(fdt2 , linspace(2.5 , 100 , 1000));
» % ridiventano vettori bidimensionali
» % (obbligatorio per il comando PLOT)
» r1 = reshape(r1 , 1 , 1000); i1 = reshape(i1 , 1 , 1000);
» r2 = reshape(r2 , 1 , 1000); i2 = reshape(i2 , 1 , 1000);
» % diagramma di Nyquist della sola parte per
» % pulsazioni positive
» figure; plot(r1 , i1 , r2 , i2);
» hold on; plot(-1 , 0 , '+r'); grid on
» % con in evidenza il punto (-1+j0)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 139

Esempi: diagrammi di Nyquist


sistemi a tempo discreto

» num = [0.5]
» den=[1 -0.5];
» fdt1=tf(num,den,-1);
» num = [0.9]
» den=[1 -0.2];
» fdt2=tf(num,den,-1);
» num = [0.1]
» den=[1 -0.9];
» fdt3=tf(num,den,-1);
» figure;bode(fdt1,fdt2,fdt3)
» figure;nyquist(fdt1,fdt2,fdt3);

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 140

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 141

Esempi: diagrammi di Nyquist


sistemi a tempo discreto

fdt=tf([1 -0.5],[1 -1],-1); % un polo in +1


figure;bode(fdt)
figure;nyquist(fdt)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 142

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 143

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 144
Esempi: diagrammi di Nyquist
sistemi a tempo discreto

fdt1=tf([1 -0.5],[1 1 0],-1); % un polo in -1 ed uno un 0


figure;bode(fdt1);
figure;nyquist(fdt1)
figure;nyquist(fdt1,{0.01,pi/2}) % metto in evidenza il
% grafico per angoli piccoli

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 145

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 146

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 147

un particolare del diagramma di Nyquist


Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 148
Esempi: diagrammi di Nyquist
sistemi a tempo discreto
fdt2=tf([1 -0.5],conv([1 1 1],[2 1]),-1) % un polo in 1/2 e due compl.con. di modulo 1
figure;bode(fdt2);
figure;nyquist(fdt2);
% in evidenza il comportamento per valori angolari piccoli (da 0 a pi/3)
figure;nyquist(fdt2,{0.001,pi/3});
% in evidenza il comportamento vicino all'asintoto in 2pi/3
angolo_asintoto = 2*pi/3;
figure;nyquist(fdt2,{0.0001, angolo_asintoto-0.001});
figure;nyquist(fdt2,{angolo_asintoto+0.001, angolo_asintoto+0.1});

% estrae i dati. NB sono vettori tridimensionali!!


[ r1 i1] = nyquist(fdt2 , linspace(0 , angolo_asintoto-0.001 , 1000));
[ r2 i2] = nyquist(fdt2 , linspace(angolo_asintoto+0.001 , pi , 1000));
% ridiventano vettori bidimensionali
% (obbligatorio per il comando PLOT)
r1 = reshape(r1 , 1 , 1000); i1 = reshape(i1 , 1 , 1000);
r2 = reshape(r2 , 1 , 1000); i2 = reshape(i2 , 1 , 1000);
% diagramma di Nyquist della sola parte per
% pulsazioni positive
figure; plot(r1 , i1 ,'-b', r2 , i2,'-c');
hold on; plot(-1 , 0 , '+r'); grid on; axis([-5 5 -20 20]);
% con in evidenza il punto (-1+j0)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 149

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 150

un particolare del diagramma di Nyquist

% in evidenza il comportamento per


% valori angolari piccoli (da 0 a pi/3)
figure;nyquist(fdt2,{0.001,pi/3});

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 151

un particolare del diagramma di Nyquist

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 152

Il codice Matlab corrispondente

% estrae i dati. NB sono vettori tridimensionali!!


[ r1 i1] = nyquist(fdt2 , linspace(0 , angolo_asintoto-0.001 , 1000));
[ r2 i2] = nyquist(fdt2 , linspace(angolo_asintoto+0.001 , pi , 1000));
% ridiventano vettori bidimensionali
% (obbligatorio per il comando PLOT)
r1 = reshape(r1 , 1 , 1000); i1 = reshape(i1 , 1 , 1000);
r2 = reshape(r2 , 1 , 1000); i2 = reshape(i2 , 1 , 1000);
% diagramma di Nyquist della sola parte per
% pulsazioni positive
figure; plot(r1 , i1 ,'-b', r2 , i2,'-c');
hold on; plot(-1 , 0 , '+r'); grid on; axis([-5 5 -20 20]);
% con in evidenza il punto (-1+j0)

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 153

Margini di guadagno e di fase

• Esiste un comando del Control Toolbox che permette di


analizzare la stabilità a ciclo chiuso di un sistema LTI di tipo
SISO determinando (anche visualizzando) i margini di guadagno
e di fase del sistema di ciclo aperto.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 154

Margini di guadagno e di fase

• Sintassi del comando margin :

• [Gm,Pm,Wcg,Wcp] = MARGIN(SYS) determina i margini di


guadagno Gm, di fase Pm, le pulsazioni corrispondenti Wcg,
Wcp per il sistema a ciclo aperto SYS.

• SYS è un sistema LTI a tempo continuo oppure a tempo


discreto.

• Il comando MARGIN(SYS) (usato senza richiedere variabili in


uscita) visualizza il diagramma di Bode della risposta in
frequenza del sistema a ciclo aperto SYS ed in esso visualizza i
margini di stabilità e le corrispondenti pulsazioni.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 155

Luoghi caratteristici in s e
corrispondenti in z

Luoghi a modulo costante, a smorzamento costante, a


pulsazione naturale costante …

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 156

Luoghi in s e corrispondenti in z: richiami

• Data la relazione del campionamento


come si modificano i luoghi a smorzamento costante, quelli a
pulsazione costante, quelli a pulsazione naturale costante
oppure quelli a decadimento esponenziale costante?

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 157

Ed in Matlab?
• Tramite le istruzioni sgrid e zgrid è possibile disegnare,
rispettivamente nel piano s di una FdT F(s) oppure nel piano z
di una FdT F(z), un insieme di curve dei luoghi a smorzamento
costante/a pulsazione naturale costante.

• In particolare sgrid(Z, Wn) / zgrid(Z, Wn) disegna


• l’insieme dei luoghi a smorzamento costante
individuati dai valori di smorzamento assegnati nel
vettore Z,
• L’insieme dei luoghi a pulsazione naturale costante
individuati dai valori di pulsazione contenuti nel vettore
Wn.
• Se non presenti i vettori Z, Wn, vengono disegnati i
luoghi per valori predefiniti di smorzamento e pulsazione
naturale.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 158

Esempi

• Un primo esempio per un


sistema a tempo continuo
definito da una FdT:

» fdt = tf([1 2],[1 2 3]);


» figure;pzmap(fdt);sgrid;

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 159

Esempi

• Un secondo esempio
per un sistema a tempo
discreto descritto da
una FdT:

» fdt = tf([2 1],[3 2 1 ],0.5);


» figure;pzmap(fdt);zgrid;

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 160

Conversione da tempo—continuo a tempo


—discreto in MATLAB

Come ottenere una rappresentazione a segnali


campionati di un sistema dinamico a tempo
continuo e viceversa.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 161

Conversione da tempo continuo


a tempo discreto: richiami

• Su base stato: il sistema a tempo continuo è descritto da

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 162

Conversione da tempo continuo


a tempo discreto: richiami

• Il sistema a segnali campionati (a tempo discreto) ottenuto


per campionamento è

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 163

Conversione da tempo continuo


a tempo discreto: richiami

• Su base Funzione di Trasferimento: il sistema a tempo


continuo è descritto da

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 164

Conversione da tempo continuo


a tempo discreto: richiami

• Il sistema a segnali campionati (a tempo discreto) ottenuto


per campionamento è

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 165

Conversione da tempo continuo a tempo


discreto in MATLAB

• Deve essere assegnato un sistema dinamico a tempo


continuo come oggetto LTI system
• Il sistema può essere descritto in uno qualsiasi dei modi a
disposizione per gli oggetti LTI system: su base stato, su base
FdT ecc.

• Il comando che esegue la conversione continuo discreto è il


comando c2d

• c2d è una funzione che fa parte del pacchetto “Control


Toolbox”.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 166

Sintatti del comando c2d

• SYSD = c2d(SYSC, Ts ): esegue la conversione del sistema a


tempo continuo descritto dall’oggetto LTI SYSC nel sistema a
segnali campionati SYSD, con periodo di campionamento Ts.

• Il metodo di conversione utilizzato è quello “ad invarianza


della risposta al gradino” o “con mantenitore di ordine
zero (ZOH) in ingresso” cioè quello dello schema

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 167

Esempi

» H = tf( [1 -1], [1 4 5] );
» Hd = c2d( H, 0.1 );
» step( H, '-', Hd, '--‘ )

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 168

Ancora esempi

» a=[-4 -2.5;2 0];b=[1;0];c=[1 -0.5];d=0;


» sABCD = ss(a,b,c,d)
» figure;pzmap(sABCD);
»
» sD = c2d(sABCD, 0.1)
» figure;pzmap(sD);

» figure; impulse (sABCD,’-’, sD, ‘--’);


» figure; step (sABCD,'-', sD,'--');

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 169

mappa zeri/poli del


sistema a tempo continuo

mappa zeri/poli del


sistema a tempo discreto

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 170

Confronto tra le risposte


all’impulso

Confronto tra le risposte


allo scalino

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 171

Sintatti completa del comando c2d

• SYSD = c2d( SYSC, Ts, METHOD ): il sistema a tempo


continuo SYSC viene convertito nel sistema a segnali
campionati SYSD, con periodo di campionamento Ts.

• METHOD identifica il metodo di conversione da utilizzare


– ‘zoh’ : conversione con ZOH in ingresso o “invarianza della
risposta allo scalino”. È il metodo predefinito
– ‘imp’ : conversione per “invarianza della risposta all’impulso”
– ‘tustin’ : metodo che fa uso della trasformazione di Tustin
– ‘prewarp’ : trasformazione di Tustin con predistorsione in
frequenza. Come quarto parametro viene specificata proprio
la pulsazione critica Ωc (in rad/s)
SYSD = c2d( SYSC ,Ts ,'prewarp‘ , Wc )

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 172

Sintassi completa del comando c2d

• Esistono ancora altri possibili metodi di discretizzazione, che non


vengono però trattati nel corso di “Controllo Digitale”.

• Si rimanda quindi alla documentazione del comando c2d ed alla


bibliografia del corso per approfondimenti su tali metodi.

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 173

Esempio
» % sistema LTI a tempo continuo
» H = 10*tf( [1 1], [1 4 5] );
»
» % periodo di campionamento: 0.1
» % metodo di conversione: standard, con ZOH
» Ts = 0.1; % intervallo di campionamento
» Hdzoh = c2d( H, Ts,'zoh');
»
» Hdtustin = c2d( H, Ts,'tustin');
» % discretizzato con la trasformazione bilineare di Tustin
»
» Wc = 9.752; % pulsazione critica
» % e' la pulsazione in cui il sistema continuo ha margine di fase 108 deg
» % (si provi l'istruzione margin )
» Hdwarp = c2d(H, Ts, 'prewarp',Wc);
» % discretizzazione con la trasformazione bilineare di Tustin predistorta

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 174

Esempio (continua …)

» % ora visualizzo la risposta allo scalino unitario del sistema originario


» % e del sistema a segnali campionati
» step( H, Hdzoh, Hdtustin, Hdwarp);
»
» % ora invece confrontiamo la risposta in frequenza
» figure;bode(H ,Hdzoh, Hdtustin, Hdwarp );

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 175

Risposta
allo
scalino

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 176

Risposta in
frequenza:
diagrammi
di Bode

Dott. Gianfranco Fenu Controllo digitale


Intro a Matlab per sistemi LTI, 177

» % la stabilita'
» [GmH, PmH, WcgH, WcpH ] = margin(H);
» [GmHdzoh, PmHdzoh, WcgHdzoh, WcpHdzoh ] = margin(Hdzoh);
» [GmHdtustin, PmHdtustin, WcgHdtustin, WcpHdtustin ] =
margin(Hdtustin);
» [GmHdwarp, PmHdwarp, WcgHdwarp, WcpHdwarp ] =
margin(Hdwarp );
»
»
» disp('margine di guadagno [dB] pulsazione margine di fase
pulsazione')
» disp('sistema a tempo continuo')
» disp([GmH, WcgH, PmH, WcpH]);
»
» disp('sistema con ZOH');
» disp([GmHdzoh, WcgHdzoh, PmHdzoh, WcpHdzoh ]);
» % notare la perdita di margine di guadagno e di fase
»
» disp('sistema con TUSTIN');
» disp([GmHdtustin, WcgHdtustin, PmHdtustin, WcpHdtustin ]);
» % piccole differenze col sistema a tempo continuo
»
» disp('TUSTIN con predistorsione');
» disp([GmHdwarp, WcgHdwarp, PmHdwarp, WcpHdwarp ]);
» % ancora minori differenze
Dott. Gianfranco Fenu Controllo digitale
Intro a Matlab per sistemi LTI, 178

Dott. Gianfranco Fenu Controllo digitale

Potrebbero piacerti anche