Main Content

localmax

Identify and chain local maxima

Syntax

[lmaxima,indices] = localmax(inputmatrix)
[lmaxima,indices] = localmax(inputmatrix,initrow)
[lmaxima,indices] = localmax(inputmatrix,initrow,regflag)

Description

[lmaxima,indices] = localmax(inputmatrix) identifies and chains the local maxima in the rows of inputmatrix.

[lmaxima,indices] = localmax(inputmatrix,initrow) initializes the chaining of local maxima beginning with row initrow. If there are no local maxima in initrow, all rows in lmaxima with indices less than initrow consist of only zeros.

[lmaxima,indices] = localmax(inputmatrix,initrow,regflag) replaces initrow of inputmatrix with the level-5 approximation (scaling) coefficients obtained with the sym4 wavelet.

Input Arguments

inputmatrix

inputmatrix is a matrix of real or complex numbers. Most often, inputmatrix is a matrix of continuous wavelet transform (CWT) coefficients, and you use localmax to identify maxima lines. localmax operates on the absolute values of inputmatrix.

initrow

Initialization row for chaining local maxima. The chaining algorithm begins at initrow and decrements the row index by 1 until the first row of the matrix is reached. By specifying initrow, you can exclude rows from the chaining algorithm.

Default: size(inputmatrix,1)

regflag

Regularization flag. If you set regflag to true, the row of inputmatrix corresponding to initrow is replaced by the level-5 approximation (scaling) coefficients obtained with the sym4 wavelet.

Default: true

Output Arguments

lmaxima

Matrix with local maxima chains. lmaxima only has nonzero entries at the locations of local maxima in the absolute values of inputmatrix. Denote the row index of lmaxima by R. You can determine the value of lmaxima at a local maximum in row R as follows:

  • If R>initRow, the value of lmaxima at a local maximum is 1.

  • If R=initRow, the value of lmaxima at a local maximum is the column index in row R.

  • If R<initRow, the value of lmaxima at a local maximum in row R is the column index of the nearest local maximum in row R+1.

    To illustrate this, if inputmatrix is:

     3     2     5     3
     4     6     3     2
     4     4     7     4
     4     6     2     2

    lmaxima with initRow = 4 and regflag = false is:

         0     0     2     0
         0     3     0     0
         0     0     2     0
         0     2     0     0

    lmaxima with initRow = 3 and regflag = false is:

         0     0     2     0
         0     3     0     0
         0     0     3     0
         0     1     0     0
  • If the local maximum in row R lies between two local maxima in row R+1, the value of the local maximum in row R is the higher column index in row R+1.

    To illustrate this, if inputmatrix is:

         0     0     1     0     0     0
         0     1     0     1     0     0

    lmaxima with initRow = 2 and regflag = false is:

         0     0     4     0     0     0
         0     2     0     4     0     0

    lmaxima with initRow = 1 and regflag = false is:

         0     0     3     0     0     0
         0     1     0     1     0     0

indices

Linear indices of the nonzero values of lmaxima. Use ind2sub to convert the linear indices to matrix row and column indices.

Examples

collapse all

Construct a 4-by-4 matrix with local maxima at the following row-column indices: (4,2), (3,3), (2,2), and (1,3). Set initrow to 4 and regflag to false.

inputmatrix = ...
    [3 2 5 3
    4 6 3 2
    4 4 7 4
    4 6 2 2];
[lmaxima,indices] = localmax(inputmatrix,4,false);
lmaxima
lmaxima = 4×4

     0     0     2     0
     0     3     0     0
     0     0     2     0
     0     2     0     0

Because localmax operates on the absolute values of inputmatrix, setting inputmatrix(4,2) = -inputmatrix(4,2) produces an identical lmaxima.

inputmatrix(4,2) = -inputmatrix(4,2);
[lmaxima1,indices1] = localmax(inputmatrix,4,false);
isequal(lmaxima,lmaxima1)
ans = logical
   1

Determine the local maxima from the CWT of the cuspamax signal using the default Morse wavelet. Plot the CWT coefficient moduli and maxima lines.

load cuspamax;

Plot the cuspamax signal and notice the shape of the signal near samples 300 and 700. The signal shows a cusp near sample 700.

plot(cuspamax);
xlabel('Sample');

Plot the wavelet transform modulus maxima and note the local Holder exponent values at samples 308 and 717.

wtmm(cuspamax,'ScalingExponent','local');

Holder exponent values indicate the strength of the singularities in a signal. Signal locations where the local Holder exponent is 0 are discontinuous at that location. Locations with Holder exponents greater than or equal to 1 are differentiable. Holder exponent values less than but close to 1 indicate that the signal at the location is almost differentiable. The closer the Holder exponent value is to 0, the stronger the singularity.

The Holder exponent at sample 308 is 1.9 and at sample 717 is 0.39. The low Holder value at sample 717 confirms that the signal is not differentiable and has a fairly strong singularity at that point.

Version History

Introduced in R2008a