在MATLAB中将具有不同时间戳的时间序列平均并同步到用户定义的间隔

时间:2016-01-12 10:14:07

标签: matlab time time-series average synchronize

假设以下时间序列(ts)具有指定值:

time    val
15:00   4
15:45   7
17:12   2.3
17:50   2.9

时间戳中的每个值都有效,直到出现下一个值。因此,从15:00到15:45,值为4或从15:45到17:12,它是2.3。这些时间戳之间的每个新数据点应具有相同的值。我想要的是一个新的ts,具有恒定的时间间隔和预定义的起点。假设起点是15:00,间隔应该是30分钟。通常,我可以使用同步函数 - 但是,函数使用插值方法,这不是我在这里需要的,因为数据点之间的值不应该被插值,而是在时间戳重叠时被平均。

新的ts应该是:

time   val
15:00  4
15:30  5.5
16:00  7
16:30  7
17:00  4.18

时间戳15:30的值计算为=(4 * 15 + 7 * 15)/ 30,依此类推。我已经实现了一个代码,它能够通过将trapz函数应用于很多if语句来解决这个问题。但是,我想知道是否有更好/更简单的解决方案,作为修改后的同步功能,因为我有超过500.000个数据点。

提前致谢

1 个答案:

答案 0 :(得分:1)

我设法解决了我的问题,将所有时间步长分为分钟值,然后应用梯形规则得到曲线下面积(AUC)的总和,然后用应用的分钟间隔除以平均值。 / p>

    AllValues = interp1(Time,Data,NewTime,'previous')';
    [Xdata,Ydata] = stairs(NewTime,AllValues);
    NewTS = timeseries(Xdata,Ydata);
    TrapzSum =  cumtrapz(NewTS.time,NewTS.data);
    TrapzSum =  TrapzSum(1:2:end); 
    NewResults = diff(TrapzSum(IndicesOfNewInterval))/MinInt;