2017-01-28 22 views
0

硬件传感器是使用实时单位精确采样(精确的采样周期)。但是,时间值不会与采样值一起发送到数据库。相反,将记录插入数据库的时间将存储在数据库中的示例中。使用DATETIME类型,并使用GETDATE()函数获取当前时间(Microsoft SQL Server)。如何从存储在数据库中的样本中检测精确的采样间隔?

我该如何重建精确的采样时间?

由于采样间隔是(应该是)60秒,所以有之前不需要以获得更精确的解决方案。 (这是一个旧的解决方案,第三方,有很多历史样本,这样就不可能修复设计)。

为了处理样本,我需要重建样本的正确时间实例。改变整个序列的时间没有问题(也就是说,开始时间是否偏离而不是绝对不重要)。另一方面,应尽可能精确地检测采样间隔。我也不能确定,采样间隔恰好是60秒(如上所述)。我也不能确定,采样间隔是否真的是恒定的(例如,基于设备温度的细微差异)。

当处理样品,我想获得:

  • 开始时间
  • 采样间隔
  • 序列○样本值

当重构样品,我需要将其转换回元组:

  • 时间样品的
  • 样品

正因为如此,对于具有Ñ样本序列的

  • 值,最后一个样本的时间应等于start_time + sampling_interval * (n - 1),并且它应该是合理地接近原始结束时间存储在数据库中。

    根据存储的采样时间考虑相对于实际采样时间的轻微振荡(采样和插入数据库之间的常量延迟在这里不是问题)。

    我在考虑计算从先前和当前采样时间计算的区间的平均值和校正标准偏差。

    不连续检测:如果计算的间隔大于平均值的3σ以下,我会认为它是采样曲线的不连续性(例如,机器关闭或任何外部事件导致样本丢失在这种情况下,我想要开始处理一个新的序列(采样频率也可以改变)。

    是否有任何已知的方法来解决这个问题?如果是的话,你可以指向我的文章( S)?或者你能给我算法的名称或首字母缩写吗?

  • +1

    我会先计算每个值的存储时间戳与其前一个值并查看这些值之间的差异。 – mcdowella

    +0

    感谢您的建议。无论如何,有更多的方法来计算期间。我对累积的错误感到担忧。 (好吧,我可以试验性地尝试,但是...)如果计算当前减去第一个样本的时间间隔除以周期数,我可能也会得到平均值,而且我可以“动态地”与此处的方差相同https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Computing_shifted_data我只是想要调试这个想法。 – pepr

    +0

    我之前对更多样本计算采样间隔的评论是无稽之谈。原因是,当有大量样本时,一个缺失的样本不会产生影响 - 它应该有所作为。 – pepr

    回答

    2

    +1查看差异序列。我们可以将差异序列建模为低频真值(样本的真实速率,随时间缓慢变化)和高频噪声(将样本导入数据库的随机延迟)之和。你想要一个低通滤波器去除后者。

    +0

    我注意到,像差异序列的直方图这样简单的东西可能会揭示在到达时间间隔内的任何突然变化。 – mcdowella

    相关问题