📄 gpmarg.m
字号:
%
% GPMARG is the M-file used to calculate the gain and phase
% margins for the system.
%
% Author: Ole Barup Sorensen, Rapid Data Ltd
% Copyright (c) 1989-94 by Rapid Data Ltd
% Revision 10:32 07/02/94
okflag=figflag(tit1,0);
if okflag==0,
Fig16=figure('Numbertitle','off','Name',tit1,'Menubar','none',...
'Units','normal','Position',[(150)/Scx (80)/Scy (350)/Scx (300)/Scy],'Nextplot',...
'new','Resize','off','Color',[0.5 0.5 0.5]);
end
Sx=350;Sy=300;x=15;y=0;
Han_An1(8)=uicontrol(Fig16,'Style','frame','Position',[(x-5)/Sx (55)/Sy (310)/Sx (210)/Sy]);
Han_An1(9)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (240)/Sy (280)/Sx (18)/Sy]);
Han_An1(10)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (220)/Sy (280)/Sx (18)/Sy]);
Han_An1(11)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (200)/Sy (280)/Sx (18)/Sy]);
Han_An1(12)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (180)/Sy (280)/Sx (18)/Sy]);
Han_An1(13)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (160)/Sy (280)/Sx (18)/Sy]);
Han_An1(14)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (140)/Sy (300)/Sx (18)/Sy]);
Han_An1(15)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (120)/Sy (280)/Sx (18)/Sy]);
Han_An1(16)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (100)/Sy (280)/Sx (18)/Sy]);
Han_An1(17)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (80)/Sy (280)/Sx (18)/Sy]);
Han_An1(18)=uicontrol(Fig16,'Style','text','String',' ',...
'Position',[(x)/Sx (60)/Sy (280)/Sx (18)/Sy]);
set(Han_An1(9:18),'HorizontalAlignment','left');
w_range=logspace(w_start,w_end,pt);
config
if t_delay == 0
[mmm,ddd]=bode(num,den,w_range);
else
cmpc = [];
if cloop == 1
[mmm,ddd] = nyquist(H_num,H_den,w_range);
cmpc = mmm + sqrt(-1) * ddd;
end
[mmm,ddd] = timdly(cloop,num,den,w_range,t_delay,cmpc);
end
if id > 9
if t_delay == 0
[mmmx,dddx]=bode(numx,denx,w_range);
else
[mmmx,dddx] = timdly(cloop,numx,denx,w_range,t_delay,cmpc);
end
end
[mmar,pmar,wm,wp] = margin(mmm,ddd,w_range);
clear mmm ddd;
set(Han_An1(9:18),'String',' ');
set(Han_An1(9),'String','The margins for the system are:')
if t_delay ~= 0, clear cmpc; end
n0 = size(mmar);
if n0(1) ~= 0
mmar = 20 * log10(mmar);
set(Han_An1(10),'String',['The gain margin is ',num2str(mmar),' dB']);
set(Han_An1(11),'String',['where the frequency w = ',num2str(wm),' rad/sec']);
end
n0 = size(pmar);
if n0 ~= 0
set(Han_An1(12),'String',['The phase margin is ',num2str(pmar),' degrees']);
set(Han_An1(13),'String',['where the frequency w = ',num2str(wp),' rad/sec']);
end
if id > 9
set(Han_An1(14),'String','The margins for the uncompensated system:')
[mmar,pmar,wm,wp] = margin(mmmx,dddx,w_range);
clear mmmx dddx
n0 = size(mmar);
if n0(1) ~= 0
mmar = 20 * log10(mmar);
set(Han_An1(15),'String',['The gain margin is ',num2str(mmar),' dB']);
set(Han_An1(16),'String',['where the frequency w = ',num2str(wm),' rad/sec']);
end
n0 = size(pmar);
if n0(1) ~= 0
set(Han_An1(17),'String',['The phase margin is ',num2str(pmar),' degrees']);
set(Han_An1(18),'String',['where the frequency w = ',num2str(wp),' rad/sec']);
end
end
uicontrol(Fig16,'Style','push','String','Done','Position',...
[(x)/Sx (y+15)/Sy (80)/Sx (20)/Sy],'Callback',...
['close(Fig16);clear Fig16']);
clear n0 mmar wm pmar wp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -