Segnali e Sistemi Laboratorio Matlab Irene Pappalardo irene.pappalardo@gmail.com Corso di Laurea in Ingegneria dell Informazione May 05-12-14, 2014 Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 1 / 25
Note: Segnale complesso Sia a un vettore (o una matrice) di numeri complessi. I seguenti comandi restituiscono un vettore (o una matrice) con le stesse dimensioni di a: abs(a) calcola il modulo di ciascun elemento di a; angle(a) calcola la fase di ciascun elemento di a limitandola all intervallo [ π, +π]; unwrap(angle(a)) calcola la fase di ciascun elemento di a eliminando le discontinuità di angle(a); conj(a) calcola il complesso coniugato di ciascun elemento di a; real(a) calcola la parte reale di ciascun elemento di a; imag(a) calcola la parte immaginaria di ciascun elemento di a. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 2 / 25
Note: Segnale complesso IMPORTANTE: a. calcola il trasposto di a; a calcola il trasposto del complesso coniugato di a; In R i comandi a. e a si equivalgono. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 3 / 25
Area e Energia - segnale discreto y(nt) = e 0.02nT sin(nt), n N, T = 3 T = 3; M = 200; n = 0:T:M; y = exp(-0.02*n).*sin(n); figure; stem(n,y); xlabel( n ); ylabel( y(nt) ); y(nt) 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 0 50 100 150 200 n Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 4 / 25
Area e Energia - segnale discreto Area: Energia: A y = T + n= y(nt) A y = T*sum(y); >> A y = 0.1061 E y = T + n= y(nt) 2 E y = T*sum(abs(y).^2);(in C) E y = T*sum(y.^2);(in R) >> E y = 10.5935 NOTA: Al variare di T si ottengono diversi segnali y(nt) che avranno diversi valori di area e energia. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 5 / 25
Area e Energia - segnale continuo y(t) = 3sinc(t) = 3 sin(πt), t R πt Ogni segnale continuo viene approssimato alla sua versione discreta y(nt) = 3sinc(nT), n Z, T piccolo a piacere T = 0.02; M = 20; t = -M:T:M; y = 3*sinc(t); figure; plot(t,y, Linewidth,2); xlabel( t ); ylabel( y(t) ); y(t) 3 2 1 0 1 20 10 0 10 20 t Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 6 / 25
Area e Energia - segnale continuo Area: A y = A y T + + n= y(t)dt y(nt) A y = T*sum(y); >> A y = 2.9696 Energia: E y = E y T + + n= y(t) 2 dt y(nt) 2 E y = T*sum(abs(y).^2);(in C) E y = T*sum(y.^2);(in R) >> E y = 8.9544 NOTA: Diminuendo T si ottiene un approssimazione del segnale continuo più accurata e i valori di area e energia tendono a quelli teorici. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 7 / 25
Trasformata di Fourier - segnale discreto Y(f) = T + n= y(nt)e j2πfnt, f R Come ogni segnale continuo Y(f) va approssimato alla versione discreta: Y(kF) T + n= y(nt)e j2πknft, k Z, F piccolo a piacere La trasformata di Fourier è periodica di periodo F [ p = 1 T. ] Si può scegliere se graficare Y(kF) nell intervallo Fp 2,+Fp 2 oppure in [0,F p ]. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 8 / 25
Trasformata di Fourier - segnale discreto In Matlab, applicando la definizione: T = 1; M = 200; n = 0:T:M; y = exp(-0.02*n).*sin(n); F = 0.001; F max = 1/2/T; f = -F max:f:f max; % f = 0:F:2*F max; Y = zeros(1,length(f)); for index n = 1:length(n) Y = Y + T*y(index n)*exp(-1i*2*pi*f*n(index n)); end plot(f,abs(y), Linewidth,2) Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 9 / 25
Trasformata di Fourier - segnale discreto In Matlab, applicando la definizione (alternativa) T = 1; M = 200; n = 0:T:M; y = exp(-0.02*n).*sin(n); F = 0.001; F max = 1/2/T; f = -F max:f:f max; % f = 0:F:2*F max; Y = zeros(1,length(f)); for index f = 1:length(f) Y(index f) = T*y*exp(-1i*2*pi*f(index f)*n). ; end plot(f,abs(y), Linewidth,2) Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 10 / 25
Trasformata di Fourier - segnale discreto 25 Trasformata centrata in f = 0 Hz 25 Trasformata centrata in f = 1/T 20 20 15 15 Y(f) 10 Y(f) 10 5 5 0 0.5 0 0.5 f (a) 0 0 0.2 0.4 0.6 0.8 1 f (b) Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 11 / 25
Trasformata di Fourier - segnale continuo Y(f) = + y(t)e j2πft dt, f R Come prima Y(f) va approssimato alla versione discreta: Y(kF) T + + n= y(t)e j2πkft dt, k Z, F piccolo a piacere y(nt)e j2πknft, k Z, F e T piccoli a piacere Come prima, si può scegliere se graficare Y(kF) nell intervallo oppure in [0,F p ], con F p = 1 T. [ ] Fp 2,+Fp 2 Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 12 / 25
Trasformata di Fourier - segnale continuo In Matlab, applicando la definizione: T = 0.02; M = 20; t = -M:T:M; y = 3*sinc(30*t); F = 0.01; F max = 1/2/T; f = -F max:f:f max; % f = 0:F:2*F max; Y = zeros(1,length(f)); for index f = 1:length(f) Y(index f) = T*y*exp(-1i*2*pi*f(index f)*t). ; end plot(f,abs(y), Linewidth,2) Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 13 / 25
Trasformata di Fourier - segnale continuo 0.12 Trasformata centrata in f = 0 Hz 0.12 Trasformata centrata in f = 1/T 0.1 0.1 0.08 0.08 Y(f) 0.06 Y(f) 0.06 0.04 0.04 0.02 0.02 0 40 20 0 20 40 f (c) 0 0 10 20 30 40 50 f (d) Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 14 / 25
Trasformata di Fourier con fft Matlab utilizza l algoritmo FFT per calcolare la trasformata discreta di Fourier (DFT). Con il comando Y = fft(y); si calcola la trasformata di y in [0,F p ]; mentre con Y = fftshift(fft(y)); [ ] si calcola la trasformata in Fp 2,+Fp 2. È anche possibile specificare il numero di punti N con cui valutare la DFT: Y = fft(y,n); Y = fftshift(fft(y,n)); Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 15 / 25
Convoluzione - segnali discreti Siano a(n) e b(n) due segnali discreti a supporto finito (T = 1). a b(n) = + k= In Matlab, si usa il comando conv: a = [5-2 -1 0 3]; x a = -2:2; % supporto di a b = [-2 1-1]; x b = 0:2; % supporto di b c = conv(a,b); x c = -2:4; % supporto di c figure; stem(x c,c, Linewidth,2); b(n k)a(k), n Z c(n) 10 5 0 5 convoluzione tra a e b 10 2 1 0 1 2 3 4 n Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 16 / 25
Convoluzione - segnali continui f g (t) = + f(t τ)g(τ)dτ, t R Si approssima il segnale convoluzione (continuo) con la sua versione discreta: f g (nt) T + + k= f(nt τ)g(τ)dτ, n Z, T piccolo a piacere f(nt kt)g(kt), n,k Z, T piccolo a piacere ATTENZIONE: ora T 1 e va considerato nel calcolo della convoluzione. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 17 / 25
Convoluzione - segnali continui In Matlab: T = 0.002; M = 30; t = 0:T:M; h = exp(-t); x = cos(t); y(t) 1 0.5 0 Uscita del filtro h(t) = exp( t) y = T*conv(h,x); figure; plot(t,y(1:length(t))); 1 0 10 20 30 0.5 t Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 18 / 25
ESERCIZI: SEGNALI 1 La funzione Matlab rand genera realizzazioni di una variabile aleatoria con distribuzione uniforme nell intervallo [0, 1]. Utilizzare rand per generare numeri casuali secondo una distribuzione uniforme in un intervallo arbitrario [a,b], con a < b. 2 Siano gli elementi del vettore v = -6.5:N:6.5 gli estremi di alcuni intervalli adiacenti; ad esempio, con N = 1 il primo intervallo è dato da [ 6.5, 5.5], il secondo da [ 5.5, 4.5] e così via fino all ultimo [+5.5, +6.5]. Si scriva una funzione Matlab che approssimi un numero reale qualsiasi definito in [ 6.5, +6.5] al punto medio del sotto intervallo a cui appartiene; ad esempio, con N = 1 il numero 6.3 è approssimato da 6, mentre 0.4 è approssimato da 0. Si scelga come gestire i casi in cui il numero è l estremo di due sotto intervalli adiacenti. Si testi la funzione con vari numeri casuali generati come nel punto precedente scegliendo a = 6.5 e b = 6.5. N.B. Scrivere la funzione il più possibile generale, quindi con N non necessariamente uguale a 1. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 19 / 25
ESERCIZI: AREA E ENERGIA 3 Utilizzando il codice del punto 1, generare un segnale discreto s(nt), con n = 0,1,...,199 e T = 1, di 200 realizzazioni di una variabile aleatoria uniforme in [0, 500]. Riportare s(nt) in una figura, calcolarne l area e l energia e visualizzare nella command window i valori trovati. 4 Graficare modulo e fase del seguente segnale { cos(2t)e y(t) = 0.8t+j2π0.8t, t 0 0, t < 0 in due subplot di un unica figura; calcolare area ed energia di y(t) e visualizzare nella command window i valori trovati. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 20 / 25
ESERCIZI: AREA E ENERGIA 5 Trovare il periodo fondamentale T p del segnale x(t) = cos(2πf 1 t)+3cos(2πf 2 t) con f 1 = 20 Hz e f 2 = 80 Hz. Graficare x(t) in un intervallo pari a 3T p e calcolarne area e energia. N.B. Attenzione alla definizione di area e energia di un segnale periodico. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 21 / 25
ESERCIZI: TRASFORMATA DI FOURIER 6 Verificare che le trasformate di Fourier ottenute applicando la definizione (slide 11 e 14) sono uguali a quelle ottenute con i comandi Y = fft(y,n) e Y = fftshift(fft(y,n)), impostando N = length(f). N.B. Attenzione al periodo di campionamento T, se diverso da 1. 7 Calcolare la trasformata di Fourier del segnale x(t) dell esercizio 5 e graficarne il modulo. 8 Calcolare la trasformata di Fourier del segnale e graficarla. y(t) = 1 1+t 2, t R Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 22 / 25
ESERCIZI: CONVOLUZIONE 9 Calcolare la convoluzione y(n) tra due rect discreti, x 1 (n) e x 2 (n), aventi ampiezza unitaria e supporto [0, 6] e [0, 4], rispettivamente. Graficare in tre subplot di un unica figura i segnali x 1 (n), x 2 (n) e y(n). 10 Calcolare e graficare la convoluzione continua tra un rect causale di durata 0.5 s e un segnale esponenziale s(t) = e t/t 0, T 0 = 0.8 s. Si utilizzi come asse temporale l intervallo [0,8]s con un passo di campionamento di T = 0.004 s. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 23 / 25
ESERCIZI: CONVOLUZIONE 11 Si considerino dei filtri con risposta impulsiva h(t) data da h(t) = e αt +eᾱt, t 0 con α = 0.8+j0.9; α = j0.4; α = 0.04+j0.6; α = 0.3; Calcolare e graficare l uscita y(t) di ciascun filtro quando in ingresso è applicato un gradino unitario all istante 0. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 24 / 25
Consiglio Quando scrivete un nuovo script Matlab (non una funzione), inserite il comando clear all nella prima riga del codice. In questo modo tutte le variabili del Workspace eventualmente salvate in precedenza vengono rimosse evitando problemi di sovrascrittura con le nuove variabili. Segnali e Sistemi Laboratorio Matlab 05-12-14.05.2014 25 / 25