%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%      cviceni z predmetu Matlab       %
%       6.4.2005, Ladisav Kral         %  
%       System Control Toolbox         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc

% Vytvoreni systemu %
%%%%%%%%%%%%%%%%%%%%%
%1) prenos
          %H(s) = s/(s^2 + 2s + 10)
%! polynomy, prikazy roots a poly, polyval, conv, deconv
citatel = [1 0]
jmenovatel = [1 2 10]
sys_prenos = tf(citatel, jmenovatel)

%model pohybu hlavicky harddisku
%HDD(s) = 0.05/(0.01s^2 + 0.001s + 10)
HDD = tf([0.05],[0.01 0.001 10])

%2) stavova reprezentace
                        %x_dot = Ax + Bu;
                        %y = Cx + Du;
%!matice prikazy, det, trace, eig, lu
%pozor na rozmery matic!
A = [0 1; -5 -2];
B = [0; 3];
C = [1 0];
D = 0;
sys_stav = ss(A,B,C,D)
%odkaz na jednotlive matice sys.A, sys.B ...

%3) poloha polu a nul systemu
          %H(s) = s/[(s + 1 - 3i)*(s + 1 + 3i)] ---> viz ad1
z = 0;            %nuly (Zeros)
p = [2 1+i 1-i];  %poly (Poles)
k = -2;           %zesileni (Gain)
sys1_poly_nuly = zpk(z,p,k) 
%prikazy set a get

% konverze mezi jednotlivymi typy reperezntaci %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%prikazy ss2tf, tf2ss, zp2tf, zp2ss s patricnymi parametry!
%vice ---> help [dany prikaz]


% diskretizace %
%%%%%%%%%%%%%%%%
% vytvoreni diskretniho systemu, 
%H(z) = (z-1)/(z^2 -1.85z+0.9)
citatel_z = [1 -1]
jmenovatel_z = [1 -1.85 0.9]
H_diskretni = tf(citatel_z,jmenovatel_z,0.1)  %vytvoreni diskretniho systemu s 
                                              %danou periodou vzorkovani, napr. 0.1

%diskretizace spojineho systemu
sys_spojity = tf([1 0.5 100],[1 5 100]) % spojity system - prenos
sysd_diskretni = c2d(sys_spojity,0.1)   % diskretizace s periodou vzorkovani 0.1
                                        % ruzne metody diskretizace! viz help
sysd_diskretni2 = c2d(sys_spojity,0.025)    
%z diskretniho  systemu lze tez udelat spojity (kontinualizace), prikaz d2c
sys_opet_spojity = d2c(sysd_diskretni)
step(sys_spojity,'b',sysd_diskretni,'r',sysd_diskretni2,'g') 
legend('spojity','diskretni T=0.1','diskretni T=0.025')
%funkce d2d ---> prevzorkovani



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% zakladni charkteristiky systemu ---> analyza modelu %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%zjisteni polu 
   pole(sys_stav)
%zjisteni polu 
   zero(sys_stav)
%pocet vstupu a vystupu systemu    
   size(sys_stav) 
%matice riditelnosti   
   ctrb(sys_stav)
%matice pozorovatelnosti
   obsv(sys_stav)

%nastroj ltiview
%ltiview  %import vice systemu do jednotlivych grafu
          %edit ---> plot configuration ---> moznost vyberu grafu
ltiview(sys_prenos,sys_stav,sys_spojity,sysd_diskretni)
%pravym mysitkem na obrazek chracteristics --->...

%nebo jednotlive prikazy:
%prechodova charka: 
figure(3)
    step(sys_prenos), %pravym mysitkem na obrazek chracteristics --->...
%bodeho charka: 
figure(4)
    bode(sys_prenos)
%nicholson: 
figure(5)
    nichols(sys_prenos), 
%nyquistova charka: 
figure(6)
    nyquist(sys_prenos),
%GMK: 
figure(7)
    rlocus(sys_prenos), %sgrid
%bezpecnost ve fazi, bezpecnost v zesileni
figure(8)
    margin(sys_prenos),    
    

%odezva systemu pri dane frekvenci
figure(9)
 i=0.1:0.1:50; a=freqresp(sys_prenos,i);  %zkuste se systemem sys_stav
 for i=1:500; 
     plot(a(i),'+'),
     hold on,
 end

% spojovani modelu %
%%%%%%%%%%%%%%%%%%%%
% 'podobnost' se spojovanim bloku v simulinku
%prikazy series, parallel, feedback (pozor na +- vazbu!)
%pr.:
%prima vazba 1/s (integrator--->nestabilni), zpetna vazba (s+2)/(s^2 + 3s + 1)
%----> jako celek stabilni


%nastroj pro navrh regulatoru
%sisotool 
%GMK - rlocus

%dalsi zajimave funkce: gensig - generovani signalu. 
                       %lqr - navrh regulatoru dle kvadr. kriteria
                       %care, dare - reseni riccatiovy rovnice
                       %rss - nahodny system daneho radu
                       %lsim - sumlace odezvy sytemu na dany vstup
                       
%demo s motorem
dcdemo

%a trebas rlc obvody
rlcdemo






