gpt4 book ai didi

android - 加速度计值在 android 中并不完美

转载 作者:行者123 更新时间:2023-11-30 01:22:44 24 4
gpt4 key购买 nike

我从 android 加速度计获取传感器值,但这些值不一致。我认为如果我们可以添加一些过滤器,那么我们就可以轻松地检查数据的可靠性。假设如果我构建了一个低通滤波器,比如固定两个值低高

if value less than low ---- device is still(not moving)

如果值大于 low 小于 high -- 设备开始移动

如果值高于高---我们衰减值(设备移动)

现在我无法确定值应该是什么以及如何实现这样的事情。或者如果我的想法是正确的,我的意思是这种类型的过滤器是否会起作用。

最佳答案

您的想法或多或少是可以的。但需要一些补充。我们可以使用低通滤波器。您给出的逻辑应该用于确定数据 alpha(而不是数据)的变化率。我可以给你一个简单的类来为你完成工作

public class minPassFilter {

private static final float A_DEFAULT = 0.333f;
private static final float A_STEADY = 0.001f;
private static final float A_START_MOVING = 0.6f;
private static final float A_MOVING = 0.9f;

private minPassFilter() { }

public static float[] filter(float min, float max, float[] present, float[] former) {
if (present==null || former==null)
throw new NullPointerException("Input and former arrays can't be NULL");
if (present.length!=former.length)
throw new IllegalArgumentException("Input and former arrays must have the same length");

float A = computeA(min,max,present,former);

for ( int i=0; i<present.length; i++ ) {
former[i] = former[i] + A * (present[i] - former[i]);
}
return former;
}

private static final float computeA(float min, float max, float[] present, float[] former) {
if(former.length != 3 || present.length != 3) return A_DEFAULT;

float x1 = present[0],
y1 = present[1],
z1 = present[2];

float x2 = former[0],
y2 = former[1],
z2 = former[2];

float distance = (float)(Math.sqrt( Math.pow((double)(x2 - x1), 2d) +
Math.pow((double)(y2 - y1), 2d) +
Math.pow((double)(z2 - z1), 2d))
);

if(distance < min) {
return A_STEADY;
} else if(distance >= min || distance < max) {
return A_START_MOVING;
}
return A_MOVING;
}
}

您可以将传感器数据传递给此类并获取过滤后的值。

作为引用,github 链接是 this

关于android - 加速度计值在 android 中并不完美,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36861859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com