Как повысить точность этого алгоритма шагомера?

Я пробовал несколько способов измерить шаги, которые пользователь делает с iPhone, по показаниям акселерометра, но ни один из них не был очень точным. Самая точная реализация, которую я использовал, следующая:

 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;
}

Однако она улавливает только 80% шагов пользователя. Как я могу повысить точность своего шагомера?

9
задан Brad Larson 9 October 2010 в 07:11
поделиться