The `findpeaks`

function in the MATLAB (verion 7.6.0.324) Signal Processing Toolbox finds local maxima or peaks in a vector.

>> v = [0 3 0 0 3 2];

>> [pks, locs] = findpeaks(v)

pks =

3 3

locs =

2 5

`locs`

contains the locations or indices of the peaks in `v`

(MATLAB indexing starts at 1).For each column of a 256 x 5188 matrix we were calculating a simple moving average (

`smooth`

function) and then finding the peaks and it was taking a long time, approximately 19.6 seconds. We whipped up our own findpeaks function based on the following two lines:This calculates the pairwise differences between elements, i.e. the slopes and then looks for an up slope immediately followed by a down slope. Pretty simple and now the 5188 matrix columns are processed in approximately 1.3 seconds.

>> s=v(2:end)-v(1:end-1);

>> loc=find((s(1:end-1)>0) & (s(2:end)<0)) + 1

loc =

2 5