Control System – How to Reduce Transfer Function Order While Maintaining Response

controlcontrol systemMATLABtransfer function

Scenario:

I have been going through Ogata Modern Control Engineering book and working through several exercises to improve my understanding of basic control principles. I came across the following example which I am struggling to solve.

I am stuck with reducing order of my transfer function while maintaining the same (or very similar) response.

I am modelling a system which includes a mechanical and an electrical part. The overall transfer function for my system is 5th order.

The time constant for the electrical part is very small when compared to the mechanical time constants and due to this we can replace the electrical system with a gain and get an equivalent 4th order system.

As an example, my system is similar to this (taken from Ogata's control book):

enter image description here

This is my transfer function, and it includes both the mechanical and electrical parts of my system:

enter image description here

I want to reduce the 5th order system, to a 4th order system, while maintaining the same response.

What I have tried:

In order to know whether I have reduced the system correctly, I designed the block diagram for my model on Simulink.

enter image description here

This is the response to a chirp signal:

enter image description here

My idea was to use the above response, to see whether I have reduced the transfer function correctly.

Next, I proceeded to find the poles, zeros and gain of my system. To do so, I used this piece of code available on MathWorks, with the 5th order TF above:

b = [0.0001 10];
a = [0.005 5.00010060 0.661600001 61.01102010 2.1101 10];
fvtool(b,a,'polezero')
[b,a] = eqtflength(b,a);
[z,p,k] = tf2zp(b,a) 

The output was as follows, which is exactly what I had expected:

enter image description here

and the equivalent PZ-map:

enter image description here

The above results show the pole associated with the electrical circuit, which is far to the left. This can be removed, thus reducing the order of the transfer function from 5th order to 4th order.

Next, I proceeded by using zp2tf to eliminate the pole on the far left as follows, however the output does not seem to make sense.

z = [-100000]';
p = [
  -0.04 + 0.0347i  % *100
  -0.04 - 0.0347i
  -0.02 + 0.0041i
  -0.02 - 0.0041i
];
k = 0.0200;
[b,a] = zp2tf(z,p,k);
[bnew,anew] = zp2tf(z,p,k);
bnew/200
anew/200

ans =

         0         0         0         0    0.0001   10.0000


ans =

    0.0050    0.0500    0.0001    0.0001    0.0000    0.0000

I was expecting the above to result in a 4th order system, but clearly I am doing something wrong with my approach.

I am stuck with replacing the electrical part of the block diagram with a simple gain block, while maintaining the same (or very similar) output response.

How can I get the equivalent block diagram model for the fourth order system?

Any pointers, tips and/or advice on what I should do would be appreciated.

Best Answer

The system has two complex poles and one regular one:

     Pole              Damping       Frequency      Time Constant  
                                   (rad/seconds)      (seconds)    

-1.68e-02 + 4.07e-01i     4.13e-02       4.07e-01         5.94e+01    
-1.68e-02 - 4.07e-01i     4.13e-02       4.07e-01         5.94e+01    
-4.32e-02 + 3.47e+00i     1.25e-02       3.47e+00         2.31e+01    
-4.32e-02 - 3.47e+00i     1.25e-02       3.47e+00         2.31e+01    
-1.00e+03                 1.00e+00       1.00e+03         1.00e-03  

The highest one is at 1krad, and could be eliminated, you could also get rid of the lowest two: enter image description here

%I see three time constants
tfmotor = tf([0.0001 10],[0.005 5 0.6616 61.1 2.11 10])
damp(tfmotor)

%find all basic transfer functions
[r,p,k] = residue([0.0001 10]*2000,2000*[0.005 5 0.6616 61.1 2.11 10]);

%eliminate highest frequency time constants
[b,a] = residue(r(2:5),p(2:5),k);
tfmotorReduced = tf(b,a)
damp(tfmotorReduced)



[b,a] = residue(r(4:5),p(4:5),k);
tfmotorReduced2 = tf(b,a)
damp(tfmotorReduced2)


%use impulse to show all frequencies (hit it with a dirac delta function, to make all frequencies ring.
figure;impulse(tfmotor,'b'),hold on,impulse(tfmotorReduced,'r'),impulse(tfmotorReduced2,'g')
legend('5-pole system','High frequency pole gone','Only lowest freq pole')

%better way to simulate, you can use chrip, step or any function for input
t = 0:0.001:10;
y =lsim(tfmotor,chirp(t,100,10,1),t); 
figure;bode(tfmotor,'b'),hold on,bode(tfmotorReduced,'r'),bode(tfmotorReduced2,'g')
 legend('5-pole system','High frequency pole gone','Only lowest freq pole')

enter image description here

Edit

The first pole is at 0.4rad (shown in black) The second pole is at 3.4rad (shown in yellow) The third pole is at 1krad (shown in red)

If you are only concerned about building a controller (a 2nd order controller) the main pole at 0.4 rad you would be able to control the biggest amplitudes, but it would have some vibration at 3.4krad because the controller wouldn't be able to respond. A 4th order controller could take out the frequencies at 3.4rad. Right now the pole at 1krad is negligible (very low in amplitude) and you wouldn't need to worry about it for a controller

Remember that for a 24bit 5V ADC -130dB would be near the nV level, so unless you need that kind of accuracy, after -100db it probably doesn't matter because you won't even be able to build a controller to control that level of accuracy in the presence of noise. (you would also need a precison DAC) The other caveat is if you built this with analog electronics for the controller, you'll still have noise after -100dB. Building controllers in the presence of noise is a topic for another day.

enter image description here

enter image description here