我有一个非常基本的问题。
在Android加速度计的情况下,低通滤波器和高通滤波器是什么?

当我看到加速度传感器的输出时,我看到如果我不使用任何过滤器,(案例:我的手机在桌子上保持闲置状态),我得到z轴+ ve值。现在,如果我认为使用基本物理学,它会为我提供小数值的精确值(大约9.8),即由于重力引起的加速度。

为了获得线性加速度,如果我在电话上施加任何力,它将改变加速度计的值,但这将是我应用的g + a。因此,要获取a,为什么我不能直接从从加速度计获得的值中直接减去?

有什么用?
我了解低通的基本定义:允许低值,高通:允许高值。

最佳答案

如果查看文档,将会发现SensorEvent返回一个数组,该数组代表所有力的向量。
http://developer.android.com/reference/android/hardware/SensorEvent.html#values
这是加速度的分量分解成每个轴的方式:

 values[0] //acceleration on x axis
 values[1] //acceleration on y axis
 values[2] //acceleration on z axis

您需要找到重力在哪个方向运行,然后将其分解为其组成部分。重力的大小将始终为9.8,但方向及其分解方式将改变。假设我们可以获取引力的值并将该向量存储在gravity[3]这样的数组中:
 gravity[0] //gravity x axis
 gravity[1] //gravity y axis
 gravity[2] //gravity z axis

手机上的总加速度TT = g + a。要只获取a,我们需要a = T - g:
 linear_acceleration[0] = event.values[0] - gravity[0];
 linear_acceleration[1] = event.values[1] - gravity[1];
 linear_acceleration[2] = event.values[2] - gravity[2];

请注意,这是一个向量运算,因此如何逐个元素地计算所有内容。

棘手的部分是找到gravity,因为电话中只有一个加速度计,可以同时测量重力和其他力。我们想从一个传感器中找到2种不同的力。如果我们只能在孤立的时间点查看力量,我们将无法提取信息。但是,我们确实在一定时间范围内获取了样本,通过查看力随时间的变化,我们可以提取信息。

这意味着我们需要根据这些力的变化速度,从一个来源中滤除结果。由于重力的作用,加速度的大小不会很快改变,因为它根本不会改变。重力是恒力。但是其他力量会随着时间而改变。如果我们通过使用高通滤波器滤除重力等缓慢变化的力,则其余力就是快速变化的力,例如施加到手机上的力。这就是为什么使用高通滤波器的原因。

10-02 09:22