if文の作り方

조회 수: 3 (최근 30일)
masaki yamate
masaki yamate 2017년 1월 12일
댓글: masaki yamate 2017년 1월 13일
指定のセルの区間において、セル(Yaw)の数値が50行続けて100を超えていたら、それは正しいというような文を作りたいのですが、どうすればよいでしょうか。 for k=1:end Yaw(k;1)>100
上のようなコードに追加して、セルの数値が指定の範囲で50行続けて100を超えていたらのような文を作りたいのですがどうすればよいでしょうか。

채택된 답변

Tohru Kikawada
Tohru Kikawada 2017년 1월 12일
連続してしきい値を超えているかは下記の方法で判定することができます。 こちらも合わせてご参照ください。
% 信号を作成
t = (0:500)';
Yaw = abs(400*sin(2*pi*(t-50)/200)+200);
% 100以上の箇所を判定
T = 100; % 値のしきい値
over100 = Yaw > 100;
% 時系列で信号変化のある箇所を検出
f = find([false;over100]~=[over100;false]);
% 1の期間の幅が50以上の箇所を抽出
N = 50; % 期間のしきい値
g = find(f(2:2:end)-f(1:2:end-1)>=N);
% 時間を取得
t_start = t(f(2*g-1));
% 可視化
figure;
subplot(211), plot(t,Yaw);
hold on;
plot([t(1) t(end)],[T T]);
subplot(212), plot(t,over100);
hold on;
stem(t_start,ones(numel(t_start),1));
実行結果
t_start =
42
242
442
  댓글 수: 3
Tohru Kikawada
Tohru Kikawada 2017년 1월 13일
下記のようにしてしきい値を超えた区間を表示することができます。
末端の処理を一部追加しています。 ご参考まで。
% 信号を作成
t = (0:500)'; % 時刻
Yaw = abs(400*sin(2*pi*(t-50)/200)+200); % 信号値
% 100以上の箇所を判定
T = 100; % 値のしきい値
over100 = Yaw > 100;
% 時系列で信号変化のある箇所を検出
f = find([false;over100]~=[over100;false]);
% インデックスが範囲外にならないように飽和
f = min(f,numel(over100));
% 1の期間の幅が50以上の箇所を抽出
N = 50; % 期間のしきい値
g = find(f(2:2:end)-f(1:2:end-1)>=N);
% 時間を取得
t_start = t(f(2*g-1));
t_end = t(f(2*g));
% 可視化
figure;
subplot(211), plot(t,Yaw);
hold on;
plot([t(1) t(end)],[T T]);
subplot(212), plot(t,over100);
hold on;
stem(t_start,ones(numel(t_start),1));
% 区間表示
for k = 1:numel(g)
fprintf('セルの%dから%dまで(閾値を超えた区間)排水装置を点検中\n',t_start(k),t_end(k));
end
実行結果
セルの42から159まで(閾値を超えた区間)排水装置を点検中
セルの242から359まで(閾値を超えた区間)排水装置を点検中
セルの442から500まで(閾値を超えた区間)排水装置を点検中
masaki yamate
masaki yamate 2017년 1월 13일
助かりました。望み通りのものができて感動しております。すべてあなた様のおかげです。ありがとうございました。お世話になりました。

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

추가 답변 (0개)

제품

Community Treasure Hunt

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

Start Hunting!

Translated by