【问题标题】:finding continuous signal in noisy binary time series在嘈杂的二进制时间序列中找到连续信号
【发布时间】:2019-08-31 06:53:44
【问题描述】:

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

[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】:

    有两个类似的函数可以帮助您: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),)
    

    那么你可以只替换这些元素。

    【讨论】:

    • 功能太棒了!如果我将输入扩展为具有多个最小值或最大值,我发现它甚至可以工作。尽管它看起来像,但它不能扩展到非二进制信号
    猜你喜欢
    • 2023-03-07
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2020-12-15
    • 2021-04-22
    • 2021-07-24
    • 2012-11-21
    相关资源
    最近更新 更多