锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Android加速度传感器数值的过滤

时间:2022-12-03 19:30:00 二向高g值加速度传感器

加速度传感器测量设备的加速度,包括重力加速度。以下代码显示了如何获得缺失的加速度传感器:

private SensorManager mSensorManager;

private Sensor mSensor;

...

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

从概念上讲,加速度传感器测量传感器上施加的力,并根据以下关系检测设备的加速度(Ad)。

Ad=-∑Fs/mass

然而,根据以下关系,重力总是会影响测量精度。

Ad=-g-∑F/mass

因此,如果设备平放在桌子上(没有加速度),加速度计将被读取g=9.81m/s2。同样,设备可以自由落体9.81m/s当2的加速度降到地面时,加速度计将被读取g=0m/s2。因此,为了测量设备的真实加速度,必须消除加速计数据中的重力干扰。可通过高通滤波器实现。反之,低通滤波器则可以用于分离出重力加速度值。下面的例程显示了它们的用法:

publicvoidonSensorChanged(SensorEventevent){//在本例中,alpha由t/(t dT)计算得来,//其中t时间常数为低通滤波器,dT是事件报送的频率finalfloatalpha=0.8;///用低通滤波器分离重力加速度gravity[0]=alpha*gravity[0] (1-alpha)*event.values[0];gravity[1]=alpha*gravity[1] (1-alpha)*event.values[1];

gravity[2]=alpha*gravity[2] (1-alpha)*event.values[2];

////用高通滤波器除重力干扰linear_acceleration[0]=event.values[0]-gravity[0];linear_acceleration[1]=event.values[1]-gravity[1];linear_acceleration[2]=event.values[2]-gravity[2];

}

注:您可以使用许多技术来过滤传感器数据。以上例程仅使用过滤器常量(alpha)创建低通滤波器。过滤器的常量是时间常量(t)传感器事件报送频率(dt)推导出来的,t大致等于过滤器触发传感器事件的间隔时间。本例程为演示0.8作为alpha的值。如果你要用这个过滤方法,你可能需选用其它的alpha值。

加速器采用标准传感器坐标系。这意味着当设备平放在桌子上时,会发生以下情况:

若您从左侧平推设备(它向右移动),则x向加速度为正值。

若您从下侧平推设备(向前移动),则y方向加速度为正值。

如果以A m/s如果2的加速度移动到空中,则Z的加速度等于A 9.81,即设备加速度( A m/s减去重力加速度(-9).81m/s2)。

静态设备的加速度值为 9.81即设备加速度(0 m/s减去重力加速度(-9).81m/s2)。

一般来说,加速度计足以应对设备移动的监测。几乎所有的Android该平台的手持式和桌面终端都配备了加速度计,其能耗是其他运动传感器的10倍。但它的一个缺点是,你必须实现低通道和高通道滤波器,以消除重力影响,减少噪声数据。

Android SDK该应用示例显示了加速度传感器的使用方法(Accelerometer Play)。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章