Esercitazione MATLAB (13/5) ilenia.tinnirello@tti.unipa.it
Sommario Segnali Numerici Caratteristiche delle sinusoidi: periodicita’ e alias Sistemi Numerici Rappresentazione Operazione su sequenze di ingresso
Segnali Numerici Come si puo’ rappresentare un segnale numerico in MATLAB? 1 Vettore: gli indici rappresentano gli istanti di tempo, i valori degli elementi i campioni. 2 Vettori: uno rappresenta gli istanti di tempo, l’altro i valori del segnale Es. rect5 = [ 1, 1, 1, 1, 1]; n=1:1:100; f=0.025; s1 = sin(2*pi*f*n); N.B. Provate a diagrammare s1 al crescere di f: 1/16, 1/8, 1/4, 1/2.. Quale e’ la massima frequenza numerica? Provate a diagrammare s1 per f=sqrt(2); Cosa notate? Che vincolo deve avere f perche’ s1 sia periodico?
Esempio: Alias di frequenze t=0:0.001:0.2; tc=0:1/40:0.2 X1=sin(2*pi*10*t); X2=sin(2*pi*50*t); X1c=sin(2*pi*10*tc); X2c=sin(2*pi*10*tc); Plot(t, x1); hold; stem(tc, x1c, ‘r’); Figure(2); Plot(t, x2); hold; stem(tc, x2c, ‘r’); Trovate un altro segnale X3 che campionato sia un alias di X1. Quali condizioni devono valere per la frequenza di X3?
Esercizio 3 Scrivete uno script per la visualizzazione del fenomeno di Gibbs: lo script deve graficare lo sviluppo in serie di un’onda quadra con n armoniche e frequenza f: function[s]=quadra(f, N); ( N.B. il coefficiente della i-esima armonica e’ N/[pi*(2i-1)] ) Cosa succede all’aumentare di N? Riusciamo a migliorare la ricostruzione dell’onda quadra?
Sistemi lineari Tempo Invarianti (Filtri) Problemi da affontare: 1) Come si puo’ rappresentare in MATLAB un filtro? - risposta all’impulso, funzione di trasferimento, poli e zeri, risposta in frequenza 2) Come si puo’ passare da una rappresentazione ad un’altra? 2) Come si puo’ calcolare l’uscita del filtro a una data sequenza di ingresso? Filtro x(n) y(n)
Rappresentazione di un filtro Supponiamo di avere una rappresentazione con equazione alle differenze: a0y(n) = b0x(n) + b1x(n-1)+..blx(n-l) – a1y(n-1) –.. amy(n-m) Possiamo rappresentare in due vettori gli insiemi dei coefficienti ai e bi Questi vettori rappresentano anche numeratore e denominatore della funzione di trasferimento del sistema. Possiamo rappresentare in due vettori zeri e poli della funzione di trasferimento
Rappresentazione di un filtro - Le funzioni zp2tf e tf2zp consentono di passare da una rappresentazione poli/zeri ad una rappresentazione in termini di coefficienti della funzione di trasferimento e viceversa. - La funzione zplane(b, a) o zplane(z, p) diagrammma poli e zeri del sistema; i vettori z e p devono essere vettori colonna, mentre b e a vettori riga - La funzione freqz(b, a) diagramma modulo e fase della funzione di trasferimento rappresentata da b e a
Filtraggio Come possiamo calcolare l’uscita del sistema per dati a, b, x e y0 (dette y0 le condizioni iniziali)? Si scrive un .m file per risolvere l’equazione alle differenze Si usa la funzione filter(b, a, x, y0), dove b e a rappresentano i coeff. della funzione di trasferimento
Esempio: Filtro I ordine y(n) = 0.5 y(n-1) + x(n), y(-1) = 1; x(n) = (n) Vogliamo ricavare i primi 10 campioni della sequenza di uscita 1) a=[1 -0.5]; b=[1]; zplane(b, a) z=[0;]; p=[0.5;]; zplane(b, a) freqz(b, a); 2) x(n)=zeros(10, 1); x(1,1) = 1; stem(x); y = filter(b, a, x, [0.5]); stem(y); y0= filter(b,a,x) = impz(b, a, 10) = h; stem(y0); y=zeros(11,1); y(1,1)=1; for i=2:1:10 y(i,1)=0.5*y(i-1,1)+x(i-1,1); end conv(h, x)
Soluz. Generica eq. alle differenze function y = eq_diff(b,a,y0,x) if (length(y0)~=length(a)) fprintf('Condizioni iniziali non specificate correttamente\n'); return else y=[y0, zeros(1, 100)] x=[zeros(1,length(b)), x, zeros(1,100)]; A=fliplr(a); B=fliplr(b); for n=0:1:100 y(n+length(y0)+1)=sum(A.*y(n+1:n+length(a)))+sum(B.*x(n+1:n+length(b))); end y=y(length(a)+1:100); plot(y)