wpcfwcfo.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:5k
源码类别:

波变换

开发平台:

Matlab

  1. function wpcf_wcf(x,lev,wav,colmode,nb_colors,flg_line)
  2. %WPCF_WCF Wavelet tree and wavelet packet tree coefficients.
  3. %
  4. %  Compute wavelet tree and wavelet packet tree
  5. %  and plot the colored coefficients.
  6. %
  7. %  WPCF_WCF(X,N,W,COLMODE,NB_COLORS,FLG_LINE)
  8. %    X is a vector.
  9. %    N is the level of decomposition.
  10. %    W is the name of wavelet
  11. %    COLMODE is an integer which represents the color mode with:
  12. %       1: 'FRQ : Global + abs'
  13. %       2: 'FRQ : By Level + abs'
  14. %       3: 'FRQ : Global'
  15. %       4: 'FRQ : By Level'
  16. %       5: 'NAT : Global + abs'
  17. %       6: 'NAT : By Level + abs'
  18. %       7: 'NAT : Global'
  19. %       8: 'NAT : By Level'
  20. %    NB_COLORS is the number of colors used.
  21. %    FLG_LINE flag for separative lines
  22. %
  23. %  WPCF_WCF(X,N,W) is equivalent to WPCF_WCF(X,N,W,1,128,1)
  24. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 29-Sep-98.
  25. %   Last Revision: 07-May-2003.
  26. %   Copyright 1995-2004 The MathWorks, Inc.
  27. %   $Revision: 1.6.4.2 $  $Date: 2004/03/15 22:43:46 $
  28. switch nargin
  29.   case 3 ,  flg_line = 1; nb_colors = 128; colmode = 1;
  30.   case 4 ,  flg_line = 1; nb_colors = 128;
  31.   case 5 ,  flg_line = 1;
  32. end
  33. [t1,d1] = wpdec(x,lev,wav);
  34. [t2,d2] = wpdec(x,1,wav);
  35. for k = 1:lev-1
  36.    [t2,d2] = wpsplt(t2,d2,[k,0]);
  37. end
  38. fig = figure;
  39. axe = zeros(4,1);
  40. axe(1) = subplot(2,2,1);
  41. axe(2) = subplot(2,2,2);
  42. axe(3) = subplot(2,2,3);
  43. axe(4) = subplot(2,2,4);
  44. lx  = length(x);
  45. txt = ['Analyzed signal: length = ' int2str(lx)];
  46. xlab = ['Colored Coefficients for Terminal Nodes'];
  47. axes(axe(1)); plot(x,'r'); title(txt)
  48. axes(axe(2)); plot(x,'r'); title(txt)
  49. axes(axe(3)); wpviewcf(t2,d2,colmode,nb_colors,flg_line); xlabel(xlab)
  50. axes(axe(4)); wpviewcf(t1,d1,colmode,nb_colors,flg_line); xlabel(xlab)
  51. set(axe,'Xlim',[1 lx]);
  52. function wpviewcf(Ts,Ds,colmode,nb_colors,flg_line)
  53. %WPVIEWCF Plot wavelet packets colored coefficients.
  54. axe = gca;
  55. switch nargin
  56.   case 2 , flg_line = 1; nb_colors = 128; colmode = 1;
  57.   case 3 , flg_line = 1; nb_colors = 128;
  58.   case 4 , flg_line = 1;
  59. end
  60. tab   = wtreemgr('table',Ts,0)';
  61. nodes = tab(1,:)';
  62. sizes = wdatamgr('rsizes',Ds);
  63. nbtn  = size(tab,2);
  64. order = wtreemgr('order',Ts);
  65. [depths,posis]  = ind2depo(order,nodes);
  66. dmax = size(tab,1)-1;
  67. cfs  = wdatamgr('rallcfs',Ds);
  68. levMaxLine = 5;
  69. if (dmax>levMaxLine) | nbtn==1 , flg_line = 0; end
  70. if find(colmode==[1 2 3 4])
  71.     ord = wpfrqord(nodes);
  72. else
  73.     ord = [1:length(nodes)];
  74. end
  75. if find(colmode==[1 2 5 6])
  76.     abs_val = 1;
  77. elseif find(colmode==[3 4 7 8])
  78.     abs_val = 0;
  79. end
  80. if find(colmode==[1 3 5 7])
  81.     cfs = wcodemat(cfs,nb_colors,'row',abs_val);
  82. end
  83. switch colmode
  84.    case 1 , strtit = 'Frequency Order : Global + abs';
  85.    case 2 , strtit = 'Frequency Order : By Level + abs';
  86.    case 3 , strtit = 'Frequency Order : Global';
  87.    case 4 , strtit = 'Frequency Order : By Level';
  88.    case 5 , strtit = 'Natural Order : Global + abs';
  89.    case 6 , strtit = 'Natural Order : By Level + abs';
  90.    case 7 , strtit = 'Natural Order : Global'
  91.    case 8 , strtit = 'Natural Order : By Level';
  92. end
  93. deb = [1];
  94. fin = [];       
  95. for k = 1:nbtn
  96.     fin(k) = deb(k)+sizes(1+depths(k))-1;
  97.     deb(k+1) = fin(k)+1;
  98. end
  99. nbrows   = (2.^(dmax-depths));
  100. NBrowtot = sum(nbrows);
  101. NBcoltot = sizes(1);
  102. matcfs   = zeros(NBrowtot,NBcoltot);
  103. ypos     = zeros(nbtn,1);
  104. if nbtn>1
  105.     for k = 1:nbtn
  106.         ypos(ord(k)) = sum(nbrows(ord([1:k-1])));
  107.     end
  108. end     
  109. ypos = NBrowtot+1-ypos-nbrows;
  110. ymin = (ypos-1)/NBrowtot;
  111. ymax = (ypos-1+nbrows)/NBrowtot;
  112. ytics = (ymax+ymin)/2;
  113. [ytics,K] = sort(ytics);
  114. ylabs = [];
  115. for k = 1:nbtn
  116.     ylabs = strvcat(ylabs,sprintf('%2.0f',nodes(k)));
  117. end
  118. ylabs = ylabs(K,:);
  119. ylim  = [0 1];
  120. alfa  = 1/(2*NBrowtot);
  121. ydata = [(1-alfa)*ylim(1)+alfa*ylim(2) (1-alfa)*ylim(2)+alfa*ylim(1)];
  122. if NBrowtot==1
  123.     ydata(1) = 1/2; ydata(2) = 1;
  124. end
  125. xlim = [1 NBcoltot];
  126. colormap(cool(nb_colors));
  127. set(axe,'Xlim',xlim,'Ylim',ylim,'Nextplot','replace');
  128. imgcfs = image(...
  129.                'Xdata',[1:NBcoltot],               ...
  130.                'Ydata',ydata,                      ...
  131.                'Cdata',matcfs,                     ...
  132.                'Userdata',[depths posis ymin ymax] ...
  133.                 );
  134. NBdraw  = 0;
  135. for k = 1:nbtn
  136.     d = depths(k);
  137.     z = cfs(deb(k):fin(k));
  138.     z = z(ones(1,2^d),:);
  139.     z = wkeep1(z(:)',NBcoltot);
  140.     if find(colmode==[2 4 6 8])      
  141.         z = wcodemat(z,nb_colors,'row',abs_val);
  142.     end
  143.     r1 = ypos(k);
  144.     r2 = ypos(k)+nbrows(k)-1;
  145.     matcfs(r1:r2,:) = z(ones(1,nbrows(k)),:);
  146.     if flg_line
  147.         line(...
  148.              'Xdata',[0.5 NBcoltot+0.5], ...
  149.              'Ydata',[ymin(k) ymin(k)],  ...
  150.              'Linewidth',2              ...
  151.              );
  152.     end
  153.     NBdraw = NBdraw+1;
  154.     if NBdraw==10 | k==nbtn
  155.         set(imgcfs,'Xdata',[1:NBcoltot],'Ydata',ydata,'Cdata',matcfs);
  156.         NBdraw = 0;
  157.     end
  158. end
  159. ftnsize = get(0,'FactoryTextFontSize');
  160. set(axe, ...
  161.     'Ydir','reverse',                 ...
  162.     'Xlim',xlim,'Ylim',ylim,          ...
  163.     'Ytick',ytics,'YtickLabel',ylabs, ...
  164.     'fontsize',ftnsize,               ...
  165.     'Layer','top',                    ...
  166.     'Box','on');
  167. title(strtit,'Fontsize',ftnsize+1,'FontWeight','bold');