卡尔曼滤波器的推导(Intersection、边缘化概率Marginalization、条件概率Condition)

0. 摘要

这篇博客从高斯分布的角度出发, 比较形象地推导了卡尔曼滤波器; 文章首先从一维高斯分布出发, 然后是二维高斯分布, 先对高斯分布有个大体的了解; 然后使用了一些数学手段来得出高斯的联合概率分布由连部分组成: 条件概率和边缘概率;然后根据这些性质来主动地推出卡尔曼滤波器。
0.1. 卡尔曼滤波器的推导主要分为两步:预测和更新
卡尔曼滤波器对应到高斯概率分布角度也分为两步:Intersection和Marginalization;所以我们的出发点就是根据高斯分布这两个性质来得到卡尔曼滤波器;
0.2. 推导流程的主体是参照了Michael Andrew Shelley的硕士文章以及《概率机器人》中 3.2节卡尔曼滤波器的推导,自己感觉从这个角度来得到卡尔曼滤波器比较能表述清楚问题。

1. 高斯分布

​ 高斯分布也称作正态分布 X ∼ N ( μ , σ 2 ) \mathbf{X}\sim\mathcal{N}(\mu, \sigma^2) XN(μ,σ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πσ2 1exp(2σ2(xμ)2)
​需要注意的是:概率密度函数不同于概率,概率不能大于1,但是pdf可以大于1,需要保证概率密度函数曲线积分出来的面积是1;一元正态分布的pdf如下:
在这里插入图片描述

图1 一维标准正态分布

%一维高斯函数 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]
在这里插入图片描述

图2 多元高斯分布

%二维或多维高斯函数
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]=[ICA10I][A00ΔA][I0A1BI]
​ 其中 Δ A = D − C A − 1 B \Delta_{\mathbf{A}}=\mathbf{D}-\mathbf{C A}^{-1} \mathbf{B} ΔA=DCA1B称为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=[I0A1BI][A100ΔA1][ICA10I]

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(ab)和边际概率 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=[IB1C0I][(ACTB1C)100B1][I0CTB1I]
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(ACCB)1(aμabμb))=(2π)n/2(det(ΣX))1/21×exp(21(aμ~abμb)T(A~100B1)(aμ~abμb))=∼×exp(21((aμ~a)TA~1(aμ~a)+(bμb)TB1(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)TB1(bμb))

记: μ ~ a = μ a + C T B − 1 ( b − μ b ) \tilde{\mu}_a=\mu_a+C^{T} B^{-1} (b-\mu_b) μ~a=μa+CTB1(bμb) A ~ = A − C T B − 1 C \tilde{A}=A-C^{T} B^{-1} C A~=ACTB1C

1.4.3. 从上一节可以得到条件概率和边缘概率

条件概率: p ( a ∣ b ) = p ( a , b ) p ( b ) p(a|b)=\frac{p(a,b)}{p(b)} p(ab)=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}}) abN(μa+mean offset  CTB1(bμb),Acouriance offset CTB1C)
边缘概率: p(b)
b ∼ N ( μ b , B ) b\sim \mathcal{N}(\mu_b,B) bN(μb,B)
Intersection:

​ 如果我们知道x的分布 x ∼ N ( μ x , Σ x x ) x\sim \mathcal{N}(\mu_x,\Sigma_{xx}) xN(μ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}) bN(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} xxtN(μt,Σt)=Atxt1+Btut+ϵt
​ 其中 ϵ ∼ N ( 0 , Q ) \epsilon\sim\mathcal{N}(0,\mathcal{Q}) ϵN(0,Q)表示运动模型中固有的高斯噪声(因为模型不可能是完全正确无误的),这个噪声是个很小的未知值,会增加状态估计的不确定性;

​ 这里的 x \mathbf{x} x表示的是要估计的状态变量,A是状态转移矩阵,表示将 t − 1 t-1 t1时刻的状态转移到下一时刻 t t t u \mathbf{u} u是系统的输入(比如发送给机器人的移动指令)并且与状态 x t − 1 \mathbf{x}_{t-1} xt1独立无关,通过矩阵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} xt1的联合概率密度 p ( x t , x t − 1 ) p(\mathbf{x}_{t},\mathbf{x}_{t-1}) p(xt,xt1),然后再把 x t − 1 \mathbf{x}_{t-1} xt1 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(xt1,xt)=N([μt1Atμt1+Btut],[Σt1AtΣt1TΣt1AtTAtΣt1AtT+Qt])
​ 把 x t − 1 \mathbf{x}_{t-1} xt1 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} xtN(Atμt1+Btut,AtΣt1AtT+Qt)xtN(μ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Σt1AtT+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的高斯分布,比如下图所示,即使陀螺仪处于静止状态,也会受到高斯噪声的影响:
在这里插入图片描述

图3 iPhone 4S 处于静止状态下陀螺仪的输出

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(ab)
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}}) abN(μa+mean offset  CTB1(bμb),Acouriance offset CTB1C)

于是我们对2.2.2通过条件概率得到 p ( x t ∣ z t ) p(\mathbf{x}_t|\mathbf{z}_t) p(xtzt) (我们这里的对象是最优估计值 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} xtz=ztKtN(μt+Kt(ztCtμt),ΣtKtCΣ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=Atxt1+Btut+ϵt, where ϵtN(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μ~t1+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Σ~t1AtT+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 δtN(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(ztCtμ^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=Σ^tKtCtΣ^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');
卡尔曼滤波器是一种用于估计系统状态的递归滤波器,其目标是通过对测量数据进行加权对比,提供精确且稳定的状态估计。它通过结合系统模型和传感器测量信息,持续更新状态估计,并根据测量误差和系统动态特性进行自适应调整。卡尔曼滤波器推导主要基于以下步骤: 1. 建立系统模型:首先,需要确定系统的线性状态空间模型。该模型由状态转移方程和测量方程构成。状态转移方程描述系统状态如何从一个时刻传递到下一个时刻,而测量方程描述系统状态如何与传感器测量值相关联。 2. 初始化状态估计:在滤波器的开始阶段,需要初始化状态估计。通常根据系统的先验信息和观测数据进行初始化。 3. 预测步骤:通过状态转移方程和状态估计值进行状态预测。这一步骤利用系统动态特性进行状态的时间更新。 4. 更新步骤:将测量数据与预测的状态进行比较,通过卡尔曼增益将测量值的误差修正到状态估计中。卡尔曼增益由系统动态特性和测量误差共同决定。 5. 调整状态估计:根据测量值的精度和系统的动态特性,对估计的状态进行优化。这一步骤利用测量数据对状态进行空间更新。 6. 循环迭代:将预测步骤和更新步骤连续进行,实现持续的状态估计和滤波。 通过以上步骤,卡尔曼滤波器能够在实时的系统状态估计问题中提供准确和稳定的解决方案。它已广泛应用于各种领域,如航空航天、导航、机器人、自动驾驶等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值