lunedì 18 novembre 2013

MatLab - Esercitazione #3 - Calcolo della pseudoinversa e ingresso somma di sinusoidi



%% Parte 1
Durata della simulazione
Tfin = 100;

Periodo di campionamento (serve per definire il vettore con tempo discreto).
Ts = 0.01;

Tempo discreto (da 0 a 100, con passo di 0.01). Vettore colonna per Simulink.
timed = [0:Ts:Tfin]';

Ricopio i dati del problema.
a1 = 1;
a2 = 1;
a3 = 1;
a4 = 1;
w1 = 0.1;
w2 = 1;
w3 = 10;
w4 = 50;

Viene definito l'ingresso forzante costituito da una somma di sinusoidi.
Non uso .* perchè non faccio il prodotto elemento per elemento.
u = a1*sin(w1*timed) + a2*sin(w2*timed) + a3*sin(w3*timed) + a4*sin(w4*timed);

Viene graficato l'ingresso per vedere la somma delle sinusoidi.
figure
plot (timed, u)
grid on

%% Punto 2
Simulato lo schema con ingresso u; grafico tratteggiato di rosso negli istanti Ts (utilizzato timed).
sim('Plant_Model_mio', Tfin)
hold on
plot(timed, y, 'red')

%% Punto 3
Si assume che l'ordine del sistema (dato, quindi non sappiamo come è fatto dentro) sia 3.
E' richiesto di costruire la matrice dell'immagine, questo viene fatto con un ciclo for.
n = 3;
N = length(y);
y1 = y(n+1:N); %Oppure y1 = y(n+1, end) se non calcolo length del vettore

Q1 = [];
Q2 = []; %Partizioniamo per semplicità
for i=n: -1 :1
    Q1 = [Q1 y(i:N-n+i-1)];
    Q2 = [Q2 y(i:N-n+i-1)];
end
Vengono uniti i due risultati.
Da notare che il codice [A B] concatena A con B, e quindi A = [A B] crea A concatenando ad ogni ciclo il contenuto di B.
Q = [Q1 Q2];

%%Punto 4
Calcolo della pseudoinversa tramite il comando pinv; risoluzione dell'equazione in alfa.
alpha = pinv(Q)*y1 %Equivalente a alpha1 = inv(Q'*Q)*Q'*y1;
A = [1; -alpha(1:n)]'
B = [alpha(n+1:2*n)]'

%%Punto 5
Definire in Matlab la funzione di trasferimento discreta G(z) del sistema identificato.
Ricordiamo che tf: Gz = tf(B,A,T) dove B e A sono rispettivamente i vettori che definiscono i polinomi a numeratore e denominatore e T `e il periodo di campionamento
Gz = tf(B, A, Ts)

Nessun commento:

Posta un commento