gpt4 book ai didi

java - 应用低通滤波器

转载 作者:行者123 更新时间:2023-12-01 17:53:27 24 4
gpt4 key购买 nike

如何在我的代码中应用此低通滤波器函数:

static final float alpha = 0.05f;
public float[] lowPass(float[] output, float[] input)
{
output[0] = output[0] + alpha * (input[0] - output[0]);
output[1] = output[1] + alpha * (input[1] - output[1]);
output[2] = output[2] + alpha * (input[2] - output[2]);
return output;
}

读取加速度计并检测事故我希望 mLastX、mLastY 和 mLastZ 在经过低通滤波器滤波后保存加速度计读数

public void onSensorChanged(int sensor, float[] values)
{
if (sensor != SensorManager.SENSOR_ACCELEROMETER) return;
long now = System.currentTimeMillis();

if ((now - mLastForce) > SHAKE_TIMEOUT) {
mShakeCount = 0;
}

if ((now - mLastTime) > TIME_THRESHOLD) {
long diff = now - mLastTime;
float speed = Math.abs(values[SensorManager.DATA_X] + values[SensorManager.DATA_Y] + values[SensorManager.DATA_Z] - mLastX - mLastY - mLastZ) / diff * 10000;
if (speed > FORCE_THRESHOLD) {
if ((++mShakeCount >= SHAKE_COUNT) && (now - mLastShake > SHAKE_DURATION)) {
mLastShake = now;
mShakeCount = 0;
if (mShakeListener != null) {
mShakeListener.onShake();
}
}
mLastForce = now;
}
mLastTime = now;
mLastX = values[SensorManager.DATA_X];
mLastY = values[SensorManager.DATA_Y];
mLastZ = values[SensorManager.DATA_Z];

最佳答案

调用它时,第一个参数最初是数组 [mlastx, mlastY, mlastz],第二个参数是传感器的当前值。调用后,第一个数组的值将发生变化,变为 mlastX、mlastY 和 mlastZ。如果您只是将它们保存为数组而不是将它们保存在单独的变量中,那么实际上更容易编写代码。

现在这是否能达到你想要的效果是另一个问题了。这个函数中的数学有一些奇怪的东西,有些东西是完全错误的。例如,您将加速度相加并除以时间以获得“速度”。不,那会让你 SCSS 。速度需要你乘以时间。为了获得真正的 vector 幅度,您应该添加每个分量的速度差的平方,而不是绝对值。 10K 乘法没有意义,只需将阈值除以 10K,因为它不太可能在其他地方使用。这给人一种试图翻译一个他们并不真正理解的算法的感觉。

关于java - 应用低通滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60760029/

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