簡體   English   中英

信號的互相關/相似度-計算時滯

[英]Cross correlation / similarity of signals - calculate time lag

我有兩個信號要比較相似性。 (按時間)一個比另一個小。 如果我使用相關性來找到最高的相似度,它會告訴我最高的值是我不期望的值。

如果我只是在想“錯誤”或相關性是解決此類問題的錯誤工具,誰能給我提示嗎?

我的設置:

import numpy
import matplotlib.pyplot as plt

signal_a = numpy.array([10, 20, 10, 30, 20, 10, 28, 22, 10])
signal_b = numpy.array([28, 22])
correlations = numpy.correlate(signal_a, signal_b, mode = "full")

print(correlations)
plt.plot(correlations)

輸出此圖表和相關性數組

[28,22]的最高相關性是在位置[...,30,20,...]處計算的。 我知道公式以及為什么是1280。但是我實際上是在尋找[...,28,22,...],因為(在這種情況下)正是我要尋找的(信號B)。

關聯正確嗎? 我發現了很多使用相關性檢測相似性的資源。 相同的值不應該比其他任何值更相似嗎?

除了查看相關性之外,您還可以查看值的差異來檢測相似性。 例如,您可以選擇a中的每2個元素(如果b的長度為2),然后查看差異的絕對值:

 import numpy as np
 import matplotlib.pyplot as plt

 signal_a = np.array([10, 20, 10, 30, 20, 10, 28, 22, 10])
 signal_b = np.array([28, 22])
 N2 = len(signal_b)

 diffs = []
 for i in range(len(signal_a) - len(signal_b) + 1):
      diff_ab = signal_a[i:i+N2] - signal_b
      diffs.append(sum(abs(diff_ab)))

 print(diffs)
 plt.plot(diffs)

並在diffs數組中找到最小值。 代替abs(),您也可以使用差異的平方值。

解決您的問題的一種可能方法是均方誤差(MSE) 給定兩個a相同尺寸的信號ab ,MSE是ab之間的差的元素方平方的平均值。 該代碼看起來像以下(基於 ):

import numpy as np
import matplotlib.pyplot as plt

a = np.array([10, 20, 10, 30, 20, 10, 28, 22, 10])
b = np.array([28, 22])
mse = np.ndarray((len(a) - len(b) + 1))

for i in range(c.size):
    mse[i] = np.square(np.subtract(a[i:i+len(b)],b)).mean()

print(mse.argmin())
plt.plot(mse)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM