comment calculer exacte pied de l'étape de comptage à l'aide de l'accéléromètre dans android?

Je développe une application comme Runtastic Podomètre à l'aide de la algorithme mais je n'obtiens pas de similitude entre les résultats.

mon code est comme suit:

public void onSensorChanged(SensorEvent event) 
{
Sensor sensor = event.sensor; 
synchronized (this)
{
if (sensor.getType() == Sensor.TYPE_ORIENTATION) {}
else {
int j = (sensor.getType() == Sensor.TYPE_ACCELEROMETER) ? 1 : 0;
if (j == 1) {
float vSum = 0;
for (int i=0 ; i<3 ; i++) {
final float v = mYOffset + event.values[i] * mScale[j];
vSum += v;
}
int k = 0;
float v = vSum / 3;
//Log.e("data", "data"+v);
float direction = (v > mLastValues[k] ? 1 : (v < mLastValues[k] ? -1 : 0));
if (direction == - mLastDirections[k]) {
//Direction changed
int extType = (direction > 0 ? 0 : 1); //minumum or maximum?
mLastExtremes[extType][k] = mLastValues[k];
float diff = Math.abs(mLastExtremes[extType][k] - mLastExtremes[1 - extType][k]);
if (diff > mLimit) {
boolean isAlmostAsLargeAsPrevious = diff > (mLastDiff[k]*2/3);
boolean isPreviousLargeEnough = mLastDiff[k] > (diff/3);
boolean isNotContra = (mLastMatch != 1 - extType);
if (isAlmostAsLargeAsPrevious && isPreviousLargeEnough && isNotContra) {
for (StepListener stepListener : mStepListeners) {
stepListener.onStep();
}
mLastMatch = extType;
}
else {
Log.i(TAG, "no step");
mLastMatch = -1;
}
}
mLastDiff[k] = diff;
}
mLastDirections[k] = direction;
mLastValues[k] = v;
}
}
}
}

pour l'enregistrement de capteurs:

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(
Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(mStepDetector,mSensor,SensorManager.SENSOR_DELAY_NORMAL);

dans l'algorithme que j'ai différents niveaux de la sensibilité comme public void

setSensitivity(float sensitivity) {
mLimit = sensitivity; //1.97  2.96  4.44  6.66  10.00  15.00  22.50  33.75  50.62
}

sur divers de la sensibilité au niveau de mon résultat est:

sensitivity   rantastic pedometer  my app
10.00           3870                 5500
11.00           3000                 4000
11.15           3765                 4576
13.00           2000                 890
11.30           754                  986

Je n'obtiens pas de modèle approprié pour correspondre à l'exigence.
Selon mon analyse de cette application utilise les Sensor.TYPE_MAGNETIC_FIELD pour les étapes de calcul s'il vous plaît laissez-moi savoir un algorithme afin que je puisse répondre à l'exigence.

  • Les plus de haute qualité podomètres utiliser un algorithme pour détecter tous les mouvements répétés dans un modèle spécifique. Ainsi, lorsque par exemple, au moins 3 étapes ont été détectés dans une rangée avec environ la même fréquence (généralement limité à un type de durée pour la marche), les trois étapes sont ajoutés. Le podomètre continue à ajouter des étapes après que, dans environ la même fequency. De cette façon, d'autres mouvements de l'appareil sont filtrés et la sensibilité peuvent maintenu à un réglage plus élevé, sans trop de bruit.
  • Un peu hors-sujet, dans le cas où vous êtes seulement de ciblage de l'API 19 (dont vous n'êtes probablement pas), il est intégré dans l'étape de compteur d'étape et de détecteur de logiciel du capteur. Je l'ai testé avant, c'est très précis. Peut-être essayer de creuser dans le code source? developer.android.com/reference/android/hardware/...
  • Juste pour être sûr, vous testé cela sur le même appareil, à l'exact même temps, non? La principale question qui doit être posée est de savoir quelles sont les différences entre votre code et le podomètre code. Toutes les différences que vous connaissez, ou doivent-ils être exactement la même chose? Edit: juste vérifié que le onSensorChanged() est identique à la podomètre projet.
  • je suis curieux de savoir.. est le compteur de pas de logiciel ou de matériel.. j'ai trois appareils fonctionnant tous sous kitKat un HTC one, nexus 5 et nexus 7.. quand je fais un appel pour voir si le type de capteur step_counter est disponible, il n'enregistre que vrai sur le nexus 5.
  • ouais, je suppose que c'est le matériel, ne pas regarder très attentivement avant de.
  • son un peu floue.. la documentation en réalité les états qu'il utilise l'accéléromètre (qui je me sens comme elle le doit, ou une accélération linéaire) de toute façon, id personnellement d'être en mesure de déterminer si l'utilisateur a renforcé vers l'avant ou vers l'arrière.. quelqu'un a de la chance avec cette?
  • Ses pour Android Wear, qui a le matériel
  • Je m face à la même question.. je veux calculer étapes à l'aide de l'accéléromètre. Avez-vous trouvez une solution?

InformationsquelleAutor user3056585 | 2013-12-02