Sei sulla pagina 1di 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à 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à di Padova nell’a.a. 2011/2012. L’obiettivo principale del laboratorio
è fornire una certa familiarità con lo strumento di calcolo Matlab, il quale
è ampiamente usato in contesti ingegneristici e applicativi. L’obbiettivo se-
condario, ma non per questo meno importante, è 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à del Nuovo Messico. Egli creò 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à e trovò
un grande pubblico tra la comunità dei matematici applicati. Jack Little, un
ingegnere, conobbe il programma durante una visita a Moler all’Università
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ò è 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 è
disponibile la versione R2012a.
Infine è doveroso citare, in alternativa a Matlab, il software gratuito Oc-

5
6 CAPITOLO 1. INTRODUZIONE

tave. Il suo vantaggio è che è compatibile quasi completamente con Matlab.


Capitolo 2
Funzionalità 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À BASILARI DI MATLAB

• Command Window è 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 è la sotto-finestra che visualizza tutti i file contenuti
nella cartella in cui ha accesso Matlab.
In Figura 2.2 è 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 è 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 è 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ù 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 è 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.0000 i

>>

Va osservato che i è una variable predefinita come −1 e in quanto
tale può essere sovrascritta. É buona norma perciò non sovrascrivere
i. Nota bene: anche j è considerata un’unità immaginaria.

• Definizione della variabile stringa s che contiene la parola ciao


>> s = ’ ciao ’

s =
10 CAPITOLO 2. FUNZIONALITÀ 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


 
1
v= 2  (2.2)
3
>> v =[1; 2; 3]

v =

1
2
3

>>

Il punto e virgola serve per indicare la fine di una riga.


• Definizione della matrice
 
1 2 3
A= (2.3)
4 5 6
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À BASILARI DI MATLAB

0.4000 0.5000 0.6000

>>

2.2.2 Operazioni di base sui vettori


• Somma tra due vettori
   
1 3
u= , v= (2.6)
2 4

>> u =[1; 2];


>> v =[3; 4];
>> w = u + v

w =

4
6

>>

• Calcolo del prodotto interno < u, v >= uT 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 è definito nel campo
reale)
>> u ’

ans =

1 2

>>

• Selezione dell’elemento j-esimo del vettore


T
v= 3 4 5 6 (2.7)

>> v =[3; 4; 5; 6];


>> j =2;
>> v ( j )

ans =

>>

• 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À 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 è rappresentato da un vettore (ri-


ga o colonna). Per creare un polinomio è sufficiente immettere suoi
coefficienti in un vettore, che chiameremo p, in ordine decrescente. Per
esempio, consideriamo

x5 + 10x4 + 0.6x3 + 12x2 − 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, è compreso tra parentesi tonde.
2.2. COMMAND WINDOW 15

Esempio 1. Vogliamo valutare la seguente funzione polinomiale per x = 2

p(x) = x5 − 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 è 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 è 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À 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

x5 − 7x + 5. (2.11)
2.2. COMMAND WINDOW 17

La funzione Matlab che dobbiamo utilizzare è roots. Il parametro d’ingresso


è il polinomio e il parametro di uscita è un vettore contente le radici del
polinomio.
>> p =[1 0 0 0 -7 5];
>> roots ( p )

ans =

-1.7704
-0.1618 + 1.6671 i
-0.1618 - 1.6671 i
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À 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 ez

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ù piccolo di v

max(v) Restituisce il valore e la posizione dell’elemento più 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) è 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 2 x4 64 double
ans 1 x1 8 double
v 1 x7 56 double

>>

L’istruzione clear permette la cancellazione di una o tutte le variabili del


WorkSpace
>> whos
Name Size Bytes Class Attributes

A 2 x4 64 double
ans 1 x1 8 double
v 1 x7 56 double

>> clear A
>> whos
Name Size Bytes Class Attributes

ans 1 x1 8 double
v 1 x7 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À BASILARI DI MATLAB

>>

2.4 m-files
Finora abbiamo visto come sia possibile utilizzare Matlab tramite la riga di
comando. Può succedere però che si vogliano scrivere veri e propri program-
mi, cioè 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 è sufficiente selezionare il primo ta-
sto della barra dei pulsanti di Matlab, Figura 2.2. Si aprirà un editor, Figura
2.3, dove è 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à un file prova.m nella cartella di lavoro. Infine per eseguire la squenza
di istruzioni salvate in prova.m è 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
T
x= 1 2 3 4 . (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


T T
u= 4 7 9 , v= 0 1 3 (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 uT 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À BASILARI DI MATLAB

2.5 Strutture di controllo


Oltre agli operatori aritmetici esistono gli operatori relazionali <, >, ==, <=,
>=, ~= che corrispondono ai simboli matematici <,>,=,≤,≥,6=. 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) = x3 + 1
q(x) = x2 + 7x − 3. (2.14)

1 % %%%%%%%%%%
2 % es6 . m %
3 % %%%%%%%%%%
2.5. STRUTTURE DI CONTROLLO 23

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À 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 t1 , . . . tn contenuti in D, equispa-


ziati secondo una prescelta quantità T

• calcoliamo i corrispondenti y1 , . . . yn con yi = f (ti )

• disegniamo i punti sul piano cartesiano e infine li uniamo secondo un


opportuno criterio.

Detto in maniera più formale: campioniamo il segnale con passo di campio-


namento pari a T e poi lo interpoliamo linearmente. Il concetto è lo stesso
per stampare in Matlab tale segnale. Consideriamo il vettore
T
t= t1 . . . tn , ti ∈ D, (2.16)

calcoliamo T
y= f (t1 ) . . . f (tn ) . (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( t − 0.1), t ∈ [0, 10] (2.18)
5
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 (x1 , x2 ) e (y1 , y2 )

hold on Permette di sovrapporre più 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À 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ù 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À BASILARI DI MATLAB
Capitolo 3
Segnali e convoluzioni

3.1 Segnali pari e dispari, segnali complessi


Iniziamo ad applicare le funzionalità di Matlab calcolando la parte pari e
dispari di un segnale.

Esempio 11. Scrivere un programma che stampa il segnale

f (t) = esin(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 è mostrato il grafico che stampa Matlab.

3
f(t)
2.5 parte pari
parte dispari
2

1.5

0.5

−0.5

−1

−1.5
−5 −4 −3 −2 −1 0 1 2 3 4 5
t

Figura 3.1: Grafico dell’Esempio 11

Esercizio 4. Stampare la parte reale e immaginaria del segnale complesso


¯
f (t) = ej2πf t , 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
R ∞M sufficientemente grande. Scegliamo
M = 1000 e T = 0.02. Sapendo che −∞ sinc(t)dt esiste, è lecito considerare
la seguente approssimazione
M
Z ∞ T
X
sinc(t)dt ' T sinc(kT ), (k ∈ Z). (3.4)
−∞
k=− M
T

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) = sin3 (t), t ∈ R (3.5)
32 CAPITOLO 3. SEGNALI E CONVOLUZIONI

e ne calcola l’energia. R 2π
La periodicità del segnale è Tp = 2π. Sapendo che 0 |f (t)|2 dt esiste ed
è finito, per calcolare l’energia è lecita l’approssimazione
Tp
Z Tp b
T
c
X
|f (t)|2 dt ' T |f (kT )|2 , k ∈ Z (3.6)
0 k=0

dove T è 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


 
2πnT
f (nT ) = sin , n∈Z (3.8)
Tp

con T = 0.05 e TP = 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 è mostrato il grafico che stampa Matlab.
1

0.8

0.6

0.4

0.2
f(nT)

−0.2

−0.4

−0.6

−0.8

−1
0 5 10 15 20 25 30 35 40
n

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à 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 è definita come
X∞
a ∗ b(n) = b(n − k)a(k). (3.9)
k=−∞

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 è 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
 
t − tf
f (t) = Af rect ,
Df
 
t − tg
g(t) = Ag rect .
Dg
La convoluzione per segnali continui è definita come
Z ∞
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
Z ∞ ∞
X
f ∗ g(t) = f (t − τ )g(τ ) dτ ≈ T f (t − kT )g(kT ).
−∞ k=−∞
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 Af = Ag = tf = tg = 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 Af = Ag = Df = Dg = 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 è 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à dei sistemi.
Sappiamo che
Z ∞ Z t
y(t) = h(t − τ )x(τ )dτ = h(t − τ )x(τ )dτ. (3.12)
−∞ 0

Sotto ipotesi simili a quelle dell’Esempio 12, fissando un T sufficientemente


piccolo abbiamo la seguente approssimazione
t
bT c
X
y(t) ' T h(t − kT )x(kT ). (3.13)
k=0

In altre parole possiamo approssimare y come il risultato di una convoluzione


discreta. In Matlab la funzione di convoluzione discreta è 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à vengono lasciati allo studente.

uscita del filtro


10

−5

α=−0.4+i0.6
−10
α=i0.6
α=0.04+i0.6

−15
0 5 10 15 20 25 30

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à 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à dei sistemi.
Sappiamo che

X n
X
y(n) = h(n − k)x(k) = h(n − k)x(k). (3.18)
k=−∞ k=0

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à vengono lasciati allo studente.

uscita del filtro


15

α=0.8+i0.4
α=0.8+i06
α=0.8+i0.63
10

−5

−10
0 10 20 30 40 50 60 70 80

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) = α1n + α¯1 n + α2n + α¯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à 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 Tp a energia finita sul periodo, possiamo sempre esprimerlo
come ∞
X
x(t) = ak ej2πkF t (4.1)
k=−∞

dove Z Tp
1 1
ak = x(t)e−j2πkF t dt, F = . (4.2)
Tp 0 Tp
Esempio 18. Considerare lo sviluppo in serie di Fourier di un’onda quadra
 
t
x(t) = A0 repTp rect (4.3)
dTp
con duty cycle d = 0.3, periodo Tp = 2 e ampiezza A0 = 7. Illustrare l’effetto
Gibbs troncando lo sviluppo a N = 10, 30, 50 armoniche.
In questo caso è facile vedere che

ak = A0 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 ( -1 i * k *2* pi * F * t )+...
32 a_piu ( k )* exp (1 i * 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

8
N=10
7 N=30
N=50
6

−1
0 0.5 1 1.5 2 2.5 3

Figura 4.1: Serie di Fourier troncate dell’Esempio 18

Esempio 19. Consideriamo la serie di Fourier



X 1
x(t) = 2 (−1)k−1 sin(kt), t ∈ R. (4.5)
k=1
k

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 )

3 N=10
N=30
N=50
2

−1

−2

−3

−4
0 2 4 6 8 10 12 14 16 18 20

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 Tp = 2, cosı̀


definito per t ∈ [0, 2):

2(1 − t), 0 ≤ t < 1
x(t) = (4.6)
2, 1 ≤ t < 2.

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 ( -1 i *2* pi * q * t ( k )/ Tp );
34 sk_ = sk_ + T *1/ Tp * st ( k )* exp (1 i *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 (1 i *2* pi * q ( k )* t /2)+...
45 sk_ ( k )* exp ( -1 i *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∞
x(t) = ak ejkt (4.7)
k=−∞

dove 
0, k, pari
ak = 2 . (4.8)
− πk2 , k dispari.
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 è definita come
Z ∞
X(f ) = x(t)e−j2πf t dt, f ∈ R (4.9)
−∞

Se il precedente integrale esiste ed è finito, allora è lecita la seguente appros-


simazione
M
X T

X(f ) ' T x(kT )e−j2πkf T , f ∈ R, (4.10)


k=− M
T

dove T è il passo di campionamento e M è un numero sufficientemente eleva-


to. Inoltre per rappresentare X(f ) dobbiamo anche campionare la frequenza,
per cui otteniamo
M
T
X
X(nF ) ' T x(kT )e−j2πknF T , n ∈ Z (4.11)
k=− M
T
4.2. TRASFORMATA DI FOURIER PER SEGNALI A TEMPO CONTINUO53

dove F è una quantità sufficientemente piccola.

Proprietà della trasformata di Fourier


Ricordiamo le proprietà fondamentali della trasformata di Fourier nella se-
guente tabella.

segnale trasformata
Linearità αs1 (t) + βs2 (t) αS1 (f ) + βS2 (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 − t0 ) S(f )e−j2πf t0
j2πf t0
Traslazione in frequenza s(t)e S(f − f0 )
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( fa )
Area del segnale nel tempo area(s) S(0)
Area del segnale in frequenza R∞s(0) area(S)
R∞
Energia del segnale Es = −∞ |s(t)|2 dt ES = −∞ |S(f )|2 df

Testiamo alcune delle proprietà 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 )= 3 sinc ( 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 ( -1 i *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 (1 i *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 ( -1 i *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 ( -1 i *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. TRASFORMATA DI FOURIER PER SEGNALI A TEMPO CONTINUO55

54

55 % calcolo approssimato dell ’ area :


56 Area_approssimata = T * sum ( s_1 )
57

58 % Dalla teoria sappiamo che


59 % s ( t ) = 3 sinc ( 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 ( -1 i *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 ( -1 i *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 ( -1 i *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. TRASFORMATA DI FOURIER PER SEGNALI A TEMPO DISCRETO57

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 ( -1 i *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 è 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

x1 (t) = e−0.5|t| , t ∈ R (4.14)


x2 (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 è


M

X T
X
−j2πf nT
X(f ) = T x(nT )e ' T x(nT )e−j2πf nT , f ∈R (4.17)
n=−∞ n=− M
T

dove M è un numero sufficientemente grande. Anche in questo caso dobbiamo


campionare l’insieme delle frequenze
M
T
X
X(kF ) = T x(nT )e−j2πknF T , k ∈ Z (4.18)
n=− M
T

dove F è scelto sufficientemente piccolo.

Esempio 21. Stampare la trasformata di Fourier del segnale a dominio


discreto con T = 1 
1, |n| ≤ 10
x(n) = . (4.19)
0, |n| > 10

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 ( -1 i *2* pi * f * n ( k ));
17 end
18 plot (f , real ( X )) % stampa trasformata
4.3. TRASFORMATA DI FOURIER PER SEGNALI A TEMPO DISCRETO59

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) = repN x(n), N = 40. (4.21)

Calcolare i coefficienti di Fourier ak di y(n) e stampare sul grafico dell’Esem-


pio 21 il segnale a tempo discreto
k
7→ N ak . (4.22)
N
Cosa si può osservare dal grafico? Ricordare che l’espressione assunta dalla
trasformata di Fourier per segnali discreti periodici di periodo Tp = N T è
N
X −1
S(kF ) = T s(nT )e−j2πknF T , (4.23)
n=0

con F = T1p . I coefficienti ak della serie di Fourier corrispondente si ottengono


dalla formula precedente come
1
ak = F S(kF ) = S(kF ). (4.24)
Tp

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 ( -1 i *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 ( -1 i *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ò essere ricostruito esattamente a partire dai suoi campioni
s(nT ), n ∈ Z, presi con frequenza Fc ≥ 2B campioni al secondo. La formula
per la ricostruzione esatta del segnale è:

X
s(t) = s(nT )sinc [Fc (t − nT )] .
n=−∞

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 ( -1 i *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 ( -1 i *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 ( -1 i *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à BIBO per questa classe
di modelli.

Definizione 5.1 (Stabilità 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à).


Dato il sistema LTI discreto causale

y(n) = h ∗ u(n)

le seguenti condizioni sono equivalenti:

1. Il sistema è BIBO stabile

65
66 CAPITOLO 5. SISTEMI LTI DISCRETI

2. La risposta impulsiva è tale che


+∞
X
|h(k)| < ∞.
k=0

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)
, (5.1)
y(n) = Cx(n) + Du(n)
in cui H(z) = C(zI −A)−1 B+D, possiamo introdurre un’ulteriore condizione
necessaria e sufficiente per la stabilità BIBO:
Teorema 5.2. Il sistema in forma minima (5.1) è 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à 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à R. In questa situazione c’è un
tasso di natalità 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è
n−1
X
n
x(n) = A x(0) + Ai Bu(n − 1 − i)
i=0
n−1
X
y(n) = CAn x(0) + CAi Bu(n − 1 − i) + Du(n)
i=0

Il primo addendo nell’espressione di y(n) descrive l’evoluzione libera del si-


stema, cioè l’effetto delle condizioni iniziali, mentre il secondo è chiamato
termine di evoluzione forzata. Ricaviamo per il nostro esempio l’equazione
n−1
X
n
x(n) = a x(0) + ai R.
i=0
68 CAPITOLO 5. SISTEMI LTI DISCRETI

Poiché |a| = 0.2 < 1, per n → +∞, avremo

1 50
x∞ = lim x(n) = R= .
n→+∞ 1−a 3
Simuliamo il sistema per verificare i risultati ottenuti. L’andamento demo-
grafico della popolazione è 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 ’)

50

45

40

35

30
x(n)

25

20

15

10

0
0 2 4 6 8 10 12 14 16 18 20
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à 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ò 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ò 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ò, la risposta impulsiva h(n) di tale modello si può 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:
1
y(n) = (x(n) + x(n − 1) + x(n − 2)). (5.7)
3
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):
sin( Nn0 )
u(n) = R + S0 . (5.8)
2
Calcolare la dinamica della popolazione dall’istante 0 a 60 partendo da
condizioni iniziali nulle con m = 0.6, t = 0.2, R = 5, N0 = 2 e S0 = 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 è 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

sin( n2 )
u(n) = 5 + 10, 0 ≤ n < 40. (5.9)
2
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à all’aumentare di n

sin( Nn0 )
u(n) = 5 + 10 + 80 − n, 40 ≤ n < 80. (5.10)
2
Dopo questa decisione gli allevatori sono contenti, ma vorrebbero che la po-
polazione di questi pesci fosse costante nel tempo. Decidono perciò 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 ( -1 i * 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(eiθ ).

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) è a valori reali, allora, dopo un transitorio iniziale,

x(n) = |H(ejθ0 )| sin(θ0 n + arg[H(ejθ0 )]). (5.13)

Osservazione 5.1. Dal punto di vista applicativo, questa proprietà 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 (ejθ )| e |X(ejθ )|

3. |H(ejθ )|

Verificare dai grafici che

|X(ejθ0 )|
|H(ejθ0 )| ' . (5.15)
|U (ejθ0 )|

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 ( -1 i * 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 ( -1 i * 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 ( -1 i * 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(ejθ ) e cal-


colare arg[H(ejθ0 )]. Verificare poi che nel primo grafico x e u sono sfasate
tra loro di tale quantità.
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à BIBO per questa classe di modelli.

Definizione 6.1 (Stabilità 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à).


Dato il sistema LTI continuo e causale

y(t) = h ∗ u(t)

le seguenti condizioni sono equivalenti:

1. Il sistema è BIBO stabile

2. La risposta impulsiva è tale che


Z +∞
|h(t)| dt < ∞.
0

79
80 CAPITOLO 6. SISTEMI LTI CONTINUI

Infine, la funzione di trasferimento H(s) sia razionale ed in forma minima,


priva cioè di poli e zeri coincidenti. Allora, esprimendo il sistema nella forma
in spazio di stato (
d
dt
x(t) = Ax(t) + Bu(t)
, (6.1)
y(t) = Cx(t) + Du(t)
in cui H(s) = C(sI −A)−1 B +D, possiamo introdurre un’ulteriore condizione
necessaria e sufficiente per la stabilità BIBO.

Teorema 6.2. Il sistema in forma minima (6.1) è 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
d2 d
a 2 y(t) + b1 y(t) + b0 y(t) = u(t) (6.2)
dt dt
dove a 6= 0 e u(t) noto. Poniamo

d
v1 (t) = y(t), v2 (t) = y(t) (6.3)
dt
quindi (6.2) diventa
d

v (t)
dt 1
= v2 (t)
. (6.4)
d
v (t)
dt 2
= − ba1 v2 (t) − b0
a 1
v (t) + a1 u(t)

Esprimendo (6.4) in forma vettoriale


 d      
v (t)
dt 1
0 1 v1 (t) 0
d = b0 b1 + 1 u(t). (6.5)
v (t)
dt 2
−a −a v2 (t) a

Infine, definendo  
v1 (t)
v(t) = (6.6)
v2 (t)
e    
0 1 0 
A= , B= 1 , C= 1 0 , D=0 (6.7)
− ba0 − ba1 a
6.2. STUDIO DI 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) è una forma equivalente di (6.2). Perciò, 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
d
a y(t) + b0 y(t) = u(t), a 6= 0 (6.8)
dt
abbiamo v(t) = y(t), A = − ba0 , B = a1 , C = 1, D = 0.
Esercizio 22. Si consideri l’equazione differenziale di ordine n descritta da
n−1
dn X dk
a n y(t) + bk k y(t) = cu(t), a 6= 0. (6.9)
dt k=0
dt

Verificare che le corrispondenti matrici sono


   
0 1 0 ... 0
. . . 
.. ..  .. 
   
A= , B =  . , C = 0 ... 0 1 , D = 0.
 
 .. 

 0 1 
b0 bn−1
− a ... ... − a 1
a
(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,
T
l’ingresso u e il vettore delle condizioni iniziali y(0) dtd y(0) . 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 u(t)
M

y(t)

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 :=


d2
dt
y(t) è l’accelerazione risultante. Quindi, se ad esso non è applicata alcuna
forza esterna, il moto dell’oscillatore è descritto dalla seguente equazione
differenziale
d2
m 2 y(t) = −ky(t). (6.11)
dt
Esempio 30. Si consideri un oscillatore armonico con m = 0.1Kg e k =
N
1.6 m . Supponendo che il punto prefissato dell’oscillatore sia a 10m dalla
posizione di riposo (y(0) = 10, dtd y(0) = 0), calcolare la dinamica di tale
punto dall’istante 0 a 10.
In questo caso
   
0 1 0 
A= k , B = 1 , C = 1 0 , D=0 (6.12)
−m 0 m

e u(t) = 0 in quanto l’oscillatore non è soggetto a nessuna forza.


1 % % Oscillatore armonico
2

3 close all
4 clear all
5 clc
6
6.2. STUDIO DI 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ò concludere da questi due esempi?
Ora supponiamo che sia presente l’attrito viscoso λ. L’equazione dell’o-
scillatore armonico smorzato è
d2 d
m 2
y(t) = −λ y(t) − ky(t). (6.13)
dt dt
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, dtd 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
N
, k = 1.6 m .

• m = 0.1Kg, λ = 0.9 Kg
s
N
, k = 1.6 m .
84 CAPITOLO 6. SISTEMI LTI CONTINUI

Cosa differenzia i due casi precedenti?


In questo caso
   
0 1 0 
A= k λ , B= 1 , C= 1 0 , D=0 (6.14)
−m −m m

e u(t) = 0 in quanto l’oscillatore non è 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ò concludere da questi due esempi?
6.2. STUDIO DI SISTEMI MECCANICI TRAMITE MODELLI LTI CONTINUI85

Ora supponiamo che sull’oscillatore agisca una forza costante dovuta alla
presenza della gravità. In questo caso l’equazione dell’oscillatore armonico
diventa
d2 d
m 2 y(t) = −λ y(t) − ky(t) + mg. (6.15)
dt dt
Esempio 32. Si consideri un modello molla-massa verticale in cui c’e la
presenza della forza di gravità. Sia m = 0.1Kg, λ = 0.1 Kg s
, k = 1.6 m N
.
Supponendo che il punto prefissato dell’oscillatore sia a 10m dalla posizione di
riposo (y(0) = 10, dtd y(0) = 0), calcolare la dinamica di tale punto dall’istante
0 a 20.
In questo caso
   
0 1 0 
A= k λ , B= 1 , C = 1 0 , D = 0. (6.16)
−m −m m

1 % % Oscillatore smorzato sottoposto alla forza di gravità


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è la dinamica
cambia in maniera rilevante?
Esempio 33. Consideriamo il modello
d2 d
m 2
y(t) = −λ y(t) − ky(t) + x(t). (6.17)
dt dt
con m = 0.1Kg, λ = 0.1 Kg s
N
, k = 1.6 m . Supponiamo che all’oscillatore sia
applicata una forza sinusoidale:

x(t) = F0 sin(ω̄t), F0 = 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 è 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, è sufficiente digitare simulink
nella Command Window. Apparirà 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 è sufficiente premere il primo pulsante sulla barra
dei tasti di Figura 6.2 e apparirà 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 è quel-
lo di impostare i parametri della simulazione. Tali parametri si impostano
selezionando la voce configuration parameter dal menù simulation. Apparirà
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 è rappresentato in Fig. 6.5.

0
Manual Switch1 y
F=0
To Workspace

m*g y(t)
x' = Ax+Bu
F = mg y = Cx+Du
Manual Switch State-Space
u(t) Scope

F = F0*sin(omg*t)

Figura 6.5: Modello Simulink per gli oscillatori