Obtention of state-space system equation for A,B,C,D matrixes including discontinuities

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Obtention of state-space system equation for A,B,C,D matrixes including discontinuities

Beginner1
Hi everyone!

I am trying to validate a small-signal model with state-space system
equations by using A,B,C and D matrixes. I'm wondering how to define the
A,B,C,D matrixes for the lsim command in the case they depend on
discontinuous variables. In my case, these matrixes depend on a function
called /enable/ which is discontinuous with time, so that it includes
non-linearities. My code is well structured since I obtain the response of
the system when A,B,C,D are constant.  However I don't know how to implement
the change when A,B,C,D depend on a function such that.
Perhaps there is another way of obtaining the response of the system instead
of using the lsim command and maybe with another procedure it is possible to
include the dependency of A,B,C and D matrixes with the /enable/ function.
Any suggestion?

This is my code:
"%Packages call
  pkg control load
  pkg io load
 
%State-space system parameters
  kv=15;
  Tv=0.05;
  kq=0.4;
  Tq=0.01;
  kdroop_AC=-3.3;
  droop_FSM=0.05;
  FSM_slope=droop_FSM/0.002;
 
%Definition of simulation time
  Tfinal = 3;
  t = (0:0.0001:Tfinal)';
 
%Enable function
  a = @(t) 0;
  b = @(t) 1;
  f = @(t,t0,t1) a(t) .* (t<t0) + b(t) .* (t>t0&t<t1) +a(t) .* (t>t1);
  t0=1;
  t1=2;
  enable=f(t,t0,t1)
 
% Definition of A,B,C,D matrixes as a function of time
  for t=1:3
  A(t)=[0 0;0 0];
  B(t)=[-kv/Tv kv/Tv 0 0 0 0 -kv*FSM_slope*enable(t,t0,t1)/Tv
kv*enable(t,t0,t1)/Tv -kv*enable(t,t0,t1)/Tv;0 0 kq/Tq -kq/Tq
-(kq/Tq)*kdroop_AC (kq/Tq)*kdroop_AC 0 0 0];
  C(t)=[1 0;0 1];
  D(t)=[-kv kv 0 0 0 0 -kv*FSM_slope*enable(t,t0,t1) kv*enable(t,t0,t1)
-kv*enable(t,t0,t1);0 0 kq -kq -kq*kdroop_AC kq*kdroop_AC 0 0 0];
  endfor

% Definition of State-space equations
% " x.=Ax+Bu; y=Cx+Du "
  stname = {'xv','xq'};
  sys = ss (A,B,C,D,'stname',stname);
%Input read
% Input read
  u_t=xlsread ('Outer_Loop1.xlsx', 'sheet1', 'A3:A300003');
  u_vdcref = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'B3:B300003');
  u_vdc = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'C3:C300003');
  u_qacref = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'D3:D300003');
  u_qac = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'E3:E300003');
  u_vacref = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'F3:F300003');
  u_vac = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'G3:G300003');
  u_fmeas = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'I3:I300003');
  u_pdcref = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'H3:H300003');
  u_paux = xlsread ('Outer_Loop1.xlsx', 'sheet1', 'L3:L300003');
%Initial conditions of state-space variables
x0=[0;0];
%Response of the model to perturbations
 [y,t,x] = lsim(sys,U,t,x0);
"



--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html


-----------------------------------------
Join us March 12-15 at CERN near Geneva
Switzerland for OctConf 2018.  More info:
https://wiki.octave.org/OctConf_2018
-----------------------------------------