【问题标题】:Average and synchronize a timeseries with varying timestamps to a user-defined interval in MATLAB将具有不同时间戳的时间序列平均并同步到 MATLAB 中的用户定义间隔
【发布时间】:2016-04-16 21:38:12
【问题描述】:

假设以下时间序列 (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 函数来解决这个问题。但是,我想知道是否有更好/更简单的解决方案,作为修改后的同步功能,因为我有超过 500.000 个数据点。

提前致谢

【问题讨论】:

  • 当你做平均时,它几乎和做插值一样(它实际上是线性插值)。你 16:00 和 16:30 的平均值都是 7,这是怎么回事?
  • 是的,但不是在时间戳内的其他时间戳的情况下(例如,源自 15:45 时间戳的新时间戳 16:00)。 16:00 的值从 16:00 到 16:30 有效,16:30 的值在 17:00 之前有效。从原始数据集中得到这个时间段的值为7(从15:45的时间戳到17:12有效)
  • 我认为在这种情况下,您希望在插值之前四舍五入到最近的时间戳。
  • 我不确定你的意思。我想使用 resample(ts1,'15:00':'0:30':'17:00') 或 synchronize(ts1,ts2) 之类的东西,其中 ts2 包括 ['15:00':'0:30' :'17:00'],但我不知道如何正确修改解释方法以考虑我的情况:)

标签: matlab time time-series average synchronize


【解决方案1】:

我设法解决了我的问题,方法是将所有时间步长划分为分钟值,然后应用梯形规则得到曲线下面积 (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;

【讨论】:

  • 感谢您对我的回答提出修改建议:stackoverflow.com/review/suggested-edits/10892141 - 您的修改是正确的,但它被拒绝的原因(我没有拒绝)是因为您的评论听起来像您不必要地编辑它。在有关更改的 cmets 中,您需要更加明确。 指向文档并解释为什么您必须将其从 0.90 更改为 90 和 0.99 更改为 99...因为这是假定代替我过去犯的错误:mathworks.com/help/stats/prctile.html。不管怎样,谢谢!
  • 酷!感谢您指出这一点,我会记住下一次,我认为答案的 OP 必须接受/拒绝它。实际上,我首先尝试对您的答案发表评论,因此您可以进行更改(但由于我的 stackoverflow 状态较低,我不被允许)。相反,我被允许提议对答案进行编辑...
  • 编辑进入审核队列,Stack Overflow 用户在该队列中审核您所做的编辑以确定编辑的合法性。 stackoverflow.com/review/suggested-edits/10892141 - 您在编辑中的 cmets 对编辑的理由不够清楚,这就是它被拒绝的原因。无论如何,您是一个相对较新的用户,因此您肯定会获得足够的声誉来最终制作 cmets :) 欢迎并再次感谢您的编辑。即使您的编辑被拒绝,我还是自己进行了更改。
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多