将具有不同时间戳的时间序列平均并同步到 MATLAB 中用户定义的时间间隔
Average and synchronize a timeseries with varying timestamps to a user-defined interval in MATLAB
假设以下时间序列 (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,依此类推。我已经实现了一个代码,它能够通过应用带有大量 if 语句的 trapz 函数来解决这个问题。但是,我想知道是否有 better/simpler 解决方案作为修改后的同步函数,因为我有超过 500.000 个数据点。
提前致谢
我设法通过将所有时间步长划分为 minute-values 来解决我的问题,然后应用梯形法则得到曲线下面积 (AUC) 的总和,然后除以应用的平均值分钟间隔。
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;
假设以下时间序列 (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,依此类推。我已经实现了一个代码,它能够通过应用带有大量 if 语句的 trapz 函数来解决这个问题。但是,我想知道是否有 better/simpler 解决方案作为修改后的同步函数,因为我有超过 500.000 个数据点。
提前致谢
我设法通过将所有时间步长划分为 minute-values 来解决我的问题,然后应用梯形法则得到曲线下面积 (AUC) 的总和,然后除以应用的平均值分钟间隔。
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;