From: <par...@us...> - 2011-08-05 11:57:14
|
Revision: 8433 http://octave.svn.sourceforge.net/octave/?rev=8433&view=rev Author: paramaniac Date: 2011-08-05 11:57:01 +0000 (Fri, 05 Aug 2011) Log Message: ----------- control: polish ncfsyn stuff for release Modified Paths: -------------- trunk/octave-forge/main/control/devel/MDSSystem.m trunk/octave-forge/main/control/devel/ncfsyn/makefile_ncfsyn.m trunk/octave-forge/main/control/devel/ncfsyn/ncfsyn.m Modified: trunk/octave-forge/main/control/devel/MDSSystem.m =================================================================== --- trunk/octave-forge/main/control/devel/MDSSystem.m 2011-08-04 21:10:29 UTC (rev 8432) +++ trunk/octave-forge/main/control/devel/MDSSystem.m 2011-08-05 11:57:01 UTC (rev 8433) @@ -1,5 +1,5 @@ % =============================================================================== -% Robust Control of a Mass-Damper-Spring System +% Robust Control of a Mass-Damper-Spring System Lukas Reichlin August 2011 % =============================================================================== % Reference: Gu, D.W., Petkov, P.Hr. and Konstantinov, M.M. % Robust Control Design with Matlab, Springer 2005 @@ -61,13 +61,15 @@ D22 = [ 0 ]; -inname = {'u_m', 'u_c', 'u_k', 'u'}; % input names -outname = {'y_m', 'y_c', 'y_k', 'y'}; % output names +inname = {'u_m', 'u_c', 'u_k', 'u'}; % input names +outname = {'y_m', 'y_c', 'y_k', 'y'}; % output names G_nom = ss (A, [B1, B2], [C1; C2], [D11, D12; D21, D22], ... 'inputname', inname, 'outputname', outname); +G = G_nom(4, 4); % extract output y and input u + % =============================================================================== % Frequency Analysis of Uncertain System % =============================================================================== @@ -76,7 +78,7 @@ [delta_m, delta_c, delta_k] = ndgrid ([-1, 0, 1], [-1, 0, 1], [-1, 0, 1]); % Bode Plots of Perturbed Plants -w = logspace (-1, 1, 100); % frequency vector +w = logspace (-1, 1, 100); % frequency vector figure (1) for k = 1 : numel (delta_m) @@ -91,7 +93,7 @@ % =============================================================================== -% Mixed Sensitivity H-infinity Controller Design +% Mixed Sensitivity H-infinity Controller Design (S over KS Method) % =============================================================================== % +-------+ % +--------------------->| W_p |----------> e_p @@ -108,47 +110,47 @@ % +-----------------------------------------+ % Weighting Functions -s = tf ('s'); % transfer function variable -W_p = 0.95 * (s^2 + 1.8*s + 10) / (s^2 + 8.0*s + 0.01); -W_u = 10^-2; +s = tf ('s'); % transfer function variable +W_p = 0.95 * (s^2 + 1.8*s + 10) / (s^2 + 8.0*s + 0.01); % performance weighting +W_u = 10^-2; % control weighting -% Mixed Sensitivity H-infinity Controller Design -G = G_nom(4, 4); % extract output y and input u +% Synthesis +K = mixsyn (G, W_p, W_u); % mixed-sensitivity H-infinity synthesis -[K, N, gamma] = mixsyn (G, W_p, W_u); +% Interconnections +L = G * K; % open loop +T = feedback (L); % closed loop -L = G * K; % open loop -T = feedback (L); % closed loop - +% Plotting figure (2) -sigma (T) +sigma (T) % singular values figure (3) -sigma (N) +step (T) % step response -norm (N, inf) -figure (4) -step (T) - - % =============================================================================== % H-infinity Loop-Shaping Design % =============================================================================== -W1 = 8 * (2*s + 1) / (0.9*s); % precompensator -W2 = 1; % postcompensator -factor = 1.1; % suboptimal controller +% Settings +W1 = 8 * (2*s + 1) / (0.9*s); % precompensator +W2 = 1; % postcompensator +factor = 1.1; % suboptimal controller -% Compute the suboptimal positive feedback controller -K = ncfsyn (G, W1, W2, factor); % positive feedback controller -[K, N, gamma, info] = ncfsyn (G, W1, W2, factor) +% Synthesis +K = ncfsyn (G, W1, W2, factor); % positive feedback controller -K = -K; % negative feedback controller -L = G * K; % open loop -T = feedback (L); % closed loop +% Interconnections +K = -K; % negative feedback controller +L = G * K; % open loop +T = feedback (L); % closed loop +% Plotting +figure (4) +sigma (T) % singular values + figure (5) -step (T) +step (T) % step response % =============================================================================== Modified: trunk/octave-forge/main/control/devel/ncfsyn/makefile_ncfsyn.m =================================================================== --- trunk/octave-forge/main/control/devel/ncfsyn/makefile_ncfsyn.m 2011-08-04 21:10:29 UTC (rev 8432) +++ trunk/octave-forge/main/control/devel/ncfsyn/makefile_ncfsyn.m 2011-08-05 11:57:01 UTC (rev 8433) @@ -1,3 +1,4 @@ +## H-infinity loop shaping - continuous-time mkoctfile "-Wl,-framework" "-Wl,vecLib" \ slsb10id.cc \ SB10ID.f SB02RD.f select.f SB10JD.f MB02VD.f \ @@ -7,11 +8,13 @@ MB01RX.f SB03MX.f SB03SX.f MB01RY.f SB03QY.f \ SB03QX.f SB03MY.f SB04PX.f SB03MV.f SB03MW.f +## H-infinity loop shaping - discrete-time - strictly proper case mkoctfile "-Wl,-framework" "-Wl,vecLib" \ slsb10kd.cc \ SB10KD.f SB02OD.f select.f SB02OY.f SB02OW.f \ SB02OV.f SB02MV.f SB02OU.f SB02MR.f +## H-infinity loop shaping - discrete-time - proper case mkoctfile "-Wl,-framework" "-Wl,vecLib" \ slsb10zd.cc \ SB10ZD.f MA02AD.f SB02OD.f select.f MB01RX.f \ Modified: trunk/octave-forge/main/control/devel/ncfsyn/ncfsyn.m =================================================================== --- trunk/octave-forge/main/control/devel/ncfsyn/ncfsyn.m 2011-08-04 21:10:29 UTC (rev 8432) +++ trunk/octave-forge/main/control/devel/ncfsyn/ncfsyn.m 2011-08-05 11:57:01 UTC (rev 8433) @@ -119,6 +119,7 @@ K = W1 * Ks * W2; if (nargout > 1) + ## FIXME: is this really the same thing as the dark side does? N = append (eye (p), Ks, Gs); M = [zeros(p,p), zeros(p,m), eye(p); eye(p), zeros(p,m), zeros(p,p); @@ -145,12 +146,12 @@ W = ss (eye (s)); else W = ss (W); - %if (! isstable (W)) - % error ("ncfsyn: %s must be stable", inputname (1)); - %endif - %if (! isminimumphase (W)) - % error ("ncfsyn: %s must be minimum-phase", inputname (1)); - %endif + ## if (! isstable (W)) + ## error ("ncfsyn: %s must be stable", inputname (1)); + ## endif + ## if (! isminimumphase (W)) + ## error ("ncfsyn: %s must be minimum-phase", inputname (1)); + ## endif [p, m] = size (W); if (m == s && p == s) # model is of correct size return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |