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];
[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);

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.


1 Answer 1


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])

%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)

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

%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


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

  • \$\begingroup\$ Many thanks for the clear and helpful answer. I compared the response of the 4th order TF with the above Simulink block diagram I present, and they are nearly identical. I have been trying to remove the electrical part from the block diagram as stated in the original question. Simply replacing everything in the blue box with a gain of 1 seems to retain the same response, however I did not do any calculations to get this gain. Are there any meaningful calculations one could perform also on the block diagram side to reduce it's complexity? \$\endgroup\$
    – rrz0
    Nov 8, 2018 at 5:04
  • 1
    \$\begingroup\$ They will be identical if you don't force the function with more than 1kHz, if you see the above graph, the only change is if you get rid of the top 3 time constants (top to transfer function components). The electrical is most likely contributing to the 1kHz pole, and that doesn't make a difference. Int most applications, you would only need the 4.07rad/sec pole for a plant model and building a controller as that contributes to most of the 'amplitude' and most of the frequency content of the model for the motor. If you needed to control the motor on shorter timescales then use all poles \$\endgroup\$
    – Voltage Spike
    Nov 8, 2018 at 5:36
  • \$\begingroup\$ To reduce the complexity you'll have to find the parts of the mechanical motor that contribute to the higher frequency poles. You can do this intuitively, time constants with higher frequencies have lower mass, lower frequencies have high mass (bigger objects move slower). Same thing goes with electrical components, the bigger the inductor the slower the time constant, the bigger the capacitor the slower the time constant. \$\endgroup\$
    – Voltage Spike
    Nov 8, 2018 at 5:39
  • 1
    \$\begingroup\$ Thanks for the explanation, unfortunately I am still unsure how reducing integrator 5 from the above diagram results in the same response. I can't find any relevant information and I cannot explain it intuitively. \$\endgroup\$
    – rrz0
    Nov 8, 2018 at 15:40
  • \$\begingroup\$ One trick to remove a time constant is to supply power to the motor through a current source instead of a voltage source. Of course this current source will have infinite voltage capabilities, but that's just theoretical. It means that the faster you want the motor to respond, the higher the output voltage range of your current source has to be. \$\endgroup\$ Nov 9, 2018 at 3:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.