You are on page 1of 90

Laboratorio Matlab

di Segnali e Sistemi
Mattia Zorzi
con la collaborazione di
Francesco Guidolin e Chiara Masiero
17 maggio 2013
2
Indice
1 Introduzione 5
2 Funzionalit`a basilari di Matlab 7
2.1 Come si presenta Matlab . . . . . . . . . . . . . . . . . . . . . 7
2.2 Command Window . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Definizione di oggetti . . . . . . . . . . . . . . . . . . . 9
2.2.2 Operazioni di base sui vettori . . . . . . . . . . . . . . 12
2.2.3 Funzioni Matlab . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Altre istruzioni matlab . . . . . . . . . . . . . . . . . . 18
2.3 Gestione delle variabili . . . . . . . . . . . . . . . . . . . . . . 18
2.4 m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Strutture di controllo . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Segnali e convoluzioni 29
3.1 Segnali pari e dispari, segnali complessi . . . . . . . . . . . . . 29
3.2 Area ed energia di un segnale . . . . . . . . . . . . . . . . . . 30
3.3 Convoluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Analisi di Fourier 47
4.1 Serie di Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Trasformata di Fourier per segnali a tempo continuo . . . . . . 52
4.3 Trasformata di Fourier per segnali a tempo discreto . . . . . . 57
4.4 Campionamento e aliasing . . . . . . . . . . . . . . . . . . . . 61
3
4 INDICE
5 Sistemi LTI discreti 65
5.1 Introduzione ai sistemi LTI discreti . . . . . . . . . . . . . . . 65
5.2 Risposta impulsiva . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3 Risposta in frequenza . . . . . . . . . . . . . . . . . . . . . . . 73
5.4 Autofunzioni dei filtri . . . . . . . . . . . . . . . . . . . . . . . 75
6 Sistemi LTI continui 79
6.1 Equazioni differenziali in Matlab . . . . . . . . . . . . . . . . . 80
6.2 Studio di sistemi meccanici tramite modelli LTI continui . . . 81
6.3 Accenni all’uso di Simulink . . . . . . . . . . . . . . . . . . . . 87
Capitolo 1
Introduzione
Questa dispensa contiene il materiale fornito agli studenti per il laboratorio
del corso di Segnali e Sistemi per ingegneria dell’Informazione svolto all’uni-
versit` a di Padova nell’a.a. 2011/2012. L’obiettivo principale del laboratorio
`e fornire una certa familiarit` a con lo strumento di calcolo Matlab, il quale
`e ampiamente usato in contesti ingegneristici e applicativi. L’obbiettivo se-
condario, ma non per questo meno importante, `e permettere agli studenti di
assimilare meglio i concetti fondamentali riguardanti la teoria dei segnali e
dei sistemi visti a lezione.
Il termine Matlab deriva dall’abbreviazione di MATrix LABoratory. Fu
creato alla fine degli anni ’70 da Cleve Moler, il presidente del dipartimento di
scienze informatiche dell’Universit`a del Nuovo Messico. Egli cre` o Matlab per
dare ai suoi studenti accesso alle librerie linpack e ad eispack senza che essi
dovessero conoscere il Fortran. Presto si diffuse nelle altre Universit`a e trov` o
un grande pubblico tra la comunit` a dei matematici applicati. Jack Little, un
ingegnere, conobbe il programma durante una visita a Moler all’Universit` a
di Stanford nel 1983. Riconoscendo il suo potenziale commerciale, si un`ı
con Moler e Steve Bangert. Essi riscrissero Matlab in C e fondarono la The
MathWorks nel 1984 per continuare il suo sviluppo.
Matlab perci` o `e un ambiente per il calcolo numerico e l’analisi statistica
che comprende anche l’omonimo linguaggio di programmazione creato dal-
la MathWorks. Questo software funziona su diversi sistemi operativi, tra
cui Windows, Mac OS, GNU/Linux e Unix. Attualmente in commercio `e
disponibile la versione R2012a.
Infine `e doveroso citare, in alternativa a Matlab, il software gratuito Oc-
5
6 CAPITOLO 1. INTRODUZIONE
tave. Il suo vantaggio `e che `e compatibile quasi completamente con Matlab.
Capitolo 2
Funzionalit` a basilari di Matlab
2.1 Come si presenta Matlab
Quando il programma viene richiamato appare la schermata di Figura 2.1:
Figura 2.1: Schermata di Matlab
7
8 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
• Command Window `e la sotto-finestra in cui vengono trasmesse le istru-
zioni desiderate a Matlab
• WorkSpace visualizza le variabili attualmente create dalle istruzioni
fornite.
• La cartella di lavoro `e la sotto-finestra che visualizza tutti i file contenuti
nella cartella in cui ha accesso Matlab.
In Figura 2.2 `e mostrata la barra dei pulsanti di Matlab. Il primo tasto
serve per creare un file Matlab che chiameremo m-file. Il secondo tasto apre
la cartella di lavoro. Il quartultimo apre il sottoprogramma Simulink che
vedremo in seguito. L’ultimo tasto permettere di accedere alla guida in linea
di Matlab. Affianco `e possibile selezionare la cartella di lavoro desiderata.
Figura 2.2: Barra dei pulsanti di Matlab
2.2 Command Window
In questa finestra appare un simbolo di attesta seguito da un cursore
>>_
Per fornire una istruzione a Matlab `e sufficiente scrivere l’istruzione e premere
invio. Se scriviamo un’istruzione inesistente, Matlab segnala, attraverso una
frase in rosso, che il comando non esiste.
>> fhsj
??? Undefined function or variable ’fhsj ’.
>>
Quando Matlab deve segnalare un errore utilizza sempre il colore rosso, per
gli altri messaggi utilizza il nero. I comandi pi` u semplici e intuitivi riguardano
le operazioni di somma, sottrazione, moltiplicazione, divisione ed elevamento
a potenza di numeri reali
2.2. COMMAND WINDOW 9
>> 6.2+2 -3.02^2*3/2
ans =
-5.4806
>>
La variabile ans contiene il risultato dell’operazione. Per non visualizzare
l’echo di un’istruzione `e sufficiente scrivere punto e virgola dopo l’istruzione
>> 6.2+2 -3.02^2*3/2;
>>
2.2.1 Definizione di oggetti
• Definizione di una variabile reale
a=3;
• Definizione di un numero complesso
>> z=7+i*9
z =
7.0000 + 9.0000i
>>
Va osservato che i `e una variable predefinita come

−1 e in quanto
tale pu`o essere sovrascritta.
´
E buona norma perci` o non sovrascrivere
i. Nota bene: anche j `e considerata un’unit` a immaginaria.
• Definizione della variabile stringa s che contiene la parola ciao
>> s=’ciao ’
s =
10 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
ciao
>>
• Definizione del vettore riga
v =
_
1 2 3
_
(2.1)
>> v=[1 2 3]
v =
1 2 3
>>
• Definizione del vettore colonna
v =
_
_
1
2
3
_
_
(2.2)
>> v=[1; 2; 3]
v =
1
2
3
>>
Il punto e virgola serve per indicare la fine di una riga.
• Definizione della matrice
A =
_
1 2 3
4 5 6
_
(2.3)
2.2. COMMAND WINDOW 11
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>>
• Generazione del vettore
v =
_
5 6 7 8 9 10
_
(2.4)
i cui elementi sono equispaziati di 1 in maniera crescente
>> v=5:10
v =
5 6 7 8 9 10
>>
• Generazione del vettore
v =
_
0 0.1 0.2 0.3 0.4 0.5 0.6
_
(2.5)
i cui elementi sono equispaziati di 0.1 in maniera crescente
>> v=0:0.1:0.6
v =
Columns 1 through 4
0 0.1000 0.2000 0.3000
Columns 5 through 7
12 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
0.4000 0.5000 0.6000
>>
2.2.2 Operazioni di base sui vettori
• Somma tra due vettori
u =
_
1
2
_
, v =
_
3
4
_
(2.6)
>> u=[1; 2];
>> v=[3; 4];
>> w=u+v
w =
4
6
>>
• Calcolo del prodotto interno < u, v >= u
T
v
>> u’*v
ans =
11
>>
• Prodotto tra i vettori u e v componente per componente
>> v.*u
ans =
2.2. COMMAND WINDOW 13
3
8
>>
Esiste anche l’analogo per la divisione (./) e l’elevamento a potenza (.ˆ).
• Trasposizione del vettore u (solo nel caso in cui u `e definito nel campo
reale)
>> u’
ans =
1 2
>>
• Selezione dell’elemento j-esimo del vettore
v =
_
3 4 5 6
_
T
(2.7)
>> v=[3; 4; 5; 6];
>> j=2;
>> v(j)
ans =
4
>>
• Selezione di una sottosequenza del vettore
v =
_
1.1 2.2 3.3 4.4 5.5 6.6
_
(2.8)
secondo gli indici di posizione j, k
14 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
>> v=[1.1 2.2 3.3 4.4 5.5 6.6];
>> j=2;
>> k=5;
>> v(j:k)
ans =
2.2000 3.3000 4.4000 5.5000
>>
• Polinomi: in matlab un polinomio `e rappresentato da un vettore (ri-
ga o colonna). Per creare un polinomio `e sufficiente immettere suoi
coefficienti in un vettore, che chiameremo p, in ordine decrescente. Per
esempio, consideriamo
x
5
+ 10x
4
+ 0.6x
3
+ 12x
2
−7x + 5 (2.9)
>> p=[1 10 0.6 12 -7 5]
p =
Columns 1 through 4
1.0000 10.0000 0.6000 12.0000
Columns 5 through 6
-7.0000 5.0000
>>
2.2.3 Funzioni Matlab
Matlab fornisce molte funzioni all’utente. L’argomento delle funzioni, se
presente, `e compreso tra parentesi tonde.
2.2. COMMAND WINDOW 15
Esempio 1. Vogliamo valutare la seguente funzione polinomiale per x = 2
p(x) = x
5
−7x + 5. (2.10)
In questo caso basta utilizzare la funzione polyval con argomenti di ingresso
il corrispondente polinomio e il valore 2. Tale funzione restituisce p(2).
>> p=[1 0 0 0 -7 5];
>> valore=polyval(p’,2)
valore =
23
>>
Inoltre non `e necessario salvare il valore che restituisce la funzione
>> p=[1 0 0 0 -7 5];
>> polyval(p’,2)
ans =
23
>>
Per avere informazioni su una funzione Matlab `e sufficiente scrivere help
seguito dal nome della funzione
>> help polyval
POLYVAL Evaluate polynomial.
Y = POLYVAL(P,X) returns the value of a
polynomial P evaluated at X. P is a vector of
length N+1 whose elements are the coefficients
of the polynomial in descending powers.
Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X
+ P(N+1)
If X is a matrix or vector , the polynomial is
16 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
evaluated at all points in X. See POLYVALM for
evaluation in a matrix sense.
[Y,DELTA] = POLYVAL(P,X,S) uses the optional
output structure S created by POLYFIT to generate
prediction error estimates DELTA. DELTA is an
estimate of the standard deviation of the error
in predicting a future observation at X by P(X).
If the coefficients in P are least squares
estimates computed by POLYFIT , and the errors in
the data input to POLYFIT are independent ,
normal , with constant variance , then Y +/- DELTA
will contain at least 50\% of future observations
at X.
Y = POLYVAL(P,X,[],MU) or [Y,DELTA] =
POLYVAL(P,X,S,MU) uses XHAT = (X-MU (1))/ MU(2) in
place of X. The centering and scaling parameters
MU are optional output computed by POLYFIT.
Class support for inputs P,X,S,MU:
float: double , single
See also polyfit , polyvalm.
Overloaded methods:
gf/polyval
Reference page in Help browser
doc polyval
>>
Esempio 2. Vogliamo calcolare le radici del polinomio
x
5
−7x + 5. (2.11)
2.2. COMMAND WINDOW 17
La funzione Matlab che dobbiamo utilizzare `e roots. Il parametro d’ingresso
`e il polinomio e il parametro di uscita `e un vettore contente le radici del
polinomio.
>> p=[1 0 0 0 -7 5];
>> roots(p)
ans =
-1.7704
-0.1618 + 1.6671i
-0.1618 - 1.6671i
1.3464
0.7477
>>
Riportiamo alcune funzioni Matlab di interesse.
Funzioni costanti
Funzione Descrizione
pi π
exp(1) numero di Nepero
eps Precisione di Matlab
Funzioni per numeri reali
Funzione Descrizione
round(x) Restituisce l’approssimazione intera del numero reale x
rem(x,y) Restituisce il resto della divisione x ÷y
sign(x) Restituisce il segno di x
sqrt(x) Restituisce la radice quadrata di x
sin(x) Restituisce il seno di x
cos(x) Restituisce il coseno di x
tan(x) Restituisce la tangente di x
asin(x) Restituisce l’arcoseno di x
acos(x) Restituisce l’arcocoseno di x
atan(x) Restituisce l’arcotangente di x
log(x) Restituisce il logaritmo di x
log10(x) Restituisce il logaritmo in base dieci di x
18 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
Funzioni per numeri complessi
Funzione Descrizione
real(z) Restituisce la parte reale del numero complesso z
imag(z) Restituisce la parte immaginaria del numero complesso z
abs(z) Restituisce il modulo del numero complesso z
phase(z) Restituisce la fase di z
conj(z) Restituisce il complesso coniugato di z
exp(z) Restituisce e
z
Funzioni per vettori e matrici
Funzione Descrizione
length(v) Restituisce la lunghezza del vettore v
norm(v) Restituisce la norma euclidea di v
sum(v) Restituisce la somma degli elementi di v
wrev(v) Restituisce il vettore che ha gli elementi di v invertiti di ordine
min(v) Restituisce il valore e la posizione dell’elemento pi` u piccolo di v
max(v) Restituisce il valore e la posizione dell’elemento pi` u grande di v
zeros(m,1) Genera un vettore di zeri di dimensione m
ones(m,1) Genera un vettore di uno di dimensione m
polyval(p,k) Restituisce il valore p(k) dove p(x) `e un polinomio
roots(p) Restituisce le radici del polinomio p(x)
conv(p,q) Restituisce il polinomio risultante dal prodotto dei polinomi p(x), q(x)
2.2.4 Altre istruzioni matlab
Istruzione Descrizione
disp(s) Visualizza l’oggetto s nel Command Window
clc Pulisce la finestra Command Window
num2str(x) Restituisce la variabile stringa che corrisponde alla variabile reale/complessa x
pause Arresta l’inserimento di istruzioni nel Command Window, l’effetto termina premendo INVIO
% Simbolo per i commenti
2.3 Gestione delle variabili
Ogni variabile definita nel Command Window viene memorizzata nel Work-
Space. L’istruzione whos permette la visualizzazione delle variabili del Work-
Space
>> whos
2.3. GESTIONE DELLE VARIABILI 19
Name Size Bytes Class Attributes
A 2x4 64 double
ans 1x1 8 double
v 1x7 56 double
>>
L’istruzione clear permette la cancellazione di una o tutte le variabili del
WorkSpace
>> whos
Name Size Bytes Class Attributes
A 2x4 64 double
ans 1x1 8 double
v 1x7 56 double
>> clear A
>> whos
Name Size Bytes Class Attributes
ans 1x1 8 double
v 1x7 56 double
>> clear all
>> whos
>>
Chiudendo Matlab tutte le variabili del WorkSpace vengono perse. Per sal-
vare tutte le variabili del WorkSpace si ricorre all’istruzione save seguita dal
nome del file su cui verranno salvate
>> save risultati
>>
dopo questa istruzione Matlab crea il file risultati.mat nella cartella di la-
voro. In questa maniera possiamo uscire dall’ambiente Matlab senza perdere
i nostri dati. Per ricaricare tutte le variabili salvate nel file .mat si utilizza il
comando load
>> load risultati
20 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
>>
2.4 m-files
Finora abbiamo visto come sia possibile utilizzare Matlab tramite la riga di
comando. Pu` o succedere per` o che si vogliano scrivere veri e propri program-
mi, cio`e una successione di comandi da eseguire uno dopo l’altro in un ordine
fissato. In tal caso la successione di comandi deve essere memorizzata in un
file chiamato m-file. Per creare un m-file `e sufficiente selezionare il primo ta-
sto della barra dei pulsanti di Matlab, Figura 2.2. Si aprir` a un editor, Figura
2.3, dove `e possibile scrivere la sequenza di istruzioni. Terminata questa fase
Figura 2.3: Editor per gli m-file.
dobbiamo salvare il lavoro. Supponiamo di chiamarlo prova, allora Matlab
creer` a un file prova.m nella cartella di lavoro. Infine per eseguire la squenza
di istruzioni salvate in prova.m `e sufficiente scrivere il nome del file, senza
estensione, nel Command Window
>>prova
>>
Esempio 3. Vogliamo scrivere il programma es3.m che calcola la media e
la deviazione standard del vettore
x =
_
1 2 3 4
_
T
. (2.12)
2.4. M-FILES 21
1 %%%%%%%%%%%
2 % es3.m %
3 %%%%%%%%%%%
4
5 clear all % cancello il vecchio WorkSpace
6 clc% pulisci lo schermo
7 x=[1 2 3 4]’;
8 media=sum(x)/ length(x);
9 diff=x-media; % vettore differenza
10 dev_std=sqrt(sum(diff .^2)/ length(x));
11 disp([’Media ’ num2str(media )]) %stampo risultati
12 disp([’Deviazione standard ’ num2str(dev_std )])
Eseguendo es3.m otteniamo
Media 2.5 Deviazione standard 1.118
>>
Esempio 4. Vogliamo creare il programma es4.m che salva i due vettori
u =
_
4 7 9
_
T
, v =
_
0 1 3
_
T
(2.13)
nel file dati.mat
1 %%%%%%%%%%%
2 % es4.m %
3 %%%%%%%%%%%
4
5 clear all
6 u=[4 7 9]’; %genero i vettori u,v
7 v=[0; 1; 3];
8 save dati % salvo le variabili del WorkSpace
Esempio 5. Utilizzando i vettori dell’esercizio precedente, calcolare u
T
v
1 %%%%%%%%%%%
2 % es5.m %
3 %%%%%%%%%%%
4
5 clear all %cancello tutte le variabili WorkSpace
6 load dati %carico il vecchio WorkSpace
7 u’*v
22 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
2.5 Strutture di controllo
Oltre agli operatori aritmetici esistono gli operatori relazionali <, >, ==, <=,
>=, ~= che corrispondono ai simboli matematici <,>,=,≤,≥,=. Mediante
questi operatori si possono scrivere delle relazioni che possono essere vere o
false. Il valore vero viene indicato da Matlab con 1, mentre il valore falso
viene indicato con 0.
• Struttura if
1 if [condizione]
2 [istruzioni]
3 else
4 [istruzioni]
5 end
• Struttura for
1 for j=min:max
2 [istruzioni]
3 end
• Struttura while
1 while [condizione]
2 [istruzioni]
3 end
Esempio 6. Scrivere un programma che somma due polinomi p(x), q(x). Te-
nere conto del fatto che i due polinomi possono avere grado diverso (e di con-
seguenza i corrispondenti vettori possono avere lunghezze diverse). Testare
il programma con i seguenti polinomi
p(x) = x
3
+ 1
q(x) = x
2
+ 7x −3. (2.14)
1 %%%%%%%%%%%
2 % es6.m %
3 %%%%%%%%%%%
2.5. STRUTTURE DI CONTROLLO 23
4
5 clear all
6 clc %pulisci lo schermo
7 p=[1 0 0 1]; %polinomi da sommare
8 q=[2 7 -3];
9 if length(p)<length(q)
10 corto=p;
11 lungo=q;
12 else
13 corto=q;
14 lungo=p;
15 end
16 diff=length(lungo)-length(corto );
17 if diff >0
18 somma =[ zeros(1,diff) corto ]+ lungo; %aggiungi zeri al polinomio
19 %piu ’ corto
20 else
21 somma=corto+lungo;
22 end
23 disp(’Polinomio somma ’)
24 somma
Esempio 7. Scrivere un programma che stampa i primi dieci numeri interi
che sono il quadrato di un numero intero. Fare in modo che ogni numero
venga stampato dopo che l’utente ha digitato INVIO.
1 %%%%%%%%%%%
2 % es7.m %
3 %%%%%%%%%%%
4
5 clear all
6 clc %pulisci finestra Command Window
7 for n=1:10
8 disp(n^2)
9 pause
10 end
Esempio 8. Scrivere lo stesso programma dell’Esempio 7 utilizzando il con-
trollo while.
24 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
1 %%%%%%%%%%%
2 % es8.m %
3 %%%%%%%%%%%
4
5 clear all
6 clc %pulisci finestra Command Window
7 n=1;
8 while n<=10
9 disp(n^2)
10 n=n+1;
11 pause
12 end
2.6 Grafici
Matlab fornisce anche funzioni grafiche. Consideriamo un segnale definito su
un dominio D ⊂ R
y = f(t), t ∈ D. (2.15)
Per disegnare tale segnale su carta:
• prendiamo un numero finito di punti t
1
, . . . t
n
contenuti in D, equispa-
ziati secondo una prescelta quantit` a T
• calcoliamo i corrispondenti y
1
, . . . y
n
con y
i
= f(t
i
)
• disegniamo i punti sul piano cartesiano e infine li uniamo secondo un
opportuno criterio.
Detto in maniera pi` u formale: campioniamo il segnale con passo di campio-
namento pari a T e poi lo interpoliamo linearmente. Il concetto `e lo stesso
per stampare in Matlab tale segnale. Consideriamo il vettore
t =
_
t
1
. . . t
n
_
T
, t
i
∈ D, (2.16)
calcoliamo
y =
_
f(t
1
) . . . f(t
n
)
_
T
. (2.17)
Infine utilizziamo la funzione plot passandole i vettori t e y.
2.6. GRAFICI 25
Esempio 9. Stampare il segnale
f(t) = sin(

5
t −0.1), t ∈ [0, 10] (2.18)
con passo di campionamento pari a T = 0.02.
1 %%%%%%%%%%%
2 % es9.m %
3 %%%%%%%%%%%
4
5 clear all
6 T=0.02; %passo di campionamento
7 t=0:T:10; % crea il vettore t
8 for j=1: length(t) % crea il vettore y
9 y(j)=sin (2*pi/5*t(j) -0.1);
10 end
11 plot(t,y)
12 xlabel(’t’) % nome asse x
13 ylabel(’f(t)’) % nome asse y
14 axis ([0 10, -1 1 ]) % assi del grafico
15 grid on % griglia grafico
Eseguendo il programma otteniamo il grafico di Figura 2.4. Matlab oltre alla
figura fornisce una serie utility grafiche: salva figura, zoom grafico, esplora
grafico, datatip. Osserviamo che in questo m-file ci sono delle nuove funzioni
di Matlab. Nella seguente tabella ne riportiamo la descrizione.
Funzione Descrizione
figure Apre una nuova finestra per stampare grafici
close all Chiude tutte le finestre dei grafici aperte
grid on Mostra la griglia nel grafico
grid off Non mostra la griglia nel grafico (default)
xlabel(s) Chiama l’asse x con la variabile stringa s
ylabel(s) Chiama l’asse y con la variabile stringa s
legend() Istruzione per la legenda del grafico
title(s) Intitola il grafico usando la variabile stringa s
axis([x1 x2,y1 y3]) Imposta gli assi del grafico secondo (x
1
, x
2
) e (y
1
, y
2
)
hold on Permette di sovrapporre pi` u grafici nella stessa finestra
hold off Permette di stampare solo un grafico nella finestra (default)
stem Istruzione per stampare segnali a tempo discreto
26 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
Figura 2.4: Grafico dell’Esempio 9
Esercizio 1. Consideriamo il segnale dell’Esempio 9. Ripetere l’esempio con
T = 0.8 e T = 2. Commentare i grafici trovati.
Esercizio 2. Stampare il segnale
f(t) = e
−0.01t
sin(0.4t), t ∈ [0, 100]. (2.19)
Scegliere in maniera opportuna il passo di campionamento.
Esempio 10. Stampare su due figure differenti i segnali
f(t) = cos(2t), t ∈ [0, 50]
g(t) = e
−0.1t
cos(2t) (2.20)
con passo di campionamento pari a T = 0.02.
1 %%%%%%%%%%%%
2 % es10.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all % chiudo tutte le finiestre aperte
2.6. GRAFICI 27
7 T=0.02; %passo di campionamento
8 t=0:T:50; % crea il vettore t
9 y=cos (2*t); % crea il vettore per f
10 z=exp ( -0.1*t).* cos (2*t); % crea il vettore per g
11 plot(t,y) %stampo il primo grafico
12 xlabel(’t’) % nome asse x
13 ylabel(’f(t)’) % nome asse y
14 title(’primo grafico ’) % titolo grafico
15 figure %apro una nuova figura
16 plot(t,z,’r’) %stampo il secondo grafico
17 xlabel(’t’) % nome asse x
18 ylabel(’g(t)’) % nome asse y
19 title(’secondo grafico ’) % titolo grafico
In questo caso abbiamo abbiamo utilizzato una scrittura molto pi` u compatta
e veloce per creare il vettore y. La funzione cos accetta come parametro di
ingresso anche un vettore e restituisce il corrispondente vettore y. Vale la
stessa cosa per exp e tutte le altre funzioni analoghe di Matlab. Osserviamo
che l’istruzione plot prevede un terzo parametro opzionale per specificare il
colore del segnale: r,b,c,k,g corrispondono a rosso, blu, ciano, nero, verde.
Esercizio 3. Facendo riferimento all’Esempio 10, vedere cosa succede quan-
do:
• tolgo la riga quindici
• sostituisco la riga quindici con hold on.
28 CAPITOLO 2. FUNZIONALIT
`
A BASILARI DI MATLAB
Capitolo 3
Segnali e convoluzioni
3.1 Segnali pari e dispari, segnali complessi
Iniziamo ad applicare le funzionalit` a di Matlab calcolando la parte pari e
dispari di un segnale.
Esempio 11. Scrivere un programma che stampa il segnale
f(t) = e
sin(2t)
, t ∈ [−5, 5], (3.1)
la sua parte pari e dispari (il tutto sullo stesso grafico).
1 %%%%%%%%%%%%
2 % es11.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=0.02; %passo di campionamento
9 t=-5:T:5; % crea il vettore t
10 y=exp(sin (2*t));
11 y_rib=wrev(y); % creo il vettore per la funzione
12 % ribaltata
13 y_pari =0.5*(y+y_rib ); %vettore parte pari
14 y_disp =0.5*(y-y_rib ); %vettore parte dispari
29
30 CAPITOLO 3. SEGNALI E CONVOLUZIONI
15 plot(t,y) % grafici
16 hold on
17 plot(t,y_pari ,’r’)
18 plot(t,y_disp ,’g’)
19 xlabel(’t’)
20 legend(’f(t)’,’parte pari’,’parte dispari ’) %legenda
21 grid on
In Figura 3.1 `e mostrato il grafico che stampa Matlab.
−5 −4 −3 −2 −1 0 1 2 3 4 5
−1.5
−1
−0.5
0
0.5
1
1.5
2
2.5
3
t


f(t)
parte pari
parte dispari
Figura 3.1: Grafico dell’Esempio 11
Esercizio 4. Stampare la parte reale e immaginaria del segnale complesso
f(t) = e
j2π
¯
ft
, t ∈ [0, 0.5] (3.2)
con
¯
f = 0.1.
3.2 Area ed energia di un segnale
In questa sezione vediamo come calcolare l’area e l’energia (e quindi anche
il valore medio e la potenza) di un dato segnale. Iniziamo con i segnali a
tempo continuo.
3.2. AREA ED ENERGIA DI UN SEGNALE 31
Esempio 12. Scrivere un programma che stampa il segnale
f(t) = sinc(t), t ∈ R (3.3)
e ne calcola l’area.
Chiaramente possiamo solo stampare il segnale su un sotto-intervallo limi-
tato di R, per esempio su [−M, M] con M sufficientemente grande. Scegliamo
M = 1000 e T = 0.02. Sapendo che
_

−∞
sinc(t)dt esiste, `e lecito considerare
la seguente approssimazione
_

−∞
sinc(t)dt
M
T

k=−
M
T
Tsinc(kT), (k ∈ Z). (3.4)
Infine utilizziamo la funzione sinc di Matlab.
1 %%%%%%%%%%%%
2 % es12.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=0.02; %passo di campionamento
9 M=1000;
10 t=-M:T:M; % crea il vettore t
11 y=sinc(t);
12 plot(t,y) %stampa grafico
13 xlabel(’t’)
14 ylabel(’f(t)’)
15 grid on
16 area=T*sum(y);%calcola area
17 disp([’Area del sinc: ’ num2str(area )])
Esercizio 5. Consideriamo il segnale dell’Esempio 12. Calcolare il valore
medio l’energia e la potenza di f.
Esempio 13. Scrivere un programma che stampa il segnale periodico (su un
periodo)
f(t) = sin
3
(t), t ∈ R (3.5)
32 CAPITOLO 3. SEGNALI E CONVOLUZIONI
e ne calcola l’energia.
La periodicit`a del segnale `e T
p
= 2π. Sapendo che
_

0
|f(t)|
2
dt esiste ed
`e finito, per calcolare l’energia `e lecita l’approssimazione
_
Tp
0
|f(t)|
2
dt

Tp
T

k=0
T|f(kT)|
2
, k ∈ Z (3.6)
dove T `e il passo di campionamento.
1 %%%%%%%%%%%%
2 % es13.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=0.02; %passo di campionamento
9 Tp=2*pi; %periodicita ’
10 t=0:T:Tp; % crea il vettore t
11 y=sin(t).^3;
12 plot(t,y) %stampa grafico
13 xlabel(’t’)
14 ylabel(’f(t)’)
15 grid on
16 E=T*sum(y.^2);%calcola energia
17 disp([’Energia della funzione: ’ num2str(E)])
Esercizio 6. Consideriamo il segnale dell’Esempio 13. Calcolare l’area, il
valore medio e la potenza di f(t).
Ora prendiamo in considerazione i segnali a tempo discreto.
Esempio 14. Scrivere un programma che stampa il segnale a dominio di-
screto
f(nT) = e
−0.02nT
sin(nT), n ≥ 0 (3.7)
con T = 1 e ne calcola l’energia.
3.2. AREA ED ENERGIA DI UN SEGNALE 33
1 %%%%%%%%%%%%
2 % es14.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=1; %passo di campionamento
9 M=200;
10 n=0:M; % crea il vettore n
11 y=exp ( -0.02*n*T).* sin(n*T);
12 stem(n,y) %stampa grafico
13 xlabel(’n’)
14 ylabel(’f(nT)’)
15 E=T*sum(y.^2);%calcola energia
16 disp([’Energia del segnale: ’ num2str(E)])
Esercizio 7. Consideriamo il segnale dell’Esempio 14. Calcolare l’area, il
valore medio e la potenza di f.
Esempio 15. Consideriamo il segnale periodico a dominio discreto
f(nT) = sin
_
2πnT
T
p
_
, n ∈ Z (3.8)
con T = 0.05 e T
P
= 2. Stampare f su un periodo e calcolarne l’area.
1 %%%%%%%%%%%%
2 % es15.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=0.05; %passo di campionamento
9 Tp=2; %periodicita ’
10 n=0:Tp/T; % crea il vettore n
11 y=sin (2*pi*n*T/Tp);
12 stem(n,y) %stampa grafico
34 CAPITOLO 3. SEGNALI E CONVOLUZIONI
13 xlabel(’n’)
14 ylabel(’f(nT)’)
15 A=T*sum(y);% calcolo area
16 disp([’Area del segnale: ’ num2str(A)])
In Figura 3.2 `e mostrato il grafico che stampa Matlab.
0 5 10 15 20 25 30 35 40
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
n
f
(
n
T
)
Figura 3.2: Grafico dell’Esempio 15
Esercizio 8. Consideriamo il segnale dell’Esempio 15. Calcolare l’energia di
f.
3.3 Convoluzione
In questa sezione introduciamo il calcolo di convoluzioni con Matlab. Per
semplicit` a d’esposizione, considereremo per primo il caso di segnali discreti
a supporto limitato.
Consideriamo due segnali a(n) e b(n). Sappiamo dalla teoria che la loro
convoluzione `e definita come
a ∗ b(n) =

k=−∞
b(n −k)a(k). (3.9)
Il codice seguente illustra l’uso del comando conv per il calcolo della convo-
luzione. I grafici prodotti, riportati in Figura 3.3 e Figura 3.4, ne illustrano
il meccanismo. Il risultato `e illustrato in Figura 3.5.
3.3. CONVOLUZIONE 35
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %% Convoluzione di segnali discreti a supporto limitato %%
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4
5 close all % chiude le finestre figura aperte
6 clc % pulisce la command window
7
8 % Segnali a e b
9 a = [1 2 -1 3];
10 x_a = 0:3;
11
12 b = [-1 3 -5];
13 x_b = 0:2;
14
15 % Segnale ottenuto ribaltando b
16 b_meno = fliplr(b);
17 x_b_meno = - fliplr(x_b);
18
19 %% Grafici dei segnali di interesse
20 figure , title(’Segnali di interesse ’)
21 subplot (131)
22 stem(x_a ,a,’LineWidth ’ ,2)
23 axis([-4 6 -5 3 ])
24 legend(’a(n)’)
25 grid on;
26
27 subplot (132)
28 stem(x_b ,b,’LineWidth ’ ,2)
29 axis([-4 6 -5 3 ])
30 legend(’b(n)’)
31 grid on;
32
33 subplot (133)
34 stem(x_b_meno ,b_meno ,’r’,’LineWidth ’ ,2)
35 axis([-4 6 -5 3 ])
36 legend(’b_{-}(n)’)
37 grid on;
38
36 CAPITOLO 3. SEGNALI E CONVOLUZIONI
39 %% Rappresentazione grafica della convoluzione
40 figure , title(’Convoluzione a*b’)
41 n_c = length(a) + length(b) -1 ;
42
43 c = conv(a,b);
44
45 for i = 0:n_c -1
46 subplot (3,2,i+1)
47 stem(x_a ,a,’LineWidth ’ ,2)
48 hold on
49 stem(x_b_meno + i, b_meno ,’r’,’LineWidth ’ ,2)
50 axis([-4 6 -5 3 ])
51 set(gca ,’YTick ’ ,-4:3)
52 title ([’c(’,num2str(i),’) = ’,num2str(c(i+1))])
53 grid on;
54 end
55
56 %% Grafico della convoluzione c = a*b
57 figure
58 stem(c,’b’,’LineWidth ’ ,2)
59 title(’c(n)’)
60 grid on;
Consideriamo ora un esempio di convoluzione tra segnali continui. Siano
dati i segnali rettangolari f(t) e g(t) definiti come
f(t) = A
f
rect
_
t −t
f
D
f
_
,
g(t) = A
g
rect
_
t −t
g
D
g
_
.
La convoluzione per segnali continui `e definita come
f ∗ g(t) :=
_

−∞
f(t −τ)g(τ) dτ.
Nel caso di interesse, l’integrale esiste. Quindi, scegliendo un periodo di
campionamento T sufficientemente piccolo, possiamo scrivere
f ∗ g(t) =
_

−∞
f(t −τ)g(τ) dτ ≈ T

k=−∞
f(t −kT)g(kT).
3.3. CONVOLUZIONE 37
Figura 3.3: Segnali convolvendi a(n) e b(n) (in blu) e versione ribaltata di
b(n) (in rosso)
Figura 3.4: Calcolo della convoluzione c(n) := a ∗ b(n)
38 CAPITOLO 3. SEGNALI E CONVOLUZIONI
Figura 3.5: Calcolo della convoluzione c(n) := a ∗ b(n)
Questa approssimazione ci permette di ricondurci al caso discreto, nel quale
possiamo ricorrere al comando conv di Matlab.
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %% Convoluzione di segnali continui a supporto limitato %%
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4
5 % Calcoliamo con Matlab una versione approssimata della
6 % convoluzione dei segnali continui
7
8 % f(t) = A_f * rect((t-t_f)/D_f)
9 % g(t) = A_g * rect((t-t_g)/D_g)
10
11 %% Segnali di interesse
12
13 clc
14 close all
15
16 % Parametri che definiscono i segnali
17
18 A_f = 1;
19 A_g = 1;
20
21 t_f = 2;
3.3. CONVOLUZIONE 39
22 t_g = 3;
23
24 D_f = 5;
25 D_g = 1;
26
27 % Approssimazione discreta
28 T = 0.001;
29 x = -5:T:5;
30
31 f = zeros(size(x));
32 f_inizio = find(x==t_f -0.5* D_f);
33 f_fine = find(x==t_f +0.5* D_f);
34 f(f_inizio:f_fine )=D_f;
35
36 g = zeros(size(x));
37 g_inizio = find(x==t_g -0.5* D_g);
38 g_fine = find(x==t_g +0.5* D_g);
39 g(g_inizio:g_fine) = D_g;
40
41 g_meno = fliplr(g);
42 x_g_meno = -fliplr(x);
43
44 %% Grafici
45 subplot (131)
46 plot(x,f,’LineWidth ’ ,2);
47 legend(’f’)
48 grid on
49
50 subplot (132)
51 plot(x,g,’LineWidth ’ ,2);
52 legend(’g’)
53 grid on
54
55 subplot (133)
56 plot(x_g_meno ,g_meno ,’r’,’LineWidth ’ ,2);
57 legend(’g_{-}’)
58 grid on
59
40 CAPITOLO 3. SEGNALI E CONVOLUZIONI
Figura 3.6: Segnali convolvendi f(t) e g(t) (in blu) e versione ribaltata di
g(t) (in rosso)
Figura 3.7: Grafico di f ∗ g(t) per A
f
= A
g
= t
f
= t
g
= 1
60 %% Convoluzione (approssimazione discreta)
61 % Attenzione a moltiplicare per il passo di campionamento
62 conv_fg = T*conv(f,g);
63 x_conv = -10:T:10;
64 figure , plot(x_conv ,conv_fg ,’b’,’LineWidth ’ ,2)
65 legend(’conv(f,g)’)
66 grid on
In Figura 3.6 e Figura 3.7 sono riportati rispettivamente i segnali f(t) e g(t)
e la loro convoluzione, nel caso A
f
= A
g
= D
f
= D
g
= 1.
Prendiamo ora in considerazione la risposta y di un sistema lineare (tempo
3.3. CONVOLUZIONE 41
invariante) ad un ingresso generico x. Dalla teoria sappiamo che y `e la
convoluzione tra risposta impulsiva h e l’ingresso x.
Esempio 16. Consideriamo un filtro lineare, causale con risposta impulsiva
h(t) = e
αt
+ e
¯ αt
, t ≥ 0. (3.10)
Supponiamo di alimentare il filtro con un gradino unitario x all’istante ze-
ro. Stampare la risposta impulsiva e la risposta y al gradino unitario per i
seguenti valori di α:
α = −0.4 + j0.6
α = j0.6
α = 0.04 + j0.6. (3.11)
Guardando le risposte impulsive e le corrispondenti risposte al gradino, di-
scutere la stabilit` a dei sistemi.
Sappiamo che
y(t) =
_

−∞
h(t −τ)x(τ)dτ =
_
t
0
h(t −τ)x(τ)dτ. (3.12)
Sotto ipotesi simili a quelle dell’Esempio 12, fissando un T sufficientemente
piccolo abbiamo la seguente approssimazione
y(t) T

t
T

k=0
h(t −kT)x(kT). (3.13)
In altre parole possiamo approssimare y come il risultato di una convoluzione
discreta. In Matlab la funzione di convoluzione discreta `e conv(x,h).
1 %%%%%%%%%%%%
2 % es16.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 T=0.001;
9 alpha = -0.4+j*0.6;
42 CAPITOLO 3. SEGNALI E CONVOLUZIONI
10 % alpha=j*0.6;
11 % alpha =0.04+j*0.6;
12 t=0:T:30;
13 h=exp(alpha*t)+exp(conj(alpha )*t);
14 plot(t,h) % stampa risposta impulsiva
15 title(’risposta impulsiva ’)
16 x=ones(1,length(t)); %ingresso
17 y=T*conv(x,h); %uscita del filtro
18 y=[y(1: length(t))];%riaggiustamento del vettore
19 figure
20 plot(t,y)
21 title(’uscita del filtro ’)
Nella Figura 3.8 sono mostrate le risposte al gradino per i diversi α. La va-
lutazione e i commenti riguardanti la stabilit`a vengono lasciati allo studente.
0 5 10 15 20 25 30
−15
−10
−5
0
5
10
uscita del filtro


α=−0.4+i0.6
α=i0.6
α=0.04+i0.6
Figura 3.8: Risposte al gradino unitario del filtro dell’Esempio 16
Esercizio 9. Consideriamo un filtro lineare, causale con risposta impulsiva
h(t) = e
α
1
t
+ e
¯ α
1
t
+ e
α
2
t
+ e
¯ α
2
t
, t ≥ 0. (3.14)
Supponiamo di alimentare il filtro con un gradino unitario x all’istante ze-
ro. Calcolare la risposta impulsiva e la risposta y al gradino unitario per i
3.3. CONVOLUZIONE 43
seguenti valori di α
1
e α
2
:
α
1
= −0.4 + j0.6, α
2
= −0.4 + j0.6
α
1
= −0.4 + j0.6, α
2
= j0.6
α
1
= −0.4 + j0.6, α
2
= 0.04 + j0.6
α
1
= j0.6, α
2
= j0.6
α
1
= j0.6, α
2
= 0.04 + j0.6
α
1
= 0.04 + j0.6, α
2
= 0.04 + j0.6. (3.15)
Guardando le risposte impulsive e le corrispondenti risposte al gradino, di-
scutere la stabilit` a dei sistemi.
Esempio 17. Consideriamo un filtro lineare discreto, causale con risposta
impulsiva
h(n) = α
n
+ ¯ α
n
, n ≥ 0. (3.16)
Supponiamo di alimentare il filtro con un gradino unitario discreto x all’i-
stante zero. Calcolare la risposta impulsiva e la risposta y al gradino x per i
seguenti valori di α:
α = 0.8 + j0.4
α = 0.8 + j0.6
α = 0.8 + j0.63. (3.17)
Guardando le risposte impulsive e le corrispondenti risposte al gradino, di-
scutere la stabilit` a dei sistemi.
Sappiamo che
y(n) =

k=−∞
h(n −k)x(k) =
n

k=0
h(n −k)x(k). (3.18)
Anche in questo caso utilizziamo la funzione conv.
1 %%%%%%%%%%%%
2 % es17.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
44 CAPITOLO 3. SEGNALI E CONVOLUZIONI
7 clc
8 alpha =0.8+j*0.4;
9 % alpha =0.8+j*0.6;
10 % alpha =0.8+j*0.63;
11 n=0:1:80;
12 h=alpha .^n+conj(alpha ).^n;
13 % stem(t,h) % stampa risposta impulsiva
14 % title(’risposta impulsiva ’)
15 x=ones(1,length(n)); %ingresso
16 y=conv(x,h); %uscita del filtro
17 y=[y(1: length(n))];%riaggiustamento del vettore
18 % figure
19 stem(n,y)
20 title(’uscita del filtro ’)
Nella Figura 3.9 sono mostrate le risposte al gradino per i diversi α. La va-
lutazione e i commenti riguardanti la stabilit`a vengono lasciati allo studente.
0 10 20 30 40 50 60 70 80
−10
−5
0
5
10
15
uscita del filtro


α=0.8+i0.4
α=0.8+i06
α=0.8+i0.63
Figura 3.9: Risposte al gradino unitario del filtro dell’Esempio 17
Esercizio 10. Consideriamo un filtro lineare discreto, causale con risposta
impulsiva
h(n) = α
n
1
+ ¯ α
1
n
+ α
n
2
+ ¯ α
2
n
, n ≥ 0. (3.19)
3.3. CONVOLUZIONE 45
Supponiamo di alimentare il filtro con un gradino unitario discreto x all’i-
stante zero. Calcolare la risposta impulsiva e la risposta y al gradino x per i
seguenti valori di α
1
e α
2
:
α
1
= 0.8 + j0.4, α
2
= 0.8 + j0.4
α
1
= 0.8 + j0.4, α
2
= 0.8 + j0.6
α
1
= 0.8 + j0.4, α
2
= 0.8 + j0.63
α
1
= 0.8 + j0.6, α
2
= 0.8 + j0.6
α
1
= 0.8 + j0.6, α
2
= 0.8 + j0.63
α
1
= 0.8 + j0.63, α
2
= 0.8 + j0.63. (3.20)
Guardando le risposte impulsive e le corrispondenti risposte al gradino, di-
scutere la stabilit` a dei sistemi.
46 CAPITOLO 3. SEGNALI E CONVOLUZIONI
Capitolo 4
Analisi di Fourier
In questo capitolo affrontiamo il problema del calcolo delle serie e delle
trasformate di Fourier in Matlab.
4.1 Serie di Fourier
In questa sezione parleremo della serie di Fourier. Dato un segnale periodico
x(t) di periodo T
p
a energia finita sul periodo, possiamo sempre esprimerlo
come
x(t) =

k=−∞
a
k
e
j2πkFt
(4.1)
dove
a
k
=
1
T
p
_
Tp
0
x(t)e
−j2πkFt
dt, F =
1
T
p
. (4.2)
Esempio 18. Considerare lo sviluppo in serie di Fourier di un’onda quadra
x(t) = A
0
rep
Tp
rect
_
t
dT
p
_
(4.3)
con duty cycle d = 0.3, periodo T
p
= 2 e ampiezza A
0
= 7. Illustrare l’effetto
Gibbs troncando lo sviluppo a N = 10, 30, 50 armoniche.
In questo caso `e facile vedere che
a
k
= A
0
dsinc(kd). (4.4)
47
48 CAPITOLO 4. ANALISI DI FOURIER
1 %%%%%%%%%%%%
2 % es18.m %
3 %%%%%%%%%%%%
4
5 % Serie di Fourier troncata del segnale
6 % x(t) = rep_Tp A0 rect(t/(dTp))
7
8 close all
9
10 Tp=2; % Tempo di campionamento
11 d=0.3; % Duty cycle
12 A0=7; % Ampiezza del segnale rect
13
14 % Numero di armoniche considerate nel troncamento
15 N=10;
16 % N=30;
17 % N=50;
18
19 %calcolo dei coefficienti di Fourier
20 a0=A0*d*sinc (0);
21 for k=1:N
22 a_piu(k)=A0*d*sinc(k*d); % a_n per n>0
23 a_meno(k)=A0*d*sinc(-k*d); % a_n per n<0
24 end
25
26 %calcolo della serie di Fourier
27 t=0:0.01:3;
28 F = 1/Tp;
29 x=a0*ones(1,length(t));
30 for k=1:N
31 x=x+a_meno(k)*exp(-1i*k*2*pi*F*t)+...
32 a_piu(k)*exp(1i*k*2*pi*F*t);
33 end
34
35 %stampa segnale
36 plot(t,x)
In Figura 4.1 sono mostrate le corrispondenti serie troncate.
4.1. SERIE DI FOURIER 49
0 0.5 1 1.5 2 2.5 3
−1
0
1
2
3
4
5
6
7
8


N=10
N=30
N=50
Figura 4.1: Serie di Fourier troncate dell’Esempio 18
Esempio 19. Consideriamo la serie di Fourier
x(t) = 2

k=1
(−1)
k−1
1
k
sin(kt), t ∈ R. (4.5)
Stampare la corrispondente serie di Fourier troncata per N = 10, 30, 50.
1 %%%%%%%%%%%%
2 % es19.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 N=10;
8 % N=30;
9 % N=50;
10 %calcolo della serie di Fourier
11 t=0:0.01:20;
12 x=zeros(1,length(t));
13 for k=1:N
14 x=x+2*( -1)^(k-1)/k*sin(k*t);
15 end
16 %stampa segnale
50 CAPITOLO 4. ANALISI DI FOURIER
17 plot(t,x)
0 2 4 6 8 10 12 14 16 18 20
−4
−3
−2
−1
0
1
2
3
4


N=10
N=30
N=50
Figura 4.2: Serie di Fourier troncate dell’Esempio 19
In Figura 4.2 sono mostrate le corrispondenti serie troncate.
Esercizio 11. Consideriamo il segnale, periodico di periodo T
p
= 2, cos`ı
definito per t ∈ [0, 2):
x(t) =
_
2(1 −t), 0 ≤ t < 1
2, 1 ≤ t < 2.
(4.6)
Stampare la corrispondente serie di Fourier troncata per N = 10, 30, 50.
Svolgimento.
1 %%%%%%%%%%%%%%%%%%%%%%%
2 % ex11.m %
3 %%%%%%%%%%%%%%%%%%%%%%%
4
5 close all
6
7 Tp = 2; %Periodo del segnale
8 T = 0.01; % Discretizzazione
4.1. SERIE DI FOURIER 51
9 t = 0:T:Tp;
10 % segnale
11 st = zeros(1,length(t));
12 for i = 1: length(t)
13 if(t(i) < 1)
14 st(i) = 2*(1-t(i));
15 else
16 st(i)=2;
17 end
18 end
19 figure;
20 plot(t,st ,’LineWidth ’ ,2);
21 title(’Segnale originale su un periodo ’)
22 grid on;
23 axis ([0 2 -1 3]);
24
25 %% Serie di Fourier
26 %N = 10;
27 N = 30;
28 %N = 50;
29 sk = zeros(1,N);
30 sk_ = zeros(1,N);
31 q = 1:N;
32 for k= 1: length(t)
33 sk = sk + T*1/Tp*st(k)*exp(-1i*2*pi*q*t(k)/Tp);
34 sk_ = sk_ + T*1/Tp*st(k)*exp(1i*2*pi*q*t(k)/Tp);
35 end
36 figure;
37 stem (1:N,sk ,’r’,’LineWidth ’ ,2);
38 grid on;
39 title(’Coefficienti della serie di Fourier ’)
40
41 %% Ricostruzione del segnale mediante la serie troncata
42 x = T*1/2* sum(st)*ones(1,length(t));
43 for k = 1:N
44 x = x + sk(k)*exp(1i*2*pi*q(k)*t/2)+...
45 sk_(k)*exp(-1i*2*pi*q(k)*t/2);
46 end
52 CAPITOLO 4. ANALISI DI FOURIER
47 figure;
48 plot(t,st ,’--’,’LineWidth ’ ,2)
49 hold on
50 plot(t,x,’LineWidth ’ ,2);
51 grid on;
52 legend(’Segnale originale ’ ,...
53 [’Segnale ricostruito , N=’,num2str(N)])
54 axis ([0 2 -1 3]);
Esercizio 11 Bis. Consideriamo la serie di Fourier
x(t) =

k=−∞
a
k
e
jkt
(4.7)
dove
a
k
=
_
0, k, pari

2
πk
2
, k dispari.
. (4.8)
Stampare la corrispondente serie di Fourier troncata per N = 1, 2, 3, 10, 30.
4.2 Trasformata di Fourier per segnali a tem-
po continuo
Dato un segnale x(t) a tempo continuo, la corrispondente trasformata di
Fourier `e definita come
X(f) =
_

−∞
x(t)e
−j2πft
dt, f ∈ R (4.9)
Se il precedente integrale esiste ed `e finito, allora `e lecita la seguente appros-
simazione
X(f) T
M
T

k=−
M
T
x(kT)e
−j2πkfT
, f ∈ R, (4.10)
dove T `e il passo di campionamento e M `e un numero sufficientemente eleva-
to. Inoltre per rappresentare X(f) dobbiamo anche campionare la frequenza,
per cui otteniamo
X(nF) T
M
T

k=−
M
T
x(kT)e
−j2πknFT
, n ∈ Z (4.11)
4.2. TRASFORMATADI FOURIER PER SEGNALI ATEMPOCONTINUO53
dove F `e una quantit` a sufficientemente piccola.
Propriet`a della trasformata di Fourier
Ricordiamo le propriet`a fondamentali della trasformata di Fourier nella se-
guente tabella.
segnale trasformata
Linearit` a αs
1
(t) + βs
2
(t) αS
1
(f) + βS
2
(f)
Simmetria S(t) s(−f)
Ribaltamento delle coordinate s(−t) S(−f)
Coniugio nel tempo s

(t) S

(−f)
Coniugio in frequenza s

(−t) S

(f)
Traslazione nel tempo s(t −t
0
) S(f)e
−j2πft
0
Traslazione in frequenza s(t)e
j2πft
0
S(f −f
0
)
Convoluzione nel tempo x ∗ y(t) X(f)Y (f)
Convoluzione in frequenza x(t)y(t) X ∗ Y (f)
Cambio di scala s(at)
1
|a|
S(
f
a
)
Area del segnale nel tempo area(s) S(0)
Area del segnale in frequenza s(0) area(S)
Energia del segnale E
s
=
_

−∞
|s(t)|
2
dt E
S
=
_

−∞
|S(f)|
2
df
Testiamo alcune delle propriet` a sopra elencate:
1 % Test sulla Trasformata di Fourier
2
3 close all , clc
4
5 % campionamento di tempo e frequenza
6 T = 0.01;
7 F = 0.01;
8 M = 20;
9 t = -M:T:M;
10 N = 5;
11
12 % segnale s_1
13 s_1 = 3*sinc(t);
14 figure
15 plot(t,s_1 ,’b’,’LineWidth ’ ,2)
54 CAPITOLO 4. ANALISI DI FOURIER
16 legend(’s_1(t)= 3sinc(t)’)
17 grid on
18 %% Traslazione in frequenza
19 f = -N:F:N;
20 S_1 = zeros(1,length(f));
21 for i=1: length(f)
22 S_1(i) = T * s_1 * exp(-1i*2*pi*f(i)*t).’;
23 end
24 figure , plot(f,real(S_1),’LineWidth ’ ,2)
25 grid on
26 hold on
27
28 pause
29
30 % segnale moltiplicato nel tempo per un esponenziale complesso
31 f_0 = 2;
32 s_1_e = s_1.*exp(1i*2*pi*f_0*t);
33 S_1_t = zeros(1,length(f));
34 for i=1: length(f)
35 S_1_t(i) = T * s_1_e * exp(-1i*2*pi*f(i)*t).’;
36 end
37 plot(f,real(S_1_t),’r -.’,’LineWidth ’ ,2)
38 legend(’S_1(f)’,’S_1(f-f_0)’)
39
40 pause
41
42 % Modulazione
43 s_1_cos = s_1.*cos (2*pi*f_0*t);
44 S_1_mod = zeros(1,length(f));
45 for i=1: length(f)
46 S_1_mod(i) = T * s_1_cos * exp(-1i*2*pi*f(i)*t).’;
47 end
48 plot(f,real(S_1_mod),’k --’,’LineWidth ’ ,2)
49 legend(’S_1(f)’,’S_1(f-f_0)’,’Modulazione in coseno ’)
50
51 %% Area del segnale
52
53 % s_1 = 3*sinc(t)
4.2. TRASFORMATADI FOURIER PER SEGNALI ATEMPOCONTINUO55
54
55 % calcolo approssimato dell ’area:
56 Area_approssimata = T*sum(s_1)
57
58 % Dalla teoria sappiamo che
59 % s(t) = 3sinc(t) --> S(f)=3 rect(f)
60
61 S_0 = 3
62
63 %% Convoluzione nel tempo
64
65 % segnale s_2
66 s_2 = zeros(length(t),1);
67 s_2(M/T+1:M/T+5/T)=1;
68 s_2(M/T+2/T:M/T+5/T)=0.5;
69 % segnale s_2
70 s_3 = zeros(length(t),1);
71 s_3(M/T-1/T:M/T+3/T)=0.75;
72
73 figure
74 plot(t,s_2 ,’b’,’LineWidth ’ ,2)
75 hold on
76 plot(t,s_3 ,’r’,’LineWidth ’ ,2)
77 grid on
78 legend(’s_2’,’s_3’)
79 % Trasformata di Fourier di conv(s_2 ,s_3)
80 s2_conv_s3 = T*conv(s_2 ,s_3);
81 s2_conv_s3_red = s2_conv_s3 (( length(s1_conv_s2 ) -1)/2 - M/T:...
82 (length(s1_conv_s2 ) -1)/2+M/T);
83 plot(t,s2_conv_s3_red ,’k -- ’,’LineWidth ’ ,2)
84 legend(’s_2’,’s_3’,’conv(s_2 ,s_3)’)
85
86 % Trasformata di Fourier di s_2
87 S_2 = zeros(1,length(f));
88 for i=1: length(f)
89 S_2(i) = T * exp(-1i*2*pi*f(i)*t) * s_2;
90 end
91 % Trasformata di Fourier di s_2
56 CAPITOLO 4. ANALISI DI FOURIER
92 S_3 = zeros(1,length(f));
93 for i=1: length(f)
94 S_3(i) = T * exp(-1i*2*pi*f(i)*t) * s_3;
95 end
96
97
98 % Trasformata di Fourier di conv(s_1 ,s_2)
99 S_conv = zeros(1,length(f));
100 for i=1: length(f)
101 S_conv(i) = T * exp(-1i*2*pi*f(i)*t) * s2_conv_s3_red ;
102 end
103
104 figure
105 plot(f,real(S_2.*S_3),’b --’,’LineWidth ’ ,2)
106 hold on
107 plot(f,real(S_conv),’r -.’,’LineWidth ’ ,2)
108 legend(’S_2(f)S_3(f)’,’TF(conv(s_2 ,s_3))’)
109 grid on
Esempio 20. Stampare la trasformata di Fourier del segnale
x(t) = sinc (2t) , t ∈ R. (4.12)
1 %%%%%%%%%%%%
2 % es20.m %
3 %%%%%%%%%%%%
4
5 close all
6
7 T = 0.05; % passo di campionamento di x
8 M = 100;
9 t = -M:T:M; % intervallo temporale [-M,M]
10 F = 0.05; % passo di campionamento di X
11 N = 5;
12 f = -N:F:N; % intervallo frequenziale [-N,N]
13
14 % segnale
4.3. TRASFORMATADI FOURIER PER SEGNALI ATEMPODISCRETO57
15 x = sinc (2*t);
16 % stampa segnale
17 figure , plot(t,x), title(’Segnale x(t)’)
18
19 %trasformata di Fourier
20 X=zeros(1,length(f));
21 for k=1: length(t)
22 X=X+T*x(k)*exp(-1i*2*pi*f*t(k));
23 end
24
25 %stampa trasformata
26 plot(f,real(X),’r’),title(’Trasformata X(f)’)
27 axis ([ -1.5 1.5 -0.1 0.6])
28 grid on
Esercizio 12. Ripetere l’Esempio 20 con F = 0.01 ed F = 0.1. Quale
fenomeno `e possibile osservare?
Esercizio 13. Stampare la trasformata di Fourier del segnale
x(t) = e
−2|t|
, t ∈ R. (4.13)
Esercizio 13 Bis. Stampare il modulo della trasformata di Fourier per
−10 ≤ 2πf ≤ 10 dei seguenti segnali
x
1
(t) = e
−0.5|t|
, t ∈ R (4.14)
x
2
(t) = cos(7t)e
−0.5|t|
, t ∈ R. (4.15)
Come si differenziano le due trasformate?
4.3 Trasformata di Fourier per segnali a tem-
po discreto
Consideriamo un segnale a tempo discreto
x(nT), n ∈ Z. (4.16)
58 CAPITOLO 4. ANALISI DI FOURIER
La corrispondente trasformata di Fourier `e
X(f) =

n=−∞
Tx(nT)e
−j2πfnT

M
T

n=−
M
T
Tx(nT)e
−j2πfnT
, f ∈ R (4.17)
dove M `e un numero sufficientemente grande. Anche in questo caso dobbiamo
campionare l’insieme delle frequenze
X(kF) =
M
T

n=−
M
T
Tx(nT)e
−j2πknFT
, k ∈ Z (4.18)
dove F `e scelto sufficientemente piccolo.
Esempio 21. Stampare la trasformata di Fourier del segnale a dominio
discreto con T = 1
x(n) =
_
1, |n| ≤ 10
0, |n| > 10
. (4.19)
1 %%%%%%%%%%%%
2 % es21.m %
3 %%%%%%%%%%%%
4
5 clc , close all
6
7 n= -10:10;
8 %segnale
9 x=ones(1,length(n));
10
11 %trasformata di Fourier
12 F=0.01; 6
13 f= -1.5:F:1.5;
14 X=zeros(1,length(f));
15 for k=1: length(n)
16 X=X+x(k)*exp(-1i*2*pi*f*n(k));
17 end
18 plot(f,real(X))%stampa trasformata
4.3. TRASFORMATADI FOURIER PER SEGNALI ATEMPODISCRETO59
Esercizio 14. Stampare la trasformata di Fourier del segnale a dominio
discreto con T = 1
x(n) = sinc (3n) , n ∈ Z. (4.20)
Esempio 22. Si consideri il segnale dell’Esempio 21 ed il segnale periodico
y(n) = rep
N
x(n), N = 40. (4.21)
Calcolare i coefficienti di Fourier a
k
di y(n) e stampare sul grafico dell’Esem-
pio 21 il segnale a tempo discreto
k
N
→Na
k
. (4.22)
Cosa si pu` o osservare dal grafico? Ricordare che l’espressione assunta dalla
trasformata di Fourier per segnali discreti periodici di periodo T
p
= NT `e
S(kF) =
N−1

n=0
Ts(nT)e
−j2πknFT
, (4.23)
con F =
1
Tp
. I coefficienti a
k
della serie di Fourier corrispondente si ottengono
dalla formula precedente come
a
k
= FS(kF) =
1
T
p
S(kF). (4.24)
1 %%%%%%%%%%%%
2 % es22.m %
3 %%%%%%%%%%%%
4
5 clc , close all
6 n= -10:10;
7 %segnale
8 x=ones(1,length(n));
9 %trasformata di Fourier
10 F=0.01;
11 f=-1:F:1;
12 X=zeros(1,length(f));
13 for k=1: length(n)
60 CAPITOLO 4. ANALISI DI FOURIER
14 X=X+x(k)*exp(-1i*2*pi*f*n(k));
15 end
16 figure ,plot(f,real(X))%stampa trasformata
17
18 % coefficienti di Fourier di y(n)
19 y=ones(1,length(n));
20 N=40;
21 k= -40:40;
22 a = zeros(1,length(k));
23 for l=1: length(k)
24 a(l)=1/N*exp(-1i*2*pi/N*k(l)*n)*y’;
25 end
26 hold on
27 stem(k/N,N*a,’r’)
28 legend(’Trasformata del segnale discreto non periodico ’ ,...
29 ’Trasformata del segnale discreto periodico ’)
Esercizio 15. Ripetere l’Esempio 22 ponendo T = 21. Cosa succede? Dare
una spiegazione teorica del risultato trovato.
4.4. CAMPIONAMENTO E ALIASING 61
4.4 Campionamento e aliasing
Ricordiamo brevemente l’enunciato del fondamentale
Teorema 4.1 (Nyquist-Shannon). Sia s(t), t ∈ R, un segnale limitato in
banda, ovvero la cui trasformata di Fourier soddisfa
S(f) = 0 per |f| > B.
Allora, s(t) pu`o essere ricostruito esattamente a partire dai suoi campioni
s(nT), n ∈ Z, presi con frequenza F
c
≥ 2B campioni al secondo. La formula
per la ricostruzione esatta del segnale `e:
s(t) =

n=−∞
s(nT)sinc [F
c
(t −nT)] .
Esempio 23. L’esempio seguente illustra il meccanismo di ricostruzione dei
segnali a banda limitata a partire da una loro versione campionata, eviden-
ziando come la scelta della frequenza di campionamento sia fondamentale
per evitare l’aliasing.
1 %Il seguente codice consente di visualizzare le operazioni
2 %di campionamento e interpolazione su diversi tipi di segnali.
3
4 %% Definizione del segnale e studio nel tempo
5 clear all;
6 close all;
7 clc
8
9 camp = 0.001;
10 t = -4:camp :4;
11 k = length(t);
12
13 f_x = 0.5;
14
15 % Scegliere il segnale:
16 %x = sin (2*pi*f_x*t); disp([’Banda = ’,num2str(f_x )])
17 %x = cos (2*pi*2* f_x*t); disp([’Banda = ’,num2str (2* f_x )])
18 x = 4*sinc(t*4); disp([’Banda = 2’])
19
62 CAPITOLO 4. ANALISI DI FOURIER
20 figure;
21 grid on;
22 hold on;
23 plot(t,x);
24 title(’Segnale originale ’);
25 fs = input(’Frequenze di campionamento. Valore di fs?\n’);
26 T = 1/fs;
27 nT = -4:T:4;
28
29 % Selezionare il segnale campionato:
30 %xn = sin (2*pi*f_x*nT);
31 %xn = cos (2*pi*2* f_x*nT);
32 xn = 4*sinc(nT*4);
33
34 stem(nT ,xn ,’r’);
35
36 %filtro interpolatore
37 q = fs*sinc(t*fs);
38 segnale_interpolato = zeros(1,length(t));
39
40 figure;
41 hold on;
42 grid on;
43 stem(nT ,xn ,’r’);
44 for i = 1: length(nT)
45 temp = xn(i).* sinc((t - ((i-1 -(4/T))*T))*fs);
46 plot(t,temp);
47 segnale_interpolato = segnale_interpolato + temp;
48 end
49 title(’Interpolazione dei campioni ’);
50
51 figure;
52 plot(t,x,’--’,’LineWidth ’ ,2);
53 title(’Segnale originale ’);
54 hold on
55 plot(t,segnale_interpolato ,’r -.’,’LineWidth ’ ,2);
56 grid on;
57 title(’Segnale ricostruito ’);
4.4. CAMPIONAMENTO E ALIASING 63
58
59 %% Studio in frequenza
60 clc
61 disp(’Studio in frequenza ’);
62 close all;
63
64 F=0.005; %passo di campionamento di x
65 f=-10:F:10;
66 %trasformata di Fourier
67 X=zeros(1,length(f));
68 for k=1: length(t)
69 X=X+camp*x(k)*exp(-1i*2*pi*f*t(k));
70 end
71 %stampa trasformata segnale originale
72 figure;
73 plot(f,real(X))
74 grid on;
75 title(’Trasformata di Fourier del segnale originale ’ ,...
76 ’LineWidth ’ ,2);
77
78 pause
79
80 Xn=zeros(1,length(f));
81 for k=1: length(nT)
82 Xn=Xn+ T*xn(k)*exp(-1i*2*pi*f*nT(k));
83 end
84 %stampa trasformata segnale campionato
85 figure;
86 hold on;
87 plot(f,real(Xn));
88 title(’Trasformata di Fourier del segnale campionato ’ ,...
89 ’LineWidth ’ ,2);
90 grid on
91 pause
92
93 Qn=zeros(1,length(f));
94 for k=1: length(t)
95 Qn=Qn + camp*q(k)*exp(-1i*2*pi*f*t(k));
64 CAPITOLO 4. ANALISI DI FOURIER
96 end
97 %stampa trasformata del filtro interpolatore
98 hold on
99 plot(f,real(Qn),’r -’,’LineWidth ’ ,2);
100 grid on;
101
102 %% trasformata del segnale ricostruito in frequenze Xn(f)*Q(f)
103 segnale_filtrato = real(Xn).* real(Qn);
104
105 figure;
106 plot(f,real(X))
107 hold on
108 plot(f,segnale_filtrato ,’r -.’,’LineWidth ’ ,2);
109 grid on;
110 legend(’Trasformata del segnale originale ’ ,...
111 ’Trasformata del segnale ricostruito ’)
112 title(’Trasformata di Fourier del segnale filtrato ’);
Esercizio 16. Consideriamo il segnale a banda infinita dell’Esercizio 13.
Ripetere l’esercizio con T = 0.1, T = 0.5 e T = 1. Motivare, conoscendo la
banda del segnale, i risultati trovati.
Capitolo 5
Sistemi LTI discreti
5.1 Introduzione ai sistemi LTI discreti
In questa sezione parliamo dei sistemi lineari discreti di tipo causale attra-
verso esempi che descrivono la dinamica di una certa popolazione. Prelimi-
narmente, richiamiamo alcuni risultati sulla stabilit` a BIBO per questa classe
di modelli.
Definizione 5.1 (Stabilit` a BIBO per sistemi discreti). Un sistema LTI
causale discreto del tipo
y(n) = h ∗ u(n)
si dice BIBO stabile (dove BIBO sta per Bounded Input Bounded Output) se
e solo se per ogni ingresso limitato u(n) esiste B > 0 tale che |y(n)| ≤ B per
ogni n ≥ 0.
Vale il seguente
Teorema 5.1 (Condizioni necessarie e sufficienti per la BIBO stabilit`a).
Dato il sistema LTI discreto causale
y(n) = h ∗ u(n)
le seguenti condizioni sono equivalenti:
1. Il sistema `e BIBO stabile
65
66 CAPITOLO 5. SISTEMI LTI DISCRETI
2. La risposta impulsiva `e tale che
+∞

k=0
|h(k)| < ∞.
Supponiamo ora che il modello ingresso-uscita corrisponda ad una funzio-
ne di trasferimento H(z) razionale e che questa sia in forma minima, ovvero
priva di cancellazioni. Allora, esprimendo il sistema nella forma in spazio di
stato
_
x(n + 1) = Ax(n) + Bu(n)
y(n) = Cx(n) + Du(n)
, (5.1)
in cui H(z) = C(zI−A)
−1
B+D, possiamo introdurre un’ulteriore condizione
necessaria e sufficiente per la stabilit`a BIBO:
Teorema 5.2. Il sistema in forma minima (5.1) `e BIBO stabile se e solo se
gli autovalori di A hanno tutti modulo minore di uno.
Sia x(n) il numero di individui che costituiscono la popolazione all’istante
n. In caso di risorse nulle la specie tende ad estinguersi con un tasso di
mortalit` a pari ad m secondo la seguente equazione alle differenze
x(n + 1) = mx(n). (5.2)
Esempio 24. Si consideri una popolazione con m = 0.8 e sia x(n) il numero
di individui costituenti la popolazione all’istante n. Supponendo che attual-
mente il numero di individui sia pari a 50 (x(0) = 50), calcolare la dinamica
della popolazione dall’istante 0 a 20.
1 %%%%%%%%%%%%
2 % es24.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 m=0.8;
9 x(1)=50; % condizione iniziale
10 for n=2:21
11 x(n)=m*x(n-1);
5.1. INTRODUZIONE AI SISTEMI LTI DISCRETI 67
12 end
13 stem (0:20 ,x) %stampa grafico
14 xlabel(’n’)
15 ylabel(’x(n)’)
Ora supponiamo che ci siano delle risorse disponibili costanti che possono
sostenere una popolazione di numerosit` a R. In questa situazione c’`e un
tasso di natalit` a dipendente dalla differenza fra la popolazione sostenibile
dall’ambiente R e quella presente
x(n + 1) = mx(n) + (R −x(n)). (5.3)
Esempio 25. Si consideri una popolazione con m = 0.8, R = 20 e sia x(n)
il numero di individui costituenti la popolazione all’istante n. Supponendo
che attualmente il numero di individui sia pari a 50, calcolare la dinamica
della popolazione dall’istante 0 a 20. Interpretare il risultato in termini di
evoluzione libera e risposta forzata.
Svolgimento.
Possiamo riscrivere il sistema nella forma (5.1):
_
x(n + 1) = (m−1)x(n) + R
y(n) = x(n)
,
dove
A = a := m−1, B = 1, C = 1, D = 0, u(t) = R, ∀(t ≥ 0).
Ricordiamo l’espressione per l’uscita di un sistema in funzione delle matrici
che lo descrivono, cio`e
x(n) = A
n
x(0) +
n−1

i=0
A
i
Bu(n −1 −i)
y(n) = CA
n
x(0) +
n−1

i=0
CA
i
Bu(n −1 −i) + Du(n)
Il primo addendo nell’espressione di y(n) descrive l’evoluzione libera del si-
stema, cio`e l’effetto delle condizioni iniziali, mentre il secondo `e chiamato
termine di evoluzione forzata. Ricaviamo per il nostro esempio l’equazione
x(n) = a
n
x(0) +
n−1

i=0
a
i
R.
68 CAPITOLO 5. SISTEMI LTI DISCRETI
Poich´e |a| = 0.2 < 1, per n →+∞, avremo
x

= lim
n→+∞
x(n) =
1
1 −a
R =
50
3
.
Simuliamo il sistema per verificare i risultati ottenuti. L’andamento demo-
grafico della popolazione `e riportato in Fig. 25.
1 %%%%%%%%%%%%
2 % es25.m %
3 %%%%%%%%%%%%
4
5 close all
6 clc
7 m = 0.8;
8 R = 20;
9 T = 20;
10 x = zeros(1,T);
11 x(1)= 50; %condizione iniziale
12 t = 0:T;
13
14 for n=2:T+1
15 x(n)=m*x(n -1)+(R-x(n -1));
16 end
17 stem (0:T,x) %stampa grafico
18 xlabel(’n’)
19 ylabel(’x(n)’)
20
21 a = m-1;
22 disp([’Valore di a = ’,num2str(a)])
23 disp([’Limite di x(n) per n tendente all’’infinito = ’...
24 ,num2str (1/(1 -a)*R)])
25 grid
26
27 % Evoluzione libera
28 x_l = zeros(size(x));
29 x_l (1)=x(1);
30 for n=2:T+1
31 x_l(n)=a*x_l(n-1);
5.1. INTRODUZIONE AI SISTEMI LTI DISCRETI 69
32 end
33
34 % Evoluzione forzata
35 x_f = zeros(size(x));
36 for n=2:T+1
37 x_f(n) = (1-a^(n-1))/(1 -a)*R;
38 end
39
40 figure
41 subplot (311) , stem(t,x_l ,’r’),grid ,legend(’Ev. libera ’)
42 subplot (312) , stem(t,x_f ,’b’),grid ,legend(’Ev. forzata ’)
43 subplot (313) , stem(t,x,’k --’,’LineWidth ’ ,2),...
44 grid ,hold on ,stem(t,x_f+x_l ,’g’),
45 legend(’x(n)’,’x_l + x_f’)
0 2 4 6 8 10 12 14 16 18 20
0
5
10
15
20
25
30
35
40
45
50
n
x
(
n
)
.
Figura 5.1: Andamento demografico della popolazione, Esercizio 25
Esercizio 17. Ora supponiamo che il numero di individui nati all’istante
n dipenda dalla differenza fra la popolazione sostenibile dall’ambiente R e
quella presente all’istante n − 2 per un tasso di fertilit` a t. Il nuovo sistema
diventa:
x(n) = mx(n −1) + (R −tx(n −2)). (5.4)
Calcolare la dinamica della popolazione dall’istante 0 a 20 per i seguenti casi
x(−1) = 10, x(0) = 20, m = 0.8, t = 0.4, R = 20
x(−1) = 10, x(0) = 20, m = 0.8, t = 1, R = 20. (5.5)
70 CAPITOLO 5. SISTEMI LTI DISCRETI
Sulla base dei grafici, a quale classe di esseri viventi pu`o essere associata
la dinamica del primo e del secondo caso rispettivamente? Riflettere sulla
dinamica dei due sistemi.
5.2 Risposta impulsiva
Consideriamo il modello (5.4) della dinamica di una popolazione. Tale mo-
dello pu` o essere visto come un sistema LTI discreto con ingresso costante
u(n) = R:
x(n) = mx(n −1) −tx(n −2) + u(n). (5.6)
Perci` o, la risposta impulsiva h(n) di tale modello si pu` o ottenere imponendo
u(n) = δ(n) con x(−2) = 0 e x(−1) = 0.
Esempio 26. Stampare la risposta impulsiva del modello (5.6) con
1. m = 0.8 e t = 0.4
2. m = 0.8 e t = 1.
Guardando i grafici prodotti, dire se i corrispondenti sistemi sono stabili o
meno e verificare che le conclusioni trovate siano conformi ai risultati trovati
nell’Esercizio 17.
1 %%%%%%%%%%%%
2 % es26.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 m=0.8;
9 T = 10000;
10 u=[0 0 1 zeros(1,T)]; %ingresso delta(n)
11 %% Primo caso (t = 0.4)
12 t=0.4;
13 h = zeros(T+3 ,1); % condizione iniziali nulle
14 for n=3:T+3
15 h(n)=m*h(n -1)+(u(n)-t*h(n -2));
16 end
5.2. RISPOSTA IMPULSIVA 71
17 figure
18 stem (0:T,h(3:T+3)) %stampa grafico
19 axis([-1 20, -0.3 1.3])
20 xlabel(’n’)
21 ylabel(’x(n)’)
22 title(’Caso t = 0.4’)
23
24 % Approssimiamo la serie dei moduli di h(k):
25 disp([’Serie dei moduli approssimata (T=’ ,...
26 num2str(T),’) vale ’])
27 sum(abs(h))
28
29 %% Secondo caso (t = 1)
30 t=1;
31 h = zeros(T+3 ,1); % condizione iniziali nulle
32 for n=3:T+3
33 h(n)=m*h(n -1)+(u(n)-t*h(n -2));
34 end
35 figure
36 stem (0:T,h(3:T+3),’r’) %stampa grafico
37 axis([-1 100, -1.5 1.5])
38 xlabel(’n’)
39 ylabel(’x(n)’)
40 title(’Caso t = 1’)
41
42 % Approssimiamo la serie dei moduli di h(k):
43 disp([’Serie dei moduli approssimata (T=’ ,...
44 num2str(T),’) vale ’])
45 sum(abs(h))
Esercizio 18. Consideriamo un modello a tempo discreto con ingresso x e
uscita y che esegue la media mobile su tre punti:
y(n) =
1
3
(x(n) + x(n −1) + x(n −2)). (5.7)
Calcolare la risposta impulsiva.
Ora supponiamo di voler calcolare la risposta x di un sistema lineare
(causale) ad un ingresso generico u partendo da condizioni iniziali nulle.
72 CAPITOLO 5. SISTEMI LTI DISCRETI
In questa situazione potremo applicare l’approccio iterativo dell’Esempio 25
oppure, avendo a disposizione la risposta impulsiva h, calcolare x tramite la
convoluzione tra u e h.
Esempio 27. Consideriamo il modello (5.6), supponendo che le risorse di-
sponibili varino secondo un bioritmo (ad esempio le stagioni):
u(n) = R
sin(
n
N
0
)
2
+ S
0
. (5.8)
Calcolare la dinamica della popolazione dall’istante 0 a 60 partendo da
condizioni iniziali nulle con m = 0.6, t = 0.2, R = 5, N
0
= 2 e S
0
= 10.
1 %%%%%%%%%%%%
2 % es27.m %
3 %%%%%%%%%%%%
4
5 clear all
6 close all
7 clc
8 m=0.6;
9 t=0.2;
10 R=5;
11 N0=2;
12 S0=10;
13 % calcolo della risposta impulsiva
14 u=[0 0 1 zeros (1 ,60)]; %ingresso delta(n)
15 h(1)=0; % condizione iniziali
16 h(2)=0;
17 for n=3:63
18 h(n)=m*h(n-1)-t*h(n-2)+u(n);
19 end
20 h=h(3: end); % risposta impulsiva dall ’istante zero
21 %calcolo della risposta del sistema
22 n=0:60;
23 u=R*sin(n/N0)/2+S0;
24 x=conv(h,u);
25 x=x(1:61); % riaggiustamento del vettore
26 stem (0:60 ,x) %stampa grafico
27 xlabel(’n’)
5.3. RISPOSTA IN FREQUENZA 73
28 ylabel(’x(n)’)
Esercizio 19. Consideriamo una popolazione di pesci da allevamento la cui
dinamica `e descritta dal modello (5.6) con m = 0.6, t = 0.2, x(−2) = 0 e
x(−1) = 0. Inizialmente, dal’istante 0 a 39, i proprietari dell’allevamento
decidono di non intervenire per modificare le risorse naturali che offre il
laghetto che ospita questi pesci
u(n) = 5
sin(
n
2
)
2
+ 10, 0 ≤ n < 40. (5.9)
Tuttavia, gli allevatori non sono soddisfatti del numero di pesci che produ-
cono e dall’istante n = 40 immettono nel lago una risorsa (che si aggiunge a
quella naturale) che decresce di una unit`a all’aumentare di n
u(n) = 5
sin(
n
N
0
)
2
+ 10 + 80 −n, 40 ≤ n < 80. (5.10)
Dopo questa decisione gli allevatori sono contenti, ma vorrebbero che la po-
polazione di questi pesci fosse costante nel tempo. Decidono perci` o di co-
struire un impianto sofisticato che fornisce risorse costanti nel tempo alla
popolazione di pesci
u(n) = 30, n ≥ 80. (5.11)
Stampare u e la corrispondente dinamica della popolazione.
5.3 Risposta in frequenza
In questa sezione ci occupiamo del calcolo della risposta in frequenza di un
sistema LTI causale discreto.
Esempio 28. Consideriamo il sistema LTI dell’Esempio 26. Vogliamo cal-
colare la risposta in frequenza per i due casi considerati. Stampare modulo
e fase delle risposte in frequenza.
1 %%%%%%%%%%%%
2 % es28.m %
3 %%%%%%%%%%%%
4
5 clear all
74 CAPITOLO 5. SISTEMI LTI DISCRETI
6 close all
7 clc
8 m=0.8;
9
10 % Primo valore di t
11 t=0.4;
12
13 % Secondo valore di t
14 % t=1;
15
16 % calcolo della risposta impulsiva
17 u=[0 0 1 zeros (1 ,60)]; %ingresso delta(n)
18 h(1)=0; % condizioni iniziali
19 h(2)=0;
20 for k=3:63
21 h(k)=m*h(k-1)-t*h(k-2)+u(k);
22 end
23 h=h(3: end); %risposta impulsiva dall ’istante 0
24 % risposta in frequenza
25 n=0:60;
26 Theta =0.01; %trasformata di Fourier
27 theta=-pi:Theta:pi;
28 H=zeros(1,length(theta ));
29 for k=1: length(n)
30 H=H+h(k)*exp(-1i*theta*n(k));
31 end
32 %stampa modulo risposta in frequenza
33 figure
34 plot(theta ,abs(H))
35 xlabel(’theta ’)
36 ylabel(’|H|’)
37 grid
38 %stampa fase risposta in frequenza
39 figure
40 plot(theta ,phase(H))
41 grid
42 xlabel(’theta ’)
43 ylabel(’fase di H’)
5.4. AUTOFUNZIONI DEI FILTRI 75
Esercizio 20. Si consideri il sistema dell’Esercizio 18. Stampare modulo e
fase della risposta in frequenza H(e

).
5.4 Autofunzioni dei filtri
Consideriamo un sistema LTI causale BIBO-stabile con risposta impulsiva
h(n):
x(n) = h ∗ u(n). (5.12)
Se u(n) = sin(θ
0
n) e h(n) `e a valori reali, allora, dopo un transitorio iniziale,
x(n) = |H(e

0
)| sin(θ
0
n + arg[H(e

0
)]). (5.13)
Osservazione 5.1. Dal punto di vista applicativo, questa propriet`a permet-
te di ricostruire empiricamente la risposta in frequenza di un sistema LTI
stabile, mediante l’uso di segnali di ingresso sinusoidali con frequenze diverse.
Esempio 29. Consideriamo il sistema (5.6) con m = 0.6 e t = 0.2. Alimen-
tiamo il sistema con la sinusoide di ampiezza unitaria e θ
0
= 1
u(n) = sin(θ
0
n), n ≥ 0. (5.14)
Stampare i tre seguenti grafici:
1. u(n) e x(n) (scegliamo 0 ≤ n ≤ 600)
2. |U(e

)| e |X(e

)|
3. |H(e

)|
Verificare dai grafici che
|H(e

0
)|
|X(e

0
)|
|U(e

0
)|
. (5.15)
1 %%%%%%%%%%%%
2 % es29.m %
3 %%%%%%%%%%%%
4
5 clear all
76 CAPITOLO 5. SISTEMI LTI DISCRETI
6 close all
7 clc
8 m=0.6;
9 t=0.2;
10 n=0:600;
11 % segnale di ingresso u
12 theta0 =1;
13 u=sin(theta0*n);
14 Theta =0.01; %trasformata di Fourier
15 theta=-pi:Theta:pi;
16 U=zeros(1,length(theta ));
17 for k=1: length(n)
18 U=U+u(k)*exp(-1i*theta*n(k));
19 end
20
21 %risposta impulsiva
22 d=[0 0 1 zeros (1 ,600)]; %ingresso delta(n)
23 h(1)=0; % condizioni iniziali
24 h(2)=0;
25 for k=3:n(end )+3
26 h(k)=m*h(k-1)-t*h(k-2)+d(k);
27 end
28 h=h(3: end); % risposta impulsiva dall ’istante 0
29 %calcolo della risposta alla sinusoide u
30 x=conv(u,h);
31 Theta =0.01; %trasformata di Fourier
32 theta=-pi:Theta:pi;
33 X=zeros(1,length(theta ));
34 for k=1: length(n)
35 X=X+x(k)*exp(-1i*theta*n(k));
36 end
37
38 % risposta in frequenza
39 Theta =0.01; %trasformata di Fourier
40 theta=-pi:Theta:pi;
41 H=zeros(1,length(theta ));
42 for k=1: length(n)
43 H=H+h(k)*exp(-1i*theta*n(k));
5.4. AUTOFUNZIONI DEI FILTRI 77
44 end
45
46 % grafici di x e u
47 figure
48 stem(n,x(1: length(n)),’r’)
49 hold on
50 stem(n,u,’b’)
51 xlabel(’n’)
52 legend(’x’,’u’)
53
54 % grafici |X| e |U|
55 figure
56 plot(theta ,abs(X),’r’)
57 hold on
58 plot(theta ,abs(U),’b’)
59 xlabel(’theta ’)
60 legend(’|X|’,’|U|’)
61
62 % grafico |X| vs |H||U|
63 figure
64 plot(theta ,abs(H).* abs(U),’r --’,’LineWidth ’ ,2)
65 hold on
66 plot(theta ,abs(X),’b’)
67 xlabel(’theta ’)
68 legend(’|X|’, ’|H||U|’)
Esercizio 21. Consideriamo l’Esempio 29. Stampare la fase di H(e

) e cal-
colare arg[H(e

0
)]. Verificare poi che nel primo grafico x e u sono sfasate
tra loro di tale quantit` a.
Suggerimento: stampare sul primo grafico il segnale continuo u(t) = sin(θ
0
t), t ≥
0....
78 CAPITOLO 5. SISTEMI LTI DISCRETI
Capitolo 6
Sistemi LTI continui
In questa sezione studieremo dei sistemi meccanici attraverso modelli LTI
continui e causali. Preliminarmente richiamiamo alcuni risultati sulla stabi-
lit` a BIBO per questa classe di modelli.
Definizione 6.1 (Stabilit` a BIBO per sistemi discreti). Un sistema LTI
causale continuo del tipo
y(t) = h ∗ u(t)
si dice BIBO stabile (dove BIBO sta per Bounded Input Bounded Output) se
e solo se per ogni ingresso limitato u(t) esiste B > 0 tale che |y(t)| ≤ B per
ogni t ≥ 0.
Dalla teoria sappiamo che
Teorema 6.1 (Condizioni necessarie e sufficienti per la BIBO stabilit`a).
Dato il sistema LTI continuo e causale
y(t) = h ∗ u(t)
le seguenti condizioni sono equivalenti:
1. Il sistema `e BIBO stabile
2. La risposta impulsiva `e tale che
_
+∞
0
|h(t)| dt < ∞.
79
80 CAPITOLO 6. SISTEMI LTI CONTINUI
Infine, la funzione di trasferimento H(s) sia razionale ed in forma minima,
priva cio`e di poli e zeri coincidenti. Allora, esprimendo il sistema nella forma
in spazio di stato
_
d
dt
x(t) = Ax(t) + Bu(t)
y(t) = Cx(t) + Du(t)
, (6.1)
in cui H(s) = C(sI −A)
−1
B+D, possiamo introdurre un’ulteriore condizione
necessaria e sufficiente per la stabilit`a BIBO.
Teorema 6.2. Il sistema in forma minima (6.1) `e BIBO stabile se e solo se
gli autovalori di A sono tutti a parte reale negativa.
6.1 Equazioni differenziali in Matlab
Consideriamo l’equazione differenziale del secondo ordine a parametri costan-
ti
a
d
2
dt
2
y(t) + b
1
d
dt
y(t) + b
0
y(t) = u(t) (6.2)
dove a = 0 e u(t) noto. Poniamo
v
1
(t) = y(t), v
2
(t) =
d
dt
y(t) (6.3)
quindi (6.2) diventa
_
d
dt
v
1
(t) = v
2
(t)
d
dt
v
2
(t) = −
b
1
a
v
2
(t) −
b
0
a
v
1
(t) +
1
a
u(t)
. (6.4)
Esprimendo (6.4) in forma vettoriale
_
d
dt
v
1
(t)
d
dt
v
2
(t)
_
=
_
0 1

b
0
a

b
1
a
__
v
1
(t)
v
2
(t)
_
+
_
0
1
a
_
u(t). (6.5)
Infine, definendo
v(t) =
_
v
1
(t)
v
2
(t)
_
(6.6)
e
A =
_
0 1

b
0
a

b
1
a
_
, B =
_
0
1
a
_
, C =
_
1 0
_
, D = 0 (6.7)
6.2. STUDIODI SISTEMI MECCANICI TRAMITE MODELLI LTI CONTINUI81
otteniamo il sistema
_
d
dt
v(t) = Av(t) + Bu(t)
y(t) = Cv(t) + Du(t)
.
Osserviamo che la (6.8) `e una forma equivalente di (6.2). Perci` o, le matrici
A, B, C, D descrivono in maniera univoca l’equazione differenziale (6.2).
Osservazione 6.1. Per l’equazione differenziale del primo ordine
a
d
dt
y(t) + b
0
y(t) = u(t), a = 0 (6.8)
abbiamo v(t) = y(t), A = −
b
0
a
, B =
1
a
, C = 1, D = 0.
Esercizio 22. Si consideri l’equazione differenziale di ordine n descritta da
a
d
n
dt
n
y(t) +
n−1

k=0
b
k
d
k
dt
k
y(t) = cu(t), a = 0. (6.9)
Verificare che le corrispondenti matrici sono
A =
_
_
_
_
_
0 1 0 . . .
.
.
.
.
.
.
0 1

b
0
a
. . . . . . −
b
n−1
a
_
_
_
_
_
, B =
_
_
_
_
_
0
.
.
.
.
.
.
1
a
_
_
_
_
_
, C =
_
0 . . . 0 1
_
, D = 0.
(6.10)
In Matlab, per calcolare la soluzione ai valori iniziali y(t) utilizziamo la
funzione lsim. I parametri di ingresso sono: A,B,C,D, il vettore dei tempi t,
l’ingresso u e il vettore delle condizioni iniziali
_
y(0)
d
dt
y(0)
_
T
. Nel seguito
vedremo in dettaglio l’utilizzo di tale funzione con degli esempi.
6.2 Studio di sistemi meccanici tramite mo-
delli LTI continui
In questa sezione prendiamo in esame l’equazione differenziale che descrive
la dinamica di un oscillatore armonico costituito da una molla di costante
elastica k collegata ad una massa m, Figura 6.1. Sia y(t) la posizione di
82 CAPITOLO 6. SISTEMI LTI CONTINUI
k
y(t)
u(t)
M
Figura 6.1: Modello molla-massa.
un prefissato punto dell’oscillatore all’istante t. Il secondo principio della
dinamica ci dice che, per un corpo a massa m costante,
F = ma
in cui F indica la risultante delle forze agenti sul punto materiale ed a :=
d
2
dt
y(t) `e l’accelerazione risultante. Quindi, se ad esso non `e applicata alcuna
forza esterna, il moto dell’oscillatore `e descritto dalla seguente equazione
differenziale
m
d
2
dt
2
y(t) = −ky(t). (6.11)
Esempio 30. Si consideri un oscillatore armonico con m = 0.1Kg e k =
1.6
N
m
. Supponendo che il punto prefissato dell’oscillatore sia a 10m dalla
posizione di riposo (y(0) = 10,
d
dt
y(0) = 0), calcolare la dinamica di tale
punto dall’istante 0 a 10.
In questo caso
A =
_
0 1

k
m
0
_
, B =
_
0
1
m
_
, C =
_
1 0
_
, D = 0 (6.12)
e u(t) = 0 in quanto l’oscillatore non `e soggetto a nessuna forza.
1 %% Oscillatore armonico
2
3 close all
4 clear all
5 clc
6
6.2. STUDIODI SISTEMI MECCANICI TRAMITE MODELLI LTI CONTINUI83
7 m=0.1;
8 k=1.6;
9 T=0.01;
10 t=0:T:10; % vettore dei tempi
11
12 % definizione matrici
13 A = [0 1; -k/m 0];
14 B = [0;1/m];
15 C = [1 0];
16 D = 0;
17 % ingresso nullo
18 u=zeros(1,length(t));
19 % condizioni iniziali
20 v0 =[10; 0];
21
22 % calcolo dell ’uscita
23 y = lsim(A,B,C,D,u,t,v0);
24 figure
25 plot(t,y)
26 xlabel(’Tempo ’)
27 ylabel(’y(t)’)
28 title(’Oscillatore armonico ’)
Esercizio 23. Ripetere l’Esempio 30 supponendo che la posizione iniziale del
punto prefissato sia 20m. Che cosa si pu` o concludere da questi due esempi?
Ora supponiamo che sia presente l’attrito viscoso λ. L’equazione dell’o-
scillatore armonico smorzato `e
m
d
2
dt
2
y(t) = −λ
d
dt
y(t) −ky(t). (6.13)
Esempio 31. Si consideri un oscillatore armonico smorzato. Supponendo
che il punto prefissato dell’oscillatore sia a 10m dalla posizione di riposo
(y(0) = 10,
d
dt
y(0) = 0), calcolare la dinamica di tale punto dall’istante 0 a
10 per i due seguenti casi:
• m = 0.1Kg, λ = 0.1
Kg
s
, k = 1.6
N
m
.
• m = 0.1Kg, λ = 0.9
Kg
s
, k = 1.6
N
m
.
84 CAPITOLO 6. SISTEMI LTI CONTINUI
Cosa differenzia i due casi precedenti?
In questo caso
A =
_
0 1

k
m

λ
m
_
, B =
_
0
1
m
_
, C =
_
1 0
_
, D = 0 (6.14)
e u(t) = 0 in quanto l’oscillatore non `e soggetto a nessuna forza.
1 %% Oscillatore smorzato
2
3 close all
4 clear all
5 clc
6 m=0.1;
7 k=1.6;
8 lambda =0.1;
9 %lambda =0.9;
10 v0 =[10; 0]; % condizioni iniziali
11 T=0.01; % vettore dei tempi
12 t=0:T:10;
13 u=zeros(1,length(t)); % ingresso nullo
14 A=[0 1; -k/m -lambda/m];% definizione matrici
15 B=[0; 1/m];
16 C=[1 0];
17 D=0;
18 disp(’Autovalori:’)
19 eig(A)
20 y=lsim(A,B,C,D,u,t,v0); % dinamica modello
21 figure
22 plot(t,y)
23 grid
24 xlabel(’Tempo ’)
25 ylabel(’y(t)’)
26 title ([’Oscillatore armonico smorzato con \lambda = ’ ,...
27 num2str(lambda )])
Esercizio 24. Ripetere l’Esempio 31 supponendo che la posizione iniziale del
punto prefissato sia 20m. Che cosa si pu` o concludere da questi due esempi?
6.2. STUDIODI SISTEMI MECCANICI TRAMITE MODELLI LTI CONTINUI85
Ora supponiamo che sull’oscillatore agisca una forza costante dovuta alla
presenza della gravit` a. In questo caso l’equazione dell’oscillatore armonico
diventa
m
d
2
dt
2
y(t) = −λ
d
dt
y(t) −ky(t) + mg. (6.15)
Esempio 32. Si consideri un modello molla-massa verticale in cui c’e la
presenza della forza di gravit` a. Sia m = 0.1Kg, λ = 0.1
Kg
s
, k = 1.6
N
m
.
Supponendo che il punto prefissato dell’oscillatore sia a 10m dalla posizione di
riposo (y(0) = 10,
d
dt
y(0) = 0), calcolare la dinamica di tale punto dall’istante
0 a 20.
In questo caso
A =
_
0 1

k
m

λ
m
_
, B =
_
0
1
m
_
, C =
_
1 0
_
, D = 0. (6.16)
1 %% Oscillatore smorzato sottoposto alla forza di gravit`a
2
3 close all
4 clear all
5 clc
6
7 m=0.1;
8 k=1.6;
9 lambda =0.1;
10 g=9.8;
11 v0 =[10; 0]; % condizioni iniziali
12 T=0.01; % vettori dei tempi
13 t=0:T:20;
14 u=m*g*ones(1,length(t)); % ingresso
15 A=[0 1; -k/m -lambda/m];% definizione matrici
16 B=[0;1/m];
17 C=[1 0];
18 D=0;
19 y=lsim(A,B,C,D,u,t,v0); % dinamica modello
20 figure
21 plot(t,y)
22 grid
23 xlabel(’Tempo ’)
86 CAPITOLO 6. SISTEMI LTI CONTINUI
24 ylabel(’y(t)’)
25 title ([’Oscillatore armonico smorzato con \lambda = ’ ,...
26 num2str(lambda )])
Esercizio 25. Ripetere l’Esempio 32 con λ = 0.9
Kg
s
. Perch`e la dinamica
cambia in maniera rilevante?
Esempio 33. Consideriamo il modello
m
d
2
dt
2
y(t) = −λ
d
dt
y(t) −ky(t) + x(t). (6.17)
con m = 0.1Kg, λ = 0.1
Kg
s
, k = 1.6
N
m
. Supponiamo che all’oscillatore sia
applicata una forza sinusoidale:
x(t) = F
0
sin(¯ ωt), F
0
= 5N. (6.18)
Stampare x(t) e la dinamica dell’oscillatore dall’istante 0 a 20 partendo da
condizioni iniziali nulle per ¯ ω = 2, ¯ ω = 4 e ¯ ω = 7.
1 %% Oscillatore smorzato con ingresso sinusoidale
2
3 close all
4 clear all
5 clc
6
7 m=0.1;
8 k=1.6;
9 lambda =0.1;
10 v0=[0; 0];
11 T=0.01; % vettore dei tempi
12 t=0:T:20;
13 A=[0 1; -k/m -lambda/m];% definizione matrici
14 B=[0;1/m];
15 C=[1 0];
16 D=0;
17 F0=5; % segnale di ingresso x
18 omg =2;
19 % omg =4;
20 % omg =7;
6.3. ACCENNI ALL’USO DI SIMULINK 87
21 u=F0*sin(omg*t);
22 y=lsim(A,B,C,D,u,t,v0); % dinamica modello
23 figure
24 plot(t,u)
25 hold on
26 plot(t,y,’r’)
27 legend(’x’,’y’)
28 grid on
29 xlabel(’Tempo ’)
30 title ([’Oscillatore armonico smorzato con \lambda = ’ ,...
31 num2str(lambda),’ ed ingresso sinusoidale ’])
Esercizio 26. Ripetere l’Esempio 33 supponendo che l’oscillatore smorzato
all’istante t = 0 sia a 10m dalla posizione di riposo.
6.3 Accenni all’uso di Simulink
Simulink `e uno strumento offerto da Matlab per modellare e simulare sistemi.
Questo pacchetto software si compone di una serie di librerie che forniscono i
blocchi elementari che, opportunamente interconnessi, andranno a realizzare
lo schema a blocchi del sistema di interesse.
Per avviare Simulink dobbiamo agire sul quartultimo tasto della barra
dei comandi di Figura 2.2. Alternativamente, `e sufficiente digitare simulink
nella Command Window. Apparir` a la finestra di Figura 6.2. Nella parte
sinistra vediamo la lista delle librerie (ognuna delle quali contiene una certa
tipologia di componenti base), a destra invece ci sono i diversi componenti che
costituiscono la libreria selezionata. Per aprire un nuovo foglio di lavoro dove
creare il proprio schema `e sufficiente premere il primo pulsante sulla barra
dei tasti di Figura 6.2 e apparir` a la finestra di Figura 6.3 dove possiamo tra-
scinare dalla libreria i componenti che ci servono. I collegamenti tra i diversi
blocchi vengono effettuati cliccando sul blocco di partenza e poi cliccando
sul blocco di arrivo del collegamento premuto il tasto Ctrl. Facendo doppio
click sui blocchi possiamo impostarne i parametri. Il passo successivo `e quel-
lo di impostare i parametri della simulazione. Tali parametri si impostano
selezionando la voce configuration parameter dal men` u simulation. Apparir` a
la finestra di Figura 6.4 dove si deve impostare l’istante iniziale (star time)
88 CAPITOLO 6. SISTEMI LTI CONTINUI
Figura 6.2: Libreria di Simulink
Figura 6.3: Foglio di lavoro di Simulink
6.3. ACCENNI ALL’USO DI SIMULINK 89
Figura 6.4: Finestra per impostare i parametri della simulazione
e finale (stop time). Nel Solver options-Type scegliere Fixed-step. Ora basta
far partire la simulazione agendo sul pulsante Start simulation (Figura 6.3).
Riportiamo a titolo d’esempio un modello che permette di simulare gli
oscillatori analizzati nella precedente sezione. Per definire i parametri utiliz-
ziamo lo script oscillatori parametri.m (che richiede la presenza del file
Simulink oscillatori.mdl nella stessa cartella).
1 %% Modello simulink per l’oscillatore
2 % definizione di parametri
3
4 % Parametri del modello
5 m=0.1;
6 k=1.6;
7 lambda =0.1;
8
9 % Matrici del sistema
10 A=[0 1; -k/m -lambda/m];% definizione matrici
11 B=[0;1/m];
12 C=[1 0];
13 D=0;
90 CAPITOLO 6. SISTEMI LTI CONTINUI
14
15 % Condizioni iniziali
16 v0 =[10; 0];
17
18 % Parametri dei segnali di ingresso
19 g = 9.8;
20 F0 = 5;
21 omg = 2;
22
23 open oscillatori
Il modello Simulink `e rappresentato in Fig. 6.5.
u(t)
y(t)
To Workspace
y
State-Space
x' = Ax+Bu
y = Cx+Du
Scope
Manual Switch1
Manual Switch
F = mg
m*g
F = F0*sin(omg*t)
F = 0
0
Figura 6.5: Modello Simulink per gli oscillatori