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

波变换

开发平台:

Matlab

  1. function [xd,cxd,lxd] = wden(in1,in2,in3,in4,in5,in6,in7)
  2. %WDEN Automatic 1-D de-noising using wavelets.
  3. %   WDEN performs an automatic de-noising process of a 1-D
  4. %   signal using wavelets.
  5. %
  6. %   [XD,CXD,LXD] = WDEN(X,TPTR,SORH,SCAL,N,'wname') returns 
  7. %   a de-noised version XD of input signal X obtained by 
  8. %   thresholding the wavelet coefficients. 
  9. %   Additional output arguments [CXD,LXD] are the wavelet 
  10. %   decomposition structure of de-noised signal XD.
  11. %
  12. %   TPTR string contains threshold selection rule:
  13. %   'rigrsure' use principle of Stein's Unbiased Risk.
  14. %   'heursure' is an heuristic variant of the first option.
  15. %   'sqtwolog' for universal threshold sqrt(2*log(.)).
  16. %   'minimaxi' for minimax thresholding.
  17. %       (see THSELECT for more details).
  18. %   SORH ('s' or 'h') is for soft or hard thresholding
  19. %       (see WTHRESH for more details).
  20. %   SCAL defines multiplicative threshold rescaling:
  21. %     'one' for no rescaling.
  22. %     'sln' for rescaling using a single estimation 
  23. %       of level noise based on first level coefficients.
  24. %     'mln' for rescaling done using level dependent
  25. %       estimation of level noise.
  26. %   Wavelet decomposition is performed at level N and 'wname'
  27. %   is a string containing the name of desired orthogonal
  28. %   wavelet.
  29. %
  30. %   [XD,CXD,LXD] = WDEN(C,L,TPTR,SORH,SCAL,N,'wname') returns 
  31. %   same output arguments, using the same options as above, but 
  32. %   obtained directly from the input wavelet decomposition 
  33. %   structure [C,L] of the signal to be de-noised, at level N
  34. %   and using 'wname' orthogonal wavelet.
  35. %
  36. %   See also THSELECT, WAVEDEC, WDENCMP, WFILTERS, WTHRESH.
  37. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  38. %   Last Revision: 14-May-2003.
  39. %   Copyright 1995-2004 The MathWorks, Inc.
  40. % $Revision: 1.10.4.2 $
  41. % Check arguments.
  42. nbIn = nargin;
  43. switch nbIn
  44.   case {0,1,2,3,4,5}  , error('Not enough input arguments.');
  45.   case 6 ,
  46.       x = in1; tptr = in2; sorh = in3; 
  47.       scal = in4; n = in5; w = in6;
  48.   case 7 ,
  49.       c = in1; l = in2; tptr = in3; 
  50.       sorh = in4; scal = in5; n = in6; w = in7;
  51. end
  52. if errargt(mfilename,tptr,'str'), error('*'), end
  53. if errargt(mfilename,sorh,'str'), error('*'), end
  54. if errargt(mfilename,scal,'str'), error('*'), end
  55. if errargt(mfilename,n,'int'), error('*'), end
  56. if errargt(mfilename,w,'str'), error('*'), end
  57. if nbIn==6
  58.     % Wavelet decomposition of x.
  59.     [c,l] = wavedec(x,n,w);
  60. end
  61. % Threshold rescaling coefficients.
  62. switch scal
  63.   case 'one' , s = ones(1,n);
  64.   case 'sln' , s = ones(1,n)*wnoisest(c,l,1);
  65.   case 'mln' , s = wnoisest(c,l,1:n);
  66.   otherwise  , error('Invalid argument value.')
  67. end
  68. % Wavelet coefficients thresholding.
  69. first = cumsum(l)+1;
  70. first = first(end-2:-1:1);
  71. ld   = l(end-1:-1:2);
  72. last = first+ld-1;
  73. cxd = c;
  74. lxd = l;
  75. for k = 1:n
  76.     flk = first(k):last(k);
  77.     if tptr=='sqtwolog' | tptr=='minimaxi'
  78.         thr = thselect(c,tptr);
  79.     else
  80.         if s(k) < sqrt(eps) * max(c(flk))
  81.             thr = 0;
  82.         else
  83.             thr = thselect(c(flk)/s(k),tptr);
  84.         end
  85.     end                                     % threshold.
  86.     thr      = thr * s(k);                  % rescaled threshold.
  87.     cxd(flk) = wthresh(c(flk),sorh,thr);    % thresholding or shrinking.
  88. end
  89. % Wavelet reconstruction of xd.
  90. xd = waverec(cxd,lxd,w);