www.gusucode.com > 利用MATLAB GUI设计滤波器界面,可以设计IIR滤波器 > AFD/MenuAnalyzePoleZeroPlot.m
function MenuAnalyzePoleZeroPlot % MenuAnalyzePoleZeroPlot is a subfile of the AnalogFilter GUI collection % % James C. Squire, 2002 % Assistant Professor, Virginia Military Institute % ver 1.0 % MenuAnalyzePoleZeroPlot opens a plot of the current filter's poles and zeros global strFilterObject % find the roots strFilterObject=Utility_zpk(strFilterObject); p = strFilterObject.vPoles; z = strFilterObject.vZeros; k1 = strFilterObject.fK1; p1 = strFilterObject.vPoles1; z1 = strFilterObject.vZeros1; sTitle=strFilterObject.sTitle; % set up plot figure('menubar','none','toolbar','none','Name',sTitle,'Numbertitle','off') % plot it if isempty(k1) if ~isempty(z) plot(real(p),imag(p),'kx',real(z),imag(z),'ko','markersize',15,'linewidth',1.5) else plot(real(p),imag(p),'kx','markersize',15,'linewidth',1.5) end else if ~isempty(z) plot(real(p),imag(p),'kx',real(z),imag(z),'ko',real(p1),imag(p1),'bx',real(z1),imag(z1),'bo','markersize',15,'linewidth',1.5) else plot(real(p),imag(p),'kx',real(p1),imag(p1),'bx','markersize',15,'linewidth',1.5) end end axis('equal'); % add labels and origin lines xlabel('Real Axis'), ylabel('Imaginary Axis') hold on axlim=axis; plot([0 0],axlim(3:4),'g:',axlim(1:2),[0 0],'g:','linewidth',1) axlim=axis; axis(axlim*(1+eps)) % weird Matlab bug will sometimes cut off one of the X's marking the poles as being outside the plot area (perhaps because of the size of the marker) plot([0 0],axlim(3:4),'g:',axlim(1:2),[0 0],'g:','linewidth',1) % weird Matlab bug requires a double-plot sometimes title(strFilterObject.sTitle) % add legend if needed if ~isempty(k1) h=plot(0,0,'k',0,0,'b','linewidth',10); % get a handle to a black and blue line legend(h,'ideal components','actual R/C values') end figure(gcf)