Obiekty
list(a1,....an) - Scilab object and list function definition:
mlist(typ,a1,....an ) - Scilab object, matrix oriented typed list definition
tlist(typ,a1,....an ) - Scilab object and typed list definition:
rlist(a1,....an) = tlist(['r','num';'den','dt'], a1,....an) - skrót
lsslist(a1,....an) = tlist(['lss','A';'B';'C';'X0','dt'], a1,....an) - skrót
W Matlabie są obiekty LTI
SYS = ss(A, B, C, D)
SYS = tf( L, M)
SYS = zpk( Z, P, K)
Definiowanie modelu
syslin - linear system definition
równania stanu |
transmitancje |
[sl] = syslin(dom, A, B, C [,D [,x0] ]) |
[sl] = syslin(dom,N,D) [sl] = syslin(dom,H) |
co odpowiada ogólnym wywołaniom tlist:
sl=tlist(['lss','A','B','C','D','X0','dt'],A,B,C,D,x0,dom) |
sl=tlist(['r','num','den','dt'],N,D,dom) sl=tlist(['r','num','den','dt'],H(2),H(3),dom) |
lub przy użyciu funkcji skrótowych
lsslist(A, B, …) |
rlist(N, D) |
gdzie: dom = `c' - continues, `d' - discrete
Przykłady:
A=[0,1;0,0];B=[1;1];C=[1,1]; S1=syslin('c',A,B,C) s=poly(0,'s'); D=s; S2=syslin('c',A,B,C,D)
S1("A") //A S1("X0"), S1("dt") // X0 and time domain |
s=poly(0,'s'); H1=(1+2*s)/s^2, S1bis=syslin('c',H1) H2=(1+2*s+s^3)/s^2, S2bis=syslin('c',H2) |
Połączenia
S1+S2
[S1,S2]
ss2tf(S1)-S1bis
S1bis+S2bis
S1*S2bis
size(S1)
Sl=Sl1/.Sl2 feedback - feedback operation
Matlab
append - złożenie w jeden LTI bez łączenia składników
+/- parallel -
* series
feedback
star - część wyjść połączona z wejściami
connect
sys1\sys1 = inv(sys1)*sys2
sys1/sys2 = sys1/inv(sys2)
Konwersja
ss2tf - conversion from state-space to transfer function
[h] = ss2tf(sl)
[Ds,NUM,chi] = ss2tf(sl)
[h] = ss2tf(sl,"b")
[Ds,NUM,chi] = ss2tf(sl,"b")
[h] = ss2tf(sl,rmax)
[Ds,NUM,chi] = ss2tf(sl,rmax)
tf2ss - transfer to state-space
sl = tf2ss(h [,tol])
Wyciąganie danych z modeli
abcd - state-space matrices
[A,B,C,D] = abcd(sl) - podaj macierze systemu sl
lft - linear fractional transformation
[P1]=LFT(P,K)
[P1]=LFT(P,r,K)
[P1,r1]=LFT(P,r,Ps,rs)
Matlab
[A,B,C,D] = SSDATA(SYS_SS)
[Z,P,K] = ZPKDATA(SYS_ZPK)
[L, M] = TFDATA(SYS_TF)
lin - linearization
[A,B,C,D] = lin(sim,x0,u0)
[sl]=lin(sim,x0,u0)
ssrand - random system generator (definiowanie losowego systemu)
sl = ssrand (nout, nin, nstate)
[sl, U] = ssrand (nout, nin, nstate, flag)
gdzie:
nout - ilość wyjść
nin - ilość wejść
nstate - ilość zmiennych stanu
flag - określone własności systemu, flag=list(`typ_systemu', parametry)
'co' - controllable; 'uo' - unobservable; 'ncno' - non-controllable-non-observable; 'st' - stabilizable; 'dt' - detectable; 'on' - output-nulling; 'ui' - uknown-input.
Matlab
rss,drss - Random stable state-space models.
Analogie do Toolbox Control
Charakterystyki czasowe
csim - simulation (time response) of linear system
[y [,x]] = csim (u, t, sl, [ x0 [,tol] ])
gdzie:
u - sterowanie:
funkcja - [inputs]=u(t)
lista - inputs = ut ( t, par1, …, parn
string - „impuls”, „step”
wektor - wektor wartości u odpowiadających poszczególnym chwilą t
t - wektor czasu; t(1)=czas początkowy
sl - system liniowy, jaki generuje listę syslin
x0 - warunki początkowe: x0=x( t(1) )
y - macierz wyjść y=[ y( t(i) ) ], i=1..n
x - macierz stanu x
tol - wektor [atol rtol] - toleracja absolutna i relatywna
Przykład:
s = poly(0,'s'); rand('seed',0); w = ssrand(1,1,3); w('A')=w('A') - 2*eye();
t = 0 : 0.05 : 5;
// impulse(w) = step (s * w)
xbasc(0); xset("window",0); xselect();
plot2d( [t',t'] , [ (csim( 'step', t, tf2ss(s)*w))', 0*t ' ] )
xbasc(1); xset("window",1); xselect();
plot2d([ t',t'] , [ (csim( 'impulse' , t, w))', 0*t' ] )
//step(w) = impulse (s^-1 * w)
xbasc(3);xset("window",3);xselect();
plot2d([t',t'],[(csim('step',t,w))',0*t'])
xbasc(4);xset("window",4);xselect();
plot2d([t',t'],[(csim('impulse',t,tf2ss(1/s)*w))',0*t'])
//input defined by a time function
deff( 'u=input(t)' , 'u = abs( sin(t) )')
xbasc(); plot2d( [t',t'] , [ ( csim( input, t, w ) )' , 0*t'])
Matlab
step(SYS) - na skok jednostkowy na każdym wejściu
impulse(SYS) - na impuls
initial(SYS, X0) - dla zadanego stanu początkowego (trajektoria ruchu), dla modelu typu SS
lsim(SYS,U,T) - na określone pobudzenie (U-wektor wartości, T- wektor czasu)
Charakterystyki częstotliwościowe
nyquist - nyquist plot
bode - Bode plot
black - Black's diagram (Nichols chart)
gainplot - magnitude plot
freq - frequency response
repfreq - frequency response
Przykład badania:
s=poly(0,'s')
h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
title='(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)';
bode(h,0.01,100,title);
h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225))
clf()
bode([h1;h],0.01,100,['h1';'h'])
Matlab
nyquist(SYS,{WMIN,WMAX}) - Q(P)= Im(Re)
bode (SYS,{WMIN,WMAX}) - wykres modułu i przesunięcia fazowego w funkcji częstotliwości
nichols (SYS,{WMIN,WMAX}) - wzmocnienie pętli otwartej (dB) w funkcji przesunięcia fazy
margin(SYS) - Oblicza zapas wzmocnienia i fazy
Projektowanie układów
linmeq - Sylvester and Lyapunov equations solver
lqe - linear quadratic estimator (Kalman Filter)
lqg - LQG compensator
lqg2stan - LQG to standard problem
lqr - LQ compensator (full state)
obscont - observer based controller
ppol - pole placement
ricc - Riccati equation
Matlab
P = pole(SYS) - zwraca kolumnę wartości biegunów modelu SYS
E = eig(X) - zwraca wektor wartości własne macierzy X
z = tzero(SYS) - zwraca wektor zer transmitancji
pzmap(SYS) - rysuje położenie (mapa) zer i biegunów na płaszczyźnie Im(Re)
[R,K] = RLOCUS(SYS) - znajduje i rysuje linie pierwiastkowe
[K,POLES] = rlocfind(SYS) - dla wskazanego punktu wylicza odpowiadające mu wzoc.i bieguny
rltool(SYS) - Root locus design GUI
[K,S,E] = LQR(A,B,Q,R,N) - Dla obiektu x = Ax + Bu i regulatora u = -Kx
optymalizuje macierz wzmocnień K
wg funkcji kosztu J = Integral {x'Qx + u'Ru + 2*x'Nu} dt
dlqr
lqry - regulator bez dodatków
ldrd - regulator dyskretny dla obwodów ciągłych
kalman - estymator Kalmana
kalmd - dyskretny estymator Kalmana
lqgreg - wyznaczenie regulatora na podstawie danego wzmocnienia i estymatora Kalmana
Przykład Matlab
Utworzenie modelu typu SS na podstawie modelu TF
sys = ss ( tf ( 100, [1 1 100] ) )
Wyznaczamy optymalne wzmocnienie K regulatora u = -Kx, wg kryterium liniowo-kwadratowego J(u)
K = lqry(sys, 10, 1)
Model z zakłóceniami: wejście sterujące u i wejście zakłóceń d
[A, B, C, D] = ssdata(sys) % wyznaczamy macierze modelu obiektu
P = ss(A,[B B],C,[D D]) % input [u;d], output y
Wyznaczenie estymatora Kalmana
KEST = kalman ( P, 1, 0.01 )
Wyznaczenie wynikowego regulator LQG: F = LQ gain + Kalman filter
F = lqgreg ( Kest, K ) %Zwraca model regulatora w postaci opisu SS
Sprawdzenie wyników - porównanie odpowiedzi układu otwartego i zamkniętego
clsys = feedback(sys,F,+1) % układ zamknięty, Note positive feedback
impulse(sys, 'r--', clsys, 'b-')