convert a transfer function to controllable and observable canonical form

Hi, I want to convert a transfer function to controllable and observable canonical form for the
num = [4];
den = [1 0.8 4];
Gp = tf (num , den)
Gp =
4
---------------
s^2 + 0.8 s + 4

 Accepted Answer

num = [4];
den = [1 0.8 4];
Gp = tf (num , den);
The canon function requesting the 'companion' canonical form directly produces the observable canonical form:
GpssObs = canon(Gp,'companion')
GpssObsA = GpssObs.A
GpssObsB = GpssObs.B
GpssObsC = GpssObs.C
GpssObsD = GpssObs.D
producing:
GpssObsA =
0 -4
1 -0.8
GpssObsB =
1
0
GpssObsC =
0 4
GpssObsD =
0
The controllable canonical form is then:
GpssConA = GpssObsA.'
GpssConB = GpssObsC.'
GpssConC = GpssObsB.'
GpssConD = GpssObsD
producing:
GpssConA =
0 1
-4 -0.8
GpssConB =
0
4
GpssConC =
1 0
GpssConD =
0
Se the documentation section on: Canonical State-Space Realizations for a full discussion.
Update by Arkadiy Turevskiy at MathWorks on 6/18/2024
The answer above is valid for the software release that was current at the time the answer was posted. As of R2024a the doc link is still correct, but a different function should be used to compute controllable and observable forms.
Please use the function compreal, and set the argument type to "c" or "o" for controllable and observable forms respectively.

4 Comments

My pleasure!
If my Answer helped you solve your problem, please Accept it!
Hello there,
The documentation on observable canonical form states that the B matrix should contain the values from the transfer function numerator while the C matrix should be a standard basis vector. However using the "canon(...,'companion')" command produces B and C matrices that are swapped to what is expected per the documentation, both in the given example above and my own experiences.
Although turning this state space back into a transfer function produces the correct result I cannot figure out why this discrepancy exists (when I try to do the math by hand it produced some equation with time derivatives of u which I didn't bother to solve).
If you have any insight as to why this is the case I would greatly appreciate it. Thanks in advance.
The outputs in this answer (for observable and controllable forms) do not match my class notes or other documentation I found online, for example here and here. The differences are in the B and C matrices.
Star Strider. This MATLAB example contradicts the documentation (https://uk.mathworks.com/help/control/ug/canonical-state-space-realizations.html)
documentaion says observable canonical form has:
in example: n = 2, b0 = 0, bn1 = 0; b2 = 4, a0 = 1, a1 = 0.8, a0 = 0.4 should give:
B0 = [4 0]'
C0 = [0 1]
MATLAB example gives:
B0 = [1 0]'
C0 = [0 4]
Documentation is correct, MATLAB's canon() is wrong?

Sign in to comment.

More Answers (2)

for the given matric how can i designe observer and pole placment and then implement the designe in simulink
apreicate your support
deno=[1 0.8 4];
num=[4];
Gp=(num,deno)
A =[0 1 ; -4 - -0.8];
B =[0;4];
C =[1 0];
D =[0];

3 Comments

I have very little experience with Simulink. I cannot help you with it.
Use the place function to do pole placement. (This is a Control System Toolbox function. I have no idea how to do it in Simulink.)

Sign in to comment.

I would like to ask how can I convert SIMO system to controllable form. I did not find anything about SIMO or MIMO systems and this cannot be applied since C and B matrices will result in frong dimensions.

Categories

Find more on Control System Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!