Степень корреляции между двумя нормированными сигналами временных рядов в Python? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть два нормализованных ([1,0]) сигнала (изображения прилагаются). Каждый сигнал имеет много пиков и провалов. Тем не менее, оба сигнала имеют максимум примерно в одно и то же время (на прилагаемых рисунках, через 2,5 секунды оба сигнала имеют максимальное значение 1,0). Я бы хотел, чтобы корреляция между двумя сигналами была максимальной при 2,5 с. Когда я запускаю numpy.correlate, я получаю пик с шагом времени, отличным от того, где находятся максимальные значения. Как я могу получить максимальный пик корреляции за время 2,5 с? Любые идеи / предложения очень помогли бы. Спасибо!

signal 1

signal 2

1 Ответ

0 голосов
/ 30 октября 2018

Чтобы получить пик в нужном месте, вы должны разделить на количество суммируемых элементов. Это можно легко упустить, используя функции numpy / scipy, которые суммируют, но не делят на длину.

from scipy.signal import correlate

corr = correlate(x1, x2, 'same')
norm_arr = np.concatenate((np.arange(x1.size / 2)[::-1], np.arange(x1.size / 2)))
corrected_corr = corr / (samples.size - norm_arr)/(np.std(x1)*np.std(x2))
...