如何从存储在数据库中的样本中检测精确的采样间隔?

How to detect the precise sampling interval from samples stored in a database?

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

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

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

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

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

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

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

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

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

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

是否有解决该问题的众所周知的方法。如果是,你能指点我的文章吗?或者你能给我算法的名称或缩写吗?

+1 看差异序列。我们可以将差异序列建模为低频真值(样本的真实速率,随时间缓慢变化)和高频噪声(将样本放入数据库的随机延迟)之和。您需要 low-pass 过滤器 来删除后者。