sphear_maxr.m 889 B

12345678910111213141516171819202122232425262728293031
  1. %% -*- mode: octave -*-
  2. %%
  3. %% https://ccrma.stanford.edu/~jos/sasp/Matlab_listing_maxr_m.html
  4. %%
  5. %% MAXR Find interpolated maximizer(s) and max value(s)
  6. %% for (each column of) a.
  7. %%
  8. %% [xi,yi,hc] = maxr(a)
  9. %%
  10. %% Calls max() followed by qint() for quadratic interpolation.
  11. %%
  12. function [xi,yi,hc] = sphear_maxr(a)
  13. [m,n] = size(a);
  14. if m==1, a=a'; t=m; m=n; n=t; end;
  15. [y,x] = max(a);
  16. xi=x; % vector of maximizer locations, one per col of a
  17. yi=y; % vector of maximum values, one per column of a
  18. if nargout>2, hc = zeros(1,n); end
  19. for j=1:n, % loop over columns
  20. if x(j)>1, % only support interior maxima
  21. if x(j)<m,
  22. [xdelta,yij,cj] = sphear_qint(a(x(j)-1,j),y(j),a(x(j)+1,j));
  23. xi(j) = x(j) + xdelta;
  24. if nargout>2, hc(j) = cj; end
  25. if (nargout>1), yi(j) = yij; end
  26. end;
  27. end;
  28. end;
  29. end