Ich möchte die Zeitverzögerung zwischen einigen Signalen mit Kreuzkorrelationsfunktion in Python berechnen. Aus der numpy Dokumentation numpy.correlate(), ist es nicht sehr klar, was genau diese Funktion tut. Deshalb versuche ich es zuerst mit zwei einfachen Rechtecksignalen mit dem folgenden Code:Zeitverzögerung zwischen Signalen mit numpy.correlate()
import matplotlib.pyplot as plt
import numpy as np
frequency=100
x = np.linspace(1,2000,frequency)
time = np.arange(x.size)
time = time/(1.0*frequency) #Time in seconds
def func1(x):
x = np.where((x < 500) | (x > 531), 1, 2)
return x
y1 = func1(x)
def func2(x):
x = np.where((x < 600) | (x > 631), 1, 2)
return x
y2 = func2(x)
def func3(x):
x = np.where((x < 700) | (x > 731), 1, 2)
return x
y3 = func3(x)
xcorr12 = np.correlate(y1,y2, "full")
xcorr13 = np.correlate(y1,y3, "full")
lag12 = np.argmax(xcorr12)
lag13 = np.argmax(xcorr13)
print ("lag12:",lag12/frequency)
print ("lag13:",lag13/frequency)
Wenn ich die Position der Signale ändern, ich die Zeitverzögerung zu ändern, erwarten, aber es funktioniert nicht! Ich verstehe nicht, warum ich die Zeitverzögerung zwischen y1 und y2 gleich der Verzögerung zwischen 1 und y3 bekomme!
Können Sie mir helfen zu verstehen, was passiert? Thanks :)
Okay, ich habe das Beispielsignal geändert. jetzt gibt es keinen Nullwert. Trotzdem ist das Problem nicht gelöst. Warum bekomme ich die Zeitverzögerung zwischen y1 und y2 ist gleich der Verzögerung zwischen y1 und y3? :( – user8224662
Vielleicht sollten Sie hier fragen https://stats.stackexchange.com/ – MishaVacic
Ich habe dort schon gefragt, aber der Beitrag ist als Off-Thema dort auf Eis gelegt! https://stats.stackexchange.com/ Fragen/293969/time-lag-between-signals-using-numpy-korrelieren – user8224662