% Program ini men-simulasikan Sistem Kendali Digital
% dengan pencuplik ideal dan ZOH di depan plant G(s)
% lalu dikendalikan dengan umpan-balik satuan
clc
clear
% Tentukan periode cuplik, misalnya:
T=0.5;
% Satu periode cuplik, dibagi menjadi periode 
% komputasi yang lebih kecil, misalnya: 
dt=0.01;
% Sehingga skala waktu kontinyu pada setiap T:
t=0:dt:T;
k=length(t);
% Tentukan keadaan awal isyarat keluaran:
c(1)=0;
% Isyarat masukan diambil dari file lain:
r(1)=masukan(t(1));
% Sehingga "error" pada t=0:
e(1)=r(1)-c(1);
% Tentukan waktu akhir simulasi, misalnya:
ta=10;
% Jumlah periode cuplik sampai akhir simulasi:
K=round(ta/T);
% Model Nisbah Alih dari G(s), misalnya 1/(s+1): 
num=[0 1];
den=[1 1];
sys=tf(num,den);
% Kita mulai menghitung untuk plotting:
iplot=0;
% Mulai simulasi sebanyak K kali:
for i=1:K
   % Ini cuma buat menandai loop yang dikerja:
   home
   count=i
   clc
   % Isyarat "error" e(t) musti di-ZOH konstan sepanjang T:
   for j=1:k
       et(j)=e(i);
   end
   % Keadaan awal dari isyarat keluaran pada periode ini:
   c0=c(i);
   % Siap untuk simulasi 0<=t<=T:
   [ct t]=lsim(sys,et,t,c0);
   % Kumpulkan data untuk di-plot nanti:
   for n=1:k
       cplot(n+iplot)=ct(n);
       % Khusus untuk t, harus ditambah satu periode, jadi:
       tplot(n+iplot)=t(n)+((i-1)*T);
       % Isyarat masukan dan cuplikannya, error dan cuplikan c(t):
       rtplot(n+iplot)=masukan(tplot(n+iplot));
       rzplot(n+iplot)=masukan((i-1)*T);
       eplot(n+iplot)=et(n);
       czplot(n+iplot)=c(i);
   end
   % Hitungan untuk plotting bertambah k:
   iplot=iplot+k;
   % Cuplikan dari isyarat masukan:
   r(i+1)=masukan(i*T);
   % Tentukan lagi keadaaan awal untuk periode berikut:
   c(i+1)=ct(k);
   e(i+1)=r(i+1)-c(i+1);
end;
subplot(2,1,1),plot(tplot,cplot,tplot,czplot), grid on
subplot(2,1,2),plot(tplot,rtplot,tplot,rzplot,tplot,eplot), grid on
'   t    masukan r(t)   error e(t)    keluaran c(t)'
[tplot' rtplot' eplot' cplot']
'   t    cuplikan r(k)   cuplikan c(t)'
[tplot' rzplot' czplot']