检测相互偏离的两个数据流

Detect two data stream deviated from each other

前几天出现了一个有趣的问题。我有两个连续输出的数据流。比方说,A 和 B。(不同的值)

在理想世界中,A和B正好相反。如果A增加x%,那么B将减少x%,反之亦然。

然而,在我的世界里,它们并不是100%相对的。这意味着有时 A 可以增加 X% 而 B 只能减少 X- 0.Y%。当 B 增加时,反之亦然。差异很小但可以检测到。

我需要能够检测到任一数据流的减少量何时比另一个多 0.3%。例如,如果 A = 30,B = 100,A 的下一个数据点 = 33(增加 10%),B = 89.5(减少 10.5%)。然后我需要知道这已经发生了。因为两者之间的差异大于 0.3%。

现在,如果我知道它们的原始值,问题本身就很容易了。然而,这是一个连续的数据流,我没有参考点。我不需要绝对准确的答案,而是一个相对的答案。

例如,如果我们决定流式传输数据,我怎么能知道 "hey, buddy, they are going out of order, watch out" 而不知道它们曾经是什么?

我想你在找correlation coefficient

  1. 记住两个流中的最后 N 个值

    • 循环缓冲区非常适合这个
  2. 计算相关系数

  3. 检测相似度下降

    • 例如这样的:
    • if (correlation_coefficient>-0.997) return "drop below 99.7%";