Haría una autocorrelación normalizada para determinar la periodicidad. Si es periódico con el período , debería ver picos en cada muestra de P en el resultado. Un resultado normalizado de "1" implica una periodicidad perfecta, "0" no implica ninguna periodicidad en ese período, y los valores intermedios implican una periodicidad imperfecta. Reste la media de la secuencia de datos de la secuencia de datos antes de realizar la autocorrelación porque sesgará los resultados.PP
Los picos tenderán a disminuir a medida que se alejen del centro simplemente porque tienen menos muestras superpuestas. Puede mitigar ese efecto multiplicando los resultados por el inverso del porcentaje de muestras superpuestas.
U(n)=A(n)∗N|N−n|
U(n)A(n)nN
EDITAR: Este es un ejemplo de cómo saber si las secuencias son periódicas. El siguiente es el código de Matlab.
El parámetro "imparcial" de la función xcorr le dice que haga la escala descrita en mi ecuación anterior. Sin embargo, la autocorrelación no está normalizada, por lo que el pico en el centro es de alrededor de 0.25 en lugar de 1. Sin embargo, eso no importa, siempre que tengamos en cuenta que el pico central es la correlación perfecta. Vemos que no hay otros picos correspondientes, excepto en los bordes más exteriores. Esos no importan porque solo hay una muestra superpuesta, por lo que no tiene sentido.
Hola Jim, gracias ... Estoy un poco confundido sobre cómo comenzar a programar esto, porque cada vez que busco sobre autocorrelación encuentro fórmulas complejas, realmente no tengo la idea de dónde comenzar y cómo detectar el pico con el período P en el código . Conmigo tengo una lista de valores V [] = {110011001100 ..} ahora cómo ponerlos en fórmulas de autocorrelación y determinar si es periódica o no ... ¿Puede darme un pequeño comienzo fácil ... Muchas gracias
safzam
@safzam Si está usando Matlab o Python (numpy) ya tienen funciones de autocorrelación. Si necesita algo en C / C ++ / Java / lo que sea, intente aquí- dsprelated.com/showmessage/59527/1.php
Jim Clay
Por ejemplo, utilicé las siguientes dos señales s1 y s2: s1 = [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1] s2 = [1, 0, 1, 1, 1, 0 , 1, 0, 0, 0, 1] r1 = numpy.correlate (s1, s1, mode = 'full') r2 = numpy.correlate (s2, s2, mode = 'full') Usé estas cuatro líneas en un código de python Obtuve r1 = [1 2 1 2 4 2 3 6 3 4 8 4 3 6 3 2 4 2 1 2 1] y r2 = [1 0 1 1 2 0 3 2 3 2 6 2 3 2 3 0 2 1 1 0 1] tanto r1 como r2 dan una misma curva de arco iris como forma. ¿Cómo puedo determinar en el código que una señal es peroidc o casi periódica o no periódica, gracias?
Gracias por la información. De hecho, estoy haciendo un programa en Python donde obtengo muchas listas de 0s y 1s. Quiero separar series periódicas, aleatorias, de tipo ráfaga. Estoy probando la lógica anterior en python pero la función "xcorr" no está en python, luego usé la función numpy.correlate (lst, lst, mode = 'full'). También las listas contienen alrededor de 70,000 listas de 0s y 1s. Solo quiero determinar si esta lista es periódica o no ... si hay un poco de periodicidad, puedo evitarla. cualquier pista adicional por favor. gracias por adelantado.
La respuesta de Jim me envió a pensar en cómo probar esto estadísticamente. Esto me llevó a la prueba de autocorrelación de Durbin-Watson .
La generalización de la misma es formar:
y mi intento de implementar esto en scilab es:
Si trazo el resultado para nuestras dos secuencias de ejemplo:
Entonces está claro que la segunda secuencia exhibe correlación en rezagos de 4, 8, etc. y anti-correlación en rezagos de 2, 6, etc.
fuente