File: flts.cat

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (111 lines) | stat: -rw-r--r-- 2,957 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

flts(1)                        Scilab Function                        flts(1)
NAME
  flts - time response (discrete time, sampled system)

CALLING SEQUENCE
  [y [,x]]=flts(u,sl [,x0])
  [y]=flts(u,sl [,past])

PARAMETERS

  u         : matrix (input vector)

  sl        : list (linear system syslin)

  x0        : vector (initial state ; default value=0)

  past      : matrix (of the past ; default value=0)

  x,y       : matrices (state and output)

DESCRIPTION

  State-space form:

  sl is a syslin list containing the matrices of the following linear system

  sl=syslin('d',A,B,C,D) (see syslin):
    x[t+1] = A x[t] + B u[t]
    y[t] = C x[t] + D u[t]
  or, more generally, if D is a polynomial matrix (p = degree(D(z))) :

    D(z)=D_0 + z D_1 + z^2 D_2 +..+ z^p D_p
    y[t] = C x[t] + D_0 u[t] + D_1 u[t+1] +..+ D_[p] u[t+p]
    u=[u0,u1,... un]  (input)
    y=[y0,y1,... yn-p]  (output)
    x=x[n-p+1]  (final state, used as x0 at next call to flts)

  Transfer form:

   y=flts(u,sl[,past]). Here sl is a linear system in transfer matrix
  representation i.e
  sl=syslin('d',transfer_matrix) (see syslin).

      past = [u     ,...,  u   ]
             [ -nd           -1]
             [y     ,...,  y   ]
             [ -nd           -1]

  is the matrix of past values of u and y.

  nd is the maximum of degrees of lcm's of each row of the denominator matrix
  of sl.
  u=[u0 u1 ... un]  (input)
  y=[y0 y1 ... yn]  (output)
  p is the difference between maximum degree of numerator and maximum degree
  of denominator

EXAMPLE
  sl=syslin('d',1,1,1);u=1:10;
  y=flts(u,sl);
  plot2d2("onn",(1:size(u,'c'))',y')
  [y1,x1]=flts(u(1:5),sl);y2=flts(u(6:10),sl,x1);
  y-[y1,y2]

  //With polynomial D:
  z=poly(0,'z');
  D=1+z+z^2; p =degree(D);
  sl=syslin('d',1,1,1,D);
  y=flts(u,sl);[y1,x1]=flts(u(1:5),sl);
  y2=flts(u(5-p+1:10),sl,x1);  // (update)
  y-[y1,y2]

  //Delay (transfer form): flts(u,1/z)
  // Usual responses
  z=poly(0,'z');
  h=(1-2*z)/(z^2+0.3*z+1)
  u=zeros(1,20);u(1)=1;
  imprep=flts(u,tf2ss(h));   //Impulse response
  plot2d2("onn",(1:size(u,'c'))',imprep')
  u=ones(1,20);
  stprep=flts(u,tf2ss(h));   //Step response
  plot2d2("onn",(1:size(u,'c'))',stprep')
  //
  // Other examples
  A=[1 2 3;0 2 4;0 0 1];B=[1 0;0 0;0 1];C=eye(3,3);Sys=syslin('d',A,B,C);
  H=ss2tf(Sys); u=[1;-1]*(1:10);
  //
  yh=flts(u,H); ys=flts(u,Sys);
  norm(yh-ys,1)
  //hot restart
  [ys1,x]=flts(u(:,1:4),Sys);ys2=flts(u(:,5:10),Sys,x);
  norm([ys1,ys2]-ys,1)
  //
  yh1=flts(u(:,1:4),H);yh2=flts(u(:,5:10),H,[u(:,2:4);yh(:,2:4)]);
  norm([yh1,yh2]-yh,1)
  //with D<>0
  D=[-3 8;4 -0.5;2.2 0.9];
  Sys=syslin('d',A,B,C,D);
  H=ss2tf(Sys); u=[1;-1]*(1:10);
  rh=flts(u,H); rs=flts(u,Sys);
  norm(rh-rs,1)
  //hot restart
  [ys1,x]=flts(u(:,1:4),Sys);ys2=flts(u(:,5:10),Sys,x);
  norm([ys1,ys2]-rs,1)
  //With H:
  yh1=flts(u(:,1:4),H);yh2=flts(u(:,5:10),H,[u(:,2:4); yh1(:,2:4)]);
  norm([yh1,yh2]-rh)

SEE ALSO
  ltitr, dsimul, rtitr