android – TYPE_ACCELEROMETER删除重力,t (t dT)的含义

android – TYPE_ACCELEROMETER删除重力,t (t dT)的含义,第1张

概述Android开发者示例: public void onSensorChanged(SensorEvent event){ // alpha is calculated as t / (t + dT) // with t, the low-pass filter's time-constant // and dT, the event delivery rat Android开发者示例:

public voID onSensorChanged(SensorEvent event){      // Alpha is calculated as t / (t + dT)      // with t,the low-pass filter's time-constant      // and dT,the event delivery rate      final float Alpha = 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 = 0.8计算出什么样的数值?
我想询问t和dT的具体值.

解决方法 为了回答你的问题,我将不得不深入研究低通滤波器,因为Alpha几乎是我们得到的最后一个值.

低通滤波器通常按以下顺序构建:

>你想切割的赫兹cutoff Frequency fc(这里重力是继续的,所以值应该在1Hz左右)
>Time-constantτ(tau)τ= 1 /(2 *π* fc)
>时间Δt以秒为单位. Δt= t2-t1
>平滑因子α,在这种情况下α=τ/(τΔt)
>以前的输出和新输入以获得新输出.

Alpha的功能是对值进行或多或少的重要性.为了工作,过滤器需要一个介于0和1之间的Alpha.在这种情况下,先前的输出(重力)权重为80%的新输出和新的输入(event.values)权重为20%=>新引力= 80%旧引力20%加速度.

Δt由传感器的实现给出.通常对于SENSOR_DELAY_NORMAL来说它是0.2秒.

τ由α= 0.8和Δt= 0.2s计算

从α中提取τ将给出:

τ = (∆t * α) / (1 - α)

并且使用之前的值,您会发现

τ  = 0.2 * 0.8 / (1 - 0.8) = 0.8

使用τ,您可以计算fc:

fc = 1 / (2 * π * τ) = 1/( 2 * 3.14 * 0.8) = 0.2Hz.
总结

以上是内存溢出为你收集整理的android – TYPE_ACCELEROMETER删除重力,t /(t dT)的含义全部内容,希望文章能够帮你解决android – TYPE_ACCELEROMETER删除重力,t /(t dT)的含义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1125712.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存