www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wpcf_wcf.m
function wpcf_wcf(x,lev,wav,colmode,nb_colors,flg_line) %WPCF_WCF Wavelet tree and wavelet packet tree coefficients. % % Compute wavelet tree and wavelet packet tree % and plot the colored coefficients. % % WPCF_WCF(X,N,W,COLMODE,NB_COLORS,FLG_LINE) % X is a vector. % N is the level of decomposition. % W is the name of wavelet % COLMODE is an integer which represents the color mode with: % 1: 'FRQ : Global + abs' % 2: 'FRQ : By Level + abs' % 3: 'FRQ : Global' % 4: 'FRQ : By Level' % 5: 'NAT : Global + abs' % 6: 'NAT : By Level + abs' % 7: 'NAT : Global' % 8: 'NAT : By Level' % NB_COLORS is the number of colors used. % FLG_LINE flag for separative lines % % WPCF_WCF(X,N,W) is equivalent to WPCF_WCF(X,N,W,1,128,1) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 29-Sep-98. % Last Revision 08-May-2012. % Copyright 1995-2012 The MathWorks, Inc. switch nargin case 3 , flg_line = 1; nb_colors = 128; colmode = 1; case 4 , flg_line = 1; nb_colors = 128; case 5 , flg_line = 1; end t1 = wpdec(x,lev,wav); t2 = wpdec(x,1,wav); for k = 1:lev-1 t2 = wpsplt(t2,[k,0]); end figure; axe = zeros(4,1); axe(1) = subplot(2,2,1); axe(2) = subplot(2,2,2); axe(3) = subplot(2,2,3); axe(4) = subplot(2,2,4); lx = length(x); txt = getWavMSG('Wavelet:moreMSGRF:Anal_Sig_Len',lx); xlab = getWavMSG('Wavelet:wp1d2dRF:ColCfsTN'); axes(axe(1)); plot(x,'r'); title(txt) axes(axe(2)); plot(x,'r'); title(txt) axes(axe(3)); wpviewcf(t2,colmode,nb_colors,flg_line); xlabel(xlab) axes(axe(4)); wpviewcf(t1,colmode,nb_colors,flg_line); xlabel(xlab) set(axe,'XLim',[1 lx]); function wpviewcf(wpt,colmode,nb_colors,flg_line) %WPVIEWCF Plot wavelet packets colored coefficients. axe = gca; switch nargin case 1 , flg_line = 1; nb_colors = 128; colmode = 1; case 2 , flg_line = 1; nb_colors = 128; case 3 , flg_line = 1; end flg_line = 5*flg_line; order = treeord(wpt); nodes = leaves(wpt); sizes = fmdtree('tn_read',wpt,'sizes'); nbtn = length(nodes); [depths,posis] = ind2depo(order,nodes); dmax = max(depths); cfs = read(wpt,'data'); if find(colmode==[1 2 3 4]) ord = wpfrqord(nodes); else ord = 1:nbtn; end if find(colmode==[1 2 5 6]) abs_val = 1; elseif find(colmode==[3 4 7 8]) abs_val = 0; end if find(colmode==[1 3 5 7]) cfs = wcodemat(cfs,nb_colors,'row',abs_val); end switch colmode case 1 , strtit = getWavMSG('Wavelet:moreMSGRF:FRQ_GLB_ABS'); case 2 , strtit = getWavMSG('Wavelet:moreMSGRF:FRQ_LEV_ABS'); case 3 , strtit = getWavMSG('Wavelet:moreMSGRF:FRQ_GLB'); case 4 , strtit = getWavMSG('Wavelet:moreMSGRF:FRQ_LEV'); case 5 , strtit = getWavMSG('Wavelet:moreMSGRF:NAT_GLB_ABS'); case 6 , strtit = getWavMSG('Wavelet:moreMSGRF:NAT_LEV_ABS'); case 7 , strtit = getWavMSG('Wavelet:moreMSGRF:NAT_GLB'); case 8 , strtit = getWavMSG('Wavelet:moreMSGRF:NAT_LEV'); end sizes = max(sizes,[],2); deb = ones(1,nbtn+1); fin = zeros(1,nbtn); for k = 1:nbtn fin(k) = deb(k)+sizes(k)-1; deb(k+1) = fin(k)+1; end nbrows = (2.^(dmax-depths)); NBrowtot = sum(nbrows); NBcoltot = max(read(wpt,'sizes',0)); matcfs = zeros(NBrowtot,NBcoltot); ypos = zeros(nbtn,1); if nbtn>1 for k = 1:nbtn ypos(ord(k)) = sum(nbrows(ord(1:k-1))); end end ypos = NBrowtot+1-ypos-nbrows; ymin = (ypos-1)/NBrowtot; ymax = (ypos-1+nbrows)/NBrowtot; ytics = (ymax+ymin)/2; [ytics,K] = sort(ytics); ylabs = int2str(nodes); ylabs = ylabs(K,:); ylim = [0 1]; alfa = 1/(2*NBrowtot); ydata = [(1-alfa)*ylim(1)+alfa*ylim(2) (1-alfa)*ylim(2)+alfa*ylim(1)]; if NBrowtot==1 ydata(1) = 1/2; ydata(2) = 1; end xlim = [1 NBcoltot]; colormap(cool(nb_colors)); set(axe,'XLim',xlim,'YLim',ylim,'NextPlot','replace'); imgcfs = image(... 'Parent',axe, ... 'XData',1:NBcoltot, ... 'YData',ydata, ... 'CData',matcfs, ... 'UserData',[depths posis ymin ymax] ... ); NBdraw = 0; for k = 1:nbtn d = depths(k); z = cfs(deb(k):fin(k)); z = z(ones(1,2^d),:); z = wkeep1(z(:)',NBcoltot); if find(colmode==[2 4 6 8]) z = wcodemat(z,nb_colors,'row',abs_val); end r1 = ypos(k); r2 = ypos(k)+nbrows(k)-1; matcfs(r1:r2,:) = z(ones(1,nbrows(k)),:); if dmax<=flg_line && nbtn~=1 line(... 'Parent',axe, ... 'XData',[0.5 NBcoltot+0.5], ... 'YData',[ymin(k) ymin(k)], ... 'LineWidth',2 ... ) end NBdraw = NBdraw+1; if NBdraw==10 || k==nbtn set(imgcfs,'XData',1:NBcoltot,'YData',ydata,'CData',matcfs); NBdraw = 0; end end ftnsize = get(0,'FactoryTextFontSize'); set(axe, ... 'YDir','reverse', ... 'XLim',xlim,'YLim',ylim, ... 'YTick',ytics,'YTickLabel',ylabs,... 'FontSize',ftnsize, ... 'Layer','top', ... 'Box','on'); title(strtit,'Fontsize',ftnsize+1,'FontWeight','bold');