Friday, 6 January 2017

Accéléromètre Moyen Mobile

J'ai écrit une activité simple qui est un SensorEventListener pour Sensor. TYPEACCELEROMETER. Dans mon onSensorChanged (événement SensorEvent), je viens de choisir les valeurs au format X, Y, Z et les écrire sur un fichier. Ajouté à ce X, Y, Z est une étiquette, l'étiquette est spécifique à l'activité que je fais. Donc son X, Y, Z, étiquette Comme cela, je obtenir mon profil d'activité. Souhaitez avoir des suggestions sur les opérations à effectuer après la collecte des données afin d'éliminer le bruit et d'obtenir les meilleures données pour une activité. L'objectif principal de cette collecte de données est de construire une application de détection d'activité utilisateur en utilisant la bibliothèque de réseaux neuronaux (NeuroPh pour Android) Link. J'ai demandé un podomètre il ya quelques semaines, et il aurait pu détecter les trois activités que vous avez mentionnées. Id faire les observations suivantes: En plus de Sensor. TYPEACCELEROMETER. Android a également Sensor. TYPEGRAVITY et Sensor. TYPELINEARACCELERATION. Si vous enregistrez les valeurs des trois, vous remarquerez que les valeurs de TYPEACCELEROMETER sont toujours égales à la somme des valeurs de TYPEGRAVITY et TYPELINEARACCELERATION. La méthode onSensorChanged () donne d'abord TYPEACCELEROMETER, suivie de TYPEGRAVITY et TYPELINEARACCELERATION qui sont les résultats de sa méthodologie interne de fractionnement des lectures d'accéléromètre en gravité et l'accélération qui n'est pas due à la gravité. Étant donné que vous êtes intéressé par l'accélération due aux activités, plutôt que l'accélération due à la gravité, vous pouvez trouver TYPELINEARACCELERATION est mieux pour ce que vous avez besoin. Quels que soient les capteurs que vous utilisez, le X, Y, Z que vous mesurerez dépendra de l'orientation de l'appareil. Toutefois, pour détecter les activités que vous mentionnez, le résultat ne dépend pas, par exemple. Si l'utilisateur tient le dispositif dans une position portrait ou paysage, ou si l'appareil est plat ou vertical, ainsi les valeurs individuelles de X, de Y et de Z ne seront aucune utilisation. Au lieu de cela, vous devrez regarder la longueur du vecteur, c'est-à-dire sqrt (X XY YZ Z) qui est indépendante de l'orientation du dispositif. Vous avez seulement besoin de lisser les données si vous êtes l'alimentation dans quelque chose qui est sensible au bruit. Au lieu de cela, Id dire que les données sont les données, et vous obtiendrez les meilleurs résultats si vous utilisez des mécanismes qui ne sont pas sensibles au bruit et donc n'ont pas besoin des données à lisser. Par définition, le lissage consiste à jeter des données. Vous voulez concevoir un algorithme qui prend des données bruyantes à une extrémité et renvoie l'activité actuelle à l'autre extrémité, donc ne préjugez pas s'il est nécessaire d'inclure le lissage dans le cadre de cet algorithme. Voici un graphe de sqrt (X XY YZ Z) De Sensor. TYPE ACCELEROMETER que j'ai enregistré quand je construisais mon podomètre. Les graphiques montrent les mesures mesurées quand j'ai marché pour 100 pas. La ligne verte est sqrt (X XY YZZ), la ligne bleue est une moyenne mobile exponentiellement pondérée de la ligne verte qui me donne le niveau moyen de la ligne verte, et la ligne rouge montre mes étapes de comptage algorithme. J'ai pu compter les étapes juste en recherchant le maximum et les minimums et quand la ligne verte croise la ligne bleue. Je n'ai pas utilisé de lissage ou de transformée de Fourier rapide. Dans mon expérience, pour ce genre de chose les algorithmes les plus simples fonctionnent souvent mieux, car bien que complexes peuvent fonctionner dans certaines situations, il est plus difficile de prédire comment ils vont se comporter dans toutes les situations. Et la robustesse est une caractéristique essentielle de tout algorithme :-). Répondue May 14 13 at 9:32 La marche est le updown régulier avec pics et creux comme indiqué. Le stationnaire est quand il n'y a aucun mouvement du tout loin de la moyenne, et la main est tenue quand les mouvements irréguliers d'there39s ne suivent pas le modèle de marche. En tout cas, si vous mesurez simplement un capteur, et que vous ne voulez pas que vos résultats soient sensibles à la façon dont le périphérique est maintenu, sqrt (X2Y2Z2) est la seule entrée avec laquelle vous pouvez travailler. Pour obtenir plus d'informations, vous devez utiliser d'autres capteurs. Ndash Stochastically May 14 13 at 18:39 Cela ressemble à un problème intéressant Avez-vous tracé vos données en fonction du temps pour avoir une idée, pour voir quel genre de bruit vous avez affaire, et pour aider à décider comment vous pourriez pré-processus Vos données d'entrée pour le détecteur Id commencent par des lignes pour chaque activité: Axe Az Vx Vy Vz (approximation en calculant la surface des trapèzes formés par vos points de données). Etc Peut-être que vous pouvez travailler l'orientation du téléphone en essayant de détecter la gravité, puis tourner vos vecteurs à une orientation standard (par exemple l'axe Z positif vers le haut). Si vous pouvez faire cela, alors les différents axes peuvent devenir plus significatifs. Par exemple, la marche (dans la poche) tendrait à avoir une vitesse sur le plan horizontal, qui pourrait être distinguée de marche (en main) par le mouvement dans le plan vertical. Comme pour les filtres, si les données semblent bruyantes, un simple point de départ est d'appliquer une moyenne mobile pour le lisser. Il s'agit d'une technique commune pour les données de capteurs en général: En outre, ce post semble pertinent à votre question: Les choses identifiées par moi: Les données doivent être prétraités comme et comment vous avez besoin d'être, Dans mon cas je veux juste 3 entrées et Une sortie Les données doivent être soumises à Smoothing (Five-Point Smoothing ou toute autre technique qui vous convient le mieux) Référence. Ainsi, le bruit est filtré (pas complètement). La moyenne mobile est l'une des techniques Les données linéarisées seraient bonnes, parce que vous n'avez aucune idée de la façon dont les données ont été échantillonnées, Utilisez l'interpolation pour vous aider dans la linéarisation des données Enfin utiliser FFT (Fast Fourier Transform) pour extraire la recette hors du plat , C'est-à-dire d'extraire des fonctionnalités de votre jeu de données Réponse 2017 Stack Exchange, IncA simple, unipolaire, passe-bas, récursif IIR filtre est rapide et facile à mettre en œuvre, par exemple Où x, y sont les signaux d'accéléromètre XY bruts (non filtrés), xf, yf sont les signaux de sortie filtrés, et k détermine la constante de temps des filtres (typiquement une valeur comprise entre 0,9 et 0,9999), où k plus grand signifie une constante de temps plus longue ). Vous pouvez déterminer k empiriquement, ou si vous connaissez votre fréquence de coupure requise, Fc. Alors vous pouvez utiliser la formule: où Fs est le taux d'échantillonnage. Notez que xf, yf sont les valeurs précédentes du signal de sortie sur le RHS, et les nouvelles valeurs de sortie sur le LHS de l'expression ci-dessus. Notons également que nous supposons ici que vous échantillonnerez les signaux d'accéléromètre à des intervalles de temps réguliers, p. Ex. Toutes les 10 ms. La constante de temps sera une fonction à la fois de k et de cet intervalle d'échantillonnage.


No comments:

Post a Comment