27

所以我有一个说 25 个样本的数组,我希望能够注意到它是从这 25 个样本时间间隔减少还是增加的趋势(基本上 25 个样本数组是我的缓冲区,每隔 1 毫秒就被填充一次)。

请注意,我正在寻找的是总体趋势,而不是单个导数(因为我会使用有限差分或其他数值微分技术获得)。

基本上我希望我的数据是嘈杂的,所以即使在进行过滤等之后也可能会有起伏。但这是我正在寻找的行为增加或减少的总体趋势。

我想整合每毫秒的增加/减少行为来触发一些事件,这更像是一个用户界面事件(闪烁 LED),所以只要我能检测到总体趋势,它就不必非常延迟处理。

提前致谢!

4

3 回答 3

33

正如已经指出的那样,您不是在寻找导数。您确实在寻找时间序列的“重大变化”检测算法。

您肯定需要一个平滑滤波器(移动平均滤波器很好——请参阅Bjorn对此部分的回答)。

但除了平滑过滤器之外,您还需要一个决策标准或阈值选择器,您将决定过滤后的变化是否显着。

如果您的时间序列的基础统计数据是稳定的(固定时间序列),那么您可以使用固定的统计阈值,即与平均值的标准差。例如,如果您想要一个相当强的“警报”阈值,您可能会选择 2 个标准差(认为只在最强的 5% 回报时发出警报)。

如果潜在问题中没有任何内容表明您的时间序列是稳定的,即如果序列可能具有趋势,或者生成时间序列的基础过程在您监控时可能会经历根本性变化,那么您在信噪比 (mu/sigma) 的意义上,将需要使用动态或自适应阈值。然后,您可以选择检测所有通过信噪比测试的“有意义”元素。

于 2012-12-01T15:03:26.490 回答
15

在我看来,您根本不想要导数。听起来你想要一个低通滤波器。低通滤波器只是简单地去除快速变化的数据,并将较长、变化较慢的趋势留在原处。最直观的低通滤波器是移动平均滤波器,您可以在其中取最后 n 个输入的平均值,其中 n 是根据噪声与您正在寻找的趋势的大小确定的。这广泛用于从音频数据到图像处理再到失业数据(广泛引用的四个星期移动平均失业数据)。

如果您认为有必要,可以使用递归技术开发更有效/选择性的过滤器。您可以使用本教程创建低通滤波器。它是为音频编写的,但它适用于大多数数据。它向您展示了如何编写钟形滤波器,但低通滤波器更容易。

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

于 2012-10-13T14:49:18.373 回答
2

如果您知道信号统计信息并将其用作 n 步提前预测器,则可以使用维纳滤波器。然后,您可以轻松地根据维纳滤波器的预测做出趋势决定。如果信号不是广义平稳的,并且您认为预测不能线性完成(非线性/非平稳过程),那么您可以使用像LMS滤波器这样的自适应维纳滤波器。

于 2012-10-12T04:03:01.480 回答