在嘈杂的二进制时间序列中找到连续信号

时间:2019-04-09 22:02:50

标签: python scipy time-series smoothing

假设我有一个时间序列,例如:

[1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 , 1, 1, 1, 1]

我知道信号中有一些噪声。我想尽最大的努力消除噪声,并仍然输出二进制信号。上面的示例将变为:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 1, 1, 1]

我实现了一种基于规则的幼稚方法,该方法可以迭代这些值,并且需要“交换”信号的最低数量为10

似乎必须有一个更好的方法。谷歌搜索的许多结果都给出了非二进制输出。我可以使用一些scipy功能吗?

1 个答案:

答案 0 :(得分:1)

有两个类似的功能可以为您提供帮助:scipy.signal.argrelminscipy.signal.argrelmax。在离散数组中搜索局部最小值/最大值。您应该将数组和邻居的搜索半径作为order传递。结合使用即可解决您的问题:

>>> a = np.asarray([1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 , 1, 1, 1, 1], int)

>>> signal.argrelmin(a, order=3)
(array([4], dtype=int32),)

>>> signal.argrelmax(a, order=3)
(array([15], dtype=int32),)

然后,您只需替换这些元素即可。