Sei sulla pagina 1di 19

Parte 9 Introduzione a Matlab e Esercizi

Meccanica delle Vibrazioni II modulo 9 1


PARTE 9 INTRODUZIONE A MATLAB E ANALISI DEL SEGNALE
Il Matlab, prodotto dalla Mathworks Inc. un programma per lelaborazione di dati numerici e la
presentazione grafica dei risultati. Questo programma utilizzato estensivamente per lanalisi di sistemi e
per il progetto di controllori. Queste note presentano alcune caratteristiche di base del programma.
AVVIO

Lanciare la finestra di MATLAB cliccando sulla relativa icona.
FINESTRA DI COMANDO

E' la finestra che si utilizza per comunicare con l'interprete di comandi di MATLAB. Quando l'interprete
e' pronto per accettare comandi, e' visibile il prompt >> e di possono digitare istruzioni che vengono
terminate premendo il tasto ENTER.
Laspetto principale del programma la semplicit concettuale con cui vengono rappresentati i dati. I dati
vengono introdotti nel programma in maniera molto semplice, mediante assegnamento.
Ad esempio, con listruzione:
>> a =4
definiamo la variabile a assegnandole il valore 4 .Occorre notare che il programma ribadisce il risultato
della istruzione precedente, visualizzandolo sullo schermo.
Il programma non richiede definizioni particolari di tipo durante linizializzazione di variabili, ma il tipo
viene assegnato automaticamente in funzione del dato inserito.
Ad esempio, listruzione:
>> b =4+5i
definisce ed inizializza la variabile b al valore complesso 4+5i.
A seguito dellassegnazione, il programma esegue lecho del dato introdotto:
b =
4.0000 + 5.0000i
INSERIRE MATRICI E VETTORI

MATLAB lavora sempre con matrici. Gli scalari sono trattati come matrici 1x1. I vettori sono matrici con
una sola riga o una sola colonna. MATLAB alloca automaticamente le matrici in memoria pertanto non e'
necessario dichiararne le dimensioni (al contrario del Fortran per esempio).
Le matrici si inseriscono come segue:
separando gli elementi con virgole o spazi
separando le righe con punto e virgola
delimitando la matrice tra parentesi quadre
Ad esempio, listruzione:
A=[1 2 3; 4 5 6; 7 8 9]
produce il risultato:
A =
1 2 3
4 5 6
7 8 9
La matrice disponibile in una memoria locale di MATLAB denominata workspace per uso
successivo.
Si noti inoltre che il programma case sensistive, distingue, cio fra maiuscole e minuscole.
I vettori sono particolari matrici con 1 colonna e n righe (oppure n colonne ed 1 riga), introducibili in
modo analogo a quanto fatto per le matrici.
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 2
Ad esempio, listruzione:
>> v = [1; 2; 56]
produce il risultato:
v =
1
2
56
Loperazione di trasposizione (sia di vettori che di matrici) lapice ().
Ad esempio, listruzione:
>> v
produce il risultato:
ans =
1 2 56
dove ans labbreviazione di answer, ovvero risposta , vale a dire la variabile che contiene il risultato
della elaborazione richiesta. Volendo conservare tale risultato si pu scrivere:
>> vt = v;
Il punto e virgola alla fine della linea viene usato per sopprimere lecho.
Se per il vettore (o la matrice) complesso loperatore apice esegue la trasposta coniugata.
La semplice trasposizione si ottiene con loperatore punto apice (.):
>> v.'
ELEMENTI DI MATRICI

Gli elementi di matrici possono essere espressioni di MATLAB
Ad esempio, listruzione:
x=[-1.3 sqrt(3) (1+2+3)*4/5]
produce il risultato:
x =
-1.3000 1.7321 4.8000
I singoli elementi possono essere individuati mediante indici racchiusi tra parentesi tonde.
Ad esempio, listruzione:
x(5)= abs(x(1))
produce il risultato:
x = -1.3000 1.7321 4.8000 0 1.3000
Come si vede la dimensione di x viene automaticamente incrementata in modo da inglobare il nuovo
elemento e gli elementi indefiniti (in questo caso il quarto) viene posto uguale a zero.
Le matrici possono essere costruite a partire da matrici di dimensioni minori.
Ad esempio, listruzione:
r=[10 11 12];
A=[A; r]
produce il risultato:
A =
1 2 3
4 5 6
7 8 9
10 11 12
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 3
USO DEI DUE PUNTI

L'operatore due punti molto importante e di uso frequente in MATLAB.
Pu essere usato per creare vettori, per isolare righe o colonne di matrici e per controllare i loops.
Esempio: creare un vettore di punti equispaziati
1:4 produce il risultato 1 2 3 4
1:3:8 produce il risultato 1 4 7
In generale
j:k produce il risultato j j+1 j+2 ... k
j:i:k produce il risultato j j+i j+2i ... k
I due punti e le matrici
A(:,j) la j-ma colonna di A
A(k,:) la k-ma riga di A
A(:,:) coincide con A
A(j,k) l'elemento (j,k)
A(:,j:k) il vettore A(:,j) A(:,j+1) A(:,j+2) ... A(:,k)
ISTRUZIONI, VARIABILI E ESPRESSIONI

Le istruzioni di MATLAB sono frequentemente nella forma: variabile=espressione
o semplicemente: espressione
Espressioni comprendono variabili, operatori, funzioni e caratteri speciali.
Una espressione, una volta valutata, produce una matrice.
Di default la matrice visualizzata sulla finestra di comando di MATLAB, ma l'output sullo schermo pu
essere soppresso terminando l'espressione con il punto e virgola (;).
Se il nome della variabile e il segno = sono omessi, MATLAB crea automaticamente la matrice ans.
Ad esempio, listruzione:
1900/81
produce il risultato:
ans =
23.4568
MATLAB distingue le minuscole dalle maiuscole.
Pertanto le variabili name, Name e NAME sono differenti.
Matrici aventi le stesse dimensioni possono essere combinate usando gli operatori + e -
La moltiplicazione di matrici (aventi dimensioni congruenti) si effettua usando l'operatore *
C=A*B
Matlab prevede due simboli per la divisione: / e \.
Supponendo che A sia una matrice quadrata e non singolare, con:
A = [10 37 64; 13 39 61; 22 61 100]
B = [1 2 3 ]
listruzione:
>> X =B /A
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 4
fornisce come risultato
X=
-0.0833 0 0.0833
che `e soluzione di X *A = B.
Infatti: >> E = X *A
E =
1.0000 2.0000 3.0000
coincide con B .
Mentre la divisione X = A \ B ,
>> X = A \ B
X =
0.1593
0.1324
-0.0858
soluzione di B = A * X .
Infatti: >> A * X
ans =
1.0000
2.0000
3.0000
coincide con B .
L'inversa di una matrice si effettua come segue: inv(B)
Per valutare una operazione "termine per termine", per esempio moltiplicare ogni termine del vettore
A=[1 3 2] per ogni termine del vettore B=[-1 2 1] in modo da ottenere il risultato C=[-1 6 2], si usa
l'operatore .*
Ad esempio:
C=A.*B
WORKSPACE E HELP

In ogni momento si pu visualizzare quali sono le variabili contenute nel Workspace (una sorta di
memoria locale di MATLAB).
Si usa il comando who oppure whos (per avere informazioni pi dettagliate).
Esiste un help in linea. Sul prompt di MATLAB sufficiente digitare help con il nome del comando
specifico. Se non si conosce il nome del comando per eseguire una certa operazione si pu tentare con
l'istruzione lookfor.
Ad esempio: help fft
Visualizza l'help del comando che esegue la trasformata di Fourier
mentre: lookfor interpolation
un esempio di ricerca di funzioni per eseguire l'interpolazione
COMANDI UTILI E ISTRUZIONI DOS-LIKE

Per verificare il contenuto della directory di lavoro, basta digitare il comando DOS-like
>> dir
e verr mostrato il contenuto della directory di lavoro.
Per visualizzare la directory corrente di lavoro, si utilizza il comando
>> pwd
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 5
Le istruzioni DOS pi utilizzate in ambiente Matlab sono:
dir elenca i files contenuti nella directory corrente.
type filename visualizza il contenuto del file filename .
delete filename elimina il file filename dalla directory corrente.
(freccia s della tastiera) richiama le istruzioni digitate in precedenza.
! command invia listruzione command al sistema operativo.
ISTRUZIONI PER LA GRAFICA

Esempio
t=[0:0.01:10]; crea un vettore [0, 0.01, 0.02, ..., 10]
ys=sin(2*pi*t); crea un'onda sinusoidale con frequenza di 1 Hz
plot(t,y); plotta l'onda sinusoidale
yc=cos(2*pi*2*t); crea un coseno avente frequenza pari a 2 Hz
plot(t,ys,t,yc) plotta le due onde contemporaneamente
axis([0 10 -1.5 1.5]) forza gli estremi degli assi
title('Onda sinusoidale') scrive il titolo della figura
xlabel('Tempo [s]') scrive la label delle ascisse
Esempio
f=[0:0.01:3]; crea un vettore "di frequenze"
z=0.01; fattore di smorzamento
H=1.0./sqrt((1-f.^2).^2+(2*z*f).^2); e' la risposta in frequenza di un sistema SDOF
plot(f,H) plotta il grafico in scala lineare
semilogy(f,H) plotta le ordinate in scala logaritmica
loglog(f,H) plotta entrambi gli assi in scala logaritmica
OPERAZIONI MATRICIALI

det(A) calcola il determinante di A
inv(A) calcola l'inversa di A
trace(A) somma gli elementi sulla diagonale
eig(A) calcola gli autovalori di A
rank(A) calcola il rango di A
VARIABILI COMPLESSE

sqrt(-9) MATLAB pu valutare questa espressione
z1=2+3*j definisce un numero complesso
z2=-2-9*i MATLAB usa indifferentemente i o j
abs(z1) valuta il modulo
angle(z1) valuta la fase
real(z1) parte reale
imag(z1) parte immaginaria
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 6
SCRIPT FILES

Invece di inserire i comandi dal prompt di MATLAB possibile eseguire una serie di comandi scritti in
files. Questi files sono chiamati m-files perche' hanno estensione .m
Ci sono due tipi di m-files: gli script files e i function files.
Gli script files contengono una serie di comandi per l'interprete di MATLAB.
Un set di comandi pu essere inserito in un file di testo (ascii) usando un editor (ad esempio il "blocco
note" di Windows; le versioni 5.0 e successive di MATLAB hanno un editor dedicato).
Esempio: se lo script file si chiama pippo.m i comandi che esso contiene si eseguono digitando il
nome del file senza estensione (pippo) dal prompt di MATLAB.
Le istruzioni contenute in uno script file lavorano sulle variabili contenute nello workspace globale.
Tutte le variabili utilizzate dallo script file rimangono disponibili una volta terminata lesecuzione.
FUNCTION FILES

Sono m-files che iniziano con la parola function.
Consentono, in ambiente Matlab, la definizione di funzione simili a quelle previste nei linguaggi di
programmazione standard.
Le variabili vengono passate per valore.
Differiscono dagli script files perch tutti gli argomenti sono passati alla funzione attraverso una lista di
parametri e tutte le variabili contenute nella funzione sono locali.
Esempio
function y=mean(x)
% Calcola il valor medio.
% Per i vettori, mean(x) restituisce il valor medio.
% Per le matrici, mean(x) restituisce un vettore riga contenente il valor medio di ogni colonna.
[m,n]=size(x);
if m==1
m=n;
end
y=sum(x)/m;
return
La prima linea dichiara il nome della funzione e gli argomenti in input e output.
Le successive tre righe documentano il file (sono commenti) e sono mostrate quando si digita help mean
dal prompt di MATLAB. Questa ultima caratteristica e' molto utile perch consente di ottenere
automaticamente un help in linea per le funzioni nuove.
Una function differisce da uno script perch lavora su variabili locali e per il fatto che non accede alle
variabili globali.
Nellesempio, le variabili m, n e y sono locali e non esisteranno nel Workspace dopo che la funzione
mean ha terminato il proprio compito. Al contrario, le variabili negli script files sono disponibili nel
Workspace ad esecuzione dello script file conclusa.
Esempio
z=1:99; vettore di interi da 1 a 99
mz=mean(z); istruzione per calcolare il valor medio di z e attribuirlo alla variabile mz.
Il vettore viene passato alla funzione mean dove diventa la variabile locale x.
Non e' necessario che i vettori z e x abbiano lo stesso nome.
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 7
ISTRUZIONI DI CONTROLLO

for ripetizione di un insieme di istruzioni per un numero predeterminato di iterazioni. Deve
terminare con end.
while ripetizione di un insieme di istruzioni fino a quando una condizione rimane era. Deve
terminare con end .
if istruzione condizionale. Deve terminare con end. Si possono utilizzare anche else e elseif.
break interruzione di un ciclo.
Esempio
for i=1:m,
for j=1:n,
A(i,j)=1/(i+j-1);
end
end
Esempio
while i < 100
i=i+1;
end
Esempio
if a>max
max=a;
end
Gli operatori relazionali sono:
> maggiore
< minore
>= maggiore o uguale
<= minore o uguale
== uguale
~= diverso
Nota: l'operatore per testare l'uguaglianza == (non =).
ISTRUZIONI LOAD E SAVE

Si utilizzano per caricare (salvare) dati da (su) files esterni.
Di seguito si riporta un estratto dellhelp on line di MATLAB per queste due istruzioni.
LOAD
LOAD Load workspace variables from disk.
LOAD FNAME retrieves the variables from the MAT-file 'fname.mat'.
LOAD FNAME -ASCII or LOAD FNAME -MAT can be used to force LOAD to treat the file as either
an ASCII file or a MAT file.
SAVE
SAVE Save workspace variables to disk.
SAVE fname saves all workspace variables to the binary "MAT-file" named fname.mat. The data may be
retrieved with LOAD. Omitting the filename causes SAVE to use the default filename "matlab.mat".
SAVE fname X saves only X.
SAVE fname X Y Z saves X, Y, and Z.
SAVE fname X Y Z -ASCII uses 8-digit ASCII form instead of binary.
SAVE fname X Y Z -ASCII -DOUBLE uses 16-digit ASCII form.
SAVE fname X Y Z -ASCII -DOUBLE -TABS delimits with tabs.
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 8
Esercizio 1
% Segnale con una componente
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
freq=10; % Frequenza del segnale
t=[0:N-1]'/fs; % Vettore tempi
signal=sin(2*pi*freq*t); % Segnale
%signal=signal+3; % Valor medio ~= 0
figure,plot(t,signal); % Plot
f=[0:N-1]'/T; % Vettore frequenze
S = fft(signal); % FFT del segnale
figure,plot(f,abs(S)); % Plot del modulo
return
% Sistema la FFT
S=fftshift(S);
S=S*2/N;
S(N/2+1)=S(N/2+1)/2;
figure,plot(f,abs(S)); % Plot del modulo
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 9
Esercizio 2
% Segnale con UNA componente - LEAKAGE
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
freq=10; % Frequenza del segnale
t=[0:N-1]'/fs; % Vettore tempi
signal=sin(2*pi*freq*t); % Segnale
%signal=signal+3; % Valor medio ~= 0
figure,plot(t,signal); % Plot
f=[0:N-1]'/T; % Vettore frequenze
S = fft(signal); % FFT del segnale
figure,plot(f,abs(S)); % Plot del modulo
%return
% Sistema la FFT
S=fftshift(S);
S=S*2/N;
S(N/2+1)=S(N/2+1)/2;
figure,plot(f,abs(S)); % Plot del modulo
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 10
Esercizio 3
% Segnale con UNA componente
% Riduzione del Leakage con FINESTRA
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
freq=10; % Frequenza del segnale
t=[0:N-1]'/fs; % Vettore tempi
s=sin(2*pi*freq*t); % Segnale
%s=s+3; % Valor medio ~= 0
win=0.5*(1 - cos(2*pi*(1:N)'/(N+1))); % Finestra Hanning
sw=s.*win; % Segnale "finestrato"
figure,plot(t,s,t,sw,t,win);
f=[0:N-1]'/T; % Vettore frequenze
S = fft(s); % FFT del segnale
SW = fft(sw); % FFT del segnale "finestrato"
figure,plot(f,abs(S),f,abs(SW)); % Plot del modulo
return
% Sistema la FFT
S=fftshift(S);
S=S*2/N;
S(N/2+1)=S(N/2+1)/2;
SW=fftshift(SW);
SW=SW*2/N;
SW(N/2+1)=SW(N/2+1)/2;
figure,plot(f,abs(S),f,abs(SW)); % Plot del modulo
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 11
Esercizio 4
% Segnale con TRE componenti
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
nc=3; % Numero di componenti
s=zeros(N,1); % Inizializza il vettore
FREQ=[10 16 28]'; % Frequenza delle tre componenti
% Costruzione del segnale
for k=1:nc,
s=s+sin(2*pi*FREQ(k)*t);
end
figure,plot(t,s);
f=[0:N-1]'/T; % Vettore frequenze
S = fft(s);
win=0.5*(1 - cos(2*pi*(1:N)'/(N+1))); % Finestra Hanning
sw=s.*win; % Segnale "finestrato"
figure,plot(t,sw);
SW = fft(sw);
figure,plot(f,abs(S),f,abs(SW));
return
% Sistema la FFT
S=fftshift(S);
S=S*2/N;
S(N/2+1)=S(N/2+1)/2;
SW=fftshift(SW);
SW=SW*2/N;
SW(N/2+1)=SW(N/2+1)/2;
figure,plot(f,abs(S),f,abs(SW)); % Plot del modulo
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 12
Esercizio 5
% Segnale modulato in ampiezza
T=2; % Durata segnale
N=1024; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
freq=15; % Frequenza portante
fm=5; % Frequenza modulante
A=1; % Ampiezza portante
ee=0.3; % Rapporto tra Ampiezza modulante e Ampiezza portante
s=A*sin(2*pi*freq*t); % Segnale non modulato
modul=ee*A*cos(2*pi*fm*t); % Modulante
sm=(A+modul).*sin(2*pi*freq*t); % Segnale modulato
figure,plot(t,s,t,sm,t,A+modul,t,-modul-A,'b');
axis([0 1 -1.4 1.4]);
f=[0:N-1]'/T; % Vettore frequenze
S = fft(s);
SM = fft(sm);
% Sistema la FFT
S=S*2/N;
S(1)=S(1)/2;
SM=SM*2/N;
SM(1)=SM(1)/2;
figure,
subplot(211),plotfft(f,abs(S)),
axis([0 40 0 1.2])
subplot(212),plotfft(f,abs(SM));
axis([0 40 0 1.2])
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 13
Esercizio 6
% Segnale con due componenti a frequenze vicine
% (fenomeno del BATTIMENTO)
T=10; % Durata segnale
N=1024; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f1=15;
f2=16.5;
s=0.6*sin(2*pi*f1*t)+0.4*sin(2*pi*f2*t);
figure,plot(t,s);
axis([0 2 -1 1]);
f=[0:N-1]'/T; % Vettore frequenze
S = fft(s);
% Sistema la FFT
S=S*2/N;
S(1)=S(1)/2;
figure,plot(f,abs(S)),
axis([0 fs/2 0 1])
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 14
Esercizio 7
% Segnale con due componenti
% Impiego del FILTRO
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
nc=2; % Numero di componenti
s=zeros(N,1); % Inizializza il vettore
FREQ=[15 49]'; % Frequenza delle tre componenti
% Costruzione del segnale
for k=1:nc,
s=s+sin(2*pi*FREQ(k)*t);
end
% Costruzione del filtro
B=fir1(32,0.5);
sf=filtfilt(B,1,s);
[H,F] = freqz(B,1,N,fs);
figure,plot(F,abs(H));
figure,plot(t,s,'r',t,sf,'b');
S = fft(s);
Sf = fft(sf);
figure,plot(f,abs(S),'r',f,abs(Sf),'b'),
axis([0 fs/2 0 80])
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 15
Esercizio 8
% Impulso
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
g=[0.001 0.005 0.01];
b=0.5;
for k=1:3,
s=exp(-(t-b).^2/g(k));
subplot(['23',num2str(k)]),plot(t,s);
S = fft(s);
subplot(['23',num2str(k+3)]),semilogy(f,abs(S));
axis([0 50 1.e-12 100]);
end
Esercizio 9
% Segnale sinusoidale con impulso
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
freq=20;
g=0.0002;
b=0.5;
s=sin(2*pi*freq*t);
si=s+exp(-(t-b).^2/g);
S = fft(s);
SI = fft(si);
figure,plot(t,s,t,si)
figure,plot(f,abs(S),f,abs(SI))
axis([0 fs/2 0 80])
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 16
Esercizio 10
% Finestra esponenziale
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
g=[0.02 0.05 0.1];
for k=1:3,
win=exp(-t/g(k));
subplot(['23',num2str(k)]),plot(t,win);
axis([0 1 0 1]);
S = fft(win);
subplot(['23',num2str(k+3)]),plot(f,abs(S));
axis([0 fs/2 1e-12 15]);
end
Esercizio 11
% Seno smorzato
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
g=0.4;
freq=10;
s=sin(2*pi*freq*t);
win=exp(-t/g);
sw=s.*win;
figure,plot(t,s,t,sw);
S = fft(s);
SW = fft(sw);
figure,plot(f,abs(S),f,abs(SW));
axis([0 fs/2 0 80]);
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 17
Esercizio 12
% Segnale con una componente
% Fenomeno Aliasing
T=1; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento (128 Hz)
t=[0:N-1]'/fs; % Vettore tempi
f=[-N/2:N/2-1]'/T; % Vettore frequenze
% --------------------------------------
% Segnale correttamente interpretato
freq=30; % Frequenza del segnale
signal=sin(2*pi*freq*t); % Segnale
figure,plot(t,signal); % Plot
title('Frequenza 30 Hz')
S = fft(signal); % FFT del segnale
figure,plot(f,abs(fftshift(S))); % Plot del modulo
title('Frequenza 30 Hz')
% --------------------------------------
% Segnale male interpretato (viene visto a 18 Hz)
freq=110;
signal=sin(2*pi*freq*t); % Segnale
figure,plot(t,signal); % Plot
title('Frequenza 110 Hz')
S = fft(signal); % FFT del segnale
figure,plot(f,abs(fftshift(S))); % Plot del modulo
title('Frequenza 110 Hz')
return
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 18
Esercizio 13
% Segnale con una componente
% Si aggiunge rumore random in banda
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
freq=15;
% Costruzione del segnale
s=sin(2*pi*freq*t);
figure,plot(t,s);
S = fft(s);
% -----------------------------------
% Rumore in banda (30-60 Hz)
noise=randn(N,1);
% Costruzione del filtro
fs2=fs/2;
B=fir1(32,[30 60]/fs2);
noisef=filtfilt(B,1,noise);
%[H,F] = freqz(B,1,N,fs);
%figure,plot(F,abs(H));
figure,plot(t,noise,'r',t,noisef,'b');
Nf=fft(noisef);
figure,plot(f,abs(Nf)),
axis([0 fs/2 0 80])
% -----------------------------------
sn=s+noisef;
SN=fft(sn);
figure,plot(t,s,'r',t,sn,'b');
%figure,plot(f,abs(S),'r',f,abs(SN),'b'),
Parte 9 Introduzione a Matlab e Esercizi
Meccanica delle Vibrazioni II modulo 9 19
Esercizio 14
% Segnale con due componenti
% Impiego del FILTRO
T=0.93; % Durata segnale
N=128; % Numero di punti
fs=N/T; % Frequenza di campionamento
t=[0:N-1]'/fs; % Vettore tempi
f=[0:N-1]'/T; % Vettore frequenze
nc=2; % Numero di componenti
s=zeros(N,1); % Inizializza il vettore
FREQ=[15 49]'; % Frequenza delle tre componenti
% Costruzione del segnale
for k=1:nc,
s=s+sin(2*pi*FREQ(k)*t);
end
S = fft(s);
fs2=fs/2;
% -----------------------------------
% Filtro la seconda componente
B=fir1(32,32/fs2);
sf=filtfilt(B,1,s);
[H,F] = freqz(B,1,N,fs);
figure,plot(F,abs(H));
figure,plot(t,s,'r',t,sf,'b');
Sf = fft(sf);
figure,plot(f,abs(S),'r',f,abs(Sf),'b'),
axis([0 fs/2 0 80])
% -----------------------------------
% Filtro la prima componente
B=fir1(32,32/fs2,'high');
sf=filtfilt(B,1,s);
[H,F] = freqz(B,1,N,fs);
figure,plot(F,abs(H));
figure,plot(t,s,'r',t,sf,'b');
Sf = fft(sf);
figure,plot(f,abs(S),'r',f,abs(Sf),'b'),
axis([0 fs/2 0 80])