¿Puedo usar FFT para interpretar los gestos del acelerómetro?

10

Tengo la necesidad de detectar dos gestos diferentes que ocurren al mirar los datos del acelerómetro. Aquí hay un resumen (tan breve como puedo hacerlo):

Digamos que un iPhone se balancea de un lado a otro mientras permanece boca arriba. El usuario puede hacer una oscilación (una vez hacia adelante o hacia atrás, gesto uno) o una oscilación continua durante cualquier cantidad de tiempo (gesto dos).

Actualmente mi código mantiene una lista de los datos del acelerómetro del dispositivo (eje y) de los últimos 50 cuadros. Cada cuadro de estos datos se somete a un algoritmo FFT (este http://goo.gl/yi3mn ), y luego trato de interpretar el dominio de frecuencia dado. He notado una fuerte relación entre la velocidad de las oscilaciones y la potencia del rango medio a bajo del espacio de frecuencia.

El problema es que necesito detectar (en tiempo real a medida que el movimiento anima algo en la pantalla) si la oscilación que acaba de terminar es singular o una que continúa en otra oscilación en la dirección opuesta. Aquí debo señalar que los acelerómetros funcionan con placas de presión. Cuando una oscilación se detiene, los datos de entrada mostrarán el valor opuesto desde cuando se realizó la oscilación. Esto hace que sea difícil ver alguna diferencia obvia entre un solo movimiento hacia adelante y un movimiento doble hacia adelante y luego hacia atrás (al final de cada primera oscilación).

¿Alguien puede sugerir cómo podría hacer uso de una FFT para descifrar un valor de magnitud preciso (o algo más útil) que pueda usar para distinguir entre los gestos descritos anteriormente?

He registrado los datos que estoy usando para enviar archivos de texto. Son los datos sin procesar (valores de fuerza g) a lo largo del eje y de la entrada del acelerómetro.

http://pastebin.ca/2108123 muestra datos para 2 oscilaciones singulares (mantengo el dispositivo quieto al inicio, al final y entre las dos oscilaciones).

ingrese la descripción de la imagen aquí

NOTA: se han cargado nuevos datos sin procesar con 20 oscilaciones, pero aún no se han trazado. http://pastebin.ca/2108387 muestra datos de 20 oscilaciones continuas (mantengo el dispositivo quieto al principio y al final).

ingrese la descripción de la imagen aquí

rykardo
fuente
Al no haber visto los datos yo mismo, mi primera impresión es que esta no parece ser una buena aplicación para una FFT. ¿Tiene algunos datos capturados que podría publicar, ya sea en formato sin formato o como un gráfico?
Jason R
Hola, gracias por los comentarios. ¿Sería aceptable solo un archivo que muestra cada valor cronológicamente, con un delimitador ','? Estoy obteniendo aproximadamente 60 valores por segundo. Sospecho que esta podría no ser una buena aplicación también. Sin embargo, quizás podamos resolverlo con algunos de los datos.
rykardo
2
Si publica los datos sin procesar, es probable que alguien pueda transformarlos en una trama y editar su publicación con ellos.
Jason R
Vale genial. Subirá algunos en breve.
rykardo
Eso tomó mucho más tiempo de lo que esperaba. Estoy ejecutando el proyecto con Unity, que solo puede recibir los datos de entrada del dispositivo a 60 cuadros / segundo. Esto significa que no puedo tener una alta frecuencia de muestreo, pero sin embargo. ¿Es esto lo que quisiste decir con tu sugerencia?
rykardo

Respuestas:

2

Mirando los datos, no puedo ver por qué querrías usar FFT para este propósito (aunque puedo estar equivocado). Digamos que desea detectar movimientos únicos o múltiples basados ​​en este conjunto de datos (que ha adjuntado), los métodos que estaría viendo serían

  1. Algo en la línea de la tasa de cambio de los valores absolutos. La primera derivada funcionaría bien, supongo.
  2. ¿Transformada Wavelet tal vez? No puedo dar más detalles sobre su utilidad hasta que sepa si quieres saber la posición de los picos o no.

Si lo único que desea detectar es la oscilación simple o múltiple, entonces FFT, en mi opinión, no es una muy buena opción para el análisis.

anasimtiaz
fuente
¡Gracias por la respuesta! Un amigo sugirió que FFT podría ser el camino a seguir, antes de eso nunca había usado uno antes. Lo que necesito detectar es si una nueva oscilación comienza al final de cada oscilación, o no. Las parcelas anteriores deberían exponer por qué es difícil. Pensé que podría usar un algoritmo de magnitud, pero esto es complicado porque la potencia / velocidad de las oscilaciones será diferente por usuario.
rykardo