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

波变换

开发平台:

Matlab

  1. function thr = thselect(x,tptr)
  2. %THSELECT Threshold selection for de-noising.
  3. %   THR = THSELECT(X,TPTR) returns threshold X-adapted value 
  4. %   using selection rule defined by string TPTR.
  5. %   
  6. %   Available selection rules are:
  7. %   TPTR = 'rigrsure', adaptive threshold selection using 
  8. %       principle of Stein's Unbiased Risk Estimate.
  9. %   TPTR = 'heursure', heuristic variant of the first option.
  10. %   TPTR = 'sqtwolog', threshold is sqrt(2*log(length(X))).
  11. %   TPTR = 'minimaxi', minimax thresholding.
  12. %
  13. %   Threshold selection rules are based on the underlying 
  14. %   model y = f(t) + e where e is a white noise N(0,1).
  15. %   Dealing with unscaled or nonwhite noise can be handled
  16. %   using rescaling output threshold THR (see SCAL parameter
  17. %   in WDEN).
  18. %
  19. %   See also WDEN.
  20. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  21. %   Last Revision: 14-May-2003.
  22. %   Copyright 1995-2004 The MathWorks, Inc.
  23. % $Revision: 1.10.4.2 $
  24. x = x(:)';
  25. n = length(x);
  26. switch tptr
  27.     case 'rigrsure'
  28.         sx2 = sort(abs(x)).^2;
  29.         risks = (n-(2*(1:n))+(cumsum(sx2)+(n-1:-1:0).*sx2))/n;
  30.         [risk,best] = min(risks);
  31.         thr = sqrt(sx2(best));
  32.     case 'heursure'
  33.         hthr = sqrt(2*log(n));
  34.         eta = (norm(x).^2-n)/n;
  35.         crit = (log(n)/log(2))^(1.5)/sqrt(n);
  36.         if eta < crit
  37.             thr = hthr;
  38.         else
  39.             thr = min(thselect(x,'rigrsure'),hthr);
  40.         end
  41.     case 'sqtwolog'
  42.         thr = sqrt(2*log(n));
  43.     case 'minimaxi'
  44.         if n <= 32
  45.             thr = 0;
  46.         else
  47.             thr = 0.3936 + 0.1829*(log(n)/log(2));
  48.         end
  49.     otherwise
  50.         error('Invalid argument value')
  51. end