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

波变换

开发平台:

Matlab

  1. function [Ts,Ds,ento,n2m] = bestlevt(Ts,Ds)
  2. %BESTLEVT Best level tree (wavelet packet).
  3. %   BESTLEVT computes the optimal complete sub-tree of an
  4. %   initial tree with respect to an entropy type criterion.
  5. %   The resulting complete tree may be of smaller depth
  6. %   than the initial one.
  7. %
  8. %   [T,D] = BESTLEVT(T,D) computes the modified tree
  9. %   structure T and data structure D, corresponding to
  10. %   the best level tree decomposition.
  11. %
  12. %   [T,D,E] = BESTLEVT(T,D) returns best tree T,
  13. %   data structure D and in addition, the best entropy value E.
  14. %
  15. %   See also BESTTREE, MAKETREE, WENTROPY, WPDEC, WPDEC2.
  16. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  17. %   Last Revision: 05-May-1999.
  18. %   Copyright 1995-2002 The MathWorks, Inc.
  19. %   $Revision: 1.13 $ $Date: 2002/04/14 19:27:06 $
  20. % Check arguments.
  21. if errargn(mfilename,nargin,[2],nargout,[2:4]), error('*'); end
  22. order     = wtreemgr('order',Ts);
  23. an        = wtreemgr('allnodes',Ts);
  24. tn        = wtreemgr('tnodes',Ts);
  25. [dtn,ptn] = ind2depo(order,tn);
  26. [dan,pan] = ind2depo(order,an);
  27. dmin      = min(dtn);
  28. K         = find(dan==dmin);
  29. an_min    = depo2ind(order,[dan(K) pan(K)]);
  30. ind_an    = wcommon(an_min,tn);
  31. n2m       = [an_min(find(1-ind_an))];
  32. od        = order^dmin;
  33. nodes     = depo2ind(order,[dmin*ones(od,1) [0:od-1]']);
  34. ento      = sum(wdatamgr('read_ent',Ds,nodes));
  35. dini      = dmin;
  36. for d=dini-1:-1:0
  37.     od    = order^d;
  38.     nodes = depo2ind(order,[d*ones(od,1) [0:od-1]']);
  39.     ent   = sum(wdatamgr('read_ent',Ds,nodes));
  40.     if ent<=ento
  41.         dmin = d;
  42.         ento = ent;
  43.         n2m  = nodes;
  44.     end;
  45. end
  46. for n = n2m(:)'
  47.     [Ts,Ds] = wpjoin(Ts,Ds,n);
  48. end
  49. ent = wdatamgr('read_ent',Ds);
  50. Ds  = wdatamgr('write_ento',Ds,ent);