2016-10-03 7 views
0

Если у меня есть 2 функции, скажем f (x) и g (x), и я хочу найти самую длинную часть f, которая похожа на некоторую часть g, как я могу это сделать?
Например, рассмотрим рисунок ниже: enter image description hereMatlab 2D-подпоследовательность подобия

это довольно очевидно, что они достаточно похожи друг на друга в исходном положении, но что, если они где в случайном положении?
В том-то и дело, мне нужно найти самую длинную подобную часть (-ы) ... некоторые намеки?
В моем случае два «функция» является массивом rappresentation из двух песен, и я хочу, чтобы найти наиболее похожую часть из них, поэтому они должны быть

  1. отличаются в 99% rappresentation (см второй пример ниже) enter image description here
  2. едва похож в случайном положении: для orizontal линий, за исключением, идеальное соответствие никогда не ожидается, будет найден

ответ

1

Вы можете сделать это с помощью кросс-корреляции (xcor).

Этот метод вычисляет корреляцию двух сигналов для каждого «смещения» между ними. Самая высокая коррелированная точка - это смещение, которое нужно дать signal2, чтобы соответствовать signal1. Прочтите документацию по примерам и использованию.

+0

Это работает, даже если «сигналы» очень разнородны? я отредактировал мое сообщение, чтобы meke более ясно моя цель :) – Fujitina

+0

Вы говорите в вопросе «Я хочу найти самую длинную часть f, которая похожа на некоторую часть g». Это способ сделать это. Если поют не похожи, если вы ищете сходства, то вы можете их не найти, rigth? Это логическое предположение. Тем не менее, этот метод даст вам самое похожее место, даже если большинство означает «не очень похоже» –

+0

@Fujitina Если вам нужна часть, вам может потребоваться вычислить 'xcorr' для разных длин' f', то есть также вариант –