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

波变换

开发平台:

Matlab

  1. function [thresh,rl2scr,n0scr,imin,suggthr] = wpcmpscr(Ts,IN2,IN3)
  2. %WPCMPSCR Wavelet packets 1-D or 2-D compression scores.
  3. %   [THR,RL2,NZ,IMIN,STHR] = WPCMPSCR(TREE) returns
  4. %   for the input wavelet packets tree TREE compression scores
  5. %   and suggested threshold when approximation is kept:
  6. %   THR the vector of ordered thresholds.
  7. %   and the corresponding vectors of scores induced by
  8. %   a THR(i)-thresholding :
  9. %   RL2 vector of 2-norm recovery score in percent.
  10. %   NZ  vector of relative number of zeros in percent.
  11. %   IMIN is the index of THR for which the two scores are
  12. %   approximately the same.
  13. %   STHR is a suggested threshold.
  14. %
  15. %   When used with two arguments WPCMPSCR(TREE,IN2) 
  16. %   returns the same outputs but all coefficients can be 
  17. %   thresholded.
  18. %
  19. %   See also KEY2INFO, WCMPSCR.
  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 $
  24. %--------------%
  25. % NEW VERSION  %
  26. %--------------%
  27. %   Internal uses for compatibility:
  28. %   [THR,RL2,NZ,IMIN,STHR] = WPCMPSCR(TREE,TREE)
  29. %     Approximation is kept.
  30. %
  31. %   [THR,RL2,NZ,IMIN,STHR] = WPCMPSCR(TREE,TREE,IN3)
  32. %     All coefficients can be thresholded.
  33. %
  34. %--------------%
  35. % OLD VERSION  %
  36. %--------------%
  37. %WPCMPSCR 1D or 2D Wavelet packets compression scores.
  38. %   [THR,RL2,NZ,IMIN,STHR] = WPCMPSCR(TREE,DATA) returns
  39. %   for the input wavelet packets decomposition structure 
  40. %   [TREE,DATA], compression scores and suggested
  41. %   threshold when approximation is kept:
  42. %   THR the vector of ordered thresholds.
  43. %   and the corresponding vectors of scores induced by
  44. %   a THR(i)-thresholding :
  45. %   RL2 vector of 2-norm recovery score in percent.
  46. %   NZ  vector of relative number of zeros in percent.
  47. %   IMIN is the index of THR for which the two scores are
  48. %   approximately the same.
  49. %   STHR is a suggested threshold.
  50. %
  51. %   When used with three arguments WPCMPSCR(TREE,DATA,IN3) 
  52. %   returns the same outputs but all coefficients can be 
  53. %   thresholded.
  54. %
  55. %   See also KEY2INFO, WCMPSCR.
  56. % Check arguments and set problem dimension.
  57. if isa(Ts,'wptree')
  58.     keepapp = (nargin == 1) | (nargin == 2 & isa(IN2,'wptree'));
  59.     if keepapp      % approximation is kept.
  60.         tn      = leaves(Ts);
  61.         app     = tn(1);
  62.         sizapp  = read(Ts,'sizes',app);
  63.         dimapp  = prod(sizapp);
  64.     end 
  65.     c = read(Ts,'allcfs');
  66. else
  67.     keepapp = (nargin == 2);
  68.     if keepapp      % approximation is kept.
  69.         [tn,sizes]  = wtreemgr('readall',Ts);
  70.         dimapp = prod(sizes(1,:));
  71.     end 
  72.     % data    = IN2;
  73.     c = wdatamgr('rallcfs',IN2,Ts);
  74. end
  75. order = treeord(Ts);
  76. if order==2 , dim = 1; else , dim = 2;  end
  77. % Set possible thresholds.
  78. if keepapp      % approximation is kept.
  79.     app    = c(1:dimapp);
  80.     c      = c(dimapp+1:length(c));
  81.     nl2app = sum(app.^2);
  82.     n0app  = length(find(app==0));
  83. else            % all coefs can be thresholded.
  84.     dimapp = 0; nl2app = 0; n0app = 0;
  85. end
  86. % Compute compression scores.
  87. thresh = sort(abs(c));
  88. lenthr = length(thresh);
  89. if (nl2app<eps & thresh(lenthr)<eps)
  90.     rl2scr  = 100*ones(1,lenthr);
  91.     n0scr   = 100*ones(1,lenthr);
  92.     suggthr = 0;
  93.     indmin  = 1;
  94.     return
  95. end
  96. rl2scr = cumsum(thresh.^2) / (sum(thresh.^2)+nl2app);
  97. n0det  = length(find(c==0));
  98. n0scr  = ((n0app + n0det + ...
  99.                [zeros(1,n0det+1) , 1:(lenthr-n0det)]) / (lenthr+dimapp));
  100. rl2scr = 100 * (1 - rl2scr);
  101. n0scr  = 100 * n0scr;
  102. thresh = [0 thresh];
  103. rl2scr = [100 rl2scr];
  104. % Find threshold for which the two scores are the same.
  105. [dummy,imin] = min(abs(rl2scr-n0scr));
  106. % Set suggested threshold.
  107. suggthr = thresh(imin);
  108. if dim==2, suggthr = sqrt(suggthr); end