% ======================= % soluzione dell'esercizio descritto in "Domanda SD 26092022.pdf" facendo % uso di Matlab % % corso: Sistemi Dinamici % 13/10/2022 % G. Fenu % ======================= clear close all clc % creo la matrice A 2x2 e assegno i valori A = [0 -1; 1 0]; % polinomio caratteristico poly(A) % autovalori di A eig(A) % creo descrizione da sistema dinamico LTI autonomo a tempo continuo B = [0;0]; % nessuno ingresso C = [1 0; 0 1]; % 2 uscite -> lo stato D = [0;0]; % nessun legame y<->u % --------- sistema LTI a tempo continuo -------------- sysC = ss(A,B,C,D); % --------- scelta del periodo di campionamento ---------------- Ts1 = 10; % periodo di campionamento [s] <-- NB ALIASING se > pi Ts2 = 1/10; % periodo di campionamento [s] <-- NB NO ALIASING fs1 = 1/Ts1; OmS1 = 2*pi*fs1; fs2 = 1/Ts2; OmS2 = 2*pi*fs2; % --------- conversione da tempo continuo a segnali campionati ----- % sistema LTI a tempo continuo --> sistema LTI a tempo discreto % conversione per invarianza allo scalino <-> step invariant transform sysD1 = c2d(sysC, Ts1, 'zoh'); sysD2 = c2d(sysC, Ts2, 'zoh'); % ------------------------------------------------------------------------ % simulazione della evoluzione libera del sistema a tempo continuo e delle % 2 descrizioni a segnali campionati, partendo da stato iniziale assegnato x0 = rand(2,1); % stato iniziale casuale, con componenti tra 0 ed 1 Tstart = 0; Tstop = 120; % istanti di tempo iniziale e finale TsetC = (Tstart:1e-5:Tstop); % istanti di tempo per cui si valuta la soluzione a tempo continuo [NB in % pratica con campionamento a frequenza molto elevata] TsetD1 = (Tstart:Ts1:Tstop); % istanti di tempo per cui si valuta la soluzione a tempo discreto con % campionamento Ts1 TsetD2 = (Tstart:Ts2:Tstop); % istanti di tempo per cui si valuta la soluzione a tempo discreto con % campionamento Ts2 % ---------------------------------------- % simulazione del sistema a tempo continuo: movimento libero partendo dallo % stato x0 per t=0 e valutando lo stato negli istanti di tempo in TsetC [~, ~, statoC] = initial(sysC, x0, TsetC); % ---------------------------------------------------------- % simulazione del sistema a tempo campionato con periodo Ts1: movimento % libero partendo dallo stato x0 per t=0 e valutando lo stato negli istanti % di tempo in TsetD1 [~, ~, statoD1] = initial(sysD1, x0, TsetD1); % ---------------------------------------------------------- % simulazione del sistema a tempo campionato con periodo Ts2: movimento % libero partendo dallo stato x0 per t=0 e valutando lo stato negli istanti % di tempo in TsetD2 [~, ~, statoD2] = initial(sysD2, x0, TsetD2); % ------------------------------ visualizzazione dei risultati ----------- % 3 grafici nella medesima figure hf = figure('Name',... 'Simulazione di sistema lTI in evoluzione libera - tempo continuo e campionato'); set(hf, 'Units', 'pixels','Position', [10,200, 1200,1000]); % -- primo grafico ---- hx(1) = subplot(3,1,1); plot(TsetC, statoC, 'LineWidth', 2.0); title('sistema a tempo continuo'); xlabel('tempo [s]'); ylabel('stato') grid on; zoom on; legend('x_1(t)', 'x_2(t)'); % -- secondo grafico ---- hx(2) = subplot(3,1,2); stem(TsetD1, statoD1, 'filled','LineWidth', 2.5); hold on;plot(TsetC, statoC, 'LineWidth', 1.5); grid on; zoom on; title('sistema a tempo discreto - Ts1'); xlabel('tempo [s]'); ylabel('stato') legend('x_{1,d}(k)', 'x_{2,d}(k)', 'x_1(t)', 'x_2(t)') % -- terzo grafico ---- hx(3) = subplot(3,1,3); stem(TsetD2, statoD2, 'filled','LineWidth', 2.5); hold on;plot(TsetC, statoC, 'LineWidth', 1.5); grid on; zoom on; title('sistema a tempo discreto - Ts2'); xlabel('tempo [s]'); ylabel('stato') legend('x_{1,d}(k)', 'x_{2,d}(k)', 'x_1(t)', 'x_2(t)') % -- sincronizzazione degli assi X dei grafici -- % in modo che tutti i grafici della figura abbiamo gli stessi limiti per % l'asse X linkaxes(hx, 'x'); % =======================================================================