Kreuzkorrelation in Python

Marion Paul Kenneth Mendoza 10 Oktober 2023
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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn