Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡尔曼滤波与内部状态变量的质量_Java_Android_Filter_Accelerometer_Kalman Filter - Fatal编程技术网

Java 卡尔曼滤波与内部状态变量的质量

Java 卡尔曼滤波与内部状态变量的质量,java,android,filter,accelerometer,kalman-filter,Java,Android,Filter,Accelerometer,Kalman Filter,我正在尝试为Android开发运动检测应用程序。该应用程序应该能够跟踪手机在太空中的运动,并将其映射到电脑屏幕上的运动。我使用三轴加速度计,由于数据非常嘈杂,我使用卡尔曼滤波器 内部状态为6分量向量[speed-x,speed-y,speed-z,accel-x,accel-y,accel-z],测量状态为3分量向量[accel-x,accel-y,accel-z] 过滤器在测量值上工作得很好,但速度仍然非常嘈杂 现在我想知道这是正常行为还是我做错了什么,因为我对卡尔曼滤波器的理解是非常基本的

我正在尝试为Android开发运动检测应用程序。该应用程序应该能够跟踪手机在太空中的运动,并将其映射到电脑屏幕上的运动。我使用三轴加速度计,由于数据非常嘈杂,我使用卡尔曼滤波器

内部状态为6分量向量[speed-x,speed-y,speed-z,accel-x,accel-y,accel-z],测量状态为3分量向量[accel-x,accel-y,accel-z]

过滤器在测量值上工作得很好,但速度仍然非常嘈杂

现在我想知道这是正常行为还是我做错了什么,因为我对卡尔曼滤波器的理解是非常基本的。我正在使用JKalman库和以下状态转移矩阵(dt为1/15,这是传感器刷新率的近似值)

双[][]A={ {1,0,0,dt,0,0}, {0,1,0,0,dt,0}, {0,0,1,0,0,dt}, { 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1 } };

我还建立了自己的协方差矩阵,协方差是根据测试数据计算出来的。这稍微改善了加速信号,但对速度没有影响

目前我能够实现stdvar

[00632041857 00607274545 00886326602]用于速度[x,y,z]

[00041689678 0004423822 00074808552]用于加速度[x,y,z]

我对加速信号很满意,我想我不能再提高它了,但我很想提高速度信号的质量。

无论你做什么,速度都会在几秒钟内变得非常不准确。虽然上面链接的答案是关于位置的,但速度也是如此。至于卡尔曼滤波器,请参见


你应该尝试使用GPS获取速度,或者(如果适用)在你的应用程序中使用手机的方向,放弃获取速度。

除了我刚刚在维基百科上读到的内容外,我对卡尔曼滤波器知之甚少,但我要说的是,你试图以不适当的方式应用卡尔曼滤波器

stdvar应该只表示噪声,但我怀疑这是您计算的。但更根本的是,我认为您缺少一些输入数据:当您有许多不同的输入时,例如加速计+GPS时,会使用卡尔曼滤波器

用Kalman或其他方法,你不可能读入嘈杂的加速计输入,并以某种方式获得一个平滑的精确轨迹。你总是可以对加速计数据进行某种时间平均,这会给你一个平滑的轨迹,但轨迹会与实际轨迹不同。(如果要尝试时间平均:例如,a_平滑{i}=0.6a{i}+0.3a{i-1}+0.1a{i-2}。)

还有一个更大的问题,加速度计的精度非常差,你可能无法用它做很多事情,特别是像@Ali所回答的那样跟踪位置


编辑:我在网上找到了一些与你的方程式相似的参考资料,但这些都是用于恒定加速度模型的卡尔曼滤波器,这显然不是你想要的。

好吧,实际上它工作得很好,唯一的问题是速度非常慢,速度非常快(如预期的那样)。我只需要相对运动(所以我知道它向左,向右,向上,向下)和可能的大小。对于速度问题,我使用的是速度转储(如果应用的加速度为零,则速度在每个时间步乘以系数<1.0,因此它会很快变为零)。无论如何,谢谢你的材料,我会尽快看一看,看起来很有趣。@Andraz有趣。所以你不需要精确的速度。那么你所描述的就行了。好吧,祝你好运!