Чтобы ответить на ваш первый вопрос, numpy.correlate(a, v, mode)
выполняет свертку a
с обратной v
и дают результаты обрежутся по указанному режиму. definition of convolution, С (т) = Σ -∞ < < я ∞ я v т + я где -∞ < < т ∞, позволяет сделать результаты от -∞ до ∞, но вы, очевидно, не может хранить бесконечно длинный массив. . Таким образом, он должен быть обрезан, и именно там режим приходит Есть 3 различных режима: полный, то же самое, & действует:
- «полный» режим возвращается результаты для каждого
t
, где оба a
и v
имеют некоторые перекрываются.
- «тот же» режим возвращает результат с той же длиной, что и самый короткий вектор (
a
или v
).
- «действительный» режим возвращает результаты только тогда, когда
a
и v
полностью перекрывают друг друга. documentation для numpy.convolve
дает более подробную информацию о режимах.
Для вашего второго вопроса, я думаю numpy.correlate
это дает вам автокорреляции, это просто дает вам немного больше, а также. Автокорреляция используется для определения того, насколько подобный сигнал или функция является для себя с определенной разницей во времени. При разнице во времени 0 автокорреляция должна быть самой высокой, потому что сигнал идентичен самому себе, поэтому вы ожидали, что первый элемент в массиве результатов автокорреляции будет самым большим. Однако корреляция не начинается с разницы во времени 0. Она начинается с отрицательной разницы во времени, закрывается до 0 и затем становится положительной.То есть, вы ожидали:
автокорреляции (а) = Σ -∞ < < я ∞ я v т + я где 0 = < < т ∞
Но что вы получили был:
автокорреляции (а) = Σ -∞ < < я ∞ я против т + я где -∞ < < т ∞
Что вам нужно сделать, это взять последнюю половину своего корреляционного результата, и это должно быть автокорреляцией вы ищете. Простая функция питона, чтобы сделать это было бы:
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
Вы, конечно, потребуется ошибка проверки, чтобы убедиться, что x
на самом деле 1-d массив. Кроме того, это объяснение, вероятно, не является наиболее математически строгим. Я обманывал бесконечности, потому что определение свертки использует их, но это не обязательно относится к автокорреляции. Таким образом, теоретическая часть этого объяснения может быть слегка отвратительной, но, надеюсь, практические результаты полезны. Thesepages на автокорреляции очень полезны и могут дать вам гораздо лучший теоретический фон, если вы не против пробираться через обозначения и тяжелые понятия.
Смотрите также: http://stackoverflow.com/questions/12269834/is-there-any-numpy-autocorrellation-function-with-standardized-output для получения информации о нормализованной автокорреляции. – amcnabb