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

波变换

开发平台:

Matlab

  1. function [wpt,ento,n2m] = besttree(wpt)
  2. %BESTTREE Best wavelet packet tree.
  3. %   BESTTREE computes the optimal sub-tree of an initial tree
  4. %   with respect to an entropy type criterion.
  5. %   The resulting tree may be much smaller than the initial one.
  6. %
  7. %   T = BESTTREE(T) computes the modified tree T
  8. %   corresponding to the best entropy value.
  9. %
  10. %   [T,E] = BESTTREE(T) returns the best tree T
  11. %   and in addition, the best entropy value E.
  12. %   The optimal entropy of the node whose index is j-1
  13. %   is E(j).
  14. %
  15. %   [T,E,N] = BESTTREE(T) returns the best tree T,
  16. %   entropy value E and in addition, the vector N
  17. %   containing the indices of the merged nodes.
  18. %   See also BESTLEVT, WENTROPY, WPDEC, WPDEC2.
  19. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  20. %   Last Revision: 23-May-2003.
  21. %   Copyright 1995-2004 The MathWorks, Inc.
  22. %   $Revision: 1.5.4.2 $  $Date: 2004/03/15 22:39:05 $
  23. order = treeord(wpt);
  24. tn = leaves(wpt);
  25. an     = read(wpt,'an');
  26. tn_ind = gidxsint(an,tn);
  27. ent    = read(wpt,'ent');
  28. ento   = NaN*ones(size(ent));
  29. rec    = 2*ones(size(an));
  30. rec(tn_ind)  = ones(size(tn));
  31. ento(tn_ind) = ent(tn_ind);
  32. J = wrev(find(rec==2));
  33. for k=1:length(J)
  34.     ind_n   = J(k);
  35.     node    = an(ind_n);
  36.     child   = node*order+[1:order]';
  37.     i_child = gidxsint(an,child);
  38.     echild  = sum(ento(i_child));
  39.     if echild < ent(ind_n)
  40.        ento(ind_n) = echild;
  41.        rec(ind_n) = 2;
  42.     else
  43.        ento(ind_n)  = ent(ind_n);
  44.        rec(ind_n)   = rec(i_child(1))+2;
  45.        rec(i_child) = -rec(i_child);
  46.     end
  47. end
  48. wpt = write(wpt,'ento',ento);
  49. n2m = wrev(an(rec>2));
  50. wpt = nodejoin(wpt,n2m);
  51. ento = read(wpt,'ento');