Für zwei ähnliche Signale werden ihre Verzögerungszeiten durch Berechnung der Interkorrelationsfunktion geschätzt. Pythons Numpy wird verwendet, um die Interkorrelationsfunktion zu berechnen.
Erstellen Sie beispielsweise zwei Signale, eines mit Verzögerung und das andere ohne Verzögerung, auf dem Zielsignal der Normalverteilung und dem Rauschen der Normalverteilung.
import numpy as np
target_sig = np.random.normal(size=1000) * 1.0
delay = 800
sig1 = np.random.normal(size=2000) * 0.2
sig1[delay:delay+1000] += target_sig
sig2 = np.random.normal(size=2000) * 0.2
sig2[:1000] += target_sig
Berechnen Sie die Interkorrelationsfunktion der beiden erzeugten Signale mit `np.correlate ()`
. Die maximale Position der gegenseitigen Korrelationsfunktion ist die Verzögerungszeit.
Eine Einschränkung ist, dass ** wenn der Durchschnittswert des Signals weit von 0 ** entfernt ist, dies die Berechnung der Interkorrelationsfunktion beeinflusst.
sig1 = sig1 - sig1.mean()Und so weiter**Setzen Sie den Durchschnitt auf 0**Es ist notwendig, Verarbeitung wie hinzuzufügen.
```python
import numpy as np
corr = np.correlate(sig1, sig2, "full")
estimated_delay = corr.argmax() - (len(sig2) - 1)
print("estimated delay is " + str(estimated_delay))
estimated delay is 800
Zeichne am Ende. Sie können sehen, dass es in dem Teil einen großen Peak gibt, der die Verzögerungszeit im Wert der gegenseitigen Korrelationsfunktion anzeigt.
import matplotlib.pyplot as plt
plt.subplot(4, 1, 1)
plt.ylabel("sig1")
plt.plot(sig1)
plt.subplot(4, 1, 2)
plt.ylabel("sig2")
plt.plot(sig2, color="g")
plt.subplot(4, 1, 3)
plt.ylabel("fit")
plt.plot(np.arange(len(sig1)), sig1)
plt.plot(np.arange(len(sig2)) + estimated_delay, sig2 )
plt.xlim([0, len(sig1)])
plt.subplot(4, 1, 4)
plt.ylabel("corr")
plt.plot(np.arange(len(corr)) - len(sig2) + 1, corr, color="r")
plt.xlim([0, len(sig1)])
plt.show()