Numpy коррелирует ось X смещена - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть два сигнала, которые я пытаюсь увидеть их корреляционную задержку:

enter image description here

Похоже, они синхронизируются, поэтому я ожидаю correlate функция, чтобы дать минимум в нуле (потому что они имеют антикорреляцию каждые ~ 100 временных шагов).

Однако, используя этот код:

yhat1 = np.load('cor1.npy')
yhat2 = np.load('cor2.npy')

corr = np.correlate(yhat1 - np.mean(yhat1), 
                    yhat2 - np.mean(yhat2),
                    mode='same')
plt.plot(corr)
plt.show()

Я получаю следующее ( Я попытался использовать 'full ' и 'same' в режиме и получил тот же результат):

enter image description here

Почему минимум не равен 0, как ожидается, но на 250? Почему кажется, что по обеим сторонам минимума есть другие значительные пики?

данные здесь

1 Ответ

1 голос
/ 10 апреля 2020
Функция корреляции

Numpy возвращает вам функцию авто / кросс-корреляции в зависимости от вводимых вами данных. Корреляция такая же, как свертка, за исключением того, что вы не применяете обращение времени к одному из сигналов. Другими словами, примените скользящее скалярное произведение между сигналами.

При t = 0 нормально получить нулевую корреляцию, так как один сигнал имеет ноль при t = 0. Однако, если вы выполните это далее, сигналы будут колебаться как по величине, так и по знаку. Из-за (относительно) экстремальных пиков сигналов друг к другу в разное время корреляция колеблется. Огромный пик находится при t = 500, потому что в это время происходит полное перекрытие между двумя сигналами. Это происходит, когда ваши сигналы экстремальных пиков выровнены в этот момент. После t = 500 ваши перекрывающиеся области уменьшаются и обнаруживают, что поведение аналогично случаю до того, как мы достигли t <500. </p>

...