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

波变换

开发平台:

Matlab

  1. function [x,I] = localmax(x,rInit);
  2. %LOCALMAX Compute local maxima.
  3. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 05-Oct-96.
  4. %   Last Revision: 25-May-2003.
  5. %   Copyright 1995-2004 The MathWorks, Inc.
  6. %   $Revision: 1.5.4.2 $  $Date: 2004/03/15 22:41:01 $
  7. [r,c] = size(x);
  8. if nargin==1 , rInit = r; end
  9. % Regularization of  x (!?)
  10. %--------------------------
  11. regule = 1;
  12. if regule==1
  13.     wav = 'sym4';
  14.     lev = 5;
  15.     [cfs,len] = wavedec(x(rInit,:),lev,wav);
  16.     x(rInit,:) = wrcoef('a',cfs,len,wav);
  17. end
  18. x = [zeros(r,1) diff(abs(x),1,2)];
  19. x(abs(x)<sqrt(eps)) = 0;
  20. x(x<0) = -1;
  21. x(x>0) = 1;
  22. x = [zeros(r,1) diff(x,1,2)];
  23. I = find(x==-2);
  24. x(x>-2) = 0;
  25. x(I) = 1;
  26. % Chain maxima - Eliminate "false" maxima.
  27. %-----------------------------------------
  28. ideb = rInit ; step = -1; ifin = 1;
  29. max_down = find(x(ideb,:));
  30. x(ideb,max_down) = max_down;
  31. if rInit<2 , return; end
  32. for jj = ideb+step:step:ifin
  33.     max_curr = find(x(jj,:));
  34.     val_max  = zeros(size(max_curr));
  35.     for k = 1:length(max_down)
  36.         [nul,ind] = min(abs(max_curr-max_down(k)));
  37.         val_max(ind) = max_down(k);
  38.     end
  39.     x(jj,max_curr) = val_max;
  40.     max_down = max_curr(find(val_max));
  41. end