2016-12-07 5 views
-1

私はこのようなデータを持っています: [1,3,3,....1]〜500の数字です。Pythonでの信号処理。シリーズデータのシフトを見つける

それぞれ1ミリ秒、私は新しいものを持っていますが、シフト(5-10ポイント)+小さなノイズがあります。この場合

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

シフトは、私は、このシフトを知りたい3.

です。 どうすれば入手できますか?

フーリエ変換は遅くなります。私には1秒間に多くの線があるからです。 find time shift between two similar waveforms

ある場合がありますか? または、データの一部だけにフーリエを使用する必要があります(全体がほぼ同じように移動しているため)。 多くのありがとうございます。

答えて

0

遅延がほんのわずかなサンプル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サンプルで長く取る必要がありますいくつかの遅れのために。

+0

計算の例を挙げることができますか? –

+0

それはあなたのために働いたのですか? –

関連する問題