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

波变换

开发平台:

Matlab

  1. function wpviewcf(Ts,Ds,colmode,nb_colors)
  2. %WPVIEWCF Plot wavelet packets colored coefficients.
  3. %   wpviewcf(T,D,CMODE) plots the colored coefficients
  4. %   for the terminal nodes of the tree T.
  5. %     T is the tree structure.
  6. %     D is the data structure.
  7. %     CMODE is an integer which represents the color mode with:
  8. %   1: 'FRQ : Global + abs'
  9. %   2: 'FRQ : By Level + abs'
  10. %   3: 'FRQ : Global'
  11. %   4: 'FRQ : By Level'
  12. %   5: 'NAT : Global + abs'
  13. %   6: 'NAT : By Level + abs'
  14. %   7: 'NAT : Global'
  15. %   8: 'NAT : By Level'
  16. %
  17. %   wpviewcf(T,D,CMODE,NB) uses NB colors.
  18. %
  19. %   Example:
  20. %     x = sin(8*pi*[0:0.005:1]);
  21. %     [t,d] = wpdec(x,4,'db1');
  22. %     plottree(t);
  23. %     wpviewcf(t,d,1);
  24. %
  25. %   See also MAKETREE, WPDEC.
  26. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Sep-96.
  27. %   Last Revision: 07-May-2003.
  28. %   Copyright 1995-2004 The MathWorks, Inc.
  29. % $Revision: 1.13.4.2 $
  30. % Check arguments.
  31. if errargn(mfilename,nargin,[2:4],nargout,[0]), error('*'), end
  32. switch nargin
  33.   case 2 , nb_colors = 128; colmode = 1;
  34.   case 3 , nb_colors = 128;
  35. end
  36. flg_line = 5;
  37. tab   = wtreemgr('table',Ts,0)';
  38. nodes = tab(1,:)';
  39. sizes = wdatamgr('rsizes',Ds);
  40. nbtn  = size(tab,2);
  41. order = wtreemgr('order',Ts);
  42. [depths,posis]  = ind2depo(order,nodes);
  43. dmax = size(tab,1)-1;
  44. cfs  = wdatamgr('rallcfs',Ds);
  45. if find(colmode==[1 2 3 4])
  46.     ord = wpfrqord(nodes);
  47. else
  48.     ord = [1:length(nodes)];
  49. end
  50. if find(colmode==[1 2 5 6])
  51.     abs_val = 1;
  52. elseif find(colmode==[3 4 7 8])
  53.     abs_val = 0;
  54. end
  55. if find(colmode==[1 3 5 7])
  56.     cfs = wcodemat(cfs,nb_colors,'row',abs_val);
  57. end
  58. switch colmode
  59.    case 1 , strtit = 'Frequency Order : Global + abs';
  60.    case 2 , strtit = 'Frequency Order : By Level + abs';
  61.    case 3 , strtit = 'Frequency Order : Global';
  62.    case 4 , strtit = 'Frequency Order : By Level';
  63.    case 5 , strtit = 'Natural Order : Global + abs';
  64.    case 6 , strtit = 'Natural Order : By Level + abs';
  65.    case 7 , strtit = 'Natural Order : Global'
  66.    case 8 , strtit = 'Natural Order : By Level';
  67. end
  68. deb = [1];
  69. fin = [];       
  70. for k = 1:nbtn
  71.     fin(k) = deb(k)+sizes(1+depths(k))-1;
  72.     deb(k+1) = fin(k)+1;
  73. end
  74. nbrows   = (2.^(dmax-depths));
  75. NBrowtot = sum(nbrows);
  76. NBcoltot = sizes(1);
  77. matcfs   = zeros(NBrowtot,NBcoltot);
  78. ypos     = zeros(nbtn,1);
  79. if nbtn>1
  80.     for k = 1:nbtn
  81.         ypos(ord(k)) = sum(nbrows(ord([1:k-1])));
  82.     end
  83. end     
  84. ypos = NBrowtot+1-ypos-nbrows;
  85. ymin = (ypos-1)/NBrowtot;
  86. ymax = (ypos-1+nbrows)/NBrowtot;
  87. ytics = (ymax+ymin)/2;
  88. [ytics,K] = sort(ytics);
  89. for k = 1:nbtn
  90.     ylabs(k,:) = sprintf('%2.0f',nodes(k));
  91. end
  92. ylabs = ylabs(K,:);
  93. ylim  = [0 1];
  94. alfa  = 1/(2*NBrowtot);
  95. ydata = [(1-alfa)*ylim(1)+alfa*ylim(2) (1-alfa)*ylim(2)+alfa*ylim(1)];
  96. if NBrowtot==1
  97.     ydata(1) = 1/2; ydata(2) = 1;
  98. end
  99. xlim = [1 NBcoltot];
  100. fig  = figure;
  101. colormap(cool(nb_colors));
  102. axe  = axes;
  103. set(axe,'Xlim',xlim,'Ylim',ylim,'Nextplot','replace');
  104. imgcfs = image(...
  105.                'Xdata',[1:NBcoltot],               ...
  106.                'Ydata',ydata,                      ...
  107.                'Cdata',matcfs,                     ...
  108.                'Userdata',[depths posis ymin ymax] ...
  109.                 );
  110. NBdraw  = 0;
  111. for k = 1:nbtn
  112.     d = depths(k);
  113.     z = cfs(deb(k):fin(k));
  114.     z = z(ones(1,2^d),:);
  115.     z = wkeep1(z(:)',NBcoltot);
  116.     if find(colmode==[2 4 6 8])      
  117.         z = wcodemat(z,nb_colors,'row',abs_val);
  118.     end
  119.     r1 = ypos(k);
  120.     r2 = ypos(k)+nbrows(k)-1;
  121.     matcfs(r1:r2,:) = z(ones(1,nbrows(k)),:);
  122.     if dmax<=flg_line & nbtn~=1
  123.         line(...
  124.              'Xdata',[0.5 NBcoltot+0.5], ...
  125.              'Ydata',[ymin(k) ymin(k)],  ...
  126.              'Linewidth',2              ...
  127.              );
  128.     end
  129.     NBdraw = NBdraw+1;
  130.     if NBdraw==10 | k==nbtn
  131.         set(imgcfs,'Xdata',[1:NBcoltot],'Ydata',ydata,'Cdata',matcfs);
  132.         NBdraw = 0;
  133.     end
  134. end
  135. ftnsize = get(0,'FactoryTextFontSize');
  136. set(axe, ...
  137.     'Ydir','reverse',                 ...
  138.     'Xlim',xlim,'Ylim',ylim,          ...
  139.     'Ytick',ytics,'YtickLabel',ylabs, ...
  140.     'fontsize',ftnsize,               ...
  141.     'Layer','top',                    ...
  142.     'Box','on');
  143. title(strtit,'Fontsize',ftnsize+1,'FontWeight','bold');