Алгоритм сравнения пиков: совпадают они по фазе или нет?

Я разрабатываю алгоритм для сравнения двух списков чисел. Списки представляют обнаружение пиков в сигнале с использованием надежного метода обнаружения пиков. Я хочу придумать какой-нибудь способ определить, находятся ли пики в фазе, не в фазе или ни в том, ни в другом (не удалось определить). Например:

Эти массивы будут рассматриваться в фазе:

[ 94 185 278 373 469], [ 89 180 277 369 466]

Но эти массивы будут не в фазе:

[51 146 242 349], [99 200 304 401]

Нет требования, чтобы массивы были одинаковой длины. Я изучил периодичность измерения, однако в этом случае я могу предположить, что сигнал уже периодически.

Еще одна идея, которая у меня была, заключалась в том, чтобы разделить все элементы массива на их индекс (или их индекс +1), чтобы увидеть, группируются ли они вокруг одной или двух точек, но это ненадежно и терпит неудачу, если отсутствует один пик.

Какие подходы могут быть полезны для решения этой проблемы?


person David Ferris    schedule 17.07.2017    source источник


Ответы (2)


Один из подходов состоит в том, чтобы найти медианное расстояние от каждого пика в первом списке до пика во втором списке.

Если вы разделите это расстояние на среднее расстояние между пиками в первом списке, вы получите дробь, где 0 означает совпадение по фазе, а 0,5 — противофазу.

Например:

[ 94 185 278 373 469], [ 89 180 277 369 466]
94->89 = 5
185->180 = 5
278->277 = 1
373->369 = 4
469->466 = 5

Score = median(5,5,1,4,5) / median distance between peaks
      = 5 / 96 = 5.2% => in phase


[51 146 242 349], [99 200 304 401]
51->99 = 48
146->99 = 47
242->200 = 42
349->304 = 45
score = median(48,47,42,45) / median distance between peaks
      = 46 / 95.5
      = 48% => out of phase
person Peter de Rivaz    schedule 17.07.2017
comment
Мне нравится этот подход! Однако вместо того, чтобы просто использовать медиану, имеет ли смысл вычислять синфазный % для каждого пика, чтобы у меня была совокупность измерений, а не только одно? Медиана мало что значит, если нет минимальной изменчивости... - person David Ferris; 17.07.2017
comment
Звучит разумно, возможно, попробуйте оба способа и посмотрите, какой из них работает лучше всего? - person Peter de Rivaz; 17.07.2017

Я бы ввел местоположения пиков, используя их в качестве индексов, в гораздо больший массив (лучше всего, если длина массива близка к целому числу, кратному периодичности ваших пиков), а затем выполнил либо сложный фильтр Герцеля ( если вы знаете частоту), или выполните ДПФ или БПФ (если вы не знаете частоту) массива. Затем используйте atan2() для комплексного результата (на частоте пиковой амплитуды для БПФ), чтобы измерить фазу относительно начала массива. Затем сравните развернутые фазы, используя некоторый порог различия.

person hotpaw2    schedule 18.07.2017