如何检测时间序列数据中的重大变化/趋势?

时间:2012-10-12 02:00:39

标签: algorithm statistics real-time signal-processing numerical

所以我有一个25个样本的阵列,我希望能够记录它是否从这25个采样时间间隔减少n或增加的趋势(基本上25个样本数组是我的缓冲区,每个填充说1毫秒)。

请注意,这是我正在寻找的一般趋势,而不是单个衍生物(正如我将使用有限差分或其他数值微分技术获得的那样)。

基本上我希望我的数据有噪音,所以即使在进行过滤等操作之后也可能出现起伏。但这是我正在寻找的增加或减少行为的一般趋势。

我希望在每个ms中集成增加/减少行为以触发某个更多用户界面事件(闪烁LED)的事件,因此只要我能检测到一般情况,就不必非常延迟处理趋势。

提前致谢!

3 个答案:

答案 0 :(得分:26)

正如已经指出的那样,你不是在寻找衍生品。你真的在寻找一个时间序列的“重大变化”检测算法。

你肯定想要一个平滑滤波器(移动平均滤波器很好 - 请看这部分的Bjorn's answer)。

但除了平滑过滤器之外,您还需要一个决策标准或阈值选择器,超出该标准后,您将决定过滤后的更改是否重要。

如果您的时间序列的基础统计数据是稳定的(固定时间序列),那么您可以使用固定统计阈值,就标准偏差而言。例如,如果您想要一个相当强的“警报”阈值,您可能会选择2个标准偏差(想想只有最强5%的回报才会报警)。

如果基础问题中没有任何内容表明您的时间序列是稳定的,即系列中是否有趋势,或者生成时间序列的基础流程可以在您监控时进行基金更改,那么你需要在信噪比(mu / sigma)的意义上使用动态或自适应阈值。然后,您可以选择检测所有通过信号进行噪声测试的“有意义”元素。

答案 1 :(得分:12)

对我来说听起来并不像你想要衍生物一样。听起来你想要一个低通滤波器。低通滤波器可以简单地删除快速变化的数据,并留下更长,更慢变化的趋势。最直观的低通滤波器是移动平均滤波器,您可以在其中获取最后n个输入的平均值,其中n是根据噪声与您要查找的趋势大小确定的。这被广泛用于从音频数据到图像处理再到失业数据(广泛引用四周移动平均失业数字)。

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

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

答案 2 :(得分:2)

如果您知道信号统计信息并使用它作为n步预测器,则可以使用wiener filter。然后,您对趋势的决定可以很容易地基于维纳滤波器的预测。如果信号不是广义静止的并且您认为无法线性地进行预测(非线性/非平稳过程),那么您可以使用自适应维纳滤波器,如LMS滤波器。