从那里获取数据CMMotionManager
是相当直接的,处理它并没有那么多。
有没有人有任何代码指针可以相对准确地检测一个步骤(并忽略较小的运动)或一般方向的指导如何去做这样的事情?
从那里获取数据CMMotionManager
是相当直接的,处理它并没有那么多。
有没有人有任何代码指针可以相对准确地检测一个步骤(并忽略较小的运动)或一般方向的指导如何去做这样的事情?
你基本上需要的是一种低通滤波器,它可以让你忽略小动作。实际上,这通过消除紧张来“平滑”数据。
- (void)updateViewsWithFilteredAcceleration:(CMAcceleration)acceleration
{
static CGFloat x0 = 0;
static CGFloat y0 = 0;
const NSTimeInterval dt = (1.0 / 20);
const double RC = 0.3;
const double alpha = dt / (RC + dt);
CMAcceleration smoothed;
smoothed.x = (alpha * acceleration.x) + (1.0 - alpha) * x0;
smoothed.y = (alpha * acceleration.y) + (1.0 - alpha) * y0;
[self updateViewsWithAcceleration:smoothed];
x0 = smoothed.x;
y0 = smoothed.y;
}
该alpha
值决定了给予先前数据与原始数据的权重。这dt
是样本之间经过的时间。
RC
值控制过滤器的侵略性。更大的值意味着更平滑的输出。