Double condition to find index

1 ビュー (過去 30 日間)
Jeanne Dury
Jeanne Dury 2022 年 6 月 24 日
コメント済み: Jeanne Dury 2022 年 6 月 24 日
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 件のコメント
Jeanne Dury
Jeanne Dury 2022 年 6 月 24 日
The sample rate is 2000Hz

サインインしてコメントする。

採用された回答

Walter Roberson
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 件のコメント
Jeanne Dury
Jeanne Dury 2022 年 6 月 24 日
Thank you very much for your answer. It works perfectly!

サインインしてコメントする。

その他の回答 (1 件)

Jonas
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)

製品

Community Treasure Hunt

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

Start Hunting!

Translated by