Kreuzkorrelation in Python
Die Kreuzkorrelation ist eine wesentliche Signalverarbeitungsmethode, um die Ähnlichkeit zwischen zwei Signalen mit unterschiedlichen Verzögerungen zu analysieren. Sie können sich nicht nur ein Bild davon machen, wie gut die beiden Signale übereinstimmen, sondern auch den Zeitpunkt oder einen Index, an dem sie sich am ähnlichsten sind.
In diesem Artikel werden mehrere Möglichkeiten zur Verarbeitung der Kreuzkorrelation in Python erörtert.
Kreuzkorrelation in Python
Wir können Python allein verwenden, um die Kreuzkorrelation der beiden Signale zu berechnen. Wir können die folgende Formel verwenden und sie in ein Python-Skript übersetzen.
Formel:
R_{fg}(l) = \sum_{n=0}^{N} f(n)g(n+l)
Beispielcode:
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
# Pre-allocate correlation array
corr = (len(sig1) - len(sig2) + 1) * [0]
# Go through lag components one-by-one
for l in range(len(corr)):
corr[l] = sum([sig1[i + l] * sig2[i] for i in range(len(sig2))])
print(corr)
Ausgang:
[14, 14, 10, 10, 14]
Lassen Sie uns nun mehrere Python-Pakete durchgehen, die Kreuzkorrelation als Funktion verwenden.
Verwenden Sie das NumPy
-Modul
Das Standard-Python-Modul für numerisches Rechnen heisst NumPy
. Es überrascht nicht, dass NumPy
über eine eingebaute Kreuzkorrelationstechnik verfügt. Wenn wir NumPy
nicht installiert haben, können wir es mit dem folgenden Befehl installieren:
pip install numpy
Beispielcode:
import numpy as np
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
corr = np.correlate(a=sig1, v=sig2)
print(corr)
Ausgang:
[14 14 10 10 14]
Verwenden Sie das SciPy
-Modul
Wenn NumPy
fehlschlägt, ist SciPy
das wichtigste zu berücksichtigende Paket. Es umfasst praktische Techniken für zahlreiche technische und naturwissenschaftliche Disziplinen.
Aber zuerst müssen wir die kreuzkorrelationsbezogene Signalverarbeitungssoftware importieren. Dann wird das Signal am Anfang und am Ende automatisch durch die SciPy
-Kreuzkorrelation aufgefüllt.
Dadurch liefert es im Vergleich zu unserem reinen Python-Code und dem NumPy
-Modul einen umfangreicheren Signalverlauf für die Kreuzkorrelation. Daher haben wir diese Polsterungskomponenten gelöscht, um das Ergebnis in unserem Testfall äquivalent zu machen.
Wenn wir SciPy
nicht installiert haben, können wir es mit dem folgenden Befehl installieren:
pip install scipy
Beispielcode:
import scipy.signal
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
corr = scipy.signal.correlate(sig1, sig2)
# Removes padded Correlations
corr = corr[(len(sig1) - len(sig2) - 1) : len(corr) - ((len(sig1) - len(sig2) - 1))]
print(corr)
Ausgang:
[14 10 10]
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn