CMU UM

Conversión entre Sistemas de Representación

De Espacio de estado a función de transferencia [ ceros en el infinito ]
De Función Transferencia a espacio de estado
De Espacio de estado a cero/polo y función de transferencia a cero/polo
De Polo/cero a espacio de estado y polo/cero a Función de Transferencia

Un sistema dinámico se describe comúnmente de una de las tres maneras: por un conjunto de ecuaciones de estado y las correspondientes matrices, por una función de transferencia polinomios en el numerador y el denominador , o por una lista de polos y ceros y las ganancias asociadas . De vez en cuando, es útil para convertir entre estas varias representaciones. Matlab puede efectuar estas conversiones rápida y sencillamente.

Espacio de estado a función de transferencia:

Para comenzar, suponga que tiene un conjunto de ecuaciones de estado y quiere convertirlas a la equivalente función de transferencia. Esto se hace con el comando

[num,den] = ss2tf(A,B,C,D,iu)

Este comando crea el numerador y el denominador de la función de transferencia para la iu'ésima entrada. Note que en la mayoría de los sistemas considerados en este tutorial, hay sólo una entrada y por lo tanto el término "iu" no necesita incluirse. Por ejemplo, suponga que tiene siguiente conjunto de ecuaciones de estado :

Si quiere cambiarlo a función de transferencia, solo corra el siguiente archivo-m:

	A = [0   1
             0   -0.05];

     	B = [0;
             0.001];

     	C = [0   1];


     	D = 0;

     	[num,den]=ss2tf(A,B,C,D)

Matlab le debe devolver lo siguiente en la ventana de comandos:

 	num =

	0    0.0010         0

	 den =

	1.0000    0.0500     0

Esta es la forma en que Matlab presenta

          0.001s + 0
       ------------------
        s^2 + 0.05s + 0

Ahora tiene la función de transferencia que describe el sistema. Como puede ver este comando es muy fácil de usar. Aquí tiene algunas notas acerca de ss2tf:

ceros en el infinito

Este último punto necesita un poco más explicación. Decimos que un sistema tiene ceros en el infinito si el límite cuando s->infinito del valor absoluto de la función de transferencia es igual a cero; esto ocurre siempre que haya más polos que ceros. Verá esto en el diagrama del lugar de raíces como asíntotas que van a infinito (la cantidad de asíntotas es igual a la cantidad de ceros en el infinito). Matlab algunas veces calcula estos ceros en el infinito como si fueran números grandes pero finitos. Cuando esto sucede, alguno de los coeficientes en el numerador que se supone son nulas terminan siendo números pequeños. Le parecerá poca cosa, pero esto puede causar errores cuando trate de usar la función de transferencia después. Debiera verificar siempre su función de transferencia, y si aparecen números como 0.0000 y se supone son nulos, re-escribir el numerador en Matlab para compensar.

Un buen ejemplo de esto está dado por el siguiente conjunto de ecuaciones de estado:

Si ingresa esto al Matlab mediante el siguiente archivo-m:

A = [0    1    0      0
     0 -0.1818 2.6727 0
     0    0    0      1
     0 -4.545 31.1818 0];

B = [0
     1.8182
     0
     4.5455];

C = [1 0 0 0
	 0 0 1 0];

D = [0 0];

	  [num,den]=ss2tf(A,B,C,D)

Debería obtener la siguiente función de transferencia:

    	num =

              0    0.0000    1.8182   -0.0000  -44.5460
              0    0.0000    4.5455    0.0000         0

        den =

	      1.0000    0.1818  -31.1818   -4.4541         0

Si mirase el numerador, el primer y el último elemento de cada renglón son 0, mientras que el segundo y el cuarto elemento en cada renglón son 0.0000. Si los mira más detendamente, hallará que no son cero, pero de hecho son números chicos. Para verlo, ingrese cualquiera de los comandos siguientes en la ventana de comandos del Matlab: num(1,2), num(1,4), num(2,2) o num(2,4). Debería obtenerse algo similar al siguiente como respuesta: 7.1054e-15, -6.2172e-15, 1.2434e-14, or 4.4409e-15. Atienda las raíces del numerador de los polinomios usando roots(num(1,:)) y verá las raíces del numerador que están casi en el infinito pero no tanto. (N del T: use format rat si es necesario)

Esta inconsistencia numérica puede eliminarse agregando la siguiente línea luego del comando ss2tf para eliminar números que se supone no están aquí :

         num = [num(1,3) 0 num(1,5); num(2,3) 0 num(2,5)];

Ahora todos los números chicos se han reemplazado con ceros. Siempre asegúsere de ver la función de transferencia y entender qué significa antes de usarla en el proceso de diseño.

Función de Transferencia a espacio de estado:

El comando contrario a ss2tf es el tf2ss, el cual convierte la función de transferencia de un sistema en la forma espacio de estado. El comando se emite así:

[A,B,C,D] = tf2ss(num,den)

Un hecho importante de notar es que a pesar que hay una única función de transferencia que describe al sistema, puede obtener múltiples ecuaciones de espacio de estado que describen al mismo sistema. El comando tf2ss devuelve las matrices de espacio de estado en la forma canónica controlable . Por lo tanto, si toma un conjunto de ecuaciones de espacio de estado, y las convierte a función de transferencia, y entonces lo convierte de nuevo, no obtendrá el mismo conjunto de ecuaciones de estado con el que ha empezado, a menos que lo haya hecho con matrices en la forma canónica controlable .

Como ejemplo, tome el numerador y el denominador de arriba y conviértalos a espacio de estado. Esto puede hacerse con el siguiente código de Matlab:

     [A,B,C,D] = tf2ss(num,den)

Matlab debería devolver el siguiente conjunto de matrices:


     		 A =
			-0.1818   31.1818    4.4541         0
		         1.0000         0         0         0
			 0         1.0000         0         0
			 0         0         1.0000         0

	         B =
 			 1
 			 0
 			 0
 			 0


                 C =
                         0         1.8182         0       -44.5460
                         0         4.5455         0         0

                 D=      0
                 	 0

Este obviamente no es el mismo conjunto de matrices que usamos inicialmente, pero el comportamiento entrada-salida de este sistema es el mismo que el del anterior. Existen infinitas formas de representar una función de transferencia dada en la forma espacio de estado; Matlab elige la forma canónica controlable. Los estados no tendrán la misma significación que tenían originalmente.

Espacio de estado a cero/polo Y función de transferencia a cero/polo:

También existe una tercera forma de representar un sistema dinámico, y es el modelo polo-cero. Este modelo es básicamente el mismo que el modelo función de transferencia , excepto que los polinomios se han factoreado de modo que los polos están en el denominador y los ceros en la numerador. El formato básico se ve como sigue:

Recuerde que para una función de transferencia propia, la cantidad de polos n es mayor o igual a la cantidad de ceros m.
Matlab puede efectuar las transformaciones desde espacio de estado o desde función de transferencia a la representación polo-cero . Los comandos para obtener el sistema a la forma polo-cero son:

	[z,p,k] = tf2zp(num,den)

si tiene una función de transferencia, y:

	[z,p,k] = ss2zp(A,B,C,D,iu)

si tiene un modelo en espacio de estado.

Estos dos comandos deben devolver tres variables: z, p, k. La variable z devuelve los ceros en un vector columna. Debe haber una columna para cada renglón en el numerador de la función de transferencia o cada salida, y (renglones en la matriz C). La variable p devuelve los polos en un vector columna. La variable k devuelve un vector columna con los valores de ganancia. La columna debería tener tantos renglones como renglones tuviera el numerador o salidas, y. por ejemplo, usando el modelo en espacio de estado y la función de transferencia de arriba, ingrese uno de los siguientes archivo-m:

          num = [1.8182    0       -44.5460;
	 	 4.5455   -7.4373   0];

          den = [1 0.1818 -31.1818 6.4786 0];

 	  [z,p,k] = tf2zp(num,den)

or


 	  A = [0      1      	0      		0
 	       0     -0.1818    2.6727          0
 	       0      0         0               1
               0     -4.545     31.1818         0];

          B = [0
               1.8182
               0
               4.5455];

          C = [1 0 0 0
               0 0 1 0];

          D = [0
               0];

          [z,p,k]=ss2zp(A,B,C,D,1)

debería obtenerse la siguiente salida:

     	     z =

         	4.9498    1.6362
               -4.9498         0

             p =
                0
                0.2083
               -5.7753
                5.3851

             k =
                1.8182
                4.5455

Hay dos columnas de ceros, y por lo tanto la matriz k tendrá dos renglones (uno para cada columna en z).

Polo-cero a espacio de estado y polo/cero a función de transferencia

Como ya habrá adivinado, si tiene un sistema descripto por el método polo-cero, puede convertilo ya sea al modelo en espacio de estado o a la función de transferencia. Para obtener el modelo en espacio de estado, escriba el siguiente comando:

     [A,B,C,D] = zp2tf(z,p,k)

De nuevo, es importante notar que más de un conjunto de matrices de espacio de estado pueden describir el mismo sistema. Las matrices de espacio de estado devueltas con este comando también están en la foma canónica controlable. por ejemplo, tome las matrices z, p, y k que ha creado recientemente y conviértalas nuevamente a espacio de estado:

    [A,B,C,D] = zp2tf(z,p,k)

Debería obtenerse las siguientes matrices de espacio de estado:

             A =        -0.1818   31.1818        -6.4786         0
           		 1.0000         0              0         0
           		      0    1.0000              0         0
                              0         0         1.0000         0

             B =         1
                         0
                         0
                         0

             C =         0         1.8182              0           -44.5460
                         0         4.5455        -7.4373                  0

             D =         0
                         0

Reconocerá this as la misma conjunto de matrices you got using the command, tf2ss.

To get a sistema described by a polo-cero model into a función de transferencia model, use la siguiente command:

     [num,den] = zp2tf(z,p,k)

Converting la misma polo-cero model from above, debería obtenerse la siguiente función de transferencia:


     num =              0         0    1.8182         0  -44.5460
                        0         0    4.5455   -7.4373         0

     den =             1.0000    0.1818  -31.1818    6.4786         0

Lo reconocerá como la misma función de transferencia con la que empezamos.


User feedback

We would like to hear about difficulties you had with los tutoriales, suggestions you have for improvement, errors that you found, or any other comments that you have. This feedback is anonymous; include your email address if you want a reply.

Use el Botón "Atrás" de su Browser para ir a la página previa

8/29/1996 JDP