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

Tengo aquí esta función de transferencia continua:

Y ( s ) tu ( s ) = s + 3 s 3 + 12 s 2 + 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 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:

Y ( z ) tu ( z ) = 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 transformada Z inversa, obtuve esto:

y ( k ) = a 0 b 3 tu ( k 2 ) + a 1 b 3 tu ( k 1 ) + a 2 b 3 tu ( k ) b 0 b 3 y ( k 3 ) b 1 b 3 y ( k 2 ) b 2 b 3 y ( k 1 ) y ( k ) = [ tu ( k 2 ) tu ( k 1 ) tu ( k ) y ( k 3 ) y ( k 2 ) y ( k 1 ) ] . [ a 0 / b 3 a 1 / b 3 a 2 / b 3 b 0 / b 3 b 1 / b 3 b 2 / b 3 ]

Cambiando el nombre de estos chicos:

[ a 0 / b 3 a 1 / b 3 a 2 / b 3 b 0 / b 3 b 1 / b 3 b 2 / b 3 ] = [ C 1 C 2 C 3 C 4 C 5 C 6 ]

Entonces, cuando encuentre este vector C, regresaré de esta manera (solo reemplazando atrás):

Y ( z ) tu ( z ) = 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 tratando es encontrar C:

Y = A . C A T . Y = A T . A . C ( A T . A ) 1 . ( A T . Y ) = ( A T . A ) 1 . ( A T . A ) . C ( A T . A ) 1 . ( A T . Y ) = I . C ( A T . A ) 1 . ( A T . Y ) = C

Así es como estoy haciendo 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 yo step(sys, sys_ls), eso es lo que obtengo:

ingrese la descripción de la imagen aquí

Esperaba encontrar algo muy, muy similar... ¿Qué me falta para que este sistema encaje bien?

¿"a1Za2" o "a1Z + a2"? Solo detectando posibles errores.
¡más! Editando... Pero abajo está bien. ¡Gracias!
La transformada inversa z no es correcta. ¿Y dónde están los mínimos cuadrados? ¿Cuáles son las dimensiones de la matriz A?
"La transformada inversa z no es correcta" , bueno, entonces no sé lo que me estoy perdiendo. "¿Y dónde están los mínimos cuadrados?" Es una especie de mínimos cuadrados. El nombre es Two Stages Least Square, creo. "¿Cuáles son las dimensiones de la matriz A?" , el tamaño de A es nx6. En el ejemplo de código, n = 998. Perdón por la respuesta tardía.
Tienes razón. La transformada Z inversa estaba mal. Debería ser k + n en lugar de k - n . ¡Pon como respuesta, por favor!
Una matriz necesita ser cuadrada para ser invertida.
Usé C = inversa (transposición (A) * A) * (transposición (A) * Y). Trabajó. Solo la transformada inversa de z estaba mal. ¡Puedes ponerlo como respuesta, para que pueda aceptar! :)
Hay demasiadas cosas mal con la pregunta para responderla. Necesitas volver a escribirlo.
Excepto cuál es la clave para responder la pregunta (transformada Z inversa), solo que esto está mal: C = inversa (A) * Y. Puedo corregirlo.
Está mezclando el dominio de tiempo discreto y el dominio z. Tal vez si hiciera la pregunta completa, en lugar de su interpretación, podría tener más sentido.
¿Dónde estaría mezclando los dominios? ¿Qué parte no está clara? ¿Cuándo voy a discreto desde Z o cuando voy a z desde discreto?

Respuestas (1)

Como @Chu no quería responder la pregunta como es posible ver en los comentarios de la pregunta, me sentí libre de responder esto para terminar.


El problema con el ajuste es que la transformada Z inversa estaba mal. Esa es la transformación correcta:

y ( k ) = a 0 b 3 tu ( k + 2 ) + a 1 b 3 tu ( k + 1 ) + a 2 b 3 tu ( k ) b 0 b 3 y ( k + 3 ) b 1 b 3 y ( k + 2 ) b 2 b 3 y ( k + 1 )

Resultado:

ingrese la descripción de la imagen aquí