How to identify both sides of a flat peak (flat part of a signal)?

4 views (last 30 days)
Hi all,
I have the following signal (also attached).
I am trying to find the peaks circles red. The below code does identify all the peaks circled black but i do not understand why it ommits the other side of a flat signal? Can you help please?
load 'signal'
[peak_value,peak_location]= findpeaks(-force_y_r, 'MinPeakProminence',10, 'MinPeakDistance',100);
peak_value = -peak_value;
plot(force_y_r, 'LineWidth',1.5); hold on
plot(peak_location,peak_value,'ko')

Accepted Answer

Star Strider
Star Strider on 13 Jul 2022
Use the islocalmin (introduced in R2017b) function instead of findpeaks
LD = load('signal.mat');
force_y_r = LD.force_y_r;
Lv1 = islocalmin(force_y_r, 'FlatSelection','first', 'MinSeparation',500, 'MinProminence',750);
Lv2 = islocalmin(force_y_r, 'FlatSelection','last', 'MinSeparation',500, 'MinProminence',750);
x = 1:numel(force_y_r);
figure
plot(x, force_y_r)
hold on
plot(x(Lv1), force_y_r(Lv1), '^r')
plot(x(Lv2), force_y_r(Lv2), '^g')
hold off
producing:
It may be necessary to change the name-value pair parameters for other data sets. Use the find function to get numeric indices from the logical vectors.
.
  6 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!