% Confronto tra i vari metodi di discretizzazione 
%
s=tf('s');
gs=25/(s*(s+1)*(s+10));		  	% Funzione di trasferimento gs
grs=(1+0.806*s)/(1+0.117*s);  % Rete correttrice anticipatrice 
k=1; tau1=0.806; tau2=0.117;
%
for T=[0.3:-0.05:0.05 0.02 0.01 0.005];									% Periodo di campionamento
z=tf('z',T);
%
figure(1); hold off; clf
Tfin=6;
gsr=grs*gs;
gsr0=feedback(gsr,1);		% Sistema retroazionato gs0=gs/(1+gs)
[y,t]=step(gsr0,Tfin);		% Risposta al gradino del sistema retroazionato 
plot(t,y,'k'); hold on		% Graficazione con tratto di colore rosso
%
gz=c2d(gs,T,'zoh');			% Si discretizza (gz) il sistema gs
%
% 1) Differenze all'indietro
%
a=k*(T+tau1); b=-k*tau1; c=T+tau2; d=-tau2;
grz1=(a*z+b)/(c*z+d)
gz1=feedback(grz1*gz,1);		% Sistama discreto retroazionato: gz0=gz/(1+gz)
[y,t]=step(gz1,Tfin);		% Risposta al gradico
stairs(t,y,'r'); hold on		% Graficazione 
%
% 2) Differenze all'avanti
%
a=k*tau1; b=k*(T-tau1); c=tau2; d=T-tau2;
grz2=(a*z+b)/(c*z+d)
gz2=feedback(grz2*gz,1);		% Sistama discreto retroazionato: gz0=gz/(1+gz)
[y,t]=step(gz2,Tfin);		% Risposta al gradico
stairs(t,y,'m'); hold on		% Graficazione 
% Se graficato risulta instabile
%
% 3) Bilineare
a=k*(T+ 2*tau1); b=k*(T-2*tau1); c=T+2*tau2; d=T-2*tau2;
grz3=(a*z+b)/(c*z+d)
gz3=feedback(grz3*gz,1);		% Sistama discreto retroazionato: gz0=gz/(1+gz)
[y,t]=step(gz3,Tfin);		% Risposta al gradico
stairs(t,y,'b'); hold on		% Graficazione 
% 7) corrispondenza poli-zeri
alpha=exp(-T/tau1); beta=exp(-T/tau2)
h=k*(1-beta)/(1-alpha);
a=h; b=-h*alpha; c=1; d=-beta;
grz7=(a*z+b)/(c*z+d)
gz7=feedback(grz7*gz,1);		% Sistama discreto retroazionato: gz0=gz/(1+gz)
[y,t]=step(gz7,Tfin);		% Risposta al gradico
stairs(t,y,'g'); hold on		% Graficazione 
axis([0 Tfin 0 1.5])
xlabel('Tempo (s)')
ylabel('Im[G(j*w)]')
title(['Discretizzazione: all''indietro (r), bilineare (b), poli-zeri (g).T=' num2str(T)])


pause
end

%
return%
