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

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

채택된 답변

Kojiro Saito
Kojiro Saito 2023년 5월 1일
いくつかやり方はありますが、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
Kojiro Saito
Kojiro Saito 2023년 5월 2일
편집: Kojiro Saito 2023년 5월 2일
>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 2023년 5월 2일
無事に行いたいことが達成できました.
どうもありがとうございます!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!