Numpy: normalisierte Kreuzkorrelation (Trac #1714)

Erstellt am 20. Okt. 2012  ·  12Kommentare  ·  Quelle: numpy/numpy

_Originalticket http://projects.scipy.org/numpy/ticket/1714 am 2011-01-15 von trac-Benutzer bubla, zugewiesen an unbekannt._

Hallo,
Ich habe einen Patch erstellt, der die Funktion correlate , sodass sie jetzt normalisierte Kreuzkorrelation berechnen kann
Siehe [ http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross -correlation den Wikipedia-Artikel].

Ich habe natürlich auch Dokumentation und einfaches doctest hinzugefügt.
Der Patch ist gegen den neuesten Master Git

01 - Enhancement Patch numpy.core

Hilfreichster Kommentar

Es gibt eine Antwort bei SO, die hier zeigt: https://stackoverflow.com/a/5639626/5392420

Es enthält auch den relevantesten Code. Da der obige Anhang (zumindest für mich) nicht mehr verfügbar ist, dachte ich, es könnte hilfreich sein, dies als Start für die Implementierung zu haben.

Ich kann auch bestätigen, dass es - zumindest in meinem Fall - funktioniert, um die Eingabevektoren zu "normalisieren", bevor np.correlate wie folgt verwendet wird und vernünftige Werte innerhalb eines Bereichs von [-1,1] zurückgegeben werden:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Alle 12 Kommentare

Anhang hinzugefügt von trac-Benutzer bubla am 15.01.2011: correlate.parch

_@rgommers schrieb am 29.03.2011_

Da es sich um eine neue Funktionalität handelt, sollten Sie in der Mailingliste nachfragen, ob diese aufgenommen werden kann.

Ein Unit-Test ist notwendig, Doctests werden in der Testsuite standardmäßig nicht ausgeführt.

Dies könnte nützlich sein.

Kann jemand überprüfen, ob das richtig ist?

Ich frage mich, was in Kombination mit mode='full' richtig ist.

Ich benötige diese Funktion zufällig, bin mir aber nicht sicher, ob sie korrekt ist, außer wenn mode='valid' UND beide Arrays die gleiche Größe haben. Mit anderen Worten, ich denke, die Normalisierung muss auf jedes Fenster angewendet werden.

irgendwelche Updates zu dem Thema?
Wurde der Patch für alle Korrelationsmodi getestet?

@VlamV , da hier nichts ist, glaube ich nicht. Wenn Sie Zeit haben, das Problem für die anderen Modi zu beheben, könnten wir es hinzufügen.

Gibt es darüber irgendwelche Neuigkeiten ?

Wäre es nicht sinnvoller, den tatsächlich verwendeten Anteil von a durch die Standardabweichung zu dividieren (bei mode=same oder mode=full )

Wäre es auch nicht sinnvoll, die Optionen bias und ddof von numpy.corrcoef anstatt einfach durch len(a) dividieren

Es gibt eine Antwort bei SO, die hier zeigt: https://stackoverflow.com/a/5639626/5392420

Es enthält auch den relevantesten Code. Da der obige Anhang (zumindest für mich) nicht mehr verfügbar ist, dachte ich, es könnte hilfreich sein, dies als Start für die Implementierung zu haben.

Ich kann auch bestätigen, dass es - zumindest in meinem Fall - funktioniert, um die Eingabevektoren zu "normalisieren", bevor np.correlate wie folgt verwendet wird und vernünftige Werte innerhalb eines Bereichs von [-1,1] zurückgegeben werden:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Die Normalisierung nach dem tatsächlich verwendeten Teil des Signals a (siehe Kommentar von @wilberth ) wird mit numpy-Methoden in der correlate_template-Funktion in diesem Repository implementiert: https://github.com/trichter/xcorr

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen