【问题标题】:Signal processing in Python. Find shift in series dataPython中的信号处理。查找序列数据中的偏移
【发布时间】:2017-04-22 20:05:56
【问题描述】:

我有这样的数据: [1,3,3,....1] ~ 500 个号码。

每 1 毫秒,我有一个新的,但有一些偏移(5-10 分)+小噪音。

E.g:
 [1 2 3 4 3 21 4 5...]
 [0 4 3 1 2  3 4 19 7 5 ...] 

在这种情况下,移位是 3。

我想知道这种转变。 我怎样才能得到它?

傅立叶方法是减慢..因为我每秒有很多行。 find time shift between two similar waveforms

可能有一些快速的方法? 或者也许我应该只对我的部分数据使用傅立叶(因为它们几乎像整体一样移动)。 非常感谢。

【问题讨论】:

    标签: python python-3.x numpy signal-processing fft


    【解决方案1】:

    如果您知道滞后只有几个样本 5-10,那么您可以使用自相关来找到它。如果您只针对这个有限的小滞后范围进行计算,它应该会很快。如果你计算所有可能的滞后,那么它可能会很慢。

    这是一个使用修改后的 AMDF 算法的示例:

    import numpy as np
    
    def modified_amdf(x1, x2, steps):
        N = min(len(x1), len(x2))
        res = []
        for step in steps:
            sm = 0
            for n in range(0, N - step):
                sm += np.abs(x1[n] - x2[n + step])
            sm = sm * (1.0 / (N - step - 1))
            res.append(sm)
        return res
    
    #x1 = [1, 2, 3, 4, 3, 21, 4, 5]
    #x2 = [0, 4, 3, 1, 2, 3, 4, 19, 7, 5]
    x1 = np.sin(np.linspace(0, 10*np.pi, 500))
    x2 = np.r_[[0,0], x1]  # add two lag entries
    penalties = modified_amdf(x1, x2, range(5))
    print "Found lag:", np.argmin(penalties)
    

    如果将计算更改为仅使用 numpy,则可以稍微提高速度,但这应该会花费很长时间,因为只有 500 个样本会出现一些延迟。

    【讨论】:

    • 能举个例子来计算吗?
    猜你喜欢
    • 2014-02-14
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多