1

我有一个测量液体体积的传感器。这种液体会慢慢消耗,并在需要时重新填充。我想检测的是这种液体被“偷走”或填充的次数。被盗是指液体体积突然下降。反之将被视为填充。从传感器获取的值具有较小的尖峰,如果有足够的测量值有助于做到这一点,则应该忽略这些尖峰。

是否有任何统计方法(文档)或编程算法(任何语言)甚至更好的 sql 函数/查询(任何数据库)来完成上述场景?

在此处输入图像描述

4

3 回答 3

1

您通常希望发现异常值

  1. 您是否有想要保留的基线值,或者您想要与当前的运行平均值进行比较?

  2. 您认为什么是突然下降 - 它是绝对术语(如 5l)还是相对术语(当前音量的 5%)。

如果您依赖运行平均值,这里是一个大概的描述。

on volumeChange do
    calculate new runningAverage
    if (runningAverage outside allowedRange(oldRunningAverage)) then raise warning
    oldRunningAverage := runningAverage

你需要知道的是:

  • 测量结果是如何进来的(你能指望他们定期来吗)
  • 怎么allowedRange定义的

这是 5 次测量(蓝色)的简单移动平均值(红色)的图示:

SMA(5)

于 2013-02-21T10:14:47.187 回答
0

也许值得您看看Microsoft StreamInsight

正如 Microsoft SQL Server 旨在管理静态数据一样,StreamInsight 旨在分析动态数据。对于 StreamInsight,流是具有与其关联的时间的数据序列。示例是提供交易所中不同股票随时间变化的价格的股票代码流,或者提供传感器随时间报告的温度值的温度传感器流。

StreamInsight 程序通过一组查询来传递流,这些查询分析数据,观察有趣的信息然后,它会输出从查询中派生的信息,例如由于查询识别出异常而生成的警报。

于 2013-02-21T10:35:24.777 回答
0

计算关于时间的一阶导数应该会给你你正在寻找的东西。使用时间增量 > 1 的样本应该有助于消除小的跳跃。

于 2013-02-21T17:29:08.653 回答