% Lo que sigue explica c'omo obtener las respuesta correctas con Matlab 'o
% verificarlas dependiendo del caso. No se indica c'omo se obtendr'ian "a
% mano".

% Problema 1: 
%==========================================================================

% 1) Lazo estable y bien definido.

% 2) To = 0.5/(s+0.5) y por lo tanto se elimina ruido de frecuencia mayor a
% 0.5 rad/s.  FGo = - 20/(s+20) y por lo tanto se eliminan perts de
% frecuencias menores a 20 rad/s.  HTo = 4/(s+4) y por lo tanto se siguen
% referencias de has 4 rad/s.

% Problema 2: 
%==========================================================================

% 1) No es conveniente:  BW To > 4 (refs y perts) y < 2 (ruido de
% medición).

% 2) Hay que usar una lazo estádar + prealimentación de la referencia y de la perturbación:  

% Paso 1: Controlador C tal que el lazo sea estable, esté bien definido y BW To < 2
% (note que la planta que ve el controlador es G_{o2}G_{o1} y que To =
% CG_{o2}G_{o1}/(1+CG_{o2}G_{o1}).  
% Paso 2: bloque F de preal de la pert estable y propio tal que FG_{o2} \approx -1 en la banda de 0
% a 3 rad/s.  
% Paso 3: Bloque H de preal de la referencia estable y propio tal que 
% HTo \approx 1 en la banda de 0 a 4 rad/s. (Note que To fue (implícita ó explícitamente) elegida en el Paso 1.)

% Problema 3: 
%==========================================================================

% Esta es la Tarea.

% Problema 4: 
%==========================================================================

% Se usa control en cascada:

% Paso 1: El lazo interno debe ser estable, bien definido y eliminar a la perturbación d1 (note que, para el
% lazo interno, esta es una pert de salida) en menos de 0.05 seg.  Por lo
% tanto, To_interno = 80/(s+80) es una elección razonable.
% Paso 2: Lazo debe ser estable, bien definido y seguir a ref en al menos
% un segundo.  Por lo tanto, To_externo = 30/(s+5)(s+6) es razonable. (Note
% que grel Gequivalente = grel Go1*To_interno = 2.  To_externo(1)=0 y por
% lo tanto el integrador no se cancela con el copntrolador externo.)

% Problema 5: 
%==========================================================================

% 1) Un control estándar no es razonable por dos razones fundamentales:
% i) Para eliminar a d2 con transientes menores a dos segundos, los polos
% dominantes del lazo deberán ser razonablemente rápidos lo que hará que 
% el BW de To sea mucho máyor que el de la planta..  Eso hará que u sea
% excesivamente vigorosa. ii) Dadas la referencia, el BW de To debiese ser
% mayor a 5.  Sin embargo, hay ruido de medición para w>3 y errores de
% modelo significativos para w>2.5.  Las especificaciones son, obviamente,
% incompatibles.

% 2) Se debiese prealimentar d2, usar control en cascada explotando las
% mediciones de u1 e y, y usar un bloque de prealimentación de la
% referencia.  Cada uno de estos problemas es estándar.

% Problema 6: 
%==========================================================================

% 1) Inmediato.  2) H debe ser estable y propio ¿Por qué?  3)  C debe
% estabilizar al lazo, hacerlo bien definido, y ser capaz de eliminar perturbaciones
% y ruido si lo hubiera (éste es un problema estándar).  H debe ser tal que HGo \approx 1 
% en la banda de 0 a 15 rad/s (éste es un problema de inversión en lazo
% abierto estándar).
% 4) La función de transferencia entre la perturbación y la salida, y
% entre el ruido y la salida, no dependen de H.  Por lo tanto, la elección
% de H no cambia (sólo cambiaría la elección del controlador).

% Problema 7
%==========================================================================

% 1) Modelo aproximado 

s=tf('s');
Go = 0.2/(s+0.1);
Go.iodelay = 1;  % aquí se agrega el retardo de 1 segundo

Go_aprox = -0.2*(s-2)/((s+0.1)*(s+2));

w=[1e-4:1e-2:100];
Gdelta = squeeze(( freqresp(Go,w)-freqresp(Go_aprox,w) )./( freqresp(Go_aprox,w) )); % Dado que Go posee retardo, 
% no hay manera de calcular Gdelta de otro modo que o sea punto a punto.
% Esta es una limitaciónd Matlab.

figure
semilogx(w, 20*log10(abs(Gdelta)))  % dibuja la magnitu de Gdelta
hold on

% Controlador PID ajustado por cancelación (lo más fácil), tal que uno de los polos
% de To está en s=-2 y así el cero de FNM en s=2 no molesta en la resp en
% frec de To.

alfa = 10; % pruebe Ud. con otros valores.
C = 5*alfa*(s+0.1)*(s+2)/( s*(s+2*(1+alfa) ) );

% Así, To = alfa (-s+2)/ ( (s+2)*(s+alfa) )

To = minreal( Go_aprox*C/(1+Go_aprox*C) );

sigma(To, 'r') % dibuja la magnitud de To para evaluar si \abs{ G_Delta To } < 1 o no.

% 2) Obviamente, la idea es estudiar el efecto de alfa en el lazo "real",
% i.e., aquel con retardo.  Usaremos Nyquist por que de otra forma es
% virtualmente imposible analizar la estabilidad.

figure
nyquist(Go*C, [1e-2:1e-2:1000]); 
axis([-2 1 -1 1]);
grid on;
% note que se considera Go (i.e., planta real) * C. 
% No hay encierros y por lo tanto el lazo real (con retardo) es estable.  Esto no contradice el
% que \abs{ G_Delta To } > 1 para algunas frecuencias, pues esa es una
% condición solamente suficiente para la estabilidad de lazo real.
% Las respuestas a escalón pueden determinarse usando Simulink. (Es
% bastante engorroso y "poco iluminador" hacerlo desde la línea de
% comandos.)





