%% Márgenes de robustez basados en teorema de pequeña ganancia: ejemplo
% © 2019 Antonio Sala Piqueras, todos los derechos reservados.
% Presentación en vídeo en http://personales.upv.es/asala/YT/V/cermpg3pid.html
% Este código ejecutó sin errores en Matlab R2018b
% Table of Contents
% 1.- Modelado
% 2.- Alternativas de Control (PID)
%     Prestaciones de varios PIDs con modelo nominal
% 3- Comprobación de capacidad de los márgenes "clásicos" (ganancia, fase y retardo) para predecir robustez
% 4- Márgenes de robustez derivados de teorema pequeña ganancia
%     Multiplicativa
%     Aditiva
%     Multiplicativa inversa
%     Aditiva inversa
%     Incert. coprima normalizada
% 5- Conclusiones
%%
%% 1.- Modelado
% Sistema masa-muelle-amortiguador

k=1; c=1; M=1; 
s=tf('s');
G=1/(M*s^2+c*s+k);

%
%% 2.- Alternativas de Control (PID)
%% Prestaciones de varios PIDs con modelo nominal

%PID de "medias prestaciones" t_est=1.5 s
K{1}=1.6+1.6*s/(0.025*s+1)+1.6/s;
%PID "bueno nominalmente" t_est=0.3 s
K{2}=20+20*s/(0.015*s+1)+20/s;
%PID con más filtrado de altas frecuencias y algo más lento que el 1.
K{3}=0.9+0.75*s/(0.3*s+1)+1.1/s;

%funciones de transferencia de bucle cerrado
for i=1:3
    S{i}=minreal(1/(1+G*K{i}));
    T{i}=1-S{i};
    KS{i}=K{i}*S{i};
end

step(T{1},T{2},T{3},G/dcgain(G)), grid on
legend('k1','k2','k3','Location','SouthEast')

% Prestaciones en el dominio de la frecuencia

sigma(S{1},S{2},S{3},logspace(-1,3,100)), grid on
sigma(T{1},T{2},T{3},logspace(-1,3,100)), grid on
sigma(KS{1},KS{2},KS{3},logspace(-1,3,100)), grid on

%% 3- Comprobación de capacidad de los márgenes "clásicos" (ganancia, fase y retardo) para predecir robustez

Ldisseny1=G*K{1};Ldisseny2=G*K{2};Ldisseny3=G*K{3};
allmargin(Ldisseny1)
allmargin(Ldisseny2)
allmargin(Ldisseny3)

% Conclusión: los márgenes de ganancia (infinito) y fase parecen "buenos". Pero en el diseño 2, se producen a frecuencias más elevadas: la incertidumbre en la fase a altas frecuencias suele ser en la práctica mucho mayor que a bajas frecuencias (dinámica no modelada). El margen de retardo, 15 veces inferior en el diseño 2, captura esa mucho menor robustez.
% La resp. frec. de KS a alta frecuencia dará lugar a amplificación excesiva de ruido de medida / discontinuidaes, etc.: MUY PROBABLEMENTE, NINGUNO DE LOS DOS PID'S (diseños 1 y 2)  FUNCIONARÁ BIEN EN LA PRÁCTICA. Los márgenes de fase, retardo y ganancia deben ser buenos para asegurar robustez (cond. necesaria), pero buenos márgenes "clásicos" no es condición suficiente para garantía de robustez (falta considerar saturación/amplificación de alta frecuencia de K)... Los márgenes "modernos" basados en teorema de pequeña ganancia lo hacen un poco mejor...
%
%% 4- Márgenes de robustez derivados de teorema pequeña ganancia
% Nota: Estos márgenes valen para multivariable, los "clásicos" (ganancia/fase) no, en principio. Eso es ya una ventaja.
%% Multiplicativa G_r=G\cdot (1+\Delta_*)

[1/norm(T{1},'inf') 1/norm(T{2},'inf') 1/norm(T{3},'inf')]

%% Aditiva G_r=G+\Delta_+

[1/norm(KS{1},'inf') 1/norm(KS{2},'inf') 1/norm(KS{3},'inf')]

%% Multiplicativa inversa  G_r=G\cdot (1+\Delta_{*f})^{-1}

[1/norm(S{1},'inf')  1/norm(S{2},'inf')  1/norm(S{3},'inf')]

%% Aditiva inversa G_r=(G^{-1}+\Delta_{+f})^{-1}

[1/norm(G*S{1},'inf')  1/norm(G*S{2},'inf')  1/norm(G*S{3},'inf')]

%% Incert. coprima normalizada
% Es equivalente a incertidumbre mixta, un poco de todo por todas partes: mult., ad., directa e inversa...
%

loscuatro=@(G,K) minreal([K;1]*(1/(1+G*K))*[1 G]); 
%Nota: realim negativa PIDs ponemos 1+GK, mientras que en el bloque de la figura sería 1-GK
cosa{1}=loscuatro(G,K{1});
cosa{2}=loscuatro(G,K{2});
cosa{3}=loscuatro(G,K{3});
sigma(cosa{1},cosa{2},cosa{3})
axis([0.1 300 -5 70]), grid on
[1/norm(cosa{1},'inf') 1/norm(cosa{2},'inf') 1/norm(cosa{3},'inf')]
[ncfmargin(G,K{1}) ncfmargin(G,K{2}) ncfmargin(G,K{3})]

%% 5- Conclusiones
%
% \bullet Los márgenes "clásicos" a veces no detectan problemas de robustez (debido a que no consideran K/(1+GK), G/(1+GK)) y son difíciles de interpretar en un caso multivariable det(I+GK).
% \bullet Los márgenes basados en teorema de pequeña ganancia son teóricamente más conservativos (algo puede tener módulo mayor que 1 si su argumento es tal que no rodea al -1), pero a cambio admiten no-linealidad y variación en el tiempo, y generalizan al caso multivariable fácilmente.
% \bullet Si el margen ante incertidumbre coprima normalizada es bueno, entonces el margen ante cada una de las cuatro incertidumbres que lo componen será aún mayor. Un buen "ncfmargin" garantiza buena robustez ante aditiva, multiplicativa, etc., por lo que es una forma "rápida" de resumir en un único número la robustez de un diseño para compararlo con otros.