【问题标题】:How to detect the precise sampling interval from samples stored in a database?如何从存储在数据库中的样本中检测精确的采样间隔?
【发布时间】:2017-01-28 00:36:39
【问题描述】:

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

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

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

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

在处理样本时,我想得到:

  • 开始时间
  • 采样间隔
  • 样本值的顺序

在重构样本时,我需要将其转换回元组:

  • 采样时间
  • 样本价值

因此,对于有n个样本的序列,最后一个样本的时间应该等于start_time + sampling_interval * (n - 1),并且应该合理地接近数据库中存储的原始结束时间.

考虑到存储的采样时间相对于实际采样时间略有波动(采样和插入数据库之间的恒定延迟在这里不是问题)。

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

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

是否有任何众所周知的方法来解决这个问题。如果是的话,你能指出我的文章吗?或者你能给我算法的名称或缩写吗?

【问题讨论】:

  • 我将首先计算每个值与其前身的存储时间戳之间的差异,并查看这些值。
  • 感谢您的建议。无论如何,还有更多的方法来计算周期。我担心累积的错误。 (好的,我可以通过实验尝试,但是......)如果计算当前减去第一个样本的间隔除以周期数,我可能还会得到平均值,我可能会“即时”完成与此处的方差相同en.wikipedia.org/wiki/… 我只是绕着头调试这个想法。
  • 我之前关于从更多样本中计算采样间隔的评论是一派胡言。原因是当有很多样本时,一个缺失的样本不会产生影响——它应该会产生影响。

标签: algorithm theory detection sample-rate


【解决方案1】:

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

【讨论】:

  • 我注意到,像差序列的直方图这样简单的东西可能会揭示到达间隔时间的任何突然变化。
猜你喜欢
  • 2022-11-13
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2018-10-03
  • 2022-09-01
  • 1970-01-01
相关资源
最近更新 更多