Jee*_*eet 21 android accelerometer lowpass-filter
我有一个非常基本的问题.在Android加速度计的情况下,什么是低通滤波器和高通滤波器?
当我看到加速度计传感器的输出时,我看到如果我不使用任何过滤器,(案例:我让我的手机闲置在桌子上)我得到z轴+ ve值.现在,如果我认为使用基本物理学,它会给出我的精确值(9.8approx),因为重力会导致加速度小.
要获得线性加速度,如果我向手机添加任何力,它将改变加速度计值,但它将是g + a我应用的.那么a为什么我不能直接减去我从Accelerometer得到的值?
有什么用?
我理解为低通的基本定义:允许低值,高通:允许高值.请帮我理解一下.我对此很困惑.
shu*_*e87 28
如果查看文档,您将看到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
Run Code Online (Sandbox Code Playgroud)
您需要找到重力运行的方向,然后将其分解为其组成部分.重力的大小总是为9.8,但方向,以及它如何分解成组成部分,将会改变.假设我们可以获得重力值并将该向量存储在数组中,如gravity[3]:
gravity[0] //gravity x axis
gravity[1] //gravity y axis
gravity[2] //gravity z axis
Run Code Online (Sandbox Code Playgroud)
电话的总加速度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];
Run Code Online (Sandbox Code Playgroud)
注意这是如何逐元素地计算所有元素,因为它是一个向量运算.
棘手的部分是找到,gravity因为手机中只有一个加速度计同时测量重力和其他力.我们想要从一个传感器中找到两种不同的力.如果我们只能在孤立的时间点查看力,我们将无法提取信息.然而,我们确实在一段时间内得到样本,并且通过观察力随时间的变化我们可以提取信息.
这意味着我们需要根据这些力的变化速度来过滤掉一个来源的结果.由重力引起的加速度的大小不会快速变化,因为它根本不会改变.重力是一种恒定的力量.然而,其他力量会随着时间而改变.如果我们通过使用高通滤波器滤除像重力这样的缓慢变化的力,那么剩余的力就是快速变化的力,就像施加在手机上的力一样.这就是使用高通滤波器的原因.
Cla*_*u S 17
低通滤波器:传递低频信号并降低频率高于阈值频率的信号幅度
高通滤波器:传递高频信号并降低频率低于阈值频率的信号幅度
如果您查看文档,它会说:"为了测量设备的实际加速度,必须消除重力的贡献.这可以通过应用高通滤波器来实现.相反,低 -通过过滤器可以用来隔离重力."
您可以查看有关低通滤波的本教程: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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23051 次 |
| 最近记录: |