mal*_*ion 13 android calibration accelerometer filter noise
所以,我一直在努力解决这个问题,并且没有任何运气来利用互联网的智慧和相关的SO帖子.
我正在编写一个使用无处不在的加速度计的Android应用程序,但即使在休息时我似乎也得到了令人难以置信的"噪音",似乎无法弄清楚如何处理它,因为我的读数需要相对较高准确.我想也许我的手机(HTC Incredible)功能失调,但传感器似乎与我玩过的其他游戏和应用程序配合得很好.
我试图使用各种"过滤器",但我似乎无法围绕它们.我知道引力必须以某种方式处理,也许这就是我出错的地方.目前我已经尝试了这个,改编自SO答案,它引用了iPhone SDK的一个例子:
accel[0] = event.values[0] * kFilteringFactor + accel[0] * (1.0f - kFilteringFactor);
accel[1] = event.values[1] * kFilteringFactor + accel[1] * (1.0f - kFilteringFactor);
double x = event.values[0] - accel[0];
double y = event.values[1] - accel[1];
Run Code Online (Sandbox Code Playgroud)
海报上写着"玩"kFilteringFactor值(示例中为kFilteringFactor = 0.1f),直到满意为止.不幸的是,我似乎仍然得到很多噪音,所有这一切似乎都是让读数以微小的小数形式出现,这对我没有多大帮助,而且似乎只是让传感器不那么敏感.我的大脑的数学中心也因多年的疏忽而萎缩,所以我不完全理解这个过滤器是如何工作的.
有人可以详细解释如何从加速度计中获取有用的读数吗?一个简洁的教程将是一个令人难以置信的帮助,因为我没有找到一个非常好的教程(至少针对我的知识水平).我感到沮丧,因为我觉得所有这一切对我来说都应该更加明显.任何帮助或方向将不胜感激,当然,如果需要,我可以从我的代码中提供更多样本.
我希望我不是要求过多地用勺子喂食; 我不会问,除非我一直想把它弄清楚.看起来其他SO成员也有一些兴趣.
部分答案:
准确性.如果您正在寻找高精度,那么您在手机中找到的便宜的加速度计将不会削减芥末.相比之下,适用于工业或科学用途的三轴传感器仅需1,500美元即可用于传感器; 添加硬件为其供电并将其读数转换为计算机可以使用的价格的两倍.手机中的传感器数量远低于5美元.
噪声. 廉价的传感器是不准确的,并且不准确性转化为噪音.不移动的不准确传感器将不会始终显示零,它将在某个范围内显示任一侧的值.关于您可以做的最好的事情是在静止时表征传感器以了解它是多么嘈杂,并使用它来根据预期的误差将测量结果舍入到不太精确的比例.(换句话说,如果它在± x m/s ^ 2之内,可以说传感器没有移动,但你不能确切地说它可能会移动非常缓慢.)你将不得不这样做这在每台设备上都有,因为它们并非都使用相同的加速度计,而且它们的行为都不同.我猜这是iPhone的一个优点:硬件几乎是同质的.
重力.SensorEvent文档中 有一些关于加速度计所说的重力因素的讨论.你会注意到它与你发布的代码有很多相似之处,除了它更清楚它正在做什么.:-)
HTH.
要从加速度计获得正确读数,您需要使用等式速度 = SQRT(x*x + y*y + z*z)。使用此功能,当手机静止时,速度将是重力速度 - 9.8m/s。因此,如果减去 (SensorManager.GRAVITY_EARTH),那么当手机处于静止状态时,读数将为 0 m/s。至于噪音,Blrfl 可能对廉价的加速度计是正确的,即使我的手机处于静止状态,它也会每秒持续闪烁几分之一米。您可以设置一个小的阈值,例如 0.4m/s,如果速度没有超过该阈值,则它处于静止状态。