0. 摘要
这篇博客从高斯分布的角度出发, 比较形象地推导了卡尔曼滤波器; 文章首先从一维高斯分布出发, 然后是二维高斯分布, 先对高斯分布有个大体的了解; 然后使用了一些数学手段来得出高斯的联合概率分布由连部分组成: 条件概率和边缘概率;然后根据这些性质来主动地推出卡尔曼滤波器。
0.1. 卡尔曼滤波器的推导主要分为两步:预测和更新
;
卡尔曼滤波器对应到高斯概率分布角度也分为两步:Intersection和Marginalization
;所以我们的出发点就是根据高斯分布这两个性质来得到卡尔曼滤波器;
0.2. 推导流程的主体是参照了Michael Andrew Shelley的硕士文章以及《概率机器人》中 3.2节卡尔曼滤波器的推导,自己感觉从这个角度来得到卡尔曼滤波器比较能表述清楚问题。
1. 高斯分布
高斯分布也称作正态分布; X ∼ N ( μ , σ 2 ) \mathbf{X}\sim\mathcal{N}(\mu, \sigma^2) X∼N(μ,σ2)表示一个随机变量X服从期望值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2的正态分布。
1.1. 一元高斯分布
其概率密度函数(probability density function)为:
p
(
x
;
μ
,
σ
)
=
1
2
π
σ
2
⏟
normalization term
exp
(
−
(
x
−
μ
)
2
2
σ
2
)
p(x ; \mu, \sigma)=\underbrace{\frac{1}{\sqrt{2 \pi \sigma^{2}}}}_{\text {normalization term }} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)
p(x;μ,σ)=normalization term
2πσ21exp(−2σ2(x−μ)2)
需要注意的是:概率密度函数不同于概率,概率不能大于1,但是pdf可以大于1,需要保证概率密度函数曲线积分出来的面积是1;一元正态分布的pdf如下:
%一维高斯函数 a ~ N(mu, sigma)
mu = 0;
sigma = 1;
x = -6:0.1:6;
y = normpdf(x,mu,sigma);
plot(x,y);grid on;
xlabel('x');ylabel('pdf');
legend('标准正态分布');
1.2. 多元高斯分布
其概率密度函数为:
p
n
(
x
;
μ
,
Σ
)
=
1
(
2
π
)
n
∣
Σ
∣
exp
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
where
∣
Σ
∣
is the determinant of
Σ
\begin{aligned} p_{n}(\mathbf{x} ; \mu, \mathbf{\Sigma}) &=\frac{1}{\sqrt{(2 \pi)^{n}|\mathbf{\Sigma}|}} \exp \left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{T} \mathbf{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})\right) \\ & \text { where }|\mathbf{\Sigma}| \text { is the determinant of } \mathbf{\Sigma} \end{aligned}
pn(x;μ,Σ)=(2π)n∣Σ∣1exp(−21(x−μ)TΣ−1(x−μ)) where ∣Σ∣ is the determinant of Σ
二元正态分布的pdf如下,对应的协方差矩阵分别为:
Σ
=
[
1
0
0
1
]
;
Σ
=
[
1
0.3
0.3
1
]
;
Σ
=
[
1
0.9
0.9
1
]
\Sigma=\left[\begin{array}{ll}{1} & {0} \\ {0} & {1}\end{array}\right] ; \Sigma=\left[\begin{array}{cc}{1} & {0.3} \\ {0.3} & {1}\end{array}\right] ; \Sigma=\left[\begin{array}{cc}{1} & {0.9} \\ {0.9} & {1}\end{array}\right]
Σ=[1001];Σ=[10.30.31];Σ=[10.90.91]
%二维或多维高斯函数
mu = [-7 0];
sigma = [1 0;0 1];
[x y] = meshgrid(linspace(-10,10,100)', linspace(-10,10,100)');
X = [x(:) y(:)];
z = mvnpdf(X, mu, sigma);
surf(x, y, reshape(z, 100, 100));
xlabel('x');ylabel('y');zlabel('z');
hold on;
%%
mu = [-1 0];
sigma = [1 0.3; 0.3 1];
[x y] = meshgrid(linspace(-10,10,100)', linspace(-10,10,100)');
X = [x(:) y(:)];
z = mvnpdf(X, mu, sigma);
surf(x, y, reshape(z, 100, 100));
%%
mu = [5 0];
sigma = [1 0.9; 0.9 1];
[x y] = meshgrid(linspace(-10,10,100)', linspace(-10,10,100)');
X = [x(:) y(:)];
z = mvnpdf(X, mu, sigma);
surf(x, y, reshape(z, 100, 100));
总结:看完基本的高斯分布,下来就可以看高斯分布的性质了。
1.3. 舒尔补Schur
1.3.1. 首先介绍一下舒尔补Schur的概念,借助Schur可以方便地将矩阵M拆成3个简单矩阵相乘:
M
=
[
A
B
C
D
]
=
[
I
0
C
A
−
1
I
]
[
A
0
0
Δ
A
]
[
I
A
−
1
B
0
I
]
\mathbf{M}=\left[\begin{array}{ll}{\mathbf{A}} & {\mathbf{B}} \\ {\mathbf{C}} & {\mathbf{D}}\end{array}\right]=\left[\begin{array}{cc}{\mathbf{I}} & {\mathbf{0}} \\ {\mathbf{C A}^{-1}} & {\mathbf{I}}\end{array}\right]\left[\begin{array}{cc}{\mathbf{A}} & {\mathbf{0}} \\ {\mathbf{0}} & {\Delta_{\mathbf{A}}}\end{array}\right]\left[\begin{array}{cc}{\mathbf{I}} & {\mathbf{A}^{-1} \mathbf{B}} \\ {\mathbf{0}} & {\mathbf{I}}\end{array}\right]
M=[ACBD]=[ICA−10I][A00ΔA][I0A−1BI]
其中
Δ
A
=
D
−
C
A
−
1
B
\Delta_{\mathbf{A}}=\mathbf{D}-\mathbf{C A}^{-1} \mathbf{B}
ΔA=D−CA−1B称为A关于M的舒尔补。
1.3.2. 舒尔补也可以用来表示一个矩阵的逆:
[
A
B
C
D
]
−
1
=
[
I
−
A
−
1
B
0
I
]
[
A
−
1
0
0
Δ
A
−
1
]
[
I
0
−
C
A
−
1
I
]
\left[\begin{array}{cc}{\mathbf{A}} & {\mathbf{B}} \\ {\mathbf{C}} & {\mathbf{D}}\end{array}\right]^{-1}=\left[\begin{array}{cc}{\mathbf{I}} & {-\mathbf{A}^{-1} \mathbf{B}} \\ {\mathbf{0}} & {\mathbf{I}}\end{array}\right]\left[\begin{array}{cc}{\mathbf{A}^{-1}} & {\mathbf{0}} \\ {\mathbf{0}} & {\Delta_{\mathrm{A}}^{-1}}\end{array}\right]\left[\begin{array}{cc}{\mathbf{I}} & {\mathbf{0}} \\ {-\mathbf{C A}^{-1}} & {\mathbf{I}}\end{array}\right]
[ACBD]−1=[I0−A−1BI][A−100ΔA−1][I−CA−10I]
1.4. 条件概率和边缘概率
1.4.1. 舒尔补可以应用在多元高斯分布上,假设多元变量 X = [ a b ] \mathbf{X}=\left[\begin{array}{l}{a} \\ {b}\end{array}\right] X=[ab]服从联合高斯分布,设 X \mathbf{X} X的均值向量为 μ = ( μ a μ b ) \mathbf{\mu}=\left(\begin{matrix}\mu_a \\ \mu_b \end{matrix}\right) μ=(μaμb),协方差矩阵为 Σ = ( A C T C B ) \Sigma=\left ( \begin{matrix} A & C^T\\ C & B\end{matrix} \right ) Σ=(ACCTB)。我们感兴趣的就是得到条件概率 p ( a ∣ b ) p(a|b) p(a∣b)和边际概率 p ( b ) p(b) p(b);
1.4.2. 我们利用舒尔补来得到协方差矩阵的逆(也可以称为高斯过程里的“去相关”):
[
A
C
T
C
B
]
−
1
=
[
I
0
−
B
−
1
C
I
]
[
(
A
−
C
T
B
−
1
C
)
−
1
0
0
B
−
1
]
[
I
−
C
T
B
−
1
0
I
]
\left[\begin{array}{cc}{A} & {C^{T}} \\ {C} & {B}\end{array}\right]^{-1}=\left[\begin{array}{cc}{I} & {0} \\ {-B^{-1} C} & {I}\end{array}\right]\left[\begin{array}{cc}{\left(A-C^{T} B^{-1} C\right)^{-1}} & {0} \\ {0} & {B^{-1}}\end{array}\right]\left[\begin{array}{cc}{I} & {-C^{T} B^{-1}} \\ {0} & {I}\end{array}\right]
[ACCTB]−1=[I−B−1C0I][(A−CTB−1C)−100B−1][I0−CTB−1I]
则
p
a
,
b
(
a
,
b
)
p_{a,b}(a,b)
pa,b(a,b)的概率密度为:
p
a
,
b
(
a
,
b
)
=
1
(
2
π
)
n
/
2
(
d
e
t
(
Σ
X
)
)
1
/
2
×
exp
(
−
1
2
(
a
−
μ
a
b
−
μ
b
)
T
(
A
C
⊤
C
B
)
−
1
(
a
−
μ
a
b
−
μ
b
)
)
=
1
(
2
π
)
n
/
2
(
d
e
t
(
Σ
X
)
)
1
/
2
×
exp
(
−
1
2
(
a
−
μ
~
a
b
−
μ
b
)
T
(
A
~
−
1
0
0
B
−
1
)
(
a
−
μ
~
a
b
−
μ
b
)
)
=
∼
×
exp
(
−
1
2
(
(
a
−
μ
~
a
)
T
A
~
−
1
(
a
−
μ
~
a
)
+
(
b
−
μ
b
)
T
B
−
1
(
b
−
μ
b
)
)
)
=
1
(
2
π
)
n
1
/
2
(
d
e
t
(
A
~
)
)
1
/
2
exp
(
−
1
2
(
a
−
μ
~
a
)
T
A
~
−
1
(
a
−
μ
~
a
)
)
⏟
p(a|b)
×
1
(
2
π
)
n
2
/
2
(
d
e
t
(
B
)
)
1
/
2
exp
(
−
1
2
(
b
−
μ
b
)
T
B
−
1
(
b
−
μ
b
)
)
⏟
p(b)
\begin{aligned} {p_{a,b}(a, b)}&=\frac{1}{(2\pi)^{n/2}(det(\Sigma_{\mathbf{X}}))^{1/2}}\times \exp \left(-\frac{1}{2}\left(\begin{array}{l}{a-\mu_a} \\ {b-\mu_b}\end{array}\right)^{T}\left(\begin{array}{ll}{A} & {C^{\top}} \\ {C} & {B}\end{array}\right)^{-1}\left(\begin{array}{l}{a-\mu_a} \\ {b-\mu_b}\end{array}\right)\right) \\ &=\frac{1}{(2\pi)^{n/2}(det(\Sigma_{\mathbf{X}}))^{1/2}}\times \exp \left(-\frac{1}{2}\left(\begin{array}{c}{a-\tilde{\mu}_a} \\ {b-\mu_b}\end{array}\right)^{T}\left(\begin{array}{cc}{\tilde{A}^{-1}} & {0} \\ {0} & {B^{-1}}\end{array}\right)\left(\begin{array}{c}{a-\tilde{\mu}_a} \\ {b-\mu_b}\end{array}\right)\right) \\ &=\sim\times\exp \left(-\frac{1}{2} \left( (a-\tilde{\mu}_a)^T \tilde{A}^{-1}(a-\tilde{\mu}_a)+(b-\mu_b)^{T}B^{-1}(b-\mu_b)\right)\right) \\ &=\underbrace{\frac{1}{(2\pi)^{n_1/2}(det(\tilde{A}))^{1/2}}\exp \left(-\frac{1}{2}(a-\tilde{\mu}_a)^T \tilde{A}^{-1}(a-\tilde{\mu}_a) \right)}_{\text{p(a|b)}} \times\underbrace{\frac{1}{(2\pi)^{n_2/2}(det(B))^{1/2}}\exp \left(-\frac{1}{2}(b-\mu_b)^{T}B^{-1}(b-\mu_b) \right)}_{\text{p(b)}} \end{aligned}
pa,b(a,b)=(2π)n/2(det(ΣX))1/21×exp(−21(a−μab−μb)T(ACC⊤B)−1(a−μab−μb))=(2π)n/2(det(ΣX))1/21×exp(−21(a−μ~ab−μb)T(A~−100B−1)(a−μ~ab−μb))=∼×exp(−21((a−μ~a)TA~−1(a−μ~a)+(b−μb)TB−1(b−μb)))=p(a|b)
(2π)n1/2(det(A~))1/21exp(−21(a−μ~a)TA~−1(a−μ~a))×p(b)
(2π)n2/2(det(B))1/21exp(−21(b−μb)TB−1(b−μb))
记: μ ~ a = μ a + C T B − 1 ( b − μ b ) \tilde{\mu}_a=\mu_a+C^{T} B^{-1} (b-\mu_b) μ~a=μa+CTB−1(b−μb), A ~ = A − C T B − 1 C \tilde{A}=A-C^{T} B^{-1} C A~=A−CTB−1C
1.4.3. 从上一节可以得到条件概率和边缘概率
:
条件概率:
p
(
a
∣
b
)
=
p
(
a
,
b
)
p
(
b
)
p(a|b)=\frac{p(a,b)}{p(b)}
p(a∣b)=p(b)p(a,b)
a
∣
b
∼
N
(
μ
a
+
C
T
B
−
1
(
b
−
μ
b
)
⏟
mean offset
,
A
−
C
T
B
−
1
C
⏟
couriance offset
)
a|b \sim \mathcal{N}(\mu_{a}+\underbrace{C^{T} B^{-1} (b-\mu_b)}_{\text {mean offset }},A-\underbrace{C^{T}B^{-1}C}_{\text {couriance offset}})
a∣b∼N(μa+mean offset
CTB−1(b−μb),A−couriance offset
CTB−1C)
边缘概率: p(b)
b
∼
N
(
μ
b
,
B
)
b\sim \mathcal{N}(\mu_b,B)
b∼N(μb,B)
Intersection:
如果我们知道x的分布 x ∼ N ( μ x , Σ x x ) x\sim \mathcal{N}(\mu_x,\Sigma_{xx}) x∼N(μx,Σxx),y是x的线性组合: y = A x + b y=Ax+b y=Ax+b,其中A为常数, b ∼ N ( 0 , Q ) b\sim\mathcal{N}(0,\mathcal{Q}) b∼N(0,Q);
那么我们可以得到(x, y)的联合概率密度为:
p
(
[
x
y
]
)
=
N
(
[
μ
x
μ
y
]
,
[
Σ
x
x
Σ
x
y
Σ
y
x
Σ
y
y
]
)
=
N
(
[
μ
x
A
μ
x
+
b
]
,
[
Σ
x
x
Σ
x
x
A
T
A
Σ
x
x
A
Σ
x
x
A
T
+
Q
]
)
\begin{aligned} p\left(\left[\begin{array}{c}{x} \\ {y}\end{array}\right]\right) &=\mathcal{N}\left(\left[\begin{array}{c}{\mu_{x}} \\ {\mu_{y}}\end{array}\right],\left[\begin{array}{cc}{\Sigma_{x x}} & {\Sigma_{x y}} \\ {\Sigma_{y x}} & {\Sigma_{y y}}\end{array}\right]\right) \\ &=\mathcal{N}\left(\left[\begin{array}{c}{\mu_{x}} \\ {A \mu_{x}+b}\end{array}\right],\left[\begin{array}{cc}{\Sigma_{x x}} & {\Sigma_{x x} A^{T}} \\ {A \Sigma_{x x}} & {A \Sigma_{x x} A^{T}+Q}\end{array}\right]\right) \end{aligned}
p([xy])=N([μxμy],[ΣxxΣyxΣxyΣyy])=N([μxAμx+b],[ΣxxAΣxxΣxxATAΣxxAT+Q])
2.卡尔曼滤波推导
2.1. 运动模型
2.1.1. 想象一个例子,假如一个小车在水平路面上行走,受到某个力的作用,我们要对小车的状态进行估计(比如位置,速度),那么我们可以得到这个小车线性系统的运动模型(模型里的u是t还是t-1? 我这里和《概率机器人》保持了一致):
x
∼
N
(
μ
t
,
Σ
t
)
x
t
=
A
t
x
t
−
1
+
B
t
u
t
+
ϵ
t
\begin{aligned} \mathbf{x} & \sim \mathcal{N}\left(\boldsymbol{\mu}_{t}, \mathbf{\Sigma}_{t}\right) \\ \mathbf{x}_{t} &=\mathbf{A}_{t} \mathbf{x}_{t-1}+\mathbf{B}_{t} \mathbf{u}_{t}+\boldsymbol{\epsilon}_{t} \end{aligned}
xxt∼N(μt,Σt)=Atxt−1+Btut+ϵt
其中
ϵ
∼
N
(
0
,
Q
)
\epsilon\sim\mathcal{N}(0,\mathcal{Q})
ϵ∼N(0,Q)表示运动模型中固有的高斯噪声(因为模型不可能是完全正确无误的),这个噪声是个很小的未知值,会增加状态估计的不确定性;
这里的 x \mathbf{x} x表示的是要估计的状态变量,A是状态转移矩阵,表示将 t − 1 t-1 t−1时刻的状态转移到下一时刻 t t t ; u \mathbf{u} u是系统的输入(比如发送给机器人的移动指令)并且与状态 x t − 1 \mathbf{x}_{t-1} xt−1是独立无关,通过矩阵B与状态x建立了线性关系;
2.1.2. 接下来我们要做的就是通过这个线性系统来推出
x
t
\mathbf{x}_{t}
xt的概率分布
p
(
x
t
)
p(\mathbf{x}_{t})
p(xt),这个过程在卡尔曼滤波器中叫作Propagate;我们先可以通过Intersection性质推出
x
t
\mathbf{x}_{t}
xt和
x
t
−
1
\mathbf{x}_{t-1}
xt−1的联合概率密度
p
(
x
t
,
x
t
−
1
)
p(\mathbf{x}_{t},\mathbf{x}_{t-1})
p(xt,xt−1),然后再把
x
t
−
1
\mathbf{x}_{t-1}
xt−1 Marginalization掉,所以:
p
(
x
t
−
1
,
x
t
)
=
N
(
[
μ
t
−
1
A
t
μ
t
−
1
+
B
t
u
t
]
,
[
Σ
t
−
1
Σ
t
−
1
A
t
T
A
t
Σ
t
−
1
T
A
t
Σ
t
−
1
A
t
T
+
Q
t
]
)
p\left(\mathbf{x}_{t-1}, \mathbf{x}_{t}\right)=\mathcal{N}\left(\left[\begin{array}{c}{\mu_{t-1}} \\ {\mathbf{A}_{t} \mu_{t-1}+\mathbf{B}_{t} \mathbf{u}_{t}}\end{array}\right],\left[\begin{array}{cc}{\Sigma_{t-1}} & {\Sigma_{t-1} \mathbf{A}_{t}^{T}} \\ {\mathbf{A}_{t} \Sigma_{t-1}^{T}} & {\mathbf{A}_{t} \mathbf{\Sigma}_{t-1} \mathbf{A}_{t}^{T}+\mathbf{Q}_{t}}\end{array}\right]\right)
p(xt−1,xt)=N([μt−1Atμt−1+Btut],[Σt−1AtΣt−1TΣt−1AtTAtΣt−1AtT+Qt])
把
x
t
−
1
\mathbf{x}_{t-1}
xt−1 Marginalization掉,将得到
x
t
\mathbf{x}_{t}
xt的概率分布(我们这里的对象是预测值
x
t
\mathbf{x}_{t}
xt):
x
t
∼
N
(
A
t
μ
t
−
1
+
B
t
u
t
,
A
t
Σ
t
−
1
A
t
T
+
Q
t
)
x
t
∼
N
(
μ
t
,
Σ
t
)
\begin{array}{l}{\mathbf{x}_{t} \sim \mathcal{N}\left(\mathbf{A}_{t} \boldsymbol{\mu}_{t-1}+\mathbf{B}_{t} \mathbf{u}_{t}, \mathbf{A}_{t} \mathbf{\Sigma}_{t-1} \mathbf{A}_{t}^{T}+\mathbf{Q}_{t}\right)} \\ {\mathbf{x}_{t} \sim \mathcal{N}\left(\boldsymbol{\mu}_{t}, \mathbf{\Sigma}_{t}\right)}\end{array}
xt∼N(Atμt−1+Btut,AtΣt−1AtT+Qt)xt∼N(μt,Σt)
2.1.3. 通过Propagate我们可以得到
t
t
t 时刻
x
t
\mathbf{x}_{t}
xt 的协方差:
A
t
Σ
t
−
1
A
t
T
+
Q
t
\mathbf{A}_{t} \mathbf{\Sigma}_{t-1} \mathbf{A}_{t}^{T}+\mathbf{Q}_{t}
AtΣt−1AtT+Qt,可以发现由于状态转移矩阵A和运动模型误差
Q
\mathcal{Q}
Q的存在增加了系统的不确定性(如一开始的图所示:下一个时刻的高斯分布变得矮胖);随着时间的推移,如果只使用运动模型来估计系统状态x的输出,结果将越来越不可信。
2.1.4. 为了降低这种不确定性,只有运动模型是不够的,还需要引入测量值measure,这样就涉及到了测量模型,下来我们看一下,系统是如何通过测量值来降低由于 运动方程增加的不确定性 的。
2.2. 测量模型
2.2.1. 这一步我们要做的就是通过测量值
z
\mathbf{z}
z来更新
x
\mathbf{x}
x的概率分布,相当于向这个系统添加一个反馈信息,所以我们得到测量模型(也是一个线性模型)如下:
δ
∼
N
(
0
,
R
)
z
t
=
C
t
x
t
+
δ
t
\delta \sim \mathcal{N}(\mathbf{0},\mathbf{R}) \\ \mathbf{z}_t=\mathbf{C}_t\mathbf{x}_t+\delta_t
δ∼N(0,R)zt=Ctxt+δt
由于在实际情况中,测量值
z
\mathbf{z}
z 往往并不会和待估计的状态
x
\mathbf{x}
x 的属性一样,所以还需要一个转换矩阵
C
\mathbf{C}
C 来表示两者之间的关系,比如量纲、状态
x
\mathbf{x}
x 中的某一个信息是否可以被传感器直接测量或间接测量到等等情形。
其中
δ
\delta
δ表示测量噪声,服从均值为
0
\mathbf{0}
0,协方差为
R
\mathbf{R}
R的高斯分布,比如下图所示,即使陀螺仪处于静止状态,也会受到高斯噪声的影响:
2.2.2. 下来我们根据上面的线性测量模型通过Intersection得到
x
t
,
z
t
\mathbf{x}_t,\mathbf{z}_t
xt,zt的联合概率分布
p
(
x
t
,
z
t
)
p(\mathbf{x}_t,\mathbf{z}_t)
p(xt,zt):
p
(
x
t
,
z
t
)
=
N
(
[
μ
t
C
t
μ
t
]
,
[
Σ
t
Σ
t
C
t
T
C
t
Σ
t
T
C
t
Σ
t
C
t
T
+
R
t
]
)
p\left(\mathbf{x}_{t}, \mathbf{z}_{t}\right)=\mathcal{N}\left(\left[\begin{array}{c}{\mu_{t}} \\ {\mathbf{C}_{t} \mu_{t}}\end{array}\right],\left[\begin{array}{cc}{\Sigma_{t}} & {\Sigma_{t} \mathbf{C}_{t}^{T}} \\ {\mathbf{C}_{t} \Sigma_{t}^{T}} & {\mathbf{C}_{t} \Sigma_{t} \mathbf{C}_{t}^{T}+\mathbf{R}_{t}}\end{array}\right]\right)
p(xt,zt)=N([μtCtμt],[ΣtCtΣtTΣtCtTCtΣtCtT+Rt])
2.2.3. 现在我们得到了两个高斯分布:一个是运动模型得到的预测值高斯分布,另一个是测量值的高斯分布;
2.2.4. 现在我们使用高斯分布的条件概率来给出最优估计的高斯分布(也就是得到两个高斯分布交叉的区域):
已知:假设多元变量 X = [ a b ] \mathbf{X}=\left[\begin{array}{l}{a} \\ {b}\end{array}\right] X=[ab]服从联合高斯分布,设 X \mathbf{X} X的均值向量为 μ = ( μ a μ b ) \mathbf{\mu}=\left(\begin{matrix}\mu_a \\ \mu_b \end{matrix}\right) μ=(μaμb),协方差矩阵为 Σ = ( A C T C B ) \Sigma=\left ( \begin{matrix}A & C^T\\ C & B\end{matrix} \right ) Σ=(ACCTB),得到条件概率 p ( a ∣ b ) p(a|b) p(a∣b):
a ∣ b ∼ N ( μ a + C T B − 1 ( b − μ b ) ⏟ mean offset , A − C T B − 1 C ⏟ couriance offset ) \color{blue}a|b \sim \mathcal{N}(\mu_{a}+\underbrace{C^{T} B^{-1} (b-\mu_b)}_{\text {mean offset }},A-\underbrace{C^{T}B^{-1}C}_{\text {couriance offset}}) a∣b∼N(μa+mean offset CTB−1(b−μb),A−couriance offset CTB−1C)
于是我们对2.2.2通过条件概率得到
p
(
x
t
∣
z
t
)
p(\mathbf{x}_t|\mathbf{z}_t)
p(xt∣zt) (我们这里的对象是最优估计值
x
~
t
\tilde{\mathbf{x}}_t
x~t, 这个条件概率可以对应于贝叶斯估计的后验概率, 这一步也就是要最大化后验概率MAP):
x
t
∣
z
=
z
t
∼
N
(
μ
t
+
K
t
(
z
t
−
C
t
μ
t
)
,
Σ
t
−
K
t
C
Σ
t
)
K
t
=
Σ
t
C
t
T
(
C
t
Σ
t
C
t
T
+
R
t
)
−
1
\begin{aligned}\left.\mathbf{x}_{t}\right|_{z=z_{t}} & \sim \mathcal{N}\left(\mathbf{\mu}_{t}+\mathbf{K}_{t}\left(\mathbf{z}_{t}-\mathbf{C}_{t} \boldsymbol{\mu}_{t}\right), \mathbf{\Sigma}_{t}-\mathbf{K}_{t} \mathbf{C} \mathbf{\Sigma}_{t}\right) \\ \mathbf{K}_{t} &=\mathbf{\Sigma}_{t} \mathbf{C}_{t}^{T}\left(\mathbf{C}_{t} \mathbf{\Sigma}_{t} \mathbf{C}_{t}^{T}+\mathbf{R}_{t}\right)^{-1} \end{aligned}
xt∣z=ztKt∼N(μt+Kt(zt−Ctμt),Σt−KtCΣt)=ΣtCtT(CtΣtCtT+Rt)−1
其中
K
t
\mathbf{K}_t
Kt 是用来调节模型预测值和测量值之间的权重系数,并且将测量向量
z
\mathbf{z}
z 的属性调整为待估计状态向量
x
\mathbf{x}
x 的属性。
视觉SLAM十四讲中关于最大似然概率的理解MLE:
直观地说,似然是指“在现在的位姿下,可能产生怎样的观测数据”。由于我们知道观测数据,所以最大似然估计,可以理解成:“在什么样的状态下,最可能产生现在观测到的数据” 。这就是最大似然估计的直观意义。
2.3. 总结
由于均值 μ \mu μ处的概率是最大的,下面我们使用它来表示状态值 x \mathbf{x} x ;
2.3.1. 由运动模型得到状态预测值 ^ \hat{} ^ 的均值和协方差,对应于卡尔曼滤波的预测阶段Prediction:
系统运动方程为: x t = A t x t − 1 + B t u t + ϵ t , where ϵ t ∼ N ( 0 , Q t ) \mathbf{x}_{t}=\mathbf{A}_{t} \mathbf{x}_{t-1}+\mathbf{B}_{t} \mathbf{u}_{t}+\boldsymbol{\epsilon}_{t}, \text { where } \boldsymbol{\epsilon}_{t} \sim \mathcal{N}\left(\mathbf{0}, \mathbf{Q}_{t}\right) xt=Atxt−1+Btut+ϵt, where ϵt∼N(0,Qt)
- 模型预测值的均值: μ ^ t = A t μ ~ t − 1 + B t u t \hat{\mathbf{\mu}}_{t}=\mathbf{A}_{t} \tilde{\mathbf{\mu}}_{t-1}+\mathbf{B}_{t} \mathbf{u}_{t} μ^t=Atμ~t−1+Btut
- 模型预测值的协方差: Σ ^ t = A t Σ ~ t − 1 A t T + Q t \hat{\boldsymbol{\Sigma}}_{t}=\mathbf{A}_{t} \tilde{\boldsymbol{\Sigma}}_{t-1}\mathbf{A}_{t}^{T}+\mathbf{Q}_{t} Σ^t=AtΣ~t−1AtT+Qt
2.3.2. 由测量模型得到最优输出值 ∼ \sim ∼的均值和协方差,对应于卡尔曼滤波的更新阶段Updated:
系统测量方程为: z t = C t x t + δ t , where δ t ∼ N ( 0 , R t ) \mathbf{z}_{t}=\mathbf{C}_{t} \mathbf{x}_{t}+\delta_{t}, \text { where } \delta_{t} \sim \mathcal{N}\left(\mathbf{0}, \mathbf{R}_{t}\right) zt=Ctxt+δt, where δt∼N(0,Rt)
- 权重系数: K t = Σ ^ t C t T ( C t Σ ^ t C t T + R t ) − 1 \mathbf{K}_{t}=\hat{\mathbf{\Sigma}}_{t} \mathbf{C}_{t}^{T}\left(\mathbf{C}_{t} \hat{\mathbf{\Sigma}}_{t} \mathbf{C}_{t}^{T}+\mathbf{R}_{t}\right)^{-1} Kt=Σ^tCtT(CtΣ^tCtT+Rt)−1
- 最优输出值的均值: μ ~ t = μ ^ t + K t ( z t − C t μ ^ t ) \tilde{\mathbf{\mu}}_{t}=\hat{\mathbf{\mu}}_{t}+\mathbf{K}_{t}\left(\mathbf{z}_{t}-\mathbf{C}_{t} \hat{\mathbf{\mu}}_{t}\right) μ~t=μ^t+Kt(zt−Ctμ^t)
- 最优输出值的协方差: Σ ~ t = Σ ^ t − K t C t Σ ^ t \tilde{\boldsymbol{\Sigma}}_{t}=\hat{\boldsymbol{\Sigma}}_{t}-\mathbf{K}_{t} \mathbf{C}_{t} \hat{\boldsymbol{\Sigma}}_{t} Σ~t=Σ^t−KtCtΣ^t
3. 参考资料
[1] https://www.cnblogs.com/DemonHunter/p/10740124.html
[2] Master’s thesis of Michael Andrew Shelley: Monocular Visual Inertial Odometry on a Mobile Device
[3] How a Kalman filter works, in pictures
[4] 频谱和功率谱的区别
4. MATLAB常用噪声函数
4.1. rand
: Uniformly distributed random numbers, 是0-1的均匀随机分布的噪声(FFT结果会集中在最左侧);
4.2. randn
: 是均值为0方差为1的标准正态分布的高斯白噪声(FFT结果是每个频率处都有)。
4.3. wgn
: Generate white Gaussian noise, 传入的参数dBW表示的是var的大小.
v a r ( d a t a ) = 1 0 d B W 10 var(data) = 10^\frac{dBW}{10} var(data)=1010dBW
高斯白噪声中的高斯是指概率分布是正态函数.
高斯白噪声的功率谱密度服从均匀分布,幅度分布服从高斯分布(也就是说高斯白噪声的频谱是布满整个频域的), 其功率谱密度频谱图和噪声幅值分布图的图片如下:
白噪声(white noise)是指功率谱密度在整个频域内是常数的噪声。
白噪声或白杂讯,是一种功率谱密度为常数的随机信号。换句话说,此信号在各个频段上的功率谱密度是一样的,由于白光是由各种频率(颜色)的单色光混合而成,因而此信号的这种具有平坦功率谱的性质被称作是“白色的”,此信号也因此被称作白噪声。
4.4. 代码如下:
clear
clc
close all
%% Create rand data
dotNumber = 102400;
N = 1:dotNumber;
data_rand = rand([1, dotNumber]);
var_data_rand = var(data_rand);
mean_data_rand = mean(data_rand);
figure(1)
subplot(3,1,1)
plot(N, data_rand);title('data rand');
subplot(3,1,2)
histogram(data_rand);title('Amplitude Distribution');
subplot(3,1,3)
plot(N, abs(fft(data_rand)));title('Spectrum');
%% Create randn data
data_randn = randn([1, dotNumber]);
var_data_randn = var(data_randn);
mean_data_randn = mean(data_randn);
figure(2)
subplot(3,1,1)
plot(N, data_randn);title('data randn');
subplot(3,1,2)
histogram(data_randn);title('Amplitude Distribution');
subplot(3,1,3)
plot(N, abs(fft(data_randn)));title('Spectrum');
%% Create wgn data
data_wgn = wgn(1, dotNumber, -10);
var_data_wgn = var(data_wgn);
mean_data_wgn = mean(data_wgn);
figure(3)
subplot(3,1,1)
plot(N, data_wgn);title('data wgn');
subplot(3,1,2)
histogram(data_wgn);title('Amplitude Distribution');
subplot(3,1,3)
plot(N, abs(fft(data_wgn)));title('Spectrum');