Android-跌倒检测算法

时间:2018-11-16 17:02:56

标签: java android algorithm math

我正在尝试使用智能手机的加速度计作为学校项目来构建用于跌倒检测的应用程序(因此我还有很多事情需要改进)。 我正在做一些研究,发现article经过一些计算,所以我试图将其转换为一些代码。

我向一位朋友寻求帮助,他向我解释了如何进行这些计算。但是考虑到我高中毕业已经有几年了,而我的数学也不是很好,所以我确定我做错了什么。 因此,我希望有人能帮我找出问题所在。

这是我需要的,我所拥有的,以防万一有人发现问题所在。

Feature SV (sum of the components of the acceleration vector)

T

Feature AV (angle variation)

return Math.abs(x) + Math.abs(y) + Math.abs(z);

Feature C A (change in angle)

    double anX = this.accelerometerValues.get(size -2).get(AccelerometerAxis.X) * this.accelerometerValues.get(size -1).get(AccelerometerAxis.X);
    double anY = this.accelerometerValues.get(size -2).get(AccelerometerAxis.Y) * this.accelerometerValues.get(size -1).get(AccelerometerAxis.Y);
    double anZ = this.accelerometerValues.get(size -2).get(AccelerometerAxis.Z) * this.accelerometerValues.get(size -1).get(AccelerometerAxis.Z);
    double an = anX + anY + anZ;

    double anX0 = Math.pow(this.accelerometerValues.get(size -2).get(AccelerometerAxis.X), 2);
    double anY0 = Math.pow(this.accelerometerValues.get(size -2).get(AccelerometerAxis.Y), 2);
    double anZ0 = Math.pow(this.accelerometerValues.get(size -2).get(AccelerometerAxis.Z), 2);
    double an0 = Math.sqrt(anX0 + anY0 + anZ0);

    double anX1 = Math.pow(this.accelerometerValues.get(size -1).get(AccelerometerAxis.X), 2);
    double anY1 = Math.pow(this.accelerometerValues.get(size -1).get(AccelerometerAxis.Y), 2);
    double anZ1 = Math.pow(this.accelerometerValues.get(size -1).get(AccelerometerAxis.Z), 2);
    double an1 = Math.sqrt(anX1 + anY1 + anZ1);

    double a = an / (an0 * an1);

    return Math.acos(a) * (180 / Math.PI);

我从第二次和第三次计算中获得了相同的回报,这似乎都不是预期的结果,但是我找不到我做错的事情。

这是该课程的代码,有关更多详细信息

    double aX = this.accelerometerValues.get(0).get(AccelerometerAxis.X) * this.accelerometerValues.get(3).get(AccelerometerAxis.X);
    double aY = this.accelerometerValues.get(0).get(AccelerometerAxis.Y) * this.accelerometerValues.get(3).get(AccelerometerAxis.Y);
    double aZ = this.accelerometerValues.get(0).get(AccelerometerAxis.Z) * this.accelerometerValues.get(3).get(AccelerometerAxis.Z);

    double a0 = aX + aY + aZ;

    double a1 = (Math.sqrt(Math.pow(aX, 2)) + Math.sqrt(Math.pow(aY, 2)) + Math.sqrt(Math.pow(aZ, 2)));

    return (Math.pow(Math.cos(a0 / a1), -1)) * (180 / Math.PI);

Ps:对不起,如果我做错了。英语不是我的母语,我有点生疏。

Ps2:对不起,我的变量名。

Ps3:该代码位于github上,如果您想看一下其余的代码,或者如果不想在这里发表回复,而想提出拉取请求或其他任何东西,请随时发问。< / p>

0 个答案:

没有答案