tin*_*y_m 14 javascript device-orientation kalman-filter virtual-reality
我正在尝试平滑我从deviceOrientation API获取的数据,以便在浏览器中创建Google Cardboard应用程序.
我正在将加速度计数据直接输入到ThreeJs相机旋转中,但是我们在信号上产生了很多噪音,导致视图抖动.
有人建议使用卡尔曼滤波器作为处理平滑信号处理噪声的最佳方法,我在gitHub上找到了这个简单的Javascript库
https://github.com/itamarwe/kalman
然而它在文档上真的很轻松.
我知道我需要通过提供Vector和3矩阵作为参数来创建一个Kalman模型,然后再次使用矢量和矩阵作为时间范围内的参数来更新模型.
我也理解卡尔曼滤波器方程有几个不同的部分:当前估计位置,卡尔曼增益值,来自方向API的当前读数和先前估计的位置.
我可以看到3D空间中的一个点可以被描述为一个Vector,因此任何位置值,例如估计位置或当前读数都可以是Vector.
我不明白的是这些部分如何被翻译成矩阵以形成Javascript库的参数.
Ita*_*Ita 14
好吧,几年前我写了一篇令人厌恶的文档库.如果有兴趣,我肯定愿意升级它,改进文档并编写测试.
让我简要解释一下所有不同的矩阵和向量是什么以及它们应该如何推导出来:
x - 这是您尝试估算的矢量.在你的情况下,它可能是3个角加速度.
P - 是估计的协方差矩阵,意味着估计的不确定性.还在卡尔曼滤波器的每个步骤中估计它x.
F- 描述如何X根据模型进行开发.通常,模型是x[k] = Fx[k-1]+w[k].在您的情况下,F如果您希望角加速度相对平滑,则可能是单位矩阵,如果您希望角加速度完全不可预测,则可能是零矩阵.在任何情况下,w都表示您希望加速度从一步到另一步变化多少.
w - 描述过程噪声,即模型与"完美"模型的差异程度.它被定义为具有协方差矩阵的零均值多元正态分布Q.
上面的所有变量都定义了您的模型,这意味着您要估算的内容.在下一部分中,我们将讨论观察模型- 您为了估计模型而测量的内容.
z - 这是你衡量的.在您的情况下,由于您使用的是加速度计,因此您正在测量您正在估算的内容.这将是角加速度.
H - 描述您的模型和观察之间的关系.z[k]=H[k]x[k]+v[k].在您的情况下,它是单位矩阵.
v - 是测量噪声,并且假设为具有协方差R [k]的零均值高斯白噪声.在这里,您需要测量加速度计的噪声程度,并计算噪声协方差矩阵.
总而言之,使用卡尔曼滤波器的步骤:
x[0]和P[0]- 模型的初始状态,以及初步估计您知道的准确程度x[0].F根据您的模型确定它是如何逐步发展的.Q根据模型的随机性确定.H根据您测量的内容与您想要估计的内容(模型和测量之间)之间的关系确定.R根据测量噪声确定.您的测量结果有多嘈杂.然后,对于每个新观察,您可以使用卡尔曼滤波器更新模型状态估计,并且具有模型状态(x[k])的最佳估计,以及该估计的准确性(P[k]).
| 归档时间: |
|
| 查看次数: |
8438 次 |
| 最近记录: |