Introducción (planteamiento)
Dado el siguiente modelo de tiempo continuo, diseñar y probar en simulación con MATLAB diversos tipos de observadores de estado bajo diferentes condiciones y analizar los resultados:
˙x=[−6−3−240.100.0120.1]x+[200.1]u(t)y(t)=[001]x
Método (plan de solución)
Pasos: (i) obtener el período de muestreo; (ii) generar en MATLAB una salida con una entrada RBS y adicionar un ruido y una perturbación determinística en forma de un pulso; (iii) discretizar el modelo continuo y utilizar diferente número de cifras significativas (para tener en cuenta los errores de modelación); (iv) determinar la observabilidad del modelo continuo y el discreto aproximado; (v) implementar en MATLAB los observadores de predicción, actual y reducido; (vi) graficar cada estado estimado y comparar con el estado conocido, dado que es un problema de simulación; (vii) realizar pruebas sin y con ruido, sin y con una perturbación determinística (pulso entre 5 y 10 segundos), con varias cifras significativas del modelo y con diferente ubicación de los polos del observador; (viii) analizar los resultados.
Resultados (solución)
El siguiente código de MATLAB implementa las tareas requeridas:
per_det = 1; % Amplitud del pulso de la perturbación determinística entre 0 y 1per_est = 1; % Presencia o no de la perturbación estocástica: 0 o 1exactitud = 5; % Número de cifras significativas del modelo discretopobs = 0.7; % Polos del observador (todos en el mismo lugar)S = ss([-6 -3 -2;4 0.1 0; 0.01 2 0.1],[2;0;0.1],eye(3),0); % Modelo del procesoMo = obsv(S);condMo = cond(Mo); % Sistema continuo observableN = 200;Ts = 0.1;t = (0:Ts:(N-1)*Ts)'; rng(12)u = idinput([N, 1, 1], 'RBS', [0, 1/20], [-1,1]); % Entrada RBSu1 = per_det*(heaviside(t-5) - heaviside(t-10)); % Perturbación determinísticarng(2)e = 0.2*randn(N,1);x = lsim(S,u+u1,t); % Cálculo del estado con una perturbación tipo pulsoy = x(:,3) + per_est*e; % Obtención de la salida con ruido coloreado para analizar su posible efectoSd = c2d(S,Ts); % Modelo de tiempo discretoFi = round(Sd.A,exactitud,'significant');Gamma = round(Sd.B,exactitud,'significant'); % Modelo inexactoC = [0 0 1];Mod = obsv(Fi,C); % Matriz de observabilidadcondMod = cond(Mod); % Sistema discreto observablePolos_obs = pobs*[1 1 1];Ko_pre = (acker(Fi',C',Polos_obs))';xpre = zeros(3,N); % Observador de predicciónfor k=2:Nxpre(:,k) = (Fi - Ko_pre*C)*xpre(:,k-1) + Gamma*u(k-1) + Ko_pre*y(k-1);endxpre = xpre';Ko_act = (acker(Fi',(C*Fi)',Polos_obs))';xact = zeros(3,N); % Observador actualfor k=2:Nxact(:,k) = (eye(3) - Ko_act*C)*( Fi*xact(:,k-1) + Gamma*u(k-1)) + Ko_act*y(k);endxact = xact';% Observador reducido con y = x3Fi_ee = Fi(1:2,1:2);Fi_em = Fi(1:2,3);Fi_me = Fi(3,1:2);Fi_mm = Fi(3,3);Gamma_e = Gamma(1:2,1);Gamma_m = Gamma(3,1); Ko_red = (acker(Fi_ee',Fi_me',Polos_obs(1:2)))'; xred = zeros(2,N);for k=2:Nxred(:,k) = (Fi_ee - Ko_red*Fi_me)*xred(:,k-1) + (Gamma_e - Ko_red*Gamma_m)*u(k-1) +Ko_red*y(k) + (Fi_em - Ko_red*Fi_mm)*y(k-1);endxred = xred';subplot(3,1,1)p1 = plot(t,xpre(:,1),'b',t,xact(:,1),'r',t,xred(:,1),'g',t,x(:,1),'k'); p1(4).LineWidth = 1;xlabel('k'),ylabel('x1(k)'), legend({'x1pre','x1act','x1red','x1teo'})title(['pobs = ' num2str(Polos_obs(1)) ', perdet = ' num2str(per_det)', perest = ' num2str(per_est) ', c.s. = ' … num2str(exactitud)])subplot(3,1,2)p2 = plot(t,xpre(:,2),'b',t,xact(:,2),'r',t,xred(:,2),'g',t,x(:,2),'k'); p2(4).LineWidth = 1;xlabel('k'),ylabel('x2(k)'), legend({'x2pre','x2act','x2red','x2teo'})subplot(3,1,3)p3 = plot(t,xpre(:,3),'b',t,xact(:,3),'r',t,y,'k'); xlabel('k'),ylabel('x3(k)'), legend({'x3pre','x3act','y'})p3(3).LineWidth = 1;
En todos los casos analizados el número de condición del modelo discreto es cercano a 96, lo cual indica que el sistema es observable.
Figura 1 con la estimación con cada observador sin perturbación determinística (per_det = 0), sin ruido estocástico (per_est = 0), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0 (pobs = 0, observador de tiempo mínimo o deadbeat), donde hasta pobs = 0.95 no se observan diferencias significativas:
Figura 2 con la estimación con cada observador sin perturbación determinística (per_det = 0), sin ruido estocástico (per_est = 0), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0.99 (pobs = 0.99), donde se observa un error en la estimación después de unos 9 segundos:
Figura 3 con la estimación con cada observador sin perturbación determinística (per_det = 0), sin ruido estocástico (per_est = 0), con una cifra significativa del modelo (exactitud = 1) y con todos los polos del observador en 0 (pobs = 0), donde se observan errores mínimos en las variables estimadas:
Figura 4 con la estimación con cada observador con perturbación determinística (per_det = 1), sin ruido estocástico (per_est = 0), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0 (pobs = 0), donde se observa una mala estimación de la primera variable de estado durante el pulso con cualquier método:
Figura 5 con la estimación con cada observador sin perturbación determinística (per_det = 0), con ruido estocástico (per_est = 1), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0 (pobs = 0), donde se observa una estimación con mucha varianza:
Figura 6 con la estimación con cada observador sin perturbación determinística (per_det = 0), con ruido estocástico (per_est = 1), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0.8 (pobs = 0.8), donde se observa una estimación con muy poca varianza, exceptuando el caso del observador reducido:
Figura 7 con la estimación con cada observador sin perturbación determinística (per_det = 0), con ruido estocástico (per_est = 1), con 5 cifras significativas del modelo (exactitud = 5) y con todos los polos del observador en 0.9 (pobs = 0.9), donde se observa una estimación sesgada, exceptuado el caso del observador reducido que da una estimación con menos sesgo, pero con mucha varianza:
Figura 8 con la estimación con cada observador sin perturbación determinística (per_det = 0), con ruido estocástico (per_est = 1), con 1 cifra significativa del modelo (exactitud = 1) y con todos los polos del observador en 0.8 (pobs = 0.8), donde se observa una estimación con muy poca varianza, exceptuando el caso del observador reducido, a pesar de la inexactitud del modelo:
Discusión y verificación
En este ejemplo se aplicaron tres observadores de estado y los resultados muestran que en condiciones ideales los métodos funcionan adecuadamente en diversas condiciones (figuras 1, 3, 6 y 8). Sin embargo, con polos del observador cercanos al círculo unitario (figura 2) y con perturbaciones determinísticas (figura 4) el comportamiento no es aceptable. Las perturbaciones determinísticas conllevan a una estimación sesgada, pero estable, debido a que la matriz Ko del observador es constante y solo busca dicha estabilidad; una matriz variable que se ajuste a dichas circunstancias puede ser más efectivo.
El papel de los polos del observador es fundamental en la velocidad de convergencia del algoritmo, de manera que si su valor está cercano al círculo unitario se pueden tener sesgos debido a la lentitud de la convergencia (figuras 2 y 7). Los polos cercanos al origen, en el caso discreto, conlleva a una rápida convergencia, pero con mayor varianza (figura 5), mientras que polos más alejados pueden garantizar convergencia y menor varianza, es decir, mejor filtrado (figuras 6, 7 y 8). Por lo tanto, es necesario buscar por tanteo la mejor ubicación de los ceros para garantizar convergencia y filtrado (figuras 6 y 8). Incluso, con un buen ajuste los observadores de estado de orden completo dan una buena estimación con un modelo aproximado (figura 8).
En los casos anteriores se compararon dos variables de estado con sus valores exactos debido a que se trabaja con simulación, sin embargo, en aplicaciones reales se debe confiar en las estimaciones observando solo el ajuste a la salida experimental (tercer gráfico de cada figura). En las figuras 3, 4, 5, 6 y 8 se observa un buen ajuste de la tercera variable de estado a la salida, pero no en todos los casos hay un buen ajuste de las otras dos variables (figura 4), por lo que es necesario tener cuidado en la utilización de observadores en ambientes ruidosos y con perturbaciones determinísticas, y seleccionar muy bien los polos del observador.
El observador reducido puede dar estimaciones insesgadas, pero con mucha varianza si hay mucho ruido que afecta la salida.
Comentarios