problem of using findpeaks
Show older comments
I have two vectors of time (datetime formate) and elevation, but there is an error to use findpeaks(elev,time), saying "Expected X to be strictly increasing."
Answers (2)
My guess is that the datetime values are not considered to be monotonically increasing because they span multiple years.
Try this as a work-around —
LD = load('19year.mat');
elev = LD.elev;
timing = LD.timing;
[pks,plocs] = findpeaks(elev);
[vys,vlocs] = findpeaks(-elev);
figure
plot(timing, elev, 'DisplayName','Data')
hold on
plot(timing(plocs), pks, '^r', 'MarkerSize',2.5, 'DisplayName','Peaks')
plot(timing(vlocs), -vys, 'vg', 'MarkerSize',2.5, 'DisplayName','Valleys')
hold off
grid
xlabel('timing')
ylabel('elev')
legend('Location','best')
figure
plot(timing, elev, 'DisplayName','Data')
hold on
plot(timing(plocs), pks, '^r', 'DisplayName','Peaks')
plot(timing(vlocs), -vys, 'vg', 'DisplayName','Valleys')
hold off
grid
xlabel('timing')
ylabel('elev')
legend('Location','best')
xlim([timing(1) timing(500)])
.
load(websave("19year.mat", "https://www.mathworks.com/matlabcentral/answers/uploaded_files/1553817/19year.mat"))
% It seems that timing contains duplcate data.
% fild peaks require x-axis to be monotonically increasing.
% Workaround:
% sort the data
[timing, i] = sort(timing);
elev = elev(i);
% find the peaks and location
[pks, locs] = findpeaks(elev, MinPeakProminence=1);
plot(timing, elev);
hold on
plot(timing(locs), pks, 'rv', 'Markersize', 5)
Categories
Find more on Signal Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

