Double condition to find index
1 view (last 30 days)
Show older comments
Jeanne Dury
on 24 Jun 2022
Commented: Jeanne Dury
on 24 Jun 2022
I have force data from force plate and I try to determine the impact time/index.
For that, I need two conditions:
1) Data exceeds 20 newtons (>20)
2) Data exceeds 20 newtons for more than 50 milliseconds
I tried with for + if and with for using find fonction.
Do you have some idea to resolve that ?
Thank you so much.
3 Comments
Accepted Answer
Walter Roberson
on 24 Jun 2022
freq = 2000; %hz
threshold = 20; %newtons
significant_time = 50; %milliseconds
significant_samples = ceil(significant_time/1000 * freq);
mask = ForceData(:).' > threshold;
streak = repmat(1, 1, significant_samples);
starts = strfind([false mask], [0 streak]);
stops = strfind([mask false], [streak 0]);
At this point, starts and stops will be vectors the same length, in which ForceData(starts(K):stops(K)) is a run of samples that exceed the threshold for at least as long as you require.
More Answers (1)
Jonas
on 24 Jun 2022
myData=...;
fs=2000;
minLength=ceil(fs*0.05);
highVals=myData>20;
searchFor=conv(highVals,ones(1,minLength),'same');
% areas in which the condition is fullfilled are greater than your minLength
plot(searchFor);
findpeaks(searchFor>=minLength)
0 Comments
See Also
Categories
Find more on MATLAB Report Generator in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!