【问题标题】:Filtering a noisy 1D time-series过滤嘈杂的一维时间序列
【发布时间】:2021-05-07 01:49:48
【问题描述】:

我有一个嘈杂的1-Dimensional 时间序列,我想对其进行过滤以获得包含的“信号”。所讨论的时间序列是时间戳的集合,每个时间戳对应于某个“检测”的时间。 理想情况下,这些时间戳只记录在某个已知周期发射脉冲的仪器的“信号”。然而,绝大多数数据点都是噪声。

我想过滤掉噪音,以便获得与“真实”检测(或接近它)相对应的时间戳子序列。我不关心算法效率或这样做所花费的时间。同样,信号具有已知的周期,此外,信号在我将要查看的数据部分的整个持续时间内都存在。但是,可能会有少量“遗漏”的检测。

我们可以假设时钟精度和准确性。

我对@9​​87654322@ 时间序列的过滤有点熟悉,但是我不确定如何处理这种特定情况。

【问题讨论】:

    标签: time-series signals signal-processing scientific-computing


    【解决方案1】:

    你能选出至少一个你确定是正确的时间戳吗?因为那样你就可以重建一个无噪声的时间序列,比如:(伪代码)

    timeseries = array(requisite_length)
    for i from 0 to requisite_length:
        timeseries[i] = initial + i*period
    

    如果您不确定,那会比较复杂。您基本上需要找到一个初始时间戳,该时间戳使落在该期间的后续时间戳的数量最大化。你也许可以这样做:

    counts = array(length(timeseries)):
    for i from 0 to length(timeseries):
        for j from i to length(timeseries):
            if floor(timeseries[j] - timeseries[i]) % period  == 0 OR ceil(timeseries[j] - timeseries[i]) % period  == 0:
                counts[i] += 1
    start_idx = argmax(counts)
    
    filtered_timeseries = array(counts[start_idx])
    j = 0
    for i from start_idx to length(timeseries):
        if floor(timeseries[i] - timeseries[start_idx]) % period  == 0 OR ceil(timeseries[i] - timeseries[start_idx]) % period  == 0:
            filtered_timeseries[j] = timeseries[i]
            j += 1
    

    此代码段实质上计算了从每个可能的起点开始的整数周期的 1 秒(假设时间戳本身以秒为单位)内的点数。然后它遍历原始时间序列并将它计算的每个点复制到一个新的过滤时间序列中。你说你不关心运行时间,这很好,因为这是 O(n^2)。

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多