Saltar al contenido
Control Automático Educación

Predictor de Smith Filtrado

En esta entrada veremos una modificación de la estructura del Predictor de Smith que vimos en la entrada pasada (Click aqui para ver la clase del Predictor de Smith), dicha modificación se conoce como el Predictor de Smith Filtrado (PSF) que tiene como principal caracteristica corregir las principales limitaciones del Predictor de Smith Original. Las cuales son acelerar la dinámica de rechazo de perturbación y controlar procesos integradores y inestables.

Preditor de Smith Filtrado

La estructura del predictor de Smith filtrado es representada asi:

Predictor de Smith Filtrado

Sabemos que las relaciones de entrada y salida vienen dadas por las siguientes ecuaciones, las cuales son prácticamente las mismas vistas en la entrada del Predictor de Smith:

H_{yr}(s)=\dfrac{y(t)}{r(t)}=\dfrac{C(s)P_n(s)}{1+C(s)G_n(s)}

H_{yq}(s)=\dfrac{y(t)}{q(t)}=P_n(s)\left [ 1-\dfrac{C(s)P_n(s)F_r(s)}{1+C(s)G_n(s)} \right ]

H_{yn}(s)=\dfrac{y(t)}{n(t)}=\left [ 1-\dfrac{C(s)P_n(s)F_r(s)}{1+C(s)G_n(s)} \right ]

Vemos que la dinámica del Filtro Fr(s) solo aparece en las respuestas de las perturbaciones q(t) y n(t).

Si tomamos la respuesta frente a la perturbación de carga (q(t)), notaremos la mejora que el filtro de predicción Fr(s) introduce en la estructura del PSF:

H_{yq}(s)=P_n(s)\left [1-\dfrac{CG_n}{1+CG_n} F_r e^{-L_ns}\right ]

Predictor de Smith Filtrado en un Invernadero

El siguiente trabajo muestra la aplicación del predictor de Smith filtrado multivariable en un invernadero.

S. A. C. Giraldo, R. C. C. Flesch, and J. E. Normey-Rico, “Multivariable greenhouse control using the filtered  Smith predictor,” Journal of Control, Automation and Electrical Systems, pp. 1–10, 2016. (click aca)

Ejemplo PSF de primer orden

Si tenemos el siguiente sistema:

P_n(s)=\dfrac{K_n}{T_ns+1}e^{-L_ns}

y Tenemos un controlador primario PI

C(s)=\dfrac{K_c(T_is+1)}{T_is}

Si diseñamos un control rápido PI por cancelación de polos osea que T_i=T_n obtendremos la siguiente respuesta en lazo cerrado:

H(s)=\dfrac{CG_n}{1+CG_n}=\dfrac{1}{T_rs+1}

donde T_r es la constante de tiempo en lazo cerrado dado por: T_r=\dfrac{T_n}{K_nK_c}.
H_{yq}=\dfrac{K_n}{T_ns+1}e^{-L_ns}\left [ 1-\dfrac{1}{T_rs+1} F_r e^{-L_ns}\right ]
dividimos el filtro en F_r(s)=\dfrac{N_r(s)}{D_r(s)} y resuelvo

H_{yq}=\dfrac{K_n}{T_ns+1}e^{-L_ns}\left [\dfrac{D_r(s)(T_rs+1)-N_r(s)e^{-L_ns}}{D_r(s)(T_rs+1)}\right ]

El objetivo es conseguir que el polinomio D_r(s)(T_rs+1)-N_r(s)e^{-L_ns} cancele los polos lentos de la planta T_ns+1, para eso aplico la propiedad de polinomios que dice que dado un polinomio A(x) y otro polinomio B(x) notamos que para cancelar el polinomio el polinomio B debe tener la misma raiz que el polinomio A A=BQ, osea toda raiz de A es raiz de B.

Para cumplir la condición 1 debo imponer que:

D_r(-1/T_n)(T_r(-1/T_n)+1)-N_r(-1/T_n)e^{-L_n(-1/T_n)}=0

Para cumplir la condición 2 debo imponer que:

F_r(0)=\dfrac{N_r(0)}{D_r(0)}=1

Como voy a matar una dinámica de primer orden, diseño un filtro de primer orden:

N_r(s)=\beta s+1

este numerador es usado para cumplir la condición 1.

D_r(s)= T_fs+1

el denominador del filtro es usado para determinar el tiempo de respuesta de rechazo de perturbación.

Reemplazando D_r y N_r en la ecuación de la condición 1 se tiene que:

(T_f(-1/T_n)+1)(T_r(-1/T_n)+1)-(\beta (-1/T_n)+1)e^{-L_n(-1/T_n)}=0

Así, de esta ecuación la única incógnita es \beta, entonces solo bastaría con despejarla y hallar su valor.

\beta= \left [1- \left ( 1-\dfrac{T_f}{T_n}\right )\left ( 1-\dfrac{T_r}{T_n}\right )e^{-L_n/T_n}\right ]T_n

Determinando el valor de \beta note que la ecuación restante daría algo parecido con:

D_r(s)(T_rs+1)-N_r(s)e^{-L_ns}=X'(s)(T_ns+1)

Daría un polinomio X(s) cualquiera, que dentro de su dinámica va a tener el polo lento de la planta (T_ns+1) y una dinámica X'(s), de esa forma note como quedaría la dinámica de rechazo de perturbación:

H_{yq}=\dfrac{K_n}{T_ns+1}e^{-L_ns}\left [\dfrac{X'(s)(T_ns+1)}{(T_fs+1)(T_rs+1)}\right ]

note como se cancelan los polos lentos del modelo:

H_{yq}=K_ne^{-L_ns}\left [\dfrac{X'(s)}{(T_fs+1)(T_rs+1)}\right ]

Puede notarse que ahora la dinámica de rechazo de perturbación está dado por el dominador del filtro y por los polos de lazo cerrado.

Segunda opción en Calculo del Filtro

Una segunda opción seria diseñar un filtro de segundo orden que además de cancelar los polos lentos, también cancele la dinámica de lazo cerrado. De esa forma se escogería diseñar un filtro con la siguiente forma:

F_r(s)=\dfrac{(T_{r}s+1)(\beta s+1)}{(T_fs+1)^2}

Diseñando este filtro mi respuesta de rechazo de perturbación va a tener una velocidad diferente a la velocidad del seguimiento de referencia.

H_{yq}=\dfrac{K_n}{T_ns+1}e^{-L_ns}\left [1-\dfrac{1}{T_rs+1}\dfrac{(T_{r}s+1)(\beta s+1)}{(T_fs+1)^2}e^{-L_ns}\right ]

H_{yq}=\dfrac{K_n}{T_ns+1}e^{-L_ns}\left [\dfrac{(T_{f}s+1)^2-(\beta s+1)e^{-L_ns}}{(T_fs+1)^2}\right ]

Aqui se aplica el mismo concepto, debo hacer con que el numerador (T_{f}s+1)^2-(\beta s+1)e^{-L_ns} cancele los polos lentos de la planta (T_ns+1), para eso evalúo el denominador con la raíz del polinomio (polo) y encuentro el valor de \beta.

(T_{f}(-1/T_n)+1)^2-(\beta (-1/T_n)+1)e^{-L_n(-1/T_n)}=0

así, se tiene que:

\beta= \left [1- \left ( 1-\dfrac{T_f}{T_n}\right )^2e^{-L_n/T_n}\right ]T_n

Sistemas Integradores o Inestables

Para un caso integrador o mismo para un caso inestable, para efectos de analisis se puede utilizar la misma estructura del PSF, pero para efectos de implementación práctica, no se puede utilizar la misma estructura del PSF. Debido a que esa estructura es internamente inestable. Ya que si observamos la dinámica de rechazo de perturbaciones, veremos que si la planta (P_n(s)) tiene polos inestables, la estructura será internamente inestable:

H_{yq}(s)=P_n(s)\left [1-\dfrac{CG_n}{1+CG_n} F_r e^{-L_ns}\right ]

Para solucionar este problema, basta con tener una estructura equivalente al PSF, la cual la conoceremos como estructura estable:

FSP

Donde S(z)=G_n(z)-F_r(z)P_n(z)=G_n(z)\left [ 1-z^{-d_n}F_r(z) \right ]

Para que la nueva estructura sea internamente estable, hay que asegurarse de que tanto el filtro S(z) y el filtro F_r(z) sean estables. En el caso del filtro de F_r(z) es fácil de asegurar su estabilidad, dado que sus polos son elegidos libremente por el diseñador. Por otra parte, el filtro S(z), se puede observar que si G_n(z) tiene polos integradores o polos inestable, el único grado de libertad que se tiene para cancelar esos polos es por medio del filtro F_r(z), evitando así la inestabilidad interna. Por esta razón, el termino \left[ 1-z^{-d_n}F_r(z) \right ] siempre debe ser calculado con el fin de cancelar las dinámicas inestables o integradoras del modelo rápido de la planta, G_n (z), donde se debe adicionar una raíz en (z-1) para que de esta forma el filtro F_r(z) tenga ganancia unitaria, y el filtro  S (z) tiene que ser implementado con las cancelaciones ya realizados. Por lo tanto, la salida predita y_p(k) será una predicción estable de la salida real y(k). (Todo esto es explicado en detalle en el video del ejemplo 2, a continuación.)

Ejemplo 1 (Caso Estable Continuo)

Comencemos con un proceso estable con la siguiente característica (Mismo ejemplo visto en la entrada del predictor de Smith):

P_n(s)=\dfrac{0.12}{6s+1}e^{-3s}

El controlador PI es hecho colocando el parámetro Ti igual al tao de la planta, osea Ti=6. Determinamos entonces que deseamos que la respuesta en lazo cerrado sea un 75% más rápido que la respuesta en lazo abierto asi T_r=0.75*T_i=4.5. De esa forma obtenemos el siguiente controlador PI:

C(s)=\dfrac{11.11(6s+1)}{6s}

La respuesta en lazo cerrado viene dado por:

H_{ry}=\dfrac{C(s)P_n(s)}{1+C(s)G_n(s)}=\dfrac{\dfrac{11.11(6s+1)}{6s}\dfrac{0.12}{6s+1}e^{-3s}}{1+\dfrac{11.11(6s+1)}{6s}\dfrac{0.12}{6s+1}}

H_{ry}=\dfrac{\dfrac{0.222}{s}e^{-3s}}{1+\dfrac{0.222}{s}}=\dfrac{\dfrac{0.222}{s}e^{-3s}}{\dfrac{s+0.222}{s}}=\dfrac{0.222}{s+0.222}e^{-3s}=\dfrac{1}{4.5s+1}e^{-3s}

Sabemos que la dinámica de rechazo de perturbación viene dada por:

H_{yq}(s)=P_n(s)\left [1-\dfrac{CP_n}{1+CG_n} F_r \right ]

reemplazamos los valores que conocemos. Ya tenemos el lazo cerrado y tenemos la dinamica de la planta en lazo abierto:

H_{yq}(s)=\dfrac{0.12}{6s+1}e^{-3s}\left [1-\dfrac{1}{4.5s+1}F_r e^{-3s} \right ]

Ahora diseñamos el filtro cumpliendo las dos condiciones necesarias. Para este caso diseñamos un filtro de segundo orden, para cancelar la dinámica de lazo cerrado.

F_r(s)=\dfrac{(T_{r}s+1)(\beta s+1)}{(T_fs+1)^2}

Ya tenemos el valor de T_r=4.5 el cual cancela la dinámica de lazo cerrado. Los polos del filtro los definimos como T_f=3, ese parámetro es de libre elección, en este caso yo lo escogí más rápido que la dinámica en lazo cerrado. Con esos valores procedemos a encontrar \beta

\beta= \left [1- \left ( 1-\dfrac{T_f}{T_n}\right )^2e^{-L_n/T_n}\right ]T_n= \left [1- \left ( 1-\dfrac{3}{6}\right )^2e^{-3/6}\right ]6=5.0902

De esa forma, el filtro del predictor de Smith, viene dado por:

F_r(s)=\dfrac{(4.5s+1)(5.0902 s+1)}{(3s+1)^2}

Podemos notar como el rechazo de perturbaciones es acelerado gracias a la inclusión del filtro, el cual consigue cancelar la dinámica de la planta en lazo abierto:

H_{yq}(s)=\dfrac{0.12}{6s+1}e^{-3s}\left [1-\dfrac{1}{4.5s+1}\dfrac{(4.5s+1)(5.0902 s+1)}{(3s+1)^2} e^{-3s} \right ]

H_{yq}(s)=\dfrac{0.12}{6s+1}e^{-3s}\left [1-\dfrac{(5.0902 s+1)}{(3s+1)^2} e^{-3s} \right ]

Respuesta del Sistema:

FSP Estable

En la grafica de la salida se compara el comportamiento del Predictor de Smith y el Predictor de Smith Filtrado, puede verse como el PSF acelera la dinámica de rechazo de perturbación. El código de implementación está abajo al final del post, para que lo puedas copiar e implementar en tu propio computador.

 Ejemplo caso Integrador (igual para caso Inestable)

Para entender mejor el concepto de sintonia del filtro, se presentará a continuación un ejemplo. Se asume un proceso integrador, propuesto por el siguiente modelo nominal :

P_n(s)=\dfrac{3.5}{s}e^{-1s}

Se discretiza el proceso con un retenedor de orden cero (ZOH) y se obtiene el siguiente sistema: P_n(z)=\dfrac{0,7}{z-1}z^{-5}, obtenido con t_s=0.2 s, y se desea diseñar un filtro para rechazar perturbaciones del tipo escalón.

Dividimos el modelo del proceso en terminos estables y terminos inestables como:

\\P_n(z)=\dfrac{N_n(z)}{D_n^-(z)D_n^+(z)}z^{-d}=\dfrac{0,7}{z-1}z^{-5}\\

Parte estable= D_n^-(z)=1\\
Parte inestable= D_n^+(z)=(z-1)\\
Numerador= N_n(z)=0,7\\

desmembrabdo el bloque S(z) como numeradores y denominadores de cada uno de sus terminos, dicho bloque puede ser reescrito como:

 \\S(z)=G_n(z)\left [ 1-z^{-d_n}F_r(z) \right ]=\dfrac{N_n(z)}{D_n^-(z)D_n^+(z)}\left [ \dfrac{D_f(z)-N_f(z)z^{-d_n}}{D_f(z)} \right ].

El ingeniero tiene la libertad de escoger arbitrariamente el denominador del filtro con raíces dentro del circulo unitario con un orden igual o mayor al numero de polos NO deseados del sistema. En este ejemplo dado que tenemos tan solo “1” polo indeseado en el origen, vamos a escoger el  filtro de orden uno. Para eso seleccionamos el polo del filtro igual a o,9. Así, todos los polos de lazo abierto del modelo del proceso que esten fuera del circulo de radio 0,9 serán cancelados por el filtro predictor garantizando con esto la eliminación del polo en el origen.

El polo del filtro entonces es seleccionado como D_f(z)=(z-0,9) de manera de no ser mas lento que la dinamica deseada para el rechazo de perturbaciones.

La idea es que la parte del numerador, D_f(z)-N_f(z)z^{-d_n}, del bloque S(z) se cancele con la parte del denominador inestable, D_n^+(z), del mismo bloque. Reemplazando valores tenemos que:

(z-0,9)-z^{-5}N_f(z)=(z-1)(z-1)p(z).

Reescriviendo la ecuación en terminos de potências positivas, se tiene que

(z-0,9)z^5-N_f(z)=(z-1)^2p(z)\\ z^6-0,9z^5-N_f(z)=(z^2-2z+1)p(z).

El polinomio p(z) es un residuo el cual debe ser seleccionado de forma que complete el orden del polinomio de la izquierda. Como el denominador del filtro D_f(z) fue escogido de primer orden, el numerador del filtro también debe ser de primer orden, de forma que el filtro sea propio, osea, N_f(z)=az+b. Eso resulta en la igualdad:

\\z^6-0,9z^5-(az+b)=(z^2-2z+1)(cz^4+dz^3+ez^2+fz+g).

Igualando termino a termino y solucionando el sistema de ecuaciones, se llega a que a=1,5; b=-1,4; c=1; d=1,1; e=1,2; f=1,3 e g=1,4. Así, el filtro del preditor es dado por

F_r(z)=\dfrac{N_f(z)}{D_f(z)}=\dfrac{az+b}{z-0,9}=\dfrac{1,5z-1,4}{z-0,9}.

Así el bloque S(z) es dado por:

S(z)=G_n(z)\left [ 1-z^{-d_n}F_r(z) \right ]

S(z)=\dfrac{0,7}{z-1}\left [1- \dfrac{(1,5z-1,4)z^{-5}}{z-0,9} \right ]

S(z)=\dfrac{0,7}{z-1}\left [ \dfrac{(z-0,9)-(1,5z-1,4)z^{-5}}{z-0,9} \right ]

S(z)=\dfrac{0.7 z^5 + 0.07 z^4 + 0.07 z^3 + 0.07 z^2 + 0.07 z - 0.98}{z^6 - 0.9 z^5}

Para este proceso se sintoniza un controlador PI con los siguientes parametros:

K_c=0.14T_i=10 Obteniendo un controlador como:

C(s)=\dfrac{1.4 s + 0.14}{10s} y en su version discreta por tustin

C(z)=\dfrac{0.1414 z - 0.1386}{z-1}

Predictor de Smith Filtrado

Esquema en Simulink:

PSF

Resultado:

Espero esta información te haya sido de utilidad, no olvides compartir para de esa manera permitir que más personas se beneficien de esta información.

Códigos en MATLAB:

A continuación están todos los codigos del predictor de Smith Filtrado implementados en MATLAB y SIMULINK para que tu mismo los puedas reproducir en tu casa y aprendas una forma de hacerlo. Para tener acceso a los códigos solo debes compartir el contenido de este post, de esa forma ayudas a que otras personas conozcan sobre esta información y además ayudas a que este sitio web continue aportando contenido gratuito y de calidad. Gracias!

Código para el Caso Estable:

% Predictor de Smith
% Sergio Andres Castaño Giraldo
% http:\\controlautomaticoeducacion.com
%_________________________________________________________________________

clc
clear all
close all

Ts=0.4;             %Tiempo de Muestreo
FS=18;
%% Proceso Real P(s)
nP=0.12;                %Numerador de la Planta
dP=[6 1];               %Denominador de la Planta
P=tf(nP,dP);            %Processo real P(s)
L=3.0;                  %Retardo de P(s)
P.iodelay=L;            %Aplico el retardo en P(s)
Pd=c2d(P,Ts);           %Discretizo el Proceso con retendedor de Orden Cero P(z)
[B,A]=tfdata(Pd,'v');   %Divido el proceso discreto en numerador y denominador
d=Pd.iodelay;          %Obtengo el retardo en discreto

%% Modelo Nominal Pn(s)
nPn=0.12;                %Numerador del Proceso Nominal
dPn=[6 1];               %Denominador del Proceso Nominal
Gn=tf(nP,dP);            %Modelo Nominal sin retardo Gn(s)
Ln=3.0;                  %Retardo de Pn(s)
Pn=Gn;
Pn.iodelay=Ln;           %Aplico el retardo en P(s)
Pdn=c2d(Pn,Ts);           %Discretizo el Proceso nominal con retendedor de Orden Cero Pn(z)
Gnd=Pdn;
Gnd.iodelay=0;          %Modelo Nominal sin retardo Gn(z)
[Bgn,Agn]=tfdata(Gnd,'v');  %Divido el modelo discreto en numerador y denominador
[Bn,An]=tfdata(Pd,'v');  %Divido el proceso discreto en numerador y denominador
dn=Pdn.iodelay;           %Obtengo el retardo en discreto

%% Controlador Primario por cancelamiento de polos
Ti=dPn(1);      %Selecciono el parametro Ti=Tn (Parametro Integral)
Kn=nPn;         %Ganancia de la planta
Tr=dPn(1)*0.75; %Constante de tiempo que deseo en lazo cerrado (75% del tao de la planta)
Kc=Ti/(Kn*Tr);  %Parametro proporcional del controlador PI
C=tf(Kc*[Ti 1],[Ti 0]); %Controlador PI [C(s)]
Cd=c2d(C,Ts,'tustin');  %Discretizo el controlador
[Bc,Ac]=tfdata(Cd,'v');   %Divido el controlador discreto en numerador y denominador

%% Filtro de Robustez
Tr=4.5;    %Dinamica en lazo Cerrado
Tf=3;       %Dinamica del Filtro
beta=(1-(1-Tf/Ti)^2*exp(-Ln/Ti))*Ti;
Frs=tf(conv([Tr 1],[beta 1]),conv([Tf 1],[Tf 1]));
Fr=c2d(Frs,Ts,'tustin');
%Fr=filtro_siso(Pdn,0.5,0.91,1); %Calculo del filtro de robustez del PSF
[Bf,Af]=tfdata(Fr,'v');   %Divido el filtro discreto en numerador y denominador

%% Simulacion
nit=600;        %Numero de Interacciones
ref(1:nit)=0;   %Vector de SetPoint
ref(27:end)=1;  %Escalon unitario en el Set Point
rq(1:nit)=0;
rq(220:nit)=10;   %Estimulo de perturbacion de carga
rn(1:nit)=0;
rn(450:nit)=0.3; %Estimulo da perturbacion de salida

%Variables de simulacion
y1(1:nit) = 0; y(1:nit) = 0; u(1:nit) = 0;e(1:nit) = 0;yp(1:nit) = 0;
yt(1:nit) = 0; yp(1:nit) = 0; ep(1:nit) = 0;yn(1:nit) = 0; up(1:nit) = 0;
yf(1:nit) = 0; %Salida Filtrada
%Loop de Control
for i=1:2
for k=d+5:nit
    
    %Salida del proceso real P(z) [y(t)]
    y1(k)= B(1)*up(k-1-d)+B(2)*up(k-2-d)-A(2)*y1(k-1);
    y(k)=y1(k)+rn(k);
    
    %Salida del proceso nominal Pn(z)
    yn(k)= Bn(1)*u(k-1-dn)+Bn(2)*u(k-2-dn)-An(2)*yn(k-1);
    
    %Diferencia entre proceso real y proceso nominal (error de prediccion)
    ep(k)=y(k)-yn(k);
    
    if i==2 %Si es igual a 2 utilice el filtro del PSF
       yf(k)= Bf(1)*ep(k-1)+Bf(2)*ep(k-2)+Bf(3)*ep(k-3)-Af(2)*yf(k-1)-Af(3)*yf(k-2);
    end
    
    %Salida del modelo rapido Gn(z)  [y(k+d)]
    yt(k)= Bgn(1)*u(k-1)+Bgn(2)*u(k-2)-Agn(2)*yt(k-1);
    
    %Suma entre error de prediccion y salida predicha
    if i==1
        yp(k)=yt(k)+ep(k);
    else
        yp(k)=yt(k)+yf(k);
    end
    
    %Error de la ley de control
    e(k)=ref(k)-yp(k);
    
    %ley de control
    u(k)=u(k-1)+ Bc(1)*e(k)+Bc(2)*e(k-1);  
    
    %Ingreso de perturbacion en la entrada
    up(k)=u(k)+rq(k);
end
if i==1
    ySP=y;
    uSP=u;
else
    ySPF=y;
    uSPF=u;
end
end

%Grafico
t = 0:Ts:(nit-1)*Ts;
figure(1)
subplot(3,1,1);
hold on;
plot(t,ref,t,ySP,t,ySPF,'Linewidth',3)
legend('Referencia','PS','PSF');
xlabel('Tiempo (s)','FontSize',FS);
ylabel('Salida','FontSize',FS);
set(gca,'fontsize',FS);
grid on;
hold on
subplot(3,1,2);
hold on;
plot(t,uSP,t,uSPF,'Linewidth',3)
xlabel('Tiempo (s)','FontSize',FS);
ylabel('Control','FontSize',FS);
set(gca,'fontsize',FS);
grid on;
subplot(3,1,3);
hold on;
plot(t,rq,t,rn,'Linewidth',3)
legend('Perturbacion de carga','perturbacion de salida');
xlabel('Tiempo (s)','FontSize',FS);
ylabel('Salida','FontSize',FS);
set(gca,'fontsize',FS);
grid on;
hold on

Código para el Caso Integrador y Inestable

>> Descarga el código del Simulink y de Matlab <<

% Predictor de Smith Filtrado
% Sergio Andres Castaño Giraldo
% http:\\controlautomaticoeducacion.com
%_________________________________________________________________________

h=0.2;                        % Tiempo de Muestreo
tsim=140;                     % tiempo de simulación
Fs=18;                        % Tamaño de la letra del plot

%% Descripción del Sistema

% Modelo nominal del proceso
Pn=tf(3.5,[1 0]);
Gn=Pn;

% Modelo nominal del proceso con retardo
Pn.iodelay=1;


%Discretización del Sistema
Pnd=c2d(Pn,h);                    % Modelo discreto
Gnd=c2d(Gn,h);   

%Proceso Real (Caso Ideal)
Pd=Pnd;

%% Parametros del controlador

k11f=0.14; t11f=10;              % Parametros del PI
C=k11f+k11f/t11f*tf([h 0],[1 -1],h);

%--------------- Calculo del filtro  ------------------------------ 
Fr=tf([1.5 -1.4],[1 -0.9],h);

% Calculo del Filtro estable S
S=Gnd-Fr*Pnd;

%Simula utilizando SIMULINK
sim('PSF_Int');

%Grafico
figure(1)
subplot(2,1,1);
plot(t,Q(:,1),t,Q(:,2),'Linewidth',3)
legend('Referencia','PSF','PSF');
xlabel('Tiempo (s)','FontSize',FS);
ylabel('Salida','FontSize',FS);
set(gca,'fontsize',FS);
grid on;
subplot(2,1,2);
hold on;
plot(t,Q(:,3),'Linewidth',3)
xlabel('Tiempo (s)','FontSize',FS);
ylabel('Control','FontSize',FS);
set(gca,'fontsize',FS);
grid on;

BIBLIOGRAFIA

  1. S. A. C. Giraldo, R. C. C. Flesch, and J. E. Normey-Rico, “Multivariable greenhouse control using the filtered  Smith predictor,” Journal of Control, Automation and Electrical Systems, pp. 1–10, 2016. (click aca)
  2. S. A. C. Giraldo, R. C. C. Flesch, J. E. Normey-Rico, and M. Z. P. Sejas, “Decoupling filtered smith predictor design for multivariable systems with multiple time delays,” in 2016 12th IEEE International Conference on Industry Applications (INDUSCON), Nov 2016, pp. 1–8. (Click aca) 
  3. S. A. C. Giraldo, “ESTUDO DE TECNICAS DE SINTONIA DO PREDITOR DE SMITH FILTRADO PARA SISTEMAS MULTIVARIAVEIS COM ATRASO ”  (Portugués) Mestrado, Florianópolis, 2016. (Click aca)
  4. J. E. Normey-Rico and E. F. Camacho, Control of dead-time processes. London: Springer, 2007. (click aca)