if文の作り方
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
masaki yamate
el 12 de En. de 2017
Comentada: masaki yamate
el 13 de En. de 2017
指定のセルの区間において、セル(Yaw)の数値が50行続けて100を超えていたら、それは正しいというような文を作りたいのですが、どうすればよいでしょうか。 for k=1:end Yaw(k;1)>100
上のようなコードに追加して、セルの数値が指定の範囲で50行続けて100を超えていたらのような文を作りたいのですがどうすればよいでしょうか。
0 comentarios
Respuesta aceptada
Tohru Kikawada
el 12 de En. de 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 comentarios
Tohru Kikawada
el 13 de En. de 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まで(閾値を超えた区間)排水装置を点検中
Más respuestas (0)
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!