2

相互相関を使用して、Python で 2 つの信号間のラグを計算しようとしています。2 つの信号は、タイムラグが非常に小さいことを除けば、ほぼ同じです。私は numpy.correlate と scipy.convolve を試しました(かなり高速です)。どちらも比較的うまく機能しますが、小さなエラーが発生します。このエラーは、Python/scipy/numpy が float をどこかで切り捨てた結果であると考え始めています。Python で高精度の信号遅延計算を実行できた人はいますか?

よろしくフレドリック

4

1 に答える 1

0

2 つの信号のパワー スペクトルによっては、各ラグで相互相関が適切に正規化されていないため、小さなエラーが発生します。これが私が使用する小さな関数です。各ラグでオーバーラップ領域を正規化し、正確な結果が得られることがわかりました。

def NormCrossCorrSlow(x1, x2,
                  nlags=400):
res=[]
for i in range(-(nlags/2),nlags/2,1):
    if i<0:
        xx1=x1[:i]
        xx2=x2[-i:]
    elif i==0:
        xx1=x1
        xx2=x2
    else:
        xx1=x1[i:]
        xx2=x2[:-i]
    res.append( (xx1*xx2).sum() /( (xx1**2).sum() *(xx2**2).sum() )**0.5)
return numpy.array(res)
于 2011-03-05T20:01:57.703 に答える