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

波变换

开发平台:

Matlab

  1. function varargout = wpdec(x,depth,wname,type_ent,parameter)
  2. %WPDEC Wavelet packet decomposition 1-D.
  3. %   T = WPDEC(X,N,'wname',E,P) returns a wptree object T
  4. %   corresponding to a wavelet packet decomposition
  5. %   of the vector 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 = WPDEC(X,N,'wname') is equivalent to
  17. %   T = WPDEC(X,N,'wname','shannon').
  18. %
  19. %   See also WAVEINFO, WENTROPY, WPDEC2, 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.12.4.2 $
  24. %--------------%
  25. % OLD VERSION  %
  26. %--------------%
  27. %   [T,D] = WPDEC(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 vector X, at level N,
  30. %   with a particular wavelet ('wname', see WFILTERS).
  31. %   E is a string containing the type of entropy (see WENTROPY):
  32. %   E = 'shannon', 'threshold', 'norm', 'log energy', 'sure, 'user'
  33. %   P is an optional parameter:
  34. %        'shannon' or 'log energy' : P is not used
  35. %        'threshold' or 'sure'     : P is the threshold (0 <= P)
  36. %        'norm' : P is a power (1 <= P < 2)
  37. %        'user' : P is a string containing the name
  38. %                 of an user-defined function.
  39. %
  40. %   [T,D] = WPDEC(X,N,'wname') is equivalent to
  41. %   [T,D] = WPDEC(X,N,'wname','shannon').
  42. %
  43. %   See also MAKETREE, WAVEINFO, WDATAMGR, WENTROPY
  44. %            WPDEC2, WTREEMGR.
  45. % Check arguments.
  46. nbIn = nargin;
  47. if nbIn < 3 ,    error('Not enough input arguments.');
  48. elseif nbIn==3 , parameter = 0.0; type_ent = 'shannon';
  49. elseif nbIn==4 , parameter = 0.0;
  50. end
  51. if strcmp(lower(type_ent),'user')
  52.     if ~ischar(parameter)
  53.         error('*** Invalid function name for user entropy ***');
  54.     end
  55. end
  56. % Tree Computation
  57. if nargout==1    % NEW VERSION
  58.     order = 2;
  59.     varargout{1} = wptree(order,depth,x,wname,type_ent,parameter);
  60. else          % OLD VERSION
  61. verWTBX = wtbxmngr('version','nodisp');
  62. if ~isequal(verWTBX,'V1')
  63. WarnString = strvcat(...
  64. 'Warning: The number of output arguments for the wpdec', ...
  65.         'function has changed and this calling syntax is obsolete.',  ...
  66. 'Please type "help wtbxmngr" at the MATLAB prompt', ...
  67. 'for more information.' ...
  68. );
  69. DlgName = 'Warning Dialog';
  70. wwarndlg(WarnString,DlgName,'bloc');
  71. varargout = cell(1,nargout); 
  72. return
  73. end
  74.     [varargout{1},varargout{2}] = owpdec(x,depth,wname,type_ent,parameter);
  75. end
  76. %=============================================================================%
  77. % INTERNAL FUNCTIONS
  78. %=============================================================================%
  79. %-----------------------------------------------------------------------------%
  80. function [Ts,Ds] = owpdec(x,depth,wname,type_ent,parameter)
  81. %WPDEC Wavelet packet decomposition 1-D.
  82. [mi,ind] = min(size(x));
  83. if (ind==1) & (mi<2)
  84.     x_shape = 'r';
  85. elseif (ind==2) & (mi<2)
  86.     x_shape = 'c';
  87. else
  88.     error('Invalid argument value.');
  89. end
  90. % Initialization
  91. %%%%%%%%%%%%%%%%
  92. order       = 2;
  93. [Ts,nbtn]   = maketree(order,depth,order/2);
  94. sizes       = zeros(1,depth+1);
  95. Ds          = x(:)';
  96. ent         = zeros(1,(order*nbtn-1)/(order-1));
  97. tmp         = NaN;
  98. ent_opt     = tmp(ones(size(ent)));
  99. lx          = length(x);
  100. sizes(1)    = lx;
  101. ent(1)      = wentropy(x,type_ent,parameter);
  102. % Tree computation
  103. %%%%%%%%%%%%%%%%%%
  104. [Lo_D,Hi_D] = wfilters(wname,'d');
  105. n = 2;
  106. for k=0:depth-1
  107.     beg = 1;
  108.     for p=0:order^k-1
  109.         x        = Ds(beg:beg+lx-1);
  110.         [a,d]    = dwt(x,Lo_D,Hi_D);
  111.         Ds       = [Ds(1:beg-1) a d Ds(beg+lx:end)];
  112.         ent(n)   = wentropy(a,type_ent,parameter);
  113.         ent(n+1) = wentropy(d,type_ent,parameter);
  114.         beg      = beg+2*length(a);
  115.         n        = n+order;
  116.     end
  117.     lx         = length(a);
  118.     sizes(k+2) = lx;
  119. end
  120. Ts = wtreemgr('winfo',Ts,lx*ones(1,nbtn));
  121. % Writing wavelet and entropy
  122. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  123. Ds = wdatamgr('write',Ds,sizes,x_shape,...
  124.                 ent,ent_opt,parameter,type_ent,wname,order);
  125. %-----------------------------------------------------------------------------%
  126. %=============================================================================%