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

波变换

开发平台:

Matlab

  1. function varargout = wpdencmp(varargin)
  2. %WPDENCMP De-noising or compression using wavelet packets.
  3. %   [XD,TREED,PERF0,PERFL2] =
  4. %   WPDENCMP(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)
  5. %   returns a de-noised or compressed version XD of input
  6. %   signal X (1-D or 2-D) obtained by wavelet packet
  7. %   coefficients thresholding.
  8. %   The additional output argument TREED is the
  9. %   wavelet packet best tree decomposition of XD.
  10. %   PERFL2 and PERF0 are L^2 recovery and compression
  11. %   scores in percentages.
  12. %   PERFL2 = 100*(vector-norm of WP-cfs of XD)^2 over
  13. %   (vector-norm of WP-cfs of X)^2
  14. %
  15. %   SORH ('s' or 'h') is for soft or hard thresholding
  16. %   (see WTHRESH for more details).
  17. %   Wavelet packet decomposition is performed at level N,
  18. %   and 'wname' is a string containing the wavelet name.
  19. %   Best decomposition is performed using entropy criterion
  20. %   defined by string CRIT and parameter PAR (see WENTROPY
  21. %   for details). Threshold parameter is also PAR.
  22. %   If KEEPAPP = 1, approximation coefficients cannot be
  23. %   thresholded; otherwise, they can be.
  24. %   ---------------------------------------------------------
  25. %   [XD,TREED,PERF0,PERFL2] =
  26. %   WPDENCMP(TREE,SORH,CRIT,PAR,KEEPAPP)
  27. %   has same output arguments, using the same options as
  28. %   above, but obtained directly from the input wavelet
  29. %   packet tree decomposition TREE of the
  30. %   signal to be de-noised or compressed.
  31. %   In addition if CRIT = 'nobest' no optimization is done
  32. %   and the current decomposition is thresholded.
  33. %
  34. %   See also DDENCMP, WDENCMP, WENTROPY, WPDEC, WPDEC2.
  35. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  36. %   Last Revision: 14-May-2003.
  37. %   Copyright 1995-2004 The MathWorks, Inc.
  38. % $Revision: 1.13.4.2 $
  39. %
  40. %--------------%
  41. % OLD VERSION  %
  42. %--------------%
  43. %   [XD,TREED,DATAD,PERF0,PERFL2] =
  44. %   WPDENCMP(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)
  45. %   returns a de-noised or compressed version XD of input
  46. %   signal X (1-D or 2-D) obtained by wavelet packets
  47. %   coefficients thresholding.
  48. %   The additional output arguments [TREED,DATAD] are the
  49. %   wavelet packet best decomposition structure of XD,
  50. %   PERFL2 and PERF0 are L^2 recovery and compression
  51. %   scores in percentages.
  52. %   PERFL2 = 100*(vector-norm of WP-cfs of XD)^2 over
  53. %   (vector-norm of WP-cfs of X)^2
  54. %   SORH ('s' or 'h') is for soft or hard thresholding
  55. %   (see WTHRESH for more details).
  56. %   Wavelet packet decomposition is performed at level N
  57. %   and 'wname' is a string containing wavelet name.
  58. %   Best decomposition is performed using entropy criterion
  59. %   defined by string CRIT and parameter PAR (see WENTROPY
  60. %   for details). Threshold parameter is also PAR.
  61. %   If KEEPAPP = 1, approximation coefficients cannot be
  62. %   thresholded, otherwise it is possible.
  63. %
  64. %   [XD,TREED,DATAD,PERF0,PERFL2] =
  65. %   WPDENCMP(TREE,DATA,SORH,CRIT,PAR,KEEPAPP)
  66. %   has same output arguments, using the same options as
  67. %   above, but obtained directly from the input wavelet
  68. %   packet decomposition structure [TREE,DATA] of the
  69. %   signal to be de-noised or compressed.
  70. %   In addition if CRIT = 'nobest' no optimization is done
  71. %   and the current decomposition is thresholded.
  72. %
  73. %   See also DDENCMP, WDENCMP, WENTROPY, WPDEC, WPDEC2.
  74. % Check arguments and set problem dimension.
  75. oldFlag = 0;
  76. nbIN    = nargin;
  77. nbOUT   = nargout;
  78. switch nbIN
  79.     case {5,6}
  80.       Ts = varargin{1};
  81.       if nbIN==5    % NEW VERSION
  82.           okOUT = [1:4];
  83.           Ds  = Ts;
  84.           num_IN = 2;
  85.       else          % OLD VERSION
  86.           okOUT = [1,3:5];
  87.           Ds    = varargin{2};
  88.           num_IN  = 3;
  89.           oldFlag = 1;
  90.       end
  91.       if ~any(okOUT==nbOUT)
  92.           error('Invalid number of output arguments.');
  93.       end
  94.   [sorh,crit,par,keepapp] = deal(varargin{num_IN:end});
  95.   if oldFlag
  96.   verWTBX = wtbxmngr('version','nodisp');
  97.   if ~isequal(verWTBX,'V1')
  98.   WarnString = strvcat(...
  99.   'Warning: The number of output arguments for the wpdencmp', ...
  100.   'function has change and this calling syntax is obsolete.', ...
  101.   'Please type "help wtbxmngr" at the MATLAB prompt', ...
  102.   'for more information.' ...
  103.   );
  104.   DlgName = 'Warning Dialog';
  105.   wwarndlg(WarnString,DlgName,'bloc');
  106.   varargout = cell(1,nargout); 
  107.   return
  108.   end
  109.   end
  110.   if oldFlag
  111.   sizdat = wdatamgr('rsizes',Ds);
  112.       else
  113.           sizdat = read(Ds,'sizes');
  114.       end
  115.       dim = size(sizdat,1);
  116.     case 7
  117.       switch nbOUT
  118.         case {1,2,4} , okOUT = nbOUT;               % NEW VERSION
  119.         case {3,5}   , okOUT = nbOUT; oldFlag = 1;  % OLD VERSION
  120.         otherwise    , oldFlag = 1;                 % ERROR
  121.       end
  122.       if ~any(okOUT==nbOUT)
  123.           error('Invalid number of output arguments.');
  124.       end
  125.       [x,sorh,n,w,crit,par,keepapp] = deal(varargin{1:7});
  126.       if errargt(mfilename,n,'int'), error('*'), end
  127.       if errargt(mfilename,w,'str'), error('*'), end
  128.       dim = 1; if min(size(x)) ~= 1, dim = 2; end
  129.     otherwise % ERROR for NEW or OLD VERSION
  130.       if ~any([5:7]==nbIN)
  131.           error('Invalid number of input arguments.');
  132.       end
  133.       if ~any([0:5]==nbOUT)
  134.           error('Invalid number of output arguments.');
  135.       end
  136. end
  137. if errargt(mfilename,sorh,'str'), error('*'), end
  138. if errargt(mfilename,crit,'str'), error('*'), end
  139. num_OUT = 1;
  140. if oldFlag % OLD VERSION.
  141. if oldFlag
  142. verWTBX = wtbxmngr('version','nodisp');
  143. if ~isequal(verWTBX,'V1')
  144. WarnString = strvcat(...
  145. 'Warning: The number of output arguments for the wpdencmp', ...
  146. 'function has change and this calling syntax is obsolete.', ...
  147. 'Please type "help wtbxmngr" at the MATLAB prompt', ...
  148. 'for more information.' ...
  149. );
  150. DlgName = 'Warning Dialog';
  151. wwarndlg(WarnString,DlgName,'bloc');
  152. varargout = cell(1,nargout); 
  153. return
  154. end
  155. end
  156. if nargin==7
  157. % Wavelet packet decomposition of x.
  158.         if dim==1
  159.             [Ts,Ds] = wpdec(x,n,w,crit,par);
  160.         else
  161.             [Ts,Ds] = wpdec2(x,n,w,crit,par);
  162.         end
  163.     elseif strcmp(crit,'nobest') == 0
  164.         % Update entropy.
  165.         Ds = entrupd(Ts,Ds,crit,par);
  166.     end
  167.     if strcmp(crit,'nobest') == 0
  168.         % Perform best tree.
  169.         [Ts,Ds] = besttree(Ts,Ds);
  170.     end
  171.     % Wavelet packet coefficients thresholding.
  172.     Dsd = wpthcoef(Ds,Ts,keepapp,sorh,par);
  173.     Tsd = Ts;
  174.     % Wavelet packet reconstruction of xd.
  175.     varargout{num_OUT} = wpcoef(Tsd,Dsd,0);
  176.     if nbOUT<2 , return; else , num_OUT = num_OUT+1; end
  177.     varargout{num_OUT} = Ts;
  178.     if nbOUT<3 , return; else , num_OUT = num_OUT+1; end
  179.     varargout{num_OUT} = Dsd;
  180.     if nbOUT<4 , return; else , num_OUT = num_OUT+1; end
  181.     lastOUT = 5;
  182. else % NEW VERSION.
  183.     if nargin==7
  184.         % Wavelet packet decomposition of x.
  185.         switch dim
  186.           case 1 , Ts = wpdec(x,n,w,crit,par);
  187.           case 2 , Ts = wpdec2(x,n,w,crit,par);
  188.         end
  189.     elseif strcmp(crit,'nobest') == 0
  190.         % Update entropy.
  191.         Ts = entrupd(Ts,crit,par);
  192.     end
  193.     if strcmp(crit,'nobest') == 0
  194.         % Perform best tree.
  195.         Ts = besttree(Ts);
  196.     end
  197.     % Wavelet packet coefficients thresholding.
  198.     Tsd = wpthcoef(Ts,keepapp,sorh,par);
  199.     % Wavelet packet reconstruction of xd.
  200.     varargout{num_OUT} = wpcoef(Tsd,0);
  201.     if nbOUT<2 , return; else , num_OUT = num_OUT+1; end
  202.     varargout{num_OUT} = Tsd;
  203.     if nbOUT<3 , return; else , num_OUT = num_OUT+1; end
  204.     Ds  = Ts;
  205.     Dsd = Tsd;
  206.     lastOUT = 4;
  207. end
  208. % Compute L^2 recovery and compression scores.
  209. % Extract final coefficients after thresholding.
  210. if oldFlag
  211.     cfs = wdatamgr('rallcfs',Dsd);
  212. else
  213.     cfs = read(Dsd,'allcfs');
  214. end
  215. % Compute compression score.
  216. varargout{num_OUT} = 100*(length(find(cfs==0))/length(cfs));
  217. if nbOUT<lastOUT , return; else , num_OUT = num_OUT+1; end
  218. % Extract final coefficients before thresholding.
  219. if oldFlag
  220.     orcfs = wdatamgr('rallcfs',Ds);
  221. else
  222.     orcfs = read(Ds,'allcfs');
  223. end
  224. % Compute L^2 recovery score.
  225. nc = norm(orcfs);
  226. if nc<eps
  227.     varargout{num_OUT} = 100;
  228. else
  229.     varargout{num_OUT} = 100*((norm(cfs)/nc)^2);
  230. end