function mnbode(ff,abs,phase,varargin) %mybode: make bode plot. %This function has some options % X,YTic, X,YLim, Legend, Location (of Legend),title nargin=length(varargin); for i=1:nargin; if strcmp(varargin{i},'linestyle') varlinestyle = varargin{i+1}; end end for i=1:nargin; if strcmp(varargin{i},'linewidth') varlinewidth = varargin{i+1}; end end subplot('Position',[0.1,0.4,0.8,0.5]);%Position vector means [x,y,width,height]. The origin of position is left bottom. if exist('varlinestyle','var') && exist('varlinewidth','var') loglog(ff,abs,varlinestyle{1},'LineWidth',varlinewidth{1}) hold all; elseif exist('varlinestyle','var') loglog(ff,abs,varlinestyle{1},'LineWidth',2) hold all; else loglog(ff,abs,'LineWidth',2) hold all; end fontsize = 14; ii = 1; maxff = max(ff); minff = min(ff); maxabs = max(abs); minabs = min(abs); if exist('varlinestyle','var') && exist('varlinewidth','var') jj = 2; if nargin ~= 0 while ~ischar(varargin{ii}) hold all; loglog(varargin{ii},varargin{ii+1},varlinestyle{jj},... 'LineWidth',varlinewidth{jj}) maxff = max(maxff,max(varargin{ii})); minff = min(minff,min(varargin{ii})); maxabs = max(maxabs,max(varargin{ii+1})); minabs = min(minabs,min(varargin{ii+1})); jj = jj + 1; ii = ii + 3; if ii > nargin break; end end end elseif exist('varlinestyle','var') jj = 2; if nargin ~= 0 while ~ischar(varargin{ii}) hold all; loglog(varargin{ii},varargin{ii+1},varlinestyle{jj},... 'LineWidth',2) maxff = max(maxff,max(varargin{ii})); minff = min(minff,min(varargin{ii})); maxabs = max(maxabs,max(varargin{ii+1})); minabs = min(minabs,min(varargin{ii+1})); jj = jj + 1; ii = ii + 3; if ii > nargin break; end end end else if nargin ~= 0 while ~ischar(varargin{ii}) hold all; loglog(varargin{ii},varargin{ii+1},... 'LineWidth',2) maxff = max(maxff,max(varargin{ii})); minff = min(minff,min(varargin{ii})); maxabs = max(maxabs,max(varargin{ii+1})); minabs = min(minabs,min(varargin{ii+1})); ii = ii + 3; if ii > nargin break; end end end end set(gca,'FontSize',fontsize); title('Transfer function','FontSize',fontsize) ylabel('gain','FontSize',fontsize) set(gca,'xticklabel',[]) xlimflag = false; for i=ii:2:nargin; if strcmp(varargin{i},'YTic')||strcmp(varargin{i},'ytic') var = varargin{i+1}; set(gca,'YTick',var); elseif strcmp(varargin{i},'XTic')||strcmp(varargin{i},'xtic') var = varargin{i+1}; set(gca,'XTick',var); elseif strcmp(varargin{i},'YLim')||strcmp(varargin{i},'ylim') ylimvar = varargin{i+1}; ylim(ylimvar); elseif strcmp(varargin{i},'XLim')||strcmp(varargin{i},'xlim') xlimvar = varargin{i+1}; xlim(xlimvar); xlimflag = true; elseif strcmp(varargin{i},'Legend')||strcmp(varargin{i},'legend') varlegend = varargin{i+1}; elseif strcmp(varargin{i},'Location')||strcmp(varargin{i},'location') position = varargin{i+1}; elseif strcmp(varargin{i},'Title')||strcmp(varargin{i},'title') titlevar = varargin{i+1}; end end if exist('varlegend','var') && exist('position','var') if ischar(varlegend) legend(varlegend,'Location',position) else nlegend = length(varlegend); for i = 1:nlegend legend(varlegend,'Location',position) end end elseif exist('varlegend','var') if ischar(varlegend) legend(varlegend) else nlegend = length(varlegend); for i = 1:nlegend legend(varlegend) end end end if exist('titlevar','var') title(titlevar,'FontSize',18) end grid on set(gca,'XTick',10.^(floor(log10(minff)):ceil(log10(maxff)))); set(gca,'YTick',10.^(floor(log10(minabs)):ceil(log10(maxabs)))); set(gca,'XMinorGrid','on') set(gca,'YMinorGrid','off') subplot('Position',[0.1,0.1,0.8,0.25]); if exist('varlinestyle','var') && exist('varlinewidth','var') semilogx(ff,phase,varlinestyle{1},'LineWidth',varlinewidth{1}) elseif exist('varlinestyle','var') semilogx(ff,phase,varlinestyle{1},'LineWidth',2) else semilogx(ff,phase,'LineWidth',2) end hold all; ii = 1; if exist('varlinestyle','var') && exist('varlinewidth','var') jj = 2; if nargin ~= 0 while ~ischar(varargin{ii}) hold all; semilogx(varargin{ii},varargin{ii+2},varlinestyle{jj},... 'LineWidth',varlinewidth{jj}) jj = jj + 1; ii = ii + 3; if ii > nargin break; end end end elseif exist('varlinestyle','var') jj = 2; if nargin ~= 0 while ~ischar(varargin{ii}) hold all; semilogx(varargin{ii},varargin{ii+2},varlinestyle{jj},... 'LineWidth',2) jj = jj + 1; ii = ii + 3; if ii > nargin break; end end end else if nargin ~= 0 while ~ischar(varargin{ii}) hold all; semilogx(varargin{ii},varargin{ii+2},... 'LineWidth',2) ii = ii + 3; if ii > nargin break; end end end end set(gca,'FontSize',fontsize,.... 'YTick',[-180,-90,0,90,180]); ylabel('Phase [deg]','FontSize',fontsize) set(gca,'XTick',10.^(floor(log10(minff)):ceil(log10(maxff)))); if xlimflag xlim(xlimvar); end ylim([-180,180]) xlabel('frequency [Hz]','FontSize',fontsize) grid on end