Mercurial > forge
changeset 9361:e8ba2542117e octave-forge
control-devel: touch up example
author | paramaniac |
---|---|
date | Fri, 20 Jan 2012 15:42:58 +0000 |
parents | 8a461ce54ed3 |
children | 07e770fd6f84 |
files | extra/control-devel/devel/madievski.m |
diffstat | 1 files changed, 58 insertions(+), 74 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/control-devel/devel/madievski.m Thu Jan 19 18:14:57 2012 +0000 +++ b/extra/control-devel/devel/madievski.m Fri Jan 20 15:42:58 2012 +0000 @@ -1,5 +1,19 @@ -%clear all, close all, clc; +%% -*- texinfo -*- +%% Frequency-weighted controller reduction. +% =============================================================================== +% Frequency Weighted Controller Reduction Lukas Reichlin December 2011 +% =============================================================================== +% Reference: Madievski, A.G. and Anderson, B.D.O. +% Sampled-Data Controller Reduction Procedure +% IEEE Transactions of Automatic Control +% Vol. 40, No. 11, November 1995 +% =============================================================================== + +% Tabula Rasa +clear all, close all, clc + +% Plant Ap1 = [ 0.0 1.0 0.0 0.0 ]; @@ -29,7 +43,7 @@ P = ss (Ap, Bp, Cp, Dp); - +% Controller Ac = [ -0.4077 0.9741 0.1073 0.0131 0.0023 -0.0186 -0.0003 -0.0098 -0.0977 -0.1750 0.0215 -0.0896 -0.0260 0.0057 0.0109 -0.0105 0.0011 0.0218 -0.0148 0.7769 0.0034 -0.0013 -0.0014 0.0011 @@ -54,89 +68,59 @@ K = ss (Ac, Bc, Cc, Dc); -Kr = btaconred (P, K, 4, 'feedback', '-') - - -tau = 0.1; -Kd = c2d (K, tau); -Pd = c2d (P, tau); +% Controller Reduction +Kr4 = spaconred (P, K, 4, 'feedback', '-') +Kr2 = spaconred (P, K, 2, 'feedback', '-') -s = tf ('s'); -F = 5 / (s + 5); - +% Open Loop L = P * K; -%Ld = Pd * Kd; -Lr = P * Kr; +Lr4 = P * Kr4; +Lr2 = P * Kr2; +% Closed Loop T = feedback (L); -%Td = feedback (Ld); -Tr = feedback (Lr); +Tr4 = feedback (Lr4); +Tr2 = feedback (Lr2); +% Frequency Range w = {1e-2, 1e1}; +% Bode Plot of Controller +[mag, pha, w] = bode (K, w); +[magr4, phar4, wr4] = bode (Kr4, w); +[magr2, phar2, wr2] = bode (Kr2, w); + +mag = 20 * log10 (mag); +magr4 = 20 * log10 (magr4); +magr2 = 20 * log10 (magr2); + figure (1) -step (T, 100) +subplot (2, 1, 1) +semilogx (w, mag, wr4, magr4, wr2, magr2) +axis ('tight') +ylim (__axis_margin__ (ylim)) +grid ('on') +title ('Bode Diagrams of K and Kr') +ylabel ('Magnitude [dB]') + +subplot (2, 1, 2) +semilogx (w, pha, wr4, phar4, wr2, phar2) +axis ('tight') +ylim (__axis_margin__ (ylim)) +grid ('on') +xlabel ('Frequency [rad/s]') +ylabel ('Phase [deg]') +legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'location', 'southwest') + +% Step Response of Closed Loop +[y, t] = step (T, 100); +[yr4, tr4] = step (Tr4, 100); +[yr2, tr2] = step (Tr2, 100); figure (2) -%bode (L) -bode (K, w) - -figure (3) -%step (Td, 100) -step (Tr, 100) - -figure (4) -%bode (Ld) -bode (Kr, w) - -figure (5) -%step (feedback (P*Kr), 100) - - - -[mag, pha, w] = bode (K, w); -[magr, phar, wr] = bode (Kr, w); - -mag = 20 * log10 (mag); -magr = 20 * log10 (magr); - - -%figure (6) - - - xl_str = "Frequency [rad/s]"; - - - subplot (2, 1, 1) - semilogx (w, mag, "b", wr, magr, "r") - axis ("tight") - ylim (__axis_margin__ (ylim)) - grid ("on") - title ("Bode Diagrams of K and Kr") - ylabel ("Magnitude [dB]") - - subplot (2, 1, 2) - semilogx (w, pha, "b", wr, phar, "r") - axis ("tight") - ylim (__axis_margin__ (ylim)) - grid ("on") - xlabel (xl_str) - ylabel ("Phase [deg]") - legend ("K (8 states)", "Kr (4 states)", "location", "southwest") - - print -depsc2 madievski-bode.eps - - -[y, t] = step (T, 100); -[yr, tr] = step (Tr, 100); - -figure (6) -plot (t, y, 'b', tr, yr, 'r') +plot (t, y, tr4, yr4, tr2, yr2) grid ('on') title ('Step Response of Closed Loop') xlabel ('Time [s]') ylabel ('Output [-]') -legend ('K (8 states)', 'Kr (4 states)', 'Location', 'SouthEast') - -print -depsc2 madievski-step.eps - +legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'Location', 'SouthEast')