Puis-je utiliser la FFT pour interpréter les gestes de l'accéléromètre?

10

J'ai besoin de détecter deux gestes différents qui se produisent lorsque l'on regarde les données de l'accéléromètre. Voici un aperçu (aussi bref que possible):

Disons qu'un iPhone oscille d'avant en arrière tout en restant face visible. L'utilisateur peut soit faire une oscillation (une fois en avant ou en arrière, un geste) ou une oscillation continue pour n'importe quelle durée (geste deux).

Actuellement, mon code conserve une liste des données de l'accéléromètre de l'appareil (axe y) des 50 dernières images. Chaque trame de ces données est soumise à un algorithme FFT (celui-ci http://goo.gl/yi3mn ), puis j'essaie d'interpréter le domaine de fréquence donné. J'ai remarqué une forte relation entre la vitesse des oscillations et la puissance de la gamme moyenne à basse de l'espace des fréquences.

Le problème est que je dois détecter (en temps réel lorsque le mouvement anime quelque chose à l'écran) si l'oscillation qui vient de se terminer est singulière, ou si elle continue dans une autre oscillation dans la direction opposée. Ici, je dois souligner que les accéléromètres fonctionnent avec des plaques de pression. Lorsqu'une oscillation s'arrête, les données d'entrée affichent la valeur opposée à celle de l'oscillation. Il est donc difficile de voir une différence évidente entre un simple mouvement vers l'avant et un double mouvement vers l'avant puis vers l'arrière (à la fin de chaque première oscillation).

Quelqu'un peut-il suggérer comment je pourrais utiliser une FFT pour déchiffrer une valeur de magnitude précise (ou autre chose utile) que je peux utiliser pour faire la différence entre les gestes décrits ci-dessus?

J'ai enregistré les données que j'utilise dans des fichiers texte. Il s'agit des données brutes (valeurs de force g) le long de l'axe y de l'entrée de l'accéléromètre.

http://pastebin.ca/2108123 montre les données de 2 oscillations singulières (je tiens l'appareil toujours au début, à la fin et entre les deux oscillations).

entrez la description de l'image ici

REMARQUE: de nouvelles données brutes avec 20 oscillations ont été téléchargées, mais pas encore tracées. http://pastebin.ca/2108387 montre des données pour 20 oscillations continues (je tiens l'appareil toujours au début et à la fin).

entrez la description de l'image ici

Rykardo
la source
N'ayant pas vu les données moi-même, ma première impression est que cela ne semble pas être une bonne application pour une FFT. Avez-vous des données capturées que vous pourriez publier, au format brut ou sous forme de graphique?
Jason R
Salut, merci pour les commentaires. Un fichier affichant chaque valeur chronologiquement serait-il acceptable, avec un délimiteur ','? J'obtiens environ 60 valeurs par seconde. Je soupçonne que cela pourrait ne pas être une bonne application également. Peut-être pourrions-nous cependant travailler avec certaines des données.
rykardo
2
Si vous publiez les données brutes, il est probable que quelqu'un puisse les transformer en tracé et modifier votre publication avec.
Jason R
OK super. En mettra en ligne sous peu.
rykardo
Cela a pris plus de temps que prévu. J'exécute le projet avec Unity, qui ne peut recevoir les données d'entrée de l'appareil qu'à 60 images / seconde. Cela signifie que je ne peux pas avoir un taux d'échantillonnage élevé, mais néanmoins. Est-ce ce que vous vouliez dire avec votre suggestion?
rykardo

Réponses:

2

En regardant les données, je ne vois pas pourquoi vous voudriez utiliser la FFT à cette fin (je peux me tromper cependant). Supposons que vous souhaitiez détecter un ou plusieurs mouvements en fonction de cet ensemble de données (que vous avez joint), les méthodes que j'examinerais seraient

  1. Quelque chose sur les lignes de taux de variation des valeurs absolues. La dérivée première ferait bien, je suppose.
  2. Transformation en ondelettes peut-être? Je ne peux pas en dire plus sur son utilité tant que je ne sais pas si vous voulez connaître la position des pics ou non.

Si la seule chose que vous voulez détecter est une oscillation simple vs multiple, alors la FFT n'est pas, à mon avis, un très bon choix pour l'analyse.

anasimtiaz
la source
Merci pour les commentaires! Un ami a suggéré que la FFT pourrait être la voie à suivre, avant cela, je n'en avais jamais utilisé auparavant. Ce que je dois détecter, c'est si une nouvelle oscillation commence ou non à la fin de chaque oscillation. Les graphiques ci-dessus devraient montrer pourquoi c'est difficile. Je pensais pouvoir utiliser un algorithme de magnitude, mais c'est délicat car la puissance / vitesse des oscillations sera différente par utilisateur.
rykardo