$ $
\ begin {align *}
\ mathbf {x} _ {k}&= \ left(\ begin {array} [c] {c} x_ {k} \\
\ dot {x} _ {k} \ end {array}
\ right)
\ end {align *}
$$
假设位置测量在时间$ k $是$ \ hat {x} _k $。然后,如果在时间$ k-1 $处的位置和速度分别为$ x_ {k-1} $和$ \ dot {x} _ {k-1} $,并且$ a $是在时间间隔$ k-1 $到$ k $,根据$ \ hat {x} $的度量,可以使用公式
$$
推导出$ a $的值\ hat {x} _k = x_ {k-1} + \ dot {x} _ {k-1} dt + \ frac {1} {2} a dt ^ 2
$$
这意味着在时间$ k $处,速度的度量$ \ hat {\ dot {x}} _ k $由
$$
\ hat {\ dot {x}} _ k = \ dot {x} _ {k-1} + dt = 2 \ frac {\ hat {x} _k-{x} _ {k-1}} {dt}-\ dot { x} _ {k-1}
$$
该方程右侧的所有数量(即$ \ hat {x} _k $,$ x_ {k-1} $和$ \ dot {x} _ {k-1} $)都是正态分布的随机变量具有已知的均值和标准差,因此测量向量的$ \ bf R $矩阵}} _ {k}&= \ left(\ begin {array} [c] {c} \ hat {x} _ {k} \\
\ hat {\ dot {x}} _ {k} \ end {array}
\ right)
\ end {align *}
$$
可以计算出来。这是将速度估算值引入流程的有效方法吗?
#1 楼
这是将速度估算引入流程的有效方法吗?
如果您正确选择状态,则速度估算是“免费”的。请参阅下面的信号模型推导(对于我们一直在研究的简单一维情况)。
信号模型,取2
所以,我们真的需要在继续前进之前就信号模型达成共识。从您的编辑看来,您的职位模型$ x_k $如下所示: &x_ {k} + \ dot {x} _ {k} \ Delta t + \ frac {1} {2} a(\ Delta t)^ 2 \\
\ dot {x} _ {k + 1}&=&\ dot {x} _ {k} + \ Delta t
\ end {array}
$$
如果我们的状态与以前一样:
$$
\ begin {align *}
\ mathbf {x} _ {k}&= \ left(\ begin {array} [c] {c} x_ {k} \\
\ dot {x} _ {k} \ end {array}
\ right)
\ end {align *}
$$
然后状态更新方程式就是:
$$
\ mathbf {x} _ {k + 1} =
\ left(\ begin {array} [c] {c} 1 \ \ \ Delta t \ \
0 \ \ 1 \ end {array}
\ right)
\ mathbf {x} _ {k} +
\ left(\ begin {array} [c] {c} \ frac {(\ Delta t)^ 2} {2} \\
\ Delta t \ end {array}
\ right)
a_k
$$
现在我们的$ a_k $是正态分布的加速度。 \ mathbf {H} $矩阵应该相同。
如果我在q中实现这一点4312079q(对不起,无法访问matlab),它看起来像: 。
// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];
x0 = [0;0];
sigma_a = 0.1;
Q = sigma_a^2;
R = 0.1;
N = 1000;
a = rand(1,N,"normal")*sigma_a;
x_truth(:,1) = x0;
for t=1:N,
x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end
所以我们有噪声测量$ y $,我们对其应用了卡尔曼滤波器,并使用相同的信号模型来生成我们确实应用了卡尔曼滤波器(有时是一个很大的假设!)。然后,下面的图显示了结果。
图1:$ y $和$ x_k $与时间的关系。
图表2:前几个样本的放大视图:
图表3:您在现实生活中从未获得过的东西,真实位置与位置状态估计。
图4:您在现实生活中也永远不会得到的东西,是真实速度与速度的状态估计。
情节5:状态协方差矩阵的范数(在现实生活中应该经常监视的东西!)。请注意,它很快从最初的很大的值变成很小的值,所以我只显示了前几个样本。
图6:图的图真实位置和速度与其估计值之间的误差。
如果研究位置测量精确的情况,则发现Kalman udpate方程产生位置和速度的精确结果。从数学上讲,很容易明白为什么。使用与Wikipedia文章相同的表示法,精确的度量意味着$ \ mathbf {z} _ {k + 1} = x_ {k + 1} $。如果假设初始位置和速度已知,因此$ \ mathbf {P} _k = 0 $,则$ \ mathbf {P} _ {k + 1} ^ {-} = \ mathbf {Q} $和卡尔曼增益矩阵$ \ mathbf {K} _ {k + 1} $由
$$
\ mathbf {K} _ {k + 1} = \ left(\ begin {array} [c] {c} 1 \\
2 / dt \ end {array}
\ right)
$$
这意味着卡尔曼更新过程产生
$$
\ begin {align *}
\ mathbf {\ hat {x}} _ {k + 1}&= \ mathbf {F} _ {k + 1} \ mathbf {x} _k + \ mathbf {K} _ {k + 1} \ left(\ mathbf {z} _ {k + 1}-\ mathbf {H} _ {k + 1} \ mathbf {F} _ {k + 1} \ mathbf {x} _k \ right)\\
&= \ left(\ begin {array} [c] {c} x_k + \ dot {x} _k dt \\
\ dot {x} _k \ end {array}
\ right)+
\ left(\ begin {array} [c] {c} 1 \\
2 / dt \ end {array}
\ right)
\ left(x_ {k + 1}-\ left(x_k + \ dot {x} _k dt \ right)
\ right )\\
&= \ left(\ begin {array} [c] {c} x_ {k + 1} \\
2 \ left(x_ {k + 1}-x_k \ right) / dt-\ dot {x} _k \ end {array}
\ right)
\ end {align *}
$$
如您所见,速度值完全由您提议用于速度估算的公式给出。因此,尽管您看不到任何用于速度的计算$(x_k-x_ {k-1})/ dt $,但实际上它毕竟隐藏在其中。
评论
$ \ begingroup $
感谢您到目前为止的所有帮助。我最初的问题确实包含一些误解,因此我试图重新调整重点,并试图回答您有关z_k的问题。
$ \ endgroup $
–随机
2013年4月26日14:57
$ \ begingroup $
感谢vm所做的所有努力:-)。您的工作促使我继续做一些数学运算,我一直坚持着您的答案,希望您不要介意。无论如何,我现在100%相信标准方法是好的,因为我毕竟可以在其中看到速度公式。再次感谢
$ \ endgroup $
–随机
13年4月27日在13:34
$ \ begingroup $
很高兴能够提供帮助!添加到答案没有问题。
$ \ endgroup $
– Peter K.♦
13年4月27日在15:16
评论
我没有仔细检查您的所有计算。但是,以Wikipedia为例,您似乎对它的结构有些困惑。您只对位置进行了测量是正确的。但是,使用了所谓的“恒定速度”模型。这意味着状态转换矩阵中的速度被认为是恒定的。使用过程噪声矩阵对速度的变化进行建模。因此,您固有地假设速度将以某些指定的协方差随机变化。令人惊讶的是,这通常效果很好。通常,以这种方式使用过程噪声高于最高状态变量导数的一个导数。例如,如果您在模型中包括了加速度,那么您的过程噪声中可能包含一个随机的混动分量。
@JasonR与Wikipedia模型(假定位置和速度之间的初始协方差为零)一起,速度估算始终是其初始值(如您所说的“恒定速度”模型)。但是,速度的方差会由于过程噪声而单调增长,并且没有任何可以降低它的测量方法。与仅对位置建模并假设速度恒定的模型相比,这有什么优势?
速度估计值的方差不应单调增加。过程噪声只是在状态转移方程中引入了随机成分,使您可以准确地表达系统状态如何随时间变化的不确定性。如果您不包括过程噪声,那么您的滤波器将真正输出恒定速度。那可能不是您想要的。
好吧,@ JasonR,如果您查看维基百科模型,您会发现速度的单调增加是它所带来的!