15 votos

Suavizado de series cronológicas

Estoy construyendo una aplicación para android que registra los datos del acelerómetro durante el sueño, así como para analizar pautas de sueño y, opcionalmente, despertar el usuario cerca de la hora que desee durante el sueño ligero.

Ya he construido el componente que recoge y almacena los datos, así como la alarma. Todavía me necesitan para enfrentarse a la bestia de mostrar y guardar los datos del sueño en una realidad clara y significativa, que de preferencia también se presta para el análisis.

Un par de fotos dicen que dos mil palabras: (I solo puede publicar un enlace debido a la baja rep)

He aquí los datos sin filtrar, la suma de circulación, recogido en 30 segundos es-ss2.png

Y los mismos datos, suavizada por mi propia manifestación de promedio móvil suavizado es-ss1.png

editar) ambos gráficos reflejan la calibración - hay un mínimo filtro de 'ruido' y máximo de la frecuencia de corte del filtro, así como una alarma de nivel de disparo (la línea blanca)

Por desgracia, ninguno de estos son las soluciones óptimas - el primero es un poco difícil de entender para el usuario promedio, y la segunda, que es más fácil de entender, se esconde una gran cantidad de lo que realmente está pasando. En particular, el promedio se quita el detalle de los picos en el movimiento - y creo que los que pueden ser significativas.

Entonces, ¿por qué son estos gráficos tan importante? Estas series de tiempo se muestra a lo largo de la noche como retroalimentación para el usuario, y serán almacenados para su revisión/análisis posterior. El suavizado se idealmente bajar los costes de memoria (tanto RAM y de almacenamiento), y hacer el renderizado más rápido en estos escasean los recursos de los teléfonos/dispositivos.

Claramente hay una mejor manera de suavizar los datos - tengo algunas ideas vagas, tales como el uso de la regresión lineal para averiguar "afilado" cambios en el movimiento y la modificación de mi promedio móvil suavizado de acuerdo. Realmente necesito algo más de orientación y de entrada antes de zambullirse de cabeza en algo que podría ser resuelto más óptima.

Gracias!

16voto

Greg Shackles Puntos 221

En primer lugar, los requisitos para la compresión y análisis/presentación no son necesariamente los mismos-de hecho, para el análisis es posible que desee mantener todos los datos en bruto y tiene la capacidad para rebanar y cortar en diferentes formas. Y lo que funciona mejor para usted dependerá en gran medida de lo que usted quiere salir de ella. Pero hay un número estándar de trucos que puedes intentar:

  • El uso de las diferencias en lugar de los datos raw
  • El uso de umbrales para quitar de bajo nivel de ruido. (Se combinan con la diferenciación para ignorar los cambios pequeños.)
  • El uso de la varianza a través de algunas de la ventana de tiempo en lugar de media, para capturar el nivel de actividad en lugar de movimiento
  • Cambiar la base de tiempo de intervalos fijos de longitud variable se ejecuta y se acumulan en un solo punto de datos de secuencias de cambios para que algún criterio (por ejemplo, diferencias en la misma dirección, hasta un cierto umbral)
  • La transformación de los datos a partir de los valores reales para ordinal (por ejemplo, bajo, medio, alto); también se podría hacer esto en tiempo de contenedores en lugar de muestras individuales-por ejemplo, el nivel de actividad para cada uno de los 5 minutos de estiramiento
  • Utilizar un núcleo de circunvolución* suave, más sutilmente de su promedio de movimiento o seleccionar las características de interés, tales como cambios bruscos.
  • El uso de una FFT de la biblioteca para calcular el espectro de potencia

El último puede ser un poco caro para sus propósitos, pero probablemente darle algunas muy útiles opciones de presentación, en términos de "el sueño de ritmos" y tal. (Sé nada acerca de Android, pero es concebible que algunos/muchos/todos los receptores podría haber construido en hardware DSP que usted puede tomar ventaja de.)


* Dada la central de convolución es el procesamiento digital de la señal, es sorprendentemente difícil encontrar un lugar accesible de la intro en línea. O, al menos, en 3 minutos de búsqueda en google. Sugerencias bienvenidos!

11voto

Senseful Puntos 116

Hay muchos test no paramétrico de algoritmos de suavizado incluyendo splines y loess. Pero se van a suavizar los cambios repentinos. Así filtros de paso bajo. Creo que usted puede ser que necesite un basado en wavelets más suave que permite a los saltos repentinos, pero aún suaviza el ruido.

Echa un vistazo a Percival y Walden (2000) y el correspondiente paquete de R. A pesar de que quieren una solución de java, los algoritmos en el paquete de R son de código abierto y usted podría ser capaz de traducir.

3voto

KP. Puntos 1177

Esto es algo tangencial a lo que estás preguntando, pero puede ser vale la pena echar un vistazo al filtro de Kalman.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X