problem of using findpeaks

7 Ansichten (letzte 30 Tage)
jie hu
jie hu am 28 Nov. 2023
Beantwortet: Chunru am 28 Nov. 2023
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."

Antworten (2)

Star Strider
Star Strider am 28 Nov. 2023
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)])
.

Chunru
Chunru am 28 Nov. 2023
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)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by