wpcf_wcf.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: 21-May-2003.
  26. %   Copyright 1995-2004 The MathWorks, Inc.
  27. %   $Revision: 1.5.4.2 $  $Date: 2004/03/15 22:43:15 $
  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 = wpdec(x,lev,wav);
  34. t2 = wpdec(x,1,wav);
  35. for k = 1:lev-1
  36.    t2 = wpsplt(t2,[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,colmode,nb_colors,flg_line); xlabel(xlab)
  50. axes(axe(4)); wpviewcf(t1,colmode,nb_colors,flg_line); xlabel(xlab)
  51. set(axe,'Xlim',[1 lx]);
  52. function wpviewcf(wpt,colmode,nb_colors,flg_line)
  53. %WPVIEWCF Plot wavelet packets colored coefficients.
  54. axe = gca;
  55. switch nargin
  56.   case 1 , flg_line = 1; nb_colors = 128; colmode = 1;
  57.   case 2 , flg_line = 1; nb_colors = 128;
  58.   case 3 , flg_line = 1;
  59. end
  60. flg_line = 5*flg_line;
  61. order = treeord(wpt);
  62. depth = treedpth(wpt);
  63. nodes = leaves(wpt);
  64. sizes = fmdtree('tn_read',wpt,'sizes');
  65. nbtn  = length(nodes);
  66. [depths,posis] = ind2depo(order,nodes);
  67. cfs   = read(wpt,'data');
  68. if find(colmode==[1 2 3 4])
  69.     ord = wpfrqord(nodes);
  70. else
  71.     ord = [1:nbtn];
  72. end
  73. if find(colmode==[1 2 5 6])
  74.     abs_val = 1;
  75. elseif find(colmode==[3 4 7 8])
  76.     abs_val = 0;
  77. end
  78. if find(colmode==[1 3 5 7])
  79.     cfs = wcodemat(cfs,nb_colors,'row',abs_val);
  80. end
  81. switch colmode
  82.    case 1 , strtit = 'Frequency Order : Global + abs';
  83.    case 2 , strtit = 'Frequency Order : By Level + abs';
  84.    case 3 , strtit = 'Frequency Order : Global';
  85.    case 4 , strtit = 'Frequency Order : By Level';
  86.    case 5 , strtit = 'Natural Order : Global + abs';
  87.    case 6 , strtit = 'Natural Order : By Level + abs';
  88.    case 7 , strtit = 'Natural Order : Global';
  89.    case 8 , strtit = 'Natural Order : By Level';
  90. end
  91. sizes = max(sizes,[],2);
  92. deb = [1];
  93. fin = [];
  94. for k = 1:nbtn
  95.     fin(k)   = deb(k)+sizes(k)-1;
  96.     deb(k+1) = fin(k)+1;
  97. end
  98. nbrows   = (2.^(dmax-depths));
  99. NBrowtot = sum(nbrows);
  100. NBcoltot = max(read(wpt,'sizes',0));
  101. matcfs   = zeros(NBrowtot,NBcoltot);
  102. ypos     = zeros(nbtn,1);
  103. if nbtn>1
  104.     for k = 1:nbtn
  105.         ypos(ord(k)) = sum(nbrows(ord([1:k-1])));
  106.     end
  107. end     
  108. ypos = NBrowtot+1-ypos-nbrows;
  109. ymin = (ypos-1)/NBrowtot;
  110. ymax = (ypos-1+nbrows)/NBrowtot;
  111. ytics = (ymax+ymin)/2;
  112. [ytics,K] = sort(ytics);
  113. for k = 1:nbtn
  114.     ylabs(k,:) = sprintf('%2.0f',nodes(k));
  115. end
  116. ylabs = ylabs(K,:);
  117. ylim = [0 1];
  118. alfa = 1/(2*NBrowtot);
  119. ydata = [(1-alfa)*ylim(1)+alfa*ylim(2) (1-alfa)*ylim(2)+alfa*ylim(1)];
  120. if NBrowtot==1
  121.     ydata(1) = 1/2; ydata(2) = 1;
  122. end
  123. xlim = [1 NBcoltot];
  124. colormap(cool(nb_colors));
  125. set(axe,'Xlim',xlim,'Ylim',ylim,'Nextplot','replace');
  126. imgcfs = image(...
  127.                'Parent',axe,                       ...
  128.                'Xdata',[1:NBcoltot],               ...
  129.                'Ydata',ydata,                      ...
  130.                'Cdata',matcfs,                     ...
  131.                'Userdata',[depths posis ymin ymax] ...
  132.                 );
  133. NBdraw  = 0;
  134. for k = 1:nbtn
  135.     d = depths(k);
  136.     z = cfs(deb(k):fin(k));
  137.     z = z(ones(1,2^d),:);
  138.     z = wkeep1(z(:)',NBcoltot);
  139.     if find(colmode==[2 4 6 8])
  140.         z = wcodemat(z,nb_colors,'row',abs_val);
  141.     end
  142.     r1 = ypos(k);
  143.     r2 = ypos(k)+nbrows(k)-1;
  144.     matcfs(r1:r2,:) = z(ones(1,nbrows(k)),:);
  145.     if dmax<=flg_line & nbtn~=1
  146.         line(...
  147.              'Parent',axe,               ...
  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');