Tengo aquí esta función de transferencia continua:
Y( s )tu( s )=s + 3s3+ 12s2+ 39 s + 28
Pasando este tf a un dominio discreto como este:
T = 0.01;
sys_discrete = c2d(sys, T);
Tengo esto:
Y( z)tu( z)=4.853.10− 5z2+1.57.10− 11z−4.57.10− 5z3− 2.883z2+ 2,77 z− 0,8869
Considerando esto:
Y( z)tu( z)=a0z2+a1z+a2b0z3+b1z2+b2z+b3
y haciendo la transformada Z inversa, obtuve esto:
y( k ) =a0b3tu ( k - 2 ) +a1b3tu ( k - 1 ) +a2b3tu ( k ) -b0b3y( k - 3 ) -b1b3y( k - 2 )−b2b3y( k - 1 )y( k ) = [tu ( k - 2 )tu ( k − 1 )tu ( k )y( k − 3 )y( k - 2 )y( k - 1 )] .⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢a0/b3a1/b3a2/b3−b0/b3−b1/b3−b2/b3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
Cambiando el nombre de estos chicos:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢a0/b3a1/b3a2/b3−b0/b3−b1/b3−b2/b3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢C1C2C3C4C5C6⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
Entonces, cuando encuentre este vector C, regresaré de esta manera (solo reemplazando atrás):
Y( z)tu( z)=C1z2+C2z+C3−C4z3−C5z2−C6z+ 1
Entonces, lo que estoy tratando es encontrar C:
Y= A. _ CAT. Y=AT. un _ C(AT. A)− 1. (AT. Y) = (AT. A)− 1. (AT. A ) . C(AT. A)− 1. (AT. Y) = yo. C(AT. A)− 1. (AT. Y) = C
Así es como estoy haciendo esto en MATLAB:
t = 0:T:10;
u = wgn(length(t), 1, 1);
[y, t] = lsim(sys, u, t);
A = [u(2:end-2) u(3:end-1) u(4:end) y(1:end-3) y(2:end-2) y(3:end-1)];
Y = y(4:end);
C=(A'*A)\(A'*Y);
c1 = C(1); c2 = C(2); c3 = C(3);
c4 = C(4); c5 = C(5); c6 = C(6);
sys_ls = tf([c1 c2 c3], [-c4 -c5 -c6 1], T);
Cuando yo step(sys, sys_ls)
, eso es lo que obtengo:
Esperaba encontrar algo muy, muy similar... ¿Qué me falta para que este sistema encaje bien?
Andy alias
Joao Paulo
Chu
Joao Paulo
Joao Paulo
Chu
Joao Paulo
Chu
Joao Paulo
Chu
Joao Paulo