if文の作り方
조회 수: 3 (최근 30일)
이전 댓글 표시
指定のセルの区間において、セル(Yaw)の数値が50行続けて100を超えていたら、それは正しいというような文を作りたいのですが、どうすればよいでしょうか。 for k=1:end Yaw(k;1)>100
上のようなコードに追加して、セルの数値が指定の範囲で50行続けて100を超えていたらのような文を作りたいのですがどうすればよいでしょうか。
댓글 수: 0
채택된 답변
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
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まで(閾値を超えた区間)排水装置を点検中
추가 답변 (0개)
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!