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); subplot('Position',[0.1,0.4,0.8,0.5]);%Position vector means [x,y,width,height]. The origin of position is left bottom. loglog(ff,abs,... 'LineWidth',2) fontsize = 14; ii = 1; maxff = max(ff); minff = min(ff); maxabs = max(abs); minabs = min(abs); 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 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]); semilogx(ff,phase,... 'LineWidth',2) ii = 1; 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 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