# How to find first index before main peak in a signal ?

9 views (last 30 days)
Tomaszzz on 27 Jan 2022
Commented: Tomaszzz on 28 Jan 2022
Hi all,
I have a signal ( see figure an attached).
I want to identify loactions and values of indices circled bold black (first through before main through indicated by blue star)
I have values and locations of all the remaining indices (attached a b c and d).
I am able to identify indices circled red using the code below. I would assume I can modify it to get the indices in bold black but I fail to do this. Can you help please?
counter = 0;
for i = 1:length(main_trough_location)
%finds end of movement cycle
index = all_trough_location > main_trough_location(i);
if sum(index)>0
counter = counter + 1;
end_location(counter) = all_trough_location(find(index,1));
end_value(counter) = all_trough_value(find(index, 1));
end
end
plot(thigh_orient_y,'k')
hold on
plot(all_trough_location,all_trough_value,'ko')
plot(main_trough_location,main_trough_value,'b*')
plot(end_location,end_value,'r*')
h = legend('signal',' all troughs','main troughs','end'); Simon Chan on 27 Jan 2022
Suppose it is the minimum point before rising, you may try to find the first minumum point counting backwards from each peak.
peak_location = find(islocalmax(thigh_orient_y,'MinProminence',40));
backward = arrayfun(@(x) diff(thigh_orient_y(x:-1:1)),peak_location,'UniformOutput',false);
num_back = cellfun(@(x) find(x>0,1,'first'),backward);
min_location = peak_location-num_back+1;
plot(thigh_orient_y);
hold on;
grid on;
plot(min_location,thigh_orient_y(min_location),'g*') Tomaszzz on 28 Jan 2022