Clear Filters
Clear Filters

時系列データから0以​外の塊をとりだして処​理するには

6 views (last 30 days)
Saka Toshi
Saka Toshi on 4 Sep 2021
Answered: Atsushi Ueno on 5 Sep 2021
よろしくお願いいたします。時系列データの例をあげます。
蛇口からの出る水の流量をはかっているデータだと、
時系列データは、基本数値の0が続いて、ときたま0以外の正の数値(流量や温度)が連続してはいってます。
この時系列データから、一回目、二回目、三回目、、、の蛇口からでる流量値を、処理していきたいのです。
たとえば、
①流れ出して10秒後から20秒後まで、または最後までの流量の平均値
②流れ出して10秒後から20秒後まで、または最後までの温度の平均値
③流量や温度の最大値
こういった処理をするには、どうやったら効率的に処理できるでしょうか。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 5 Sep 2021
ischange関数を使いました。閾値の指定や平均・分散を得る機能がありますが使いませんでした。「データがゼロから変化する部分(測定の始まり)」と、「データがゼロへ変化する部分(測定の終わり)」をそれぞれ選択しています。このコードでは温度や流量を区別しておらず、またデータのインデックスを0.1秒として計算しました。お使いのデータではどのようにプログラムを作れば良いか考えてみてください。
data = [zeros(1,50) ... % 基本数値の0が続いて、ときたま0以外の正の数値が連続してはいるデータ
rand(1,16)+(0:0.2:3) rand(1,200)+3 rand(1,16)+(3:-0.2:0) zeros(1,200) ...
rand(1,21)+(0:0.1:2) rand(1,300)+2 rand(1,21)+(2:-0.1:0) zeros(1,150) ...
rand(1,41)+(0:.025:1) rand(1,250)+1 rand(1,41)+(1:-.025:0) zeros(1,200) ...
rand(1,300)+0.3 zeros(1,150)];
TF = ischange(data,'linear'); % データの急激な変化の検出
%% データ測定の開始終了部を抽出
TF2 = [TF zeros(1,4)] & [zeros(1,4) ~data]; % TF2: ゼロからの変化点のみ選択(始まり)
TF3 = [zeros(1,4) TF] & [~data zeros(1,4)]; % TF3: ゼロへの変化点のみ選択(終わり)
start_idx = find(TF2);
end_idx = find(TF3);
%% データのプロット
plot(data); ylim([0 4.5]); hold on;
plot(TF,'*','color','green'); % ischange関数の出力(変化点全て)
plot(TF2,'*','color','red'); % TF2: ゼロからの変化点(始まり)
plot(TF3,'*','color','blue'); % TF3: ゼロへの変化点(終わり)
%% 、目的の範囲の平均値・最大値の演算
col = 'rgbmcyk';
for i=1:size(start_idx,2)
ave10_20 = mean(data(start_idx(i)+100:start_idx(i)+200)); % ①流れ出して10秒後から20秒後までの流量の平均値
ave10_ed = mean(data(start_idx(i)+100:end_idx(i))); % ①流れ出して10秒後から最後までの流量の平均値
max0_end = max(data(start_idx(i):end_idx(i))); % ③流量や温度の最大値
yline(ave10_20,'Color',col(i));
yline(ave10_ed,'Color',col(i));
yline(max0_end,'Color',col(i));
end

More Answers (0)

Categories

Find more on MATLAB 入門 in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!