⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpmarg.m

📁 基于MATLAB的辅助设计 简述了矩阵分析的重要性
💻 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 + -