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

波变换

开发平台:

Matlab

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