Farei un'autocorrelazione normalizzata per determinare la periodicità. Se è periodico con il periodo , nel risultato dovresti vedere picchi su ogni campioneUn risultato normalizzato di "1" implica una periodicità perfetta, "0" non implica alcuna periodicità in quel periodo e valori tra la periodicità implicita imperfetta. Sottrarre la media della sequenza di dati dalla sequenza di dati prima di eseguire l'autocorrelazione perché distorcerà i risultati.PPP
Le cime tenderanno a diminuire quanto più lontano dal centro ottengono semplicemente a causa del minor numero di campioni sovrapposti. È possibile mitigare tale effetto moltiplicando i risultati per l'inverso della percentuale di campioni sovrapposti.
U(n)A(n)nN
U( n ) = A ( n ) ∗ N| N- n |
dove è l'autocorrelazione non distorta, è l'autocorrelazione normalizzata, è l'offset e è il numero di campioni nella sequenza di dati che si sta verificando per periodicità.
U( n )A ( n )nN
EDIT: questo è un esempio di come dire se le sequenze sono periodiche. Di seguito è riportato il codice 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'))
Il parametro "imparziale" per la funzione xcorr gli dice di fare il ridimensionamento descritto nella mia equazione sopra. L'auto-correlazione non è normalizzata, tuttavia, motivo per cui il picco al centro è di circa 0,25 invece di 1. Ciò non importa, purché si tenga presente che il picco centrale è una correlazione perfetta. Vediamo che non ci sono altri picchi corrispondenti se non ai bordi più esterni. Quelli non contano perché c'è solo un campione sovrapposto, quindi non è significativo.
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'))
Qui vediamo che la sequenza è periodica perché ci sono più picchi di autocorrelazione imparziali con la stessa grandezza del picco centrale.