Ajuste por mínimos cuadrados - Función de transferencia

3

Tengo aquí esta función de transferencia continua:

$$ \ frac {Y (s)} {U (s)} = \ frac {s + 3} {s ^ 3 + 12 s ^ 2 + 39 s + 28} $$

Pasando este tf a domar discreto como este:

T = 0.01;
sys_discrete = c2d(sys, T);

Tengo esto:

$$ \ frac {Y (z)} {U (z)} = \ frac {4.853.10 ^ {- 5} z ^ 2 + 1.57.10 ^ {- 11} z - 4.57.10 ^ { -5}} {z ^ 3 - 2.883 z ^ 2 + 2.77 z - 0.8869} $$

Considerando esto:

$$ \ frac {Y (z)} {U (z)} = \ frac {a_0 z ^ 2 + a_1 z + a_2} {b_0 z ^ 3 + b_1 z ^ 2 + b_2 z + b_3} $ $

y haciendo la transformación Z inversa, obtuve esto:

$$ y (k) = \ frac {a_0} {b_3} u (k-2) + \ frac {a_1} {b_3} u (k-1) + \ frac {a_2} {b_3} u ( k) - \ frac {b_0} {b_3} y (k-3) - \ frac {b_1} {b_3} y (k-2) - \ frac {b_2} {b_3} y (k-1) \\ y (k) = \ begin {bmatrix} u (k-2) & u (k-1) & u (k) & y (k-3) & y (k-2) & y (k-1) \ end {bmatrix}. \ begin {bmatrix} a_0 / b_3 \\ a_1 / b_3 \\ a_2 / b_3 \\ -b_0 / b_3 \\ -b_1 / b_3 \\ -b_2 / b_3 \ end {bmatrix} $$

Renombrando a estos chicos:

$$ \ begin {bmatrix} a_0 / b_3 \\ a_1 / b_3 \\ a_2 / b_3 \\ -b_0 / b_3 \\ -b_1 / b_3 \\ -b_2 / b_3 \ end {bmatrix} = \ begin { bmatrix} c_1 \\ c_2 \\ c_3 \\ c_4 \\ c_5 \\ c_6 \ end {bmatrix} $$

Entonces, cuando encuentre este vector C, retrocederé de esta manera (simplemente reemplazándolo):

$$ \ frac {Y (z)} {U (z)} = \ frac {c_1 z ^ 2 + c_2 z + c_3} {- c_4 z ^ 3 -c_5 z ^ 2 -c_6 z + 1} $$

Entonces, lo que estoy intentando es encontrar C:

$$ Y = AC \\ A ^ TY = A ^ TAC \\ (A ^ TA) ^ {- 1}. (A ^ TY) = (A ^ TA) ^ {- 1}. (A ^ TA) .C \\ (A ^ TA) ^ {- 1}. (A ^ TY) = IC \\ (A ^ TA) ^ {- 1}. (A ^ TY) = C $$

Así es como hago esto en MATLAB:

t = 0:T:10; %time vector
u = wgn(length(t), 1, 1); %input vector
[y, t] = lsim(sys, u, t); %output vector applied to sys

%[u(k-2) u(k-1) u(k) y(k-3) y(k-2) y(k-1)]
A = [u(2:end-2) u(3:end-1) u(4:end) y(1:end-3) y(2:end-2) y(3:end-1)]; %doing the right shifts here, no problem about losing data...
Y = y(4:end);
C=(A'*A)\(A'*Y); %finding C
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 step(sys, sys_ls) , eso es lo que estoy obteniendo:

Esperaba encontrar algo muy similar ... ¿Qué me falta para que este sistema se ajuste correctamente?

    
pregunta João Paulo

1 respuesta

0

Como @Chu no quería responder a la pregunta como se puede ver en los comentarios de las preguntas, me sentí libre de responder esto para darle un final.

El problema con el ajuste, es que la transformación Z inversa fue incorrecta. Esa es la transformación correcta:

$$ y (k) = \ frac {a_0} {b_3} u (k + 2) + \ frac {a_1} {b_3} u (k + 1) + \ frac {a_2} {b_3} u ( k) - \ frac {b_0} {b_3} y (k + 3) - \ frac {b_1} {b_3} y (k + 2) - \ frac {b_2} {b_3} y (k + 1) $$

Resultado:

    
respondido por el João Paulo

Lea otras preguntas en las etiquetas