Jak mohu zlepšit přesnost tohoto krokoměr algoritmu?

hlasů
9

Vyzkoušel jsem několik způsobů měření kroků uživatel vytvoří s iPhone čtením akcelerometr, ale žádný z nich nebyl příliš přesný. Nejpřesnější implementace Použil jsem je následující:

 float xx  = acceleration.x;
 float yy  = acceleration.y;
 float zz = acceleration.z;

 float dot = (mOldAccX * xx) + (mOldAccY * yy) + (mOldAccZ * zz);
 float a = ABS(sqrt(mOldAccX * mOldAccX + mOldAccY * mOldAccY + mOldAccZ * mOldAccZ));

 float b = ABS(sqrt(xx * xx + yy * yy + zz * zz));

 dot /= (a * b);

 if (dot  <= 0.994 && dot > 0.90) // bounce
 {

  if (!isChange)
  {

   isChange = YES;
   mNumberOfSteps += 1;

  } else {
   isChange = NO;
  }
 }

 mOldAccX = xx;
 mOldAccY = yy; 
 mOldAccZ = zz;
}

Nicméně, toto však zachycuje pouze 80% z kroků uživatele. Jak mohu zlepšit přesnost mé krokoměr?

Položena 09/10/2010 v 07:07
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

ok, já jsem za předpokladu, že tento kód je v rámci funkce addAcceleration ...

-(void)addAcceleration:(UIAcceleration*)accel

Takže byste mohli zvýšit svůj vzorkovací frekvence získat lepší rozlišovací detekce. Tak například, pokud jste v současné době 30 vzorků za sekundu, můžete ji zvýšit na 40, 50 nebo 60 atd ... Pak se rozhodnout, zda je potřeba počítat počet vzorků, které spadají do vaší odrazit a za to, že jediná krok. Vypadá to, že nepočítáme některé kroky kvůli chybějící některé z odrazů.

Také to, co je smyslem přepínání isChange? Neměl byste použít čítač s reset po x počet počítá? Pokud jste v rámci vaší odrazit ...

if (dot  <= 0.994 && dot > 0.90) // bounce

budete muset zasáhnout tento sweet spot 2 krát, ale způsob, jakým jste je nastaven tak, že nemusí být dvě po sobě jdoucí vzorky za sebou, může to být první vzorek a pátý vzorek nebo druhý vzorek a 11. Vzorek , Že je místo, kde jste ztratili krok se počítá.

Odpovězeno 15/04/2011 v 08:18
zdroj uživatelem

hlasů
1

Mějte na paměti, že ne každý dělá stejné velké kroky. Takže výpočet bodů by měla být upravena v souladu s něčí délka, velikost kroku.

proto byste měli nastavit práh odrazit. Snažte se, aby program seznámí je to cestujícího.

Odpovězeno 11/04/2013 v 10:28
zdroj uživatelem

hlasů
3

Zde jsou některé přesnější odpověď na detekci každý krok. Ale ano, v mém případě jsem dostat + nebo - 1 krok s každých 25 stupňů. Takže doufám, že to může být užitečné pro vás. :)

if (dot <= 0.90) {
    if (!isSleeping) {
        isSleeping = YES;
        [self performSelector:@selector(wakeUp) withObject:nil afterDelay:0.3];
        numSteps += 1;
        self.stepsCount.text = [NSString stringWithFormat:@"%d", numSteps];
    }
}



- (void)wakeUp {

       isSleeping = NO;
     }
Odpovězeno 19/12/2013 v 08:14
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more