49 views (last 30 days)

I've modelled a system in simulink and used operspec and linearise to extract a state space system. While the activity has worked well, I have a downstream process which requires the state space to be expressed in a different form.

Without modifying the simulink model, is there a matlab command or series of commands that is capable of rearranging a state space system such that some parameters which where previously ouputs become states. For context, my downstream process will also be dropping a number of states.

I've been using simulink, simulink control, system identification and the control system toolbox.

Paul
on 14 Dec 2020

Let's assume that the state space model from Simulink is defined as:

xdot = A*x + B*u

[y1;y2] = [C1; C2] * x + [0;D2] u

where y1 are the outputs that you want to be state variables (you can always order the ouputs this way) and all matrices are of compatible dimensions. Note that D1 == 0.

Now we have at least two options.

The first option is to add additional states (w) with derivatives equal to the derivatives of the outputs

w = y1

wdot = y1dot = C1*xdot = C1*A*x + C1*B*u.

Now we can augment the state vector x witht the new states w. By definition, the new outputs that replace y1 are just w. Hence the new state space model is:

[xdot;wdot] = [A 0;C1*A 0] * [x;w] + [B;C1*B] * u

[ynew;y2] = [0 I;C2 0] * [x;w] + [0;D] * u

where the zero and identity matrices are of approropriate dimension. The result will be a non--minimal state space realization that preseves the original states, retains the input/output transfer function from u to y, and has outputs ynew that are state variables.

Here's an example.

First, define some state space model

>> sys1 = minreal(ss(zpk([tf(1,[1 1]);tf(1,conv([1 1],[1 2]));tf(1,conv([1 1],[1 3]))])))

sys1 =

A =

x1 x2 x3

x1 -2.067 -0.2775 -0.1388

x2 0.2401 -1.212 0.894

x3 0.03861 0.5588 -2.721

B =

u1

x1 0.9679

x2 0.6052

x3 1.303

C =

x1 x2 x3

y1 0.1629 0.6703 0.3352

y2 -0.6095 0.4695 0.2348

y3 0.06517 0.4681 -0.2659

D =

u1

y1 0

y2 0

y3 0

Continuous-time state-space model.

Let's look at its transfer function matrix in zpk form (note the cancellations in the individual elements):

>> zpk(sys1)

ans =

From input to output...

(s+2) (s+3)

1: -----------------

(s+2) (s+3) (s+1)

(s+3)

2: -----------------

(s+2) (s+3) (s+1)

(s+2)

3: -----------------

(s+2) (s+3) (s+1)

Continuous-time zero/pole/gain model.

Now defne a new state space realization using the augmented state vector and check its transfer function in zpk form:

>> sys2=ss([[sys1.a ; sys1.c(1:2,:)*sys1.a] zeros(5,2)],[sys1.b;sys1.c(1:2,:)*sys1.b],[zeros(2,3) eye(2);sys1.c(3,:) zeros(1,2)],[zeros(2,1);sys1.d(3,:)]);

>> zpk(sys2)

ans =

From input to output...

s (s+2) (s+3)

1: -------------------

s (s+3) (s+2) (s+1)

s (s+3)

2: -------------------

s (s+3) (s+2) (s+1)

(s+2)

3: -----------------

(s+3) (s+2) (s+1)

Continuous-time zero/pole/gain model.

The transfer function matrices are the same (after cancellation), but additional poles at the origin show up because of the non-minimal realization. As must be the case, the first two outputs are state variables.

>> sys2.c

ans =

0 0 0 1.0000e+00 0

0 0 0 0 1.0000e+00

6.5167e-02 4.6814e-01 -2.6593e-01 0 0

Another option is to define a new state vector (z) that is a linear combination of the original state vector (x) such that elements of z are the outputs that we want to be states. In other words

z = Tx = [C1; V] *x

where it is assumed that C1 has full row rank and that a matrix V can be found such that T is invertible. I'm pretty sure (not positive) that such a V can always be found. If we further assume that each row of C1 has a non-zero element in more than one column, then one option is to choose V such that each row of V is zero except in one column (different columns for each row). If this is assumption is not true, then it still should be easy to find a V.

Here we define T such that the first two states are the desired outputs and the third state is preserved.

>> T=[sys1.c(1:2,:);[0 0 1]]

T =

1.6292e-01 6.7034e-01 3.3517e-01

-6.0951e-01 4.6951e-01 2.3476e-01

0 0 1.0000e+00

Verify that T is invertible.

>> rank(T)

ans =

3

This tansformation T is called a similarity transformation and can used to define a new realization in terms of z (instead of x)

>> sys3=ss2ss(sys1,T)

sys3 =

A =

x1 x2 x3

x1 -1 -4.857e-17 -4.441e-16

x2 1 -2 -4.441e-16

x3 0.7396 0.1343 -3

B =

u1

x1 1

x2 2.116e-16

x3 1.303

C =

x1 x2 x3

y1 1 0 -5.551e-17

y2 0 1 0

y3 0.6513 0.06717 -0.5

D =

u1

y1 0

y2 0

y3 0

Continuous-time state-space model.

>> zpk(sys3)

ans =

From input to output...

(s+2) (s+3)

1: -----------------

(s+1) (s+2) (s+3)

(s+3)

2: -----------------

(s+1) (s+2) (s+3)

(s+2)

3: -----------------

(s+1) (s+2) (s+3)

Continuous-time zero/pole/gain model.

As expected, the first two outputs of sys3 are now state variables and the transfer function matrix of sys3 is the same as that of sys1.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
## 0 Comments

Sign in to comment.