同步多个时间序列

时间:2013-05-03 17:00:30

标签: matlab time-series

synchronize()函数只需要2个timeseries参数。如果您需要同步2个以上的时间序列,标准程序是什么?我尝试同步(同步时间序列1和2的输出之一)与时间序列3,但结果没有同步(例如相同的长度)(如下所示),因为它只是与时间数据的范围有关:

% Create data set 1
t1 = rand(10,1);
data1=rand(10,1);
ts1=timeseries(data1,t1);

% Create data set 2
t2 = rand(8,1);
data2=rand(length(t2), 1);
ts2=timeseries(data2,t2);

% Create data set 3
t3 = rand(5,1);
data3=rand(length(t3), 1);
ts3=timeseries(data3,t3);

% Sync 1 and 2
[uniform_ts12_1 uniform_ts12_2] = synchronize(ts1,ts2,'Uniform','Interval',.1);

% Sync 3 to one of the results of the (sync of 1 and 2)
[uniform_ts13_1 uniform_ts13_3] = synchronize(uniform_ts12_1,ts3,'Uniform','Interval',.1);

disp('New sizes:')
length(uniform_ts12_1.Data)
length(uniform_ts12_2.Data)
length(uniform_ts13_1.Data)
length(uniform_ts13_3.Data)

有人可以建议如何同步3个时间序列,以便它们在一天结束时都有相同的时间数据吗?

编辑:

问题在于uniform_ts12_1,uniform_ts12_2,uniform_ts13_1和length(uniform_ts13)的长度不同。它与2同步2,但如果3在2的边界外(或内部),它会同步它们到较小的一个(3),现在与1和2之间的同步长度不同。

1 个答案:

答案 0 :(得分:2)

您需要每次使用同步的时间序列将所有可能的对同步到一起。如果你继续修改时间序列,我认为这是简化的。您正在进行同步,因此您无需跟踪要传入的值。只需保留3个时间序列,并且每个时间序列都被修改,您只需要将它们全部置换,以便所有时间序列对同步:< / p>

>> [ts1 ts2] = synchronize(ts1, ts2, 'Union');
>> [ts1 ts3] = synchronize(ts1, ts3, 'Union');
>> [ts2 ts3] = synchronize(ts2, ts3, 'Union');
>> all(ts1.Time == ts2.Time)

ans =

     1

>> all(ts1.Time == ts3.Time)

ans =

 1

>> 

希望有所帮助!