if文の作り方

1 回表示 (過去 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 件)

カテゴリ

Help Center および File ExchangeGraphics Performance についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by