if文の作り方
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
masaki yamate
le 12 Jan 2017
Commenté : masaki yamate
le 13 Jan 2017
指定のセルの区間において、セル(Yaw)の数値が50行続けて100を超えていたら、それは正しいというような文を作りたいのですが、どうすればよいでしょうか。 for k=1:end Yaw(k;1)>100
上のようなコードに追加して、セルの数値が指定の範囲で50行続けて100を超えていたらのような文を作りたいのですがどうすればよいでしょうか。
0 commentaires
Réponse acceptée
Tohru Kikawada
le 12 Jan 2017
% 信号を作成
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 commentaires
Tohru Kikawada
le 13 Jan 2017
下記のようにしてしきい値を超えた区間を表示することができます。
末端の処理を一部追加しています。 ご参考まで。
% 信号を作成
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まで(閾値を超えた区間)排水装置を点検中
Plus de réponses (0)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!