硬件传感器使用实时单元精确采样(采样的精确周期)。但是,时间值不会与采样值一起发送到数据库。相反,将记录插入数据库的时间存储在数据库中的示例中。使用DATETIME
类型,使用GETDATE()
函数获取当前时间(Microsoft SQL Server)。
如何重建精确的采样时间?
由于采样间隔正好(应该)为 60 秒,因此不需要更早的更精确的解决方案。 (这是一个老方案,第三方的,有很多历史样本。这样是不可能修复设计的。)
为了处理样本,我需要为样本重建正确的时间实例。将整个序列的时间偏移是没有问题的(也就是说,开始时间是否相当偏离,而不是绝对无关紧要)。另一方面,应尽可能精确地检测采样间隔。我也不能确定采样间隔是否正好是 60 秒(如上所述)。我也不能确定采样间隔是否真的恒定(例如,根据设备温度略有不同)。
在处理样本时,我想得到:
- 开始时间
- 采样间隔
- 样本值的顺序
重建样本时,我需要将其转换回元组:
- 采样时间
- 样本的值(value)
因此,对于n个样本的序列,最后一个样本的时间应该等于start_time + sampling_interval * (n - 1)
,并且它应该与数据库中存储的原始结束时间相当接近。
考虑存储的采样时间相对于实际采样时间的轻微振荡(采样和插入数据库之间的恒定延迟在这里不是问题)。
我正在考虑计算根据之前和当前采样时间计算的间隔的平均值和校正标准偏差。
不连续性检测:如果计算出的间隔大于平均值的 3 西格玛,我会认为它是采样曲线的不连续性(例如,机器已关闭,或任何外部事件导致丢失样本。在这种情况下,我想从处理新序列开始。(采样频率也可以更改。)
是否有解决该问题的众所周知的方法。如果是,你能指点我的文章吗?或者你能给我算法的名称或缩写吗?
最佳答案
+1 查看差异序列。我们可以将差异序列建模为低频真值(样本的真实速率,随时间缓慢变化)和高频噪声(将样本放入数据库的随机延迟)之和。您需要一个低通滤波器来移除后者。
关于algorithm - 如何从存储在数据库中的样本中检测精确的采样间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905189/