Double condition to find index
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Walter Roberson
2022-6-24
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.
更多回答(1 个)
Jonas
2022-6-24
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 MATLAB Report Generator 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!