2016-10-03 3 views
0

Wenn ich 2 Funktionen habe, sagen wir f (x) und g (x) und ich möchte den längsten Teil von f finden, der zu einem Teil von g ähnlich ist, wie kann ich das tun?
Betrachten wir zum Beispiel die Abbildung unten: enter image description hereMatlab 2D Funktion Subsequenz Ähnlichkeit

es ziemlich offensichtlich ist, dass sie in die Ausgangsposition zueinander ähnlich genug sind, aber was ist, wenn sie in einer zufälligen Position, wo?
Das ist der Punkt, ich muss die längsten ähnlichen Teil (e) entdecken ... einige Hinweise?
In meinem Fall sind die beiden „Funktionen“ sind ein Array rappresentation von zwei Songs, und ich möchte die ähnlichste Teil von ihnen finden, so sollen sie

  1. anders in der 99% der rappresentation sein (siehe das zweite Beispiel unten) enter image description here
  2. Gerade noch ähnlich in einer zufälligen Position: mit Ausnahme der orizontal Linien, eine perfekte Abstimmung nie

Antwort

1

Sie gefunden werden, wird erwartet, kann dies tun, indem mit Kreuzkorrelation (xcor).

Diese Methode berechnet die Korrelation von 2 Signalen für jeden "Offset" zwischen ihnen. Der höchste korrelierte Punkt ist der Offset, den Sie signal2 geben müssen, um signal1 zu entsprechen. Lesen Sie die Dokumentation für Beispiele und Verwendung.

+0

Das funktioniert auch, wenn die "Signale" sehr unähnlich sind? ich redigierte meinen Pfosten, um mein Ziel klarer zu klären :) – Fujitina

+0

Sie sagen in der Frage "ich möchte den längsten Teil von f finden, der zu etwas Teil von g ähnlich ist". Dies ist die Art, es zu tun. Wenn die Signale nicht ähnlich sind, wenn Sie nach Ähnlichkeiten suchen, dann können Sie sie nicht finden, richtig? Es ist eine logische Annahme. Dennoch, diese Methode gibt Ihnen den ähnlichsten Ort, auch wenn die meisten bedeutet "nicht wirklich ähnlich" –

+0

@Fujitina Wenn Sie einen Teil wollen, dann müssen Sie möglicherweise die 'Xcorr' für verschiedene Längen von' f' berechnen, das heißt auch eine Option –