假设以下时间序列(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个数据点。
提前致谢
答案 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;