File: ui_observer.cat

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (85 lines) | stat: -rw-r--r-- 2,903 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
ddp              Scilab Group              Scilab Function              ddp
NAME
   ui_observer - unknown input observer
  
CALLING SEQUENCE
 [UIobs,J,N]=ui_observer(Sys,reject,C1,D1)
 [UIobs,J,N]=ui_observer(Sys,reject,C1,D1,flag,alfa,beta)
PARAMETERS
 Sys  : syslin list containing the matrices (A,B,C2,D2).
      
 reject
       : integer vector, indices of inputs of Sys which are unknown.
      
 C1   : real matrix
      
 D1   : real matrix. C1 and D1 have the same number of rows.
      
 flag : string 'ge' or 'st' (default) or 'pp'.
      
 alfa : real or complex vector (loc. of closed loop poles)
      
 beta : real or complex vector (loc. of closed loop poles)
      
DESCRIPTION
   Unknown input observer.  Sys: (w,u) --> y is a (A,B,C2,D2) syslin linear
  system with  two inputs w and u, w being the unknown input. The  matrices
  B and D2 of Sys are (implicitly) partitioned as: B=[B1,B2] and
  D2=[D21,D22]  with B1=B(:,reject)  and  D21=D2(:,reject) where reject =
  indices of unknown inputs. The matrices C1 and D1 define z = C1 x + D1
  (w,u), the to-be-estimated output.
  
   The matrix D1 is (implicitly) partitioned as D1=[D11,D12] with
  D11=D(:,reject)
  
   The data (Sys, reject,C1, D1)   define a 2-input 2-output system:
  
   xdot =  A x + B1  w + B2  u
      z = C1 x + D11 w + D12 u
      y = C2 x + D21 w + D22 u
   An observer (u,y) --> zhat is looked for the output z.
  
   flag='ge' no stability constraints flag='st' stable observer    (default)
   flag='pp' observer with pole placement alfa,beta = desired location of
  closed loop poles  (default -1, -2) J=y-output to x-state injection.
  N=y-output to z-estimated output injection.
  
   UIobs = linear system (u,y) --> zhat such that: The transfer function:
  (w,u) --> z  equals the composed transfer function:             [0,I;    
     UIobs              Sys]       (w,u) -----> (u,y) -----> zhat i.e.
  transfer function of system {A,B,C1,D1} equals transfer function 
  UIobs*[0,I; Sys]
  
   Stability (resp. pole placement) requires detectability (resp.
  observability) of (A,C2).
  
EXAMPLE
 A=diag([3,-3,7,4,-4,8]);
 B=[eye(3,3);zeros(3,3)];
 C=[0,0,1,2,3,4;0,0,0,0,0,1];
 D=[1,2,3;0,0,0];
 rand('seed',0);w=ss2ss(syslin('c',A,B,C,D),rand(6,6));
 [A,B,C,D]=abcd(w);
 B=[B,matrix(1:18,6,3)];D=[D,matrix(-(1:6),2,3)];
 reject=1:3;
 Sys=syslin('c',A,B,C,D);
 N1=[-2,-3];C1=-N1*C;D1=-N1*D;
 nw=length(reject);nu=size(Sys('B'),2)-nw;
 ny=size(Sys('C'),1);nz=size(C1,1);
 [UIobs,J,N]=ui_observer(Sys,reject,C1,D1);
 
 W=[zeros(nu,nw),eye(nu,nu);Sys];UIobsW=UIobs*W;   
 //(w,u) --> z=UIobs*[0,I;Sys](w,u)
 clean(ss2tf(UIobsW));
 wu_to_z=syslin('c',A,B,C1,D1);clean(ss2tf(wu_to_z));
 clean(ss2tf(wu_to_z)-ss2tf(UIobsW),1.d-7)
 /////2nd example//////
 nx=2;ny=3;nwu=2;Sys=ssrand(ny,nwu,nx);
 C1=rand(1,nx);D1=[0,1];
 UIobs=ui_observer(Sys,1,C1,D1);
AUTHOR
   F.D.
  
SEE ALSO
   cainv, ddp, abinv