Double condition to find index

4 ビュー (過去 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)

カテゴリ

Find more on Loops and Conditional Statements in Help Center and File Exchange

製品

Community Treasure Hunt

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

Start Hunting!

Translated by