Hice algunos cálculos simples con respecto al álgebra de diagramas de bloques. El problema es que no obtengo el mismo resultado usando matlab.
Aquí está el sistema con sus bloques correspondientes:
$$ H_1 = z + 2 $$ $$ H_2 = \ frac {1} {z ^ 2 + 2z + 1} $$ $$ H_3 = \ frac {z} {z + 2} $$
Esto se simplifica a lo siguiente de acuerdo con las reglas del diagrama de bloques:
$$ H = \ frac {H_1 * H_2} {1-H_1 * H_2 * H_3} $$
Después de algunas matemáticas simples obtengo:
$$ H = \ frac {\ frac {z + 2} {z ^ 2 + 2z + 1}} {1 - \ frac {z + 2} {z ^ 2 + 2z + 1} * \ frac { z} {z + 2}} = \ frac {\ frac {z + 2} {z ^ 2 + 2z + 1}} {\ frac {z ^ 2 + 2z + 1-z} {z ^ 2 + 2z + 1}} = \ frac {z + 2} {z ^ 2 + z + 1} $$
Ahora, si trato de obtener el mismo resultado utilizando matlab, se obtiene un sistema de orden 5 y un sistema de orden 3 después de reducirlo utilizando el comando minreal de matlab:
% initialization
z = tf('z',0.1);
H1 = z+2;
H2 = 1/(z^2+2*z+1);
H3 = z/(z+2);
H_ = (H1*H2)/(1-H1*H2*H3)
H_ =
z^4 + 6 z^3 + 13 z^2 + 12 z + 4
---------------------------------------
z^5 + 5 z^4 + 10 z^3 + 11 z^2 + 7 z + 2
Sample time: 0.1 seconds
Discrete-time transfer function.
H_ = minreal(H_)
H_ =
z^2 + 4 z + 4
---------------------
z^3 + 3 z^2 + 3 z + 2
Sample time: 0.1 seconds
Discrete-time transfer function.
Sólo usando el comando de retroalimentación incorporado de Matlab se obtiene el resultado correcto después de evaluar minreal:
% calculate system transfer function using matlab's feedback command
H = feedback(H1*H2,-H3)
H =
z^2 + 4 z + 4
---------------------
z^3 + 3 z^2 + 3 z + 2
Sample time: 0.1 seconds
Discrete-time transfer function.
%
H = minreal(H)
H =
z + 2
-----------
z^2 + z + 1
Sample time: 0.1 seconds
Discrete-time transfer function.
¿Podría por favor guiarme en lo que estoy haciendo mal usando los cálculos directos para H_. ¿Por qué obtengo un sistema de orden 3 después de usar minreal y no el mismo resultado que se hace a mano (o usando el comando de comentarios)?
num = minreal(simplify(H1*H2))
den = minreal(simplify(1-H1*H2*H3))
H_nd = simplify(minreal(minreal(num/den)))
num =
z + 2
-------------
z^2 + 2 z + 1
Sample time: 0.1 seconds
Discrete-time transfer function.
den =
z^2 + z + 1
-------------
z^2 + 2 z + 1
Sample time: 0.1 seconds
Discrete-time transfer function.
H_nd =
z^3 + 4 z^2 + 5 z + 2
-----------------------------
z^4 + 3 z^3 + 4 z^2 + 3 z + 1
Sample time: 0.1 seconds
Discrete-time transfer function.