echo off
clear
clc
disp('Programovy system na navrh Deadbeat regulatoru - klasicky pristup')
disp('Spracoval S.Kozak, 1991-1998 pro potreby vyuky ')
disp(' ')
clc
disp(' ')
disp('Vstup je pren. funkce koeficientu spojiteho procesu: ')
disp('        bn*s^n+...b1*s+b0')
disp('  Gp(s)=----------------- * exp(-Ds)')
disp('        an*s^n+...a1*s+a0')
disp(' ')
disp('Resenim jsou koficienty diskr. regulatoru:')
disp('        q0+q1*z(-1)+...+qn*z(-n) Q(z)')
disp('  Gr(z)=------------------------=----')
disp('         1-p1*z(-1)+...+pn*z(-n) P(z)')
disp(' ')
disp('Pokracuj libovolnou klavesou')
pause
clc
num=input('citatel prenosu [ ]=')
den=input('jmenovatel prenosu [ ]=')
D=input('dopravni zpozdeni D=')
t=input('vyorkovaci perioda (Tv<=D a D/Tv=cele cislo) Tv=')
disp('Spojity model')
disp(' ')
tfsp=tf(num,den,'InputDelay',D)
disp('Pokracuj libovolnou klavesou')
pause
disp(' ')
disp('Diskretni forma')
d=D/t
prfdp=c2d(tfsp,t)
[b,a]=tfdata(prfdp,'v');
disp('Pokracuj libovolnou klavesou')
pause
clc
i=2;
[m,n]=size(a);
q0=0;
while (i<=n)
   q0=q0+b(:,i);
   i=i+1;
end
format long
q0=1/q0;
i=2;
while (i<=n)
   q(:,i)=q0*a(:,i);
   p(:,i)=q0*b(:,i);
   i=i+1;
   q0;
end
q(1)=q0;
disp('Vysledky urceni klasickeho DB regulatoru')
disp(' Perioda vzorkovani')
Tv=t
disp(' Citatel regulatoru Q(z) v kalesajicim poradi mocnin z')
Q=[q]
disp('Pokracuj libovolnou klavesou')
disp(' ')
pause
disp(' Jmenovatel regulatoru P(z) v kalesajicim poradi mocnin z')
P=[p]
disp('Pokracuj libovolnou klavesou')
disp(' ')
pause
disp(' Prenosova funkce DB regulatoru')
p1=p(:,2:n);
if d>0
   pd=zeros(1,d);
   pr=[1 pd -p1];
else
   pr=[1 -p1];
end
prfdr=tf(q,pr,t) %prenosova funkce regulatoru
gu=prfdr*prfdp/(1+prfdr*prfdp);
disp('Prenosova funkce uzavreneho reg. obvodu')
gyw=minreal(gu) %minimalni forma prenosove funkce URO
[numu,denu]=tfdata(gyw,'v');
[y,x]=dstep(numu,denu);
plot(y)
xlabel('kT')
ylabel('y')
grid