Я бы сделал нормализованную автокорреляцию для определения периодичности. Если он периодичен с периодом вы должны увидеть пики в каждой выборке P в результате. Нормализованный результат «1» подразумевает идеальную периодичность, «0» вообще не подразумевает периодичность в этот период, а значения между ними подразумевают несовершенную периодичность. Вычтите среднее значение последовательности данных из последовательности данных перед выполнением автокорреляции, поскольку это сместит результаты.пп
Пики будут иметь тенденцию уменьшаться по мере удаления от центра, который они получают, просто из-за меньшего количества перекрывающихся образцов. Вы можете смягчить этот эффект, умножив результаты на обратную величину процента перекрывающихся выборок.
гдеU(n)- несмещенная автокорреляция,A(n)- нормализованная автокорреляция,n- смещение, аN- количество выборок в последовательности данных, которые вы проверяете на периодичность.
U( n ) = A ( n ) ∗ N| N- п |
U( н )A ( n )NN
РЕДАКТИРОВАТЬ: Это пример того, как определить, являются ли последовательности периодическими. Ниже приведен код Matlab.
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
plot(xcorr(s1n, 'unbiased'))
«Беспристрастный» параметр функции xcorr указывает ей выполнить масштабирование, описанное в моем уравнении выше. Однако автокорреляция не нормализована, поэтому пик в центре составляет около 0,25 вместо 1. Однако это не имеет значения, если мы помним, что центральный пик является идеальной корреляцией. Мы видим, что нет других соответствующих пиков, кроме как на самых внешних краях. Это не имеет значения, потому что там есть только один пример перекрытия, так что это не имеет смысла.
s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
plot(xcorr(s2n, 'unbiased'))
Здесь мы видим, что последовательность является периодической, потому что есть несколько несмещенных пиков автокорреляции с той же величиной, что и центральный пик.
Ответ Джима заставил меня задуматься о том, как проверить это статистически. Это привело меня к автокорреляционному тесту Дурбина-Ватсона .
Обобщением этого является форма:
и моя попытка реализовать это в scilab:
Если я нанесу результат для наших двух последовательностей примеров:
Тогда ясно, что вторая последовательность демонстрирует корреляцию при лагах 4, 8 и т. Д. И антикорреляцию при лагах 2, 6 и т. Д.
источник