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

问题描述 投票:1回答:1

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

[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]

我已经实现了一种天真的基于规则的方法,其中我遍历值并且具有一些最小量的1s或0s我需要“交换”信号。

似乎必须有更好的方法来做到这一点。谷歌搜索的很多结果给出了非二进制输出。我可以利用一些scipy功能吗?

python scipy time-series smoothing
1个回答
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),)

然后你可以只替换这些元素。

© www.soinside.com 2019 - 2024. All rights reserved.