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

波变换

开发平台:

Matlab

  1. function varargout = wpdec2(x,depth,wname,type_ent,parameter)
  2. %WPDEC2 Wavelet packet decomposition 2-D.
  3. %   T = WPDEC2(X,N,'wname',E,P) returns a wptree object T
  4. %   corresponding to a wavelet packet decomposition
  5. %   of the matrix X, at level N, with a
  6. %   particular wavelet ('wname', see WFILTERS).
  7. %   E is a string containing the type of entropy (see WENTROPY):
  8. %   E = 'shannon', 'threshold', 'norm', 'log energy', 'sure, 'user'
  9. %   P is an optional parameter:
  10. %        'shannon' or 'log energy' : P is not used
  11. %        'threshold' or 'sure'     : P is the threshold (0 <= P)
  12. %        'norm' : P is a power (1 <= P)
  13. %        'user' : P is a string containing the name
  14. %                 of an user-defined function.
  15. %
  16. %   T = WPDEC2(X,N,'wname') is equivalent to
  17. %   T = WPDEC2(X,N,'wname','shannon').
  18. %
  19. %   See also WAVEINFO, WENTROPY, WPDEC, WPREC, WPREC2.
  20. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  21. %   Last Revision: 21-May-2003.
  22. %   Copyright 1995-2004 The MathWorks, Inc.
  23. %   $Revision: 1.13.4.2 $ $Date: 2004/03/15 22:43:18 $
  24. %--------------%
  25. % OLD VERSION  %
  26. %--------------%
  27. %   [T,D] = WPDEC2(X,N,'wname',E,P) returns a tree structure T
  28. %   and a data structure D (see MAKETREE), corresponding to a
  29. %   wavelet packet decomposition of the matrix X, at level N,
  30. %   with a particular wavelet ('wname', see WFILTERS).
  31. %   E is a string containing the type of entropy
  32. %   (see WENTROPY):
  33. %   E = 'shannon', 'threshold', 'norm', 'log energy', 'sure, 'user'
  34. %       'user'
  35. %   P is an optional parameter:
  36. %        'shannon' or 'log energy' : P is not used
  37. %        'threshold' or 'sure'     : P is the threshold (0 <= P)
  38. %        'norm' : P is a power (1 <= P < 2)
  39. %        'user' : P is a string containing the name
  40. %                 of an user-defined function.
  41. %
  42. %   [T,D] = WPDEC2(X,N,'wname') is equivalent to
  43. %   [T,D] = WPDEC2(X,N,'wname','shannon').
  44. %
  45. %   See also MAKETREE, WAVEINFO, WDATAMGR,  WENTROPY
  46. %            WPDEC, WTREEMGR.
  47. % Check arguments.
  48. nbIn = nargin;
  49. if nbIn < 3 ,    error('Not enough input arguments.');
  50. elseif nbIn==3 , parameter = 0.0; type_ent = 'shannon';
  51. elseif nbIn==4 , parameter = 0.0;
  52. end
  53. if strcmp(lower(type_ent),'user')
  54.     if ~ischar(parameter)
  55.         error('*** Invalid function name for user entropy ***');
  56.     end
  57. end
  58. % Tree Computation.
  59. if nargout==1    % NEW VERSION
  60.     order = 4;
  61.     varargout{1} = wptree(order,depth,x,wname,type_ent,parameter);
  62. else             % OLD VERSION
  63. verWTBX = wtbxmngr('version','nodisp');
  64. if ~isequal(verWTBX,'V1')
  65. WarnString = strvcat(...
  66. 'Warning: The number of output arguments for the wpdec2', ...
  67.         'function has changed and this calling syntax is obsolete.',  ...
  68. 'Please type "help wtbxmngr" at the MATLAB prompt', ...
  69. 'for more information.' ...
  70. );
  71. DlgName = 'Warning Dialog';
  72. wwarndlg(WarnString,DlgName,'bloc');
  73. varargout = cell(1,nargout); 
  74. return
  75. end
  76.     [varargout{1},varargout{2}] = owpdec2(x,depth,wname,type_ent,parameter);
  77. end
  78. %=============================================================================%
  79. % INTERNAL FUNCTIONS
  80. %=============================================================================%
  81. %-----------------------------------------------------------------------------%
  82. function [Ts,Ds] = owpdec2(x,depth,wname,type_ent,parameter,x_shape)
  83. %WPDEC2 Wavelet packet decomposition 2-D.
  84. % Initialization
  85. %%%%%%%%%%%%%%%%
  86. x_shape     = 'm';
  87. order       = 4;
  88. [Ts,nbtn]   = maketree(order,depth,order/2);
  89. sizes       = zeros(2,depth+1);
  90. Ds          = x(:)';
  91. ent         = zeros(1,(order*nbtn-1)/(order-1));
  92. tmp         = NaN;
  93. ent_opt     = tmp(ones(size(ent)));
  94. sizes(:,1)  = size(x)';
  95. sx          = prod(size(x));
  96. ent(1)      = wentropy(x,type_ent,parameter);
  97. % Tree Computation
  98. %%%%%%%%%%%%%%%%%%
  99. [Lo_D,Hi_D] = wfilters(wname,'d');
  100. n = 2;
  101. for k=0:depth-1
  102.     beg = 1;
  103.     s = sizes(:,k+1)';
  104.     for p=0:order^k-1
  105.         x    = zeros(s);
  106.         x(:) = Ds(beg:beg+sx-1);
  107.         [a,h,v,d] = dwt2(x,Lo_D,Hi_D);
  108.         Ds = [Ds(1:beg-1) a(:)' h(:)' v(:)' d(:)' Ds(beg+sx:end)];
  109.         ent(n)   = wentropy(a,type_ent,parameter);
  110.         ent(n+1) = wentropy(h,type_ent,parameter);
  111.         ent(n+2) = wentropy(v,type_ent,parameter);
  112.         ent(n+3) = wentropy(d,type_ent,parameter);
  113.         beg      = beg+order*prod(size(a));
  114.         n        = n+order;
  115.     end
  116.     sx = prod(size(a));
  117.     sizes(:,k+2) = size(a)';
  118. end
  119. Ts = wtreemgr('winfo',Ts,size(a)'*ones(1,nbtn));
  120. % Writing wavelet and entropy
  121. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  122. Ds = wdatamgr('write',Ds,sizes,x_shape,...
  123.                ent,ent_opt,parameter,type_ent,wname,order);
  124. %-----------------------------------------------------------------------------%
  125. %=============================================================================%