用于检测存储在滚动缓冲区中的信号是增加、减少还是保持不变的算法

信息处理 信号分析 信号检测
2022-02-22 14:28:48

我有一个以恒定时间间隔生成的数据信号。这是一个真实世界的测量,因此在其值中表现出一些噪音(它波动大约 + 或 - 20 个单位)。噪音相当一致。

我以固定的时间间隔获取测量值,并将其存储在样本数据的滚动缓冲区中(通过计算机完成)。此滚动缓冲区是位于列表中位置 (0,1,2,3,4,5... -> n) 的值列表。一旦到达此列表中的第 n 个位置,我的缓冲区就会翻转并覆盖第 0 个列表位置的值,然后覆盖第 1 个列表位置的值,依此类推,直到第 n 个值被覆盖(然后再次翻转)。始终跟踪最新的数据点值(因此我始终知道我将数据写入到的值列表中的位置)。这个数据缓冲过程一遍又一遍地重复。我使用滚动样本数据来计算移动平均值和标准偏差。

现在解决我的问题。信号有可能以 3 种状态存在,在任何时间 t1 以恒定速率增加或以恒定速率减小或保持恒定。增加或减少可能会在我的列表中的任何时候突然发生,并将持续到 t1 之后的某个时间 t2。

我想以合理的统计确定性检测信号是增加、减少还是保持恒定(在典型噪声曲线内)。什么样的算法会有效地注意到这一点?

2个回答

您可以使用累积和算法 (CUSUM) https://en.wikipedia.org/wiki/CUSUM

通常,人们使用它来检测平均值的变化(向上或向下)。优点是,如果变化分布在多个样本上,则可以检测到它。典型的算法只检测一个方向的变化,但很容易适应它来检测两个方向的变化。这是一个强大的算法,但可能对您的应用程序来说太过分了。

什么样的算法会有效地注意到这一点?

您所描述的是一种在线算法,它使用一小组“过去”测量来推断,在这种情况下,关于信号的斜率。

由于您正在跟踪滚动缓冲区的当前开始和结束,因此本质上就像访问包含 N 个过去样本的线性缓冲区一样。

因此,如果您尝试研究的现象(您的信号)发展得比您选择的缓冲区的长度,您可以对缓冲区的值应用简单的斜率估计,然后使用斜率估计值(和它的残差)来决定信号是主要是向下还是向上还是保持不变。这里最简单的“分类器”将是一个简单的阈值分类器,可能像已经建议的那样添加滞后。更复杂的“分类器”可以同时监控一阶和二阶导数,并返回有关信号是否也在缓冲区内改变方向的附加信息。

如果您想在每次收到新样本时都获得一个新的估计值,则必须寻找迭代(或“递归”)方法(例如,迭代最小二乘法)。

希望这可以帮助。