MATLAB: How to number the peaks and troughs of signal

signal processingSignal Processing Toolbox

Here is my signal where i need to number the peaks and troughs in numbers as 1,2,3,4…

Best Answer

Try findpeaks() in the Signal Processing Toolbox. Invert the signal to find valleys.
numPoints = 50;
x = sort(rand(1, numPoints));
y = rand(1, numPoints);
plot(x, y, 'k-', 'LineWidth', 2);
grid on;
[peakValues, indexesOfPeaks] = findpeaks(y);
hold on;
peakx = x(indexesOfPeaks);
peaky = y(indexesOfPeaks);
plot(peakx, peaky, 'r*', 'LineWidth', 2, 'MarkerSize', 10);
% Find valleys on inverted signal
[valleyValues, indexesOfValleys] = findpeaks(-y);
valleyx = x(indexesOfValleys);
valleyy = y(indexesOfValleys);
hold on;
plot(valleyx, valleyy, 'b*', 'LineWidth', 2, 'MarkerSize', 10);
Be careful with the first and last point of your data since it doesn't find those. You should look at the adjacent index (2 or end-1) if you want to classify them as either a peak or valley.