Я б зробив нормалізовану автокореляцію для визначення періодичності. Якщо вона періодична з періодом ви повинні побачити піки на кожному зразках P в результаті. Нормований результат "1" передбачає ідеальну періодичність, "0" не передбачає взагалі періодичності в цей період, а значення між ними передбачають недосконалу періодичність. Відніміть середню послідовність даних із послідовності даних, перш ніж зробити автокореляцію, оскільки це буде зміщувати результати.PP
Піки, як правило, зменшуватимуться далі від центру, який вони отримують, просто через менше зразків, що перекриваються. Ви можете пом'якшити цей ефект, помноживши результати на зворотний відсоток проб, що перекриваються.
деU(n)- неупереджена автокореляція,A(n)- нормалізована автокореляція,n- зміщення, аN- кількість зразків у послідовності даних, яку ви перевіряєте на періодичність.
U(n)=A(n)∗N|N−n|
U(n)A(n)nN
EDIT: Це приклад того, як визначити, чи є послідовності періодичними. Далі йде код 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'))
Тут ми бачимо, що послідовність є періодичною, оскільки існує безліч об'єктивних піків автокореляції з такою ж величиною, як і центральний пік.