ESERCIZIO SUL CAMPIONAMENTO Questo esercizio ha lo scopo di verificare praticamente, mediante simulazione, le proprietà frequenziali dei segnali campionati. Si consideri il segnale x() t = sin ( 2πt ) + sin( 8πt ) 2 Si valuti la frequenza minima del campionatore che permette la ricostruibilità del segnale, e si proceda alle opportune verifiche utilizzando le funzionalità di Fast Fourier Transform di MATLAB-Simulink. Svolgimento Il segnale ha due componenti in frequenza, una pari a Hz, la seconda pari a 4Hz. La frequenza massima, fs, del segnale x(t) è pari a 4 Hz. Pertanto, in base al teorema di Shannon la frequenza di campionamento minima è f c 2 f s = 8 Hz T /8 s =.25 s = 25 ms Possiamo scegliere Tc = 2 ms, a cui corrisponde fc = 5 Hz sufficientemente superiore alla soglia minima richiesta Il segnale x(t) ed il segnale campionato x*(t) possono essere ottenuti mediante il seguente semplice schema Simulink. (file SIM) Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it
Le finestre di parametrizzazione dei blocchi Sine Wave La finestra di parametrizzazione del blocco Pulse generator Il blocco Pulse generator ha lo scopo di generare il treno di impulsi di campionamento. Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 2
Naturalmente non è possibile in quanto non sono segnali realizzabili. Approssimiamo mediante un treno di rettangoli di ampiezza unitaria, periodo pari al periodo di campionamento scelto (T=2 ms =.2 s), e durata millisecondo (che è il 5% del periodo). Il blocco Simulink pulse generator parametrizzato come sopra riportato svolge tale compito. Vediamo sotto lo Scope. Attenzione alla scelta del metodo di integrazione. Lo si deve parametrizzare dalla apposita finestra. Vi si accede dalla pagine di lavori Simulink mediante il percorso di menu: (Simulation -> Configuration Parameters -> Solver) Lo si parametrizzi come segue Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 3
FIGURA >>plot(tout,x,tout,xs),grid,xlabel('tempo [secondi]'); >>title('il segnale originale e campionato').5 FIGURA IL segnale originale e campionato.5 -.5 - -.5.2.4.6.8.2.4.6.8 2 Tempo [secondi] FIGURA 2 >> plot(tout,xs),grid,xlabel('tempo [secondi]') >> title('il segnale campionato'),axis([.3.5]) FIGURA 3 >> plot(tout,xs,tout,x),grid,xlabel('tempo [secondi]') >> title('il segnale campionato'),axis([.3.5]) FIGURA 2 FIGURA 3.5 IL segnale campionato.5 IL segnale campionato.5.5.5..5.2.25.3 Tempo [secondi].5..5.2.25.3 Tempo [secondi] Facendo uno zoom si osserva come Simulink approssimi il segnale campionato con dei triangoli Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 4
FIGURA 4 >> plot(tout,xs),grid,xlabel('tempo [secondi]'), >> title('il segnale campionato - ZOOM'), >> axis([. ]) FIGURA 4 Il segnale campionato - ZOOM.9.8.7.6.5.4.3.2...2.3.4.5.6.7.8.9. Tempo [secondi] Ora analizziamo gli spettri dei segnali Si utilizza il seguente m-file, da salvare nella cartella di lavoro. % Funzione per il calcolo normalizzato dello spettro di un segnale % function spettro(t,x) close all % % calcolo del vettore delle frequenze % f=:/t(length(t)):/t(2); f=f'; % % calcolo della Fast Fourier Transform % Y=fft(x); % % calcolo dello densità spettrale di potenza normalizzato % che permette di ottenere un'ampiezza unitaria dello spettro Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 5
% per una sinusoide di ampiezza unitaria % P=2*abs(Y)/length(Y); plot(f(:ceil(length(f)/2)),p(:ceil(length(p)/2))) xlabel('') ylabel('x(j2 \pi f)') title('') La funzione spettro si lancia da riga di comando Matlab con la seguente sintassi >> spettro(tempo,x), axis([.5]) Bisogna passare come argomenti il vettore dei tempi e il vettore dei campioni. NB Il vettore dei tempi non contiene gli istanti di campionamento, ma gli istanti ai quali simulik calcola la soluzione, sono in pratica tutti i multipli interi del Fixed Step Size che abbiamo scelto pari a. s. Verificare che nel workspace siano stati generai i segnali corretti con il comando whos >> whos Name Size Bytes Class Attributes samp 2x 68 double tempo 2x 68 double tout 2x 68 double x 2x 68 double xs 2x 68 double.5.5 2 3 4 5 6 7 8 9 Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 6
Ora grafichiamo lo spettro del segnale campionato. Si notano le repliche in HF. La prima serie di repliche è centrata attorno alla frequenza di sampling come ci si attende. >> spettro(tempo,xs), axis([ 6.6]).6.5.4.3.2. 2 3 4 5 6 Grafichiamo anche le repliche superiori aumentando la finestra delle ascisse >> spettro(tempo,xs), axis([ 22.6]).6.5.4.3.2. 2 4 6 8 2 4 6 8 2 22 Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 7
L ampiezza delle armoniche dello spettro del segnale campionato non è corretta, non rispetta il valore che ci attenderemmo che è /T = /.2=5 per la componente a Hz e le sue repliche, a pari alla meta per la componente 4Hz e le sue repliche. Otteniamo invece.5 e.25 rispettivamente. C e un errore di un fattore. Da cosa discende? Dipende dall aver approssimato la sequenza campionatrice (che dovrebbe essere un treno di impulsi di Dirac, come assunto nella analisi) con la sequenza approssimata di rettangoli costruita con il pulse generator che riportiamo nuovamente a seguire: Il processo di calcolo spettrale viene invalidato dal fatto che i rettangoli di campionamento non hanno area unitaria. Hanno bensì area pari alla larghezza (durata) dei rettangoli stessi, cioè.s Quindi, si ha una perdita di potenza nel segnale campionato reale, rispetto a quello idealmente campionato impulsivamente, pari al rapporto tra l area teorica attesa, cioè, e l area degli impulsi effettivi,., e pertanto è giustificato l errore di un fattore negli spettri calcolati Compensiamo semplicemente nel modo seguente Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 8
>> spettro(tempo,*xs), axis([ 6 6]) 6 5 4 3 2 2 3 4 5 6 Ora campioniamo il segnale a una frequenza che non rispetta la condizione di nyquist, e verifichiamo l occorrenza dell aliasing spettrale. La condizione del teo di shannon è, lo ricordiamo: f c 2 f s = 8 Hz T /8 s =.25 s = 25 ms Possiamo scegliere ora Tc =.5 s = 5 ms, a cui corrisponde fc = 6.66 Hz. Dobbiamo ridurre il Fixed Step Size del risolutore Simulink (v sopra) da. a.. Per costruire il nuovo, differente, treno dei rettangolini di campionamento, riparametrizziamo come segue il blocco Pulse Generator Il valore 2/3 discende dalla formula PulseWidth=*./.5 Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 9
Ora lo spettro di potenza normalizzato mostra l inquinamento spettrale dovuto alle repliche che causano aliasing. >> spettro(tempo,*xs), axis([ 6 ]) 9 8 7 6 5 4 3 2 2 3 4 5 6 Ora studiamo il problema della ricostruzione. Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it
Utilizziamo ZOH, FOH, e un filtro continuo che ci progettiamo. Dobbiamo filtrare questo segnale.6.5.4.3.2. 2 3 4 5 6 Scegliamo un filtro costituito dalla cascata di due filtri del primo ordine con frequenza di taglio ad 8 Hz >> bode(8*2*pi*8*2*pi,poly([-8*2*pi -8*2*pi ])) Bode Diagram Magnitude (db) - -2-3 -4-5 System: sys Frequency (Hz): 8.4 Magnitude (db): -6.7 System: sys Frequency (Hz): 5.6 Magnitude (db): -32.3-45 Phase (deg) -9-35 -8-2 Frequency (Hz) Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it
Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 2
SPETTRO DEL SEGNALE RICOSTRUITO CON IL FILTRO PASSABASSO >>spettro(tempo,xlp),axis([ 6.5]).5.5 2 3 4 5 6 Evidenziamo le armoniche spurie dovute al filtraggio non completo delle componenti in HF.2..8.6.4.2 -.2 -.4 -.6 46 48 5 52 54 56 Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 3
SPETTRO DEL SEGNALE RICOSTRUITO CON LO ZOH >>spettro(tempo,xzoh),axis([ 6.5]).5.5. 2 3 4 5 6.8.6.4.2 -.2 46 48 5 52 54 56 Appunti di Controllo Digitale ing. Alessandro Pisano pisano@diee.unica.it 4