我有一个测量液体体积的传感器。 这种液体将被缓慢消耗并在需要时重新填充。 我想要检测的是这种液体“被盗”或填满的时间。 被盗是指液体体积突然下降。相反的将被视为填充。从传感器获取的值具有较小的尖峰,如果有足够的测量值,则应该忽略这些尖峰。
是否有任何统计方法(文档)或编程算法(任何语言)或更好的sql函数/查询(任何数据库)执行上述方案?
答案 0 :(得分:1)
您通常希望发现outliers。
您是否有想要保留的基线值,或者您想要与当前的平均值进行比较?
你认为突然下降是什么 - 它是绝对的术语(如5l)还是相对的(当前音量的5%)。
如果您依赖的是运行平均值,这是一个近似的描述。
on volumeChange do
calculate new runningAverage
if (runningAverage outside allowedRange(oldRunningAverage)) then raise warning
oldRunningAverage := runningAverage
您需要知道的是:
allowedRange
以下是5次测量的简单移动平均线(红色)的示意图(蓝色):
答案 1 :(得分:0)
或许你值得一看Microsoft StreamInsight:
正如Microsoft SQL Server旨在管理静态数据一样, StreamInsight旨在分析动态数据。至 StreamInsight,流是一系列具有时间关联的数据 用它。例子是提供商品的股票代码流 交易所中不同股票的价格随着时间的推移而变化,或者 温度传感器流,提供报告的温度值 传感器随着时间的推移。
StreamInsight程序通过一组查询传递流 分析数据,观察有趣的信息。然后呢 输出从查询中派生的信息,例如警报 是因为查询识别出异常而生成的。
答案 2 :(得分:0)
计算关于时间的一阶导数应该可以为您提供所需的信息。使用时间增量> 1个样本应该有助于消除小跳跃。