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

波变换

开发平台:

Matlab

  1. function [Ts,Ds,out3,out4,out5,out6] = wpsplt(Ts,Ds,node)
  2. %WPSPLT Split (decompose) wavelet packet.
  3. %   WPSPLT updates the tree and data structures after the
  4. %   decomposition of a node.
  5. %
  6. %   [T,D] = WPSPLT(T,D,N) returns the modified tree
  7. %   structure T and the modified data structure D (see
  8. %   MAKETREE), corresponding to the decomposition of the
  9. %   node N.
  10. %
  11. %   For a 1-D decomposition: [T,D,CA,CD] = WPSPLT(T,D,N)
  12. %   with CA = approximation and CD = detail of node N.
  13. %
  14. %   For a 2-D decomposition: [T,D,CA,CH,CV,CD] = WPSPLT(T,D,N)
  15. %   with CA = approximation and CH, CV, CD = (Horiz., Vert. and
  16. %   Diag.) details of node N.
  17. %
  18. %   See also MAKETREE, WAVEDEC, WAVEDEC2, WPDEC, WPDEC2, WPJOIN.
  19. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  20. %   Last Revision: 04-May-1999.
  21. %   Copyright 1995-2002 The MathWorks, Inc.
  22. %   $Revision: 1.11 $
  23. % Check arguments.
  24. if errargn(mfilename,nargin,[3],nargout,[2:6]), error('*'); end
  25. pack_exist = wtreemgr('istnode',Ts,node);
  26. if pack_exist==0
  27.     errargt(mfilename,'Invalid node value','msg');
  28.     return
  29. end
  30. filter      = wdatamgr('read_wave',Ds);
  31. [Lo_D,Hi_D] = wfilters(filter,'d');
  32. [type_ent,parameter] = wdatamgr('read_tp_ent',Ds);
  33. [x,beg_p,len_p] = wdatamgr('rcfs',Ds,Ts,pack_exist);
  34. order  = wtreemgr('order',Ts);
  35. node   = depo2ind(order,node);
  36. indord = node*order;
  37. %
  38. % Decomposition of the node
  39. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  40. if order==2
  41.     % out3 = a; out4 = d;
  42.     [out3,out4] = dwt(x,Lo_D,Hi_D);
  43.     ent = [wentropy(out3,type_ent,parameter)...
  44.            wentropy(out4,type_ent,parameter)];
  45.     insert_ts = [indord+1:indord+order ;length(out3) length(out4)];
  46.     insert_ds = [out3 out4];
  47.     a_len = length(out3);
  48. elseif order==4
  49.     % out3 = a; out4 = h; out5 = v; out6 = d;
  50.     [out3,out4,out5,out6] = dwt2(x,Lo_D,Hi_D);
  51.     ent = [wentropy(out3,type_ent,parameter) ...
  52.            wentropy(out4,type_ent,parameter) ...
  53.            wentropy(out5,type_ent,parameter) ...
  54.            wentropy(out6,type_ent,parameter)];
  55.     insert_ts = [indord+1:indord+order ;
  56.                  size(out3)' size(out4)' size(out5)' size(out6)'];
  57.     insert_ds = [out3(:)' out4(:)' out5(:)' out6(:)'];
  58.     a_len = size(out3)';
  59. end
  60. %
  61. % Modification of Tree and Data Structures.
  62. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  63. depth = wtreemgr('depth',Ts);
  64. Ts  = wtreemgr('replace',Ts,insert_ts,pack_exist,pack_exist);
  65. Ds  = wdatamgr('replace',Ds,insert_ds,beg_p,beg_p+len_p-1);
  66. if treedpth(Ts) > depth
  67.     sizes   = wdatamgr('rsizes',Ds);
  68.     Ds    = wdatamgr('wsizes',Ds,[sizes a_len]);
  69.     ent_old = wdatamgr('read_ent',Ds);
  70.     len_ent = length(ent_old);
  71.     tmp     = NaN;
  72.     ent_new = tmp(ones(1,order*len_ent+1));
  73.     ent_new(1:len_ent) = ent_old;
  74.     Ds    = wdatamgr('write_ent',Ds,ent_new);
  75.     ent_old = wdatamgr('read_ento',Ds);
  76.     ent_new(1:len_ent) = ent_old;
  77.     Ds    = wdatamgr('write_ento',Ds,ent_new);
  78. end
  79. Ds = wdatamgr('write_ent',Ds,ent(1:order),insert_ts(1,1:order));