解析区間の指定方法について

8 views (last 30 days)
Sho
Sho on 1 May 2023
Commented: Sho on 2 May 2023
下に解析対象のサンプルデータをお示しします.
ある物体の加速度を示しており,
加速後,だいたい一定の速度でしばらく進み,減速するような波形となっています.
速度がほぼ一定の区間を指定する為に,
開始点:最大の加速度の20%の加速度となった点
終了点:最小の加速度(減速時)の20%に達した点
の条件でデータの範囲を指定したいと思っております.
だいたい下記の赤線グラフの水色線で示した範囲になります.
方法ご教授いただければ幸いです.よろしくお願いいたします.
load('data.mat');
plot(a)

Accepted Answer

Kojiro Saito
Kojiro Saito on 1 May 2023
いくつかやり方はありますが、find関数でfind(x, n)である条件のn番目の点を見つけられるので、これを使ってみたら簡単かと思います。
load('data.mat')
plot(a)
% 加速度の最大値の20%以下の最初の点 (n=1)
xStart = find(a <= max(a)*0.2, 1)
xStart = 41
% 加速度の最小値の20%以下の最初の点 (n=1)
xEnd = find(a <= min(a)*0.2, 1)
xEnd = 337
% 開始点と終了点の線を描画
xline([xStart xEnd], 'r')
% 開始点と終了点のデータを抽出
b = a(xStart:xEnd);
plot(b)
  5 Comments
Kojiro Saito
Kojiro Saito on 2 May 2023
Edited: Kojiro Saito on 2 May 2023
>diff(b <= max(b)*0.2)での出力結果を見ますと,0から1に切り替わる点(1から0の点ではなく)のみfind関数で発見できれば,上記の指定ができそうかと思ったのですが,そのようなことは可能でしたでしょうか?
diffの結果をプロットしてみると
plot(diff(b <= max(b)*0.2))
加速度が最大値の20%より大きいところから20%以下になるところで-1、20%以下から20%より大きくなるところで+1の結果になっています。この+1を見つける方法で検出できませんか。
なお、diff関数は要素2マイナス要素1が要素1に格納されるので、おっしゃるとおり1フレームずれるので+1をする必要がありました。
xStart = find(diff(b <= max(b)*0.2) == 1, 1) +1
Sho
Sho on 2 May 2023
無事に行いたいことが達成できました.
どうもありがとうございます!

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!