www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/dw1dstem.m
function varargout = dw1dstem(axe,coefs,longs,varargin) %DW1DSTEM Discrete wavelet 1-D stem. % % First input format: %-------------------- % varargout = DW1DSTEM(AXE,COEFS,LONGS,ABSMODE,VIEWAPP,COLORS) % varargout = DW1DSTEM(AXE,COEFS,LONGS,ABSMODE,VIEWAPP) % varargout = DW1DSTEM(AXE,COEFS,LONGS,ABSMODE) % varargout = DW1DSTEM(AXE,COEFS,LONGS) % % Second input format: %-------------------- % varargout = DW1DSTEM(AXE,COEFS,LONGS,'PropName1',ProVal1,...) % varargout = DW1DSTEM(AXE,COEFS,LONGS) % Valid 'PropNames' are: 'mode', 'viewapp' , 'colors' % % In each case %------------- % ABSMODE = 0 or 1. % VIEWAPP = 0 or 1. % COLORS is a numeric array or the key word 'WTBX'. % % The defaults are: % ABSMODE = 1; VIEWAPP = 0; COLORS = flipud(get(axe,'colororder')); % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 19-Apr-98. % Last Revision: 20-Jul-2010. % Copyright 1995-2010 The MathWorks, Inc. % Default Values. %---------------- absmode = 1; viewapp = 0; colors = get(axe,'colororder'); flagzero = 1; % Check input (OLD & NEW version). %--------------------------------- nbin = length(varargin); if nbin>0 numINPUT = 1; for k = 1:min(nbin,2) numINPUT = numINPUT & isnumeric(varargin{k}); end if numINPUT switch nbin case 1 , absmode = varargin{1}; case 2 , [absmode,viewapp] = deal(varargin{:}); case 3 , [absmode,viewapp,colors] = deal(varargin{:}); if ~isnumeric(varargin{3}) && ~isequal(upper(colors),'WTBX') colors = get(axe,'colororder'); end end else k = 1; while k<=nbin argNam = lower(varargin{k}); k = k+1; switch argNam case 'mode' , absmode = varargin{k}; k = k+1; case 'viewapp' , viewapp = varargin{k}; k = k+1; case 'colors' , colors = varargin{k}; k = k+1; case 'flagzero' , flagzero = varargin{k}; k = k+1; end end end end level = length(longs)-2; if isequal(upper(colors),'WTBX') dum = wtbutils('colors','app',level); dum = dum(1,:); colors = [wtbutils('colors','det',level) ; dum]; end lx = longs(end); lf = 2*longs(end-1)-lx; lf = lf+2-rem(lf,2); delete(get(axe,'Children')); tag_axe = get(axe,'Tag'); next = lower(get(axe,'NextPlot')); Ymax = level+viewapp; set(axe,'NextPlot','add','YLim',[0.5 Ymax+0.5]) while size(colors,1)<Ymax colors = [colors;colors]; end mul = max([0.85,0.96*(Ymax-1)/Ymax]); hdl_lin = []; YtickLab = {}; for k=1:Ymax appFlag = (k==(level+1)); if appFlag kVal = k-1; d = coefs(1:longs(1)); YtickLab = {YtickLab{:},['A' int2str(kVal)]}; else kVal = k; d = detcoef(coefs,longs,kVal); YtickLab = {YtickLab{:},['D' int2str(kVal)]}; end d = d(:)'; m = max(abs(d)); ld = length(d); xloc = coefsLOC((1:ld),kVal,lf,lx); if absmode d = abs(d); dbase = k-0.5; else d = d/2; dbase = k; end if m>0 , d = (mul*d)/m; end color = colors(k,:); hh = plotstem(axe,m,{1,xloc,lx},{d,dbase},color,flagzero); hdl_lin = [hdl_lin hh]; end set(axe,'YTick',(1:Ymax),'YTickLabel',YtickLab,'NextPlot',next,'Tag',tag_axe); varargout{1} = hdl_lin; function [loc,low,up] = coefsLOC(idx,niv,lf,lx) %COEFSLOC coefficient location up = idx; low = idx; for k=1:niv low = 2*low+1-lf; up = 2*up; end loc = max(1,min(lx,round((low+up)/2))); function h = plotstem(varargin) %PLOTSTEM Plot discrete sequence data. % PLOTSTEM(AXE,MAXVAL,{xlow,xloc,xup},{Y,YBASE},COLOR,FLGZERO) or % PLOTSTEM(MAXVAL,{xlow,xloc,xup},Y,COLOR) or % PLOTSTEM(AXE,MAXVAL,{xlow,xloc,xup},Y,COLOR,FLGZERO) % PLOTSTEM(MAXVAL,{xlow,xloc,xup},Y,COLOR,FLGZERO) if ishandle(varargin{1}) axe = varargin{1}; xlow = varargin{3}{1}; x = varargin{3}{2}; xup = varargin{3}{3}; y = varargin{4}{1}; ybase = varargin{4}{2}; nextarg = 5; else axe = newplot; xlow = varargin{3}{1}; x = varargin{3}{2}; xup = varargin{3}{3}; y = varargin{3}{1}; ybase = varargin{3}{2}; nextarg = 4; end if nargin<nextarg c = get(axe,'colororder'); c = c(1,:); flgZero = 1; elseif nargin==nextarg c = varargin{nextarg}; flgZero = 1; else c = varargin{nextarg}; flgZero = varargin{nextarg+1}; end xAxeColor = get(axe,'XColor'); q = [xlow xup]; h = NaN*ones(1,4); h(1) = plot([q(1) q(2)],ybase+[0 0],'Parent',axe,'Color',xAxeColor); indZ = find(abs(y)<eps); xZ = x(indZ); yZ = y(indZ); x(indZ) = []; y(indZ) = []; n = length(x); if n>0 MSize = 2; Mtype = 'o'; MarkerEdgeColor = c; MarkerFaceColor = c; xx = [x;x;nan*ones(size(x))]; yy = [zeros(1,n);y;NaN*ones(size(y))]; h(2) = plot(xx(:),ybase+yy(:),'Parent',axe,'LineStyle','-','Color',c); h(3) = plot(x,ybase+y,'Parent',axe,... 'Marker',Mtype, ... 'MarkerEdgeColor',MarkerEdgeColor, ... 'MarkerFaceColor',MarkerFaceColor, ... 'MarkerSize',MSize, ... 'LineStyle','none',... 'Color',c); end nZ = length(xZ); if flgZero && (nZ>0) MSize = 2; Mtype = 'o'; h(4) = plot(xZ,ybase+yZ,'Parent',axe,... 'Marker',Mtype, ... 'MarkerEdgeColor',xAxeColor, ... 'MarkerFaceColor',xAxeColor, ... 'MarkerSize',MSize, ... 'LineStyle','none',... 'Color',xAxeColor); end