在嘈杂的二进制时间序列中找到连续信号
finding continuous signal in noisy binary time series
假设我有一个时间序列,例如:
[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]
我已经实施了一种基于规则的朴素方法,在该方法中我遍历值并有一些最小数量的 1
s 或 0
s 我需要 "swap" 信号。
看来必须有更好的方法来做到这一点。谷歌搜索的很多结果都给出了非二进制输出。我可以利用一些 scipy 函数吗?
有两个类似的函数可以帮助您:scipy.signal.argrelmin and scipy.signal.argrelmax。在离散数组中搜索局部min/max。您应该将数组和邻居搜索半径作为 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),)
那么你可以直接替换这些元素。
假设我有一个时间序列,例如:
[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]
我已经实施了一种基于规则的朴素方法,在该方法中我遍历值并有一些最小数量的 1
s 或 0
s 我需要 "swap" 信号。
看来必须有更好的方法来做到这一点。谷歌搜索的很多结果都给出了非二进制输出。我可以利用一些 scipy 函数吗?
有两个类似的函数可以帮助您:scipy.signal.argrelmin and scipy.signal.argrelmax。在离散数组中搜索局部min/max。您应该将数组和邻居搜索半径作为 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),)
那么你可以直接替换这些元素。