Android的低通滤波器和高通滤波器是怎样工作的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (167)

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

当我看到加速度计传感器的输出时,我看到如果我没有使用任何滤波器,,我得到z轴+ ve值。现在,如果我认为使用基本物理,它会给我一个确切的值(9.8approx),因为重力加速度很小。

为了获得线性加速度,如果我给手机增加任何力量,它将改变加速度计值,但这将是g + a我应用的。所以a为什么我不能直接从我从Accelerometer获得的值中减去?

提问于
用户回答回答于

低通滤波器:传递低频信号并降低频率高于阈值频率的信号幅度

高通滤波器:通过高频信号并降低频率低于阈值频率的信号幅度

如果你看一下文档,它说:“为了测量器件的实际加速度,重力的作用,必须消除这可以通过应用来实现。高通滤波器相反,。低通过滤波器可以用来隔离重力。“

你可以查看本教程的低通滤波:http : //www.raweng.com/blog/2013/05/28/applying-low-pass-filter-to-android-sensors-readings/

阅读下http://developer.android.com/reference/android/hardware/SensorEvent.html#values上的文档,你可以看到,你可以通过执行以下操作访问所有x,y,z轴上的a值:

values[0] - a on x axis
values[1] - a on y axis
values[2] - a on z axis
用户回答回答于

如果查看文档,你将看到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

T在手机上的总加速度是T = 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];

扫码关注云+社区