| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 卡尔曼滤波器 -> 正文阅读 |
|
[数据结构与算法]卡尔曼滤波器 |
卡尔曼滤波器的前言首先,介绍条件概率。 P ( o = 短 发 ∣ s = 男 生 ) = 0.8 P ( o = 长 发 ∣ s = 男 生 ) = 0.2 P ( o = 短 发 ∣ s = 女 生 ) = 0.1 P ( o = 长 发 ∣ s = 女 生 ) = 0.9 P(o=短发|s=男生)=0.8 \quad P(o=长发|s=男生)=0.2 \\ P(o=短发|s=女生)=0.1 \quad P(o=长发|s=女生)=0.9 P(o=短发∣s=男生)=0.8P(o=长发∣s=男生)=0.2P(o=短发∣s=女生)=0.1P(o=长发∣s=女生)=0.9 那么
P
(
s
=
女
生
∣
o
=
长
发
)
=
P
(
s
=
女
生
,
o
=
长
发
)
P
(
o
=
长
发
)
=
P
(
o
=
长
发
∣
s
=
女
生
)
P
(
s
=
女
生
)
P
(
o
=
长
发
∣
s
=
男
生
)
P
(
s
=
男
生
)
+
P
(
o
=
长
发
∣
s
=
女
生
)
P
(
s
=
女
生
)
=
0.9
×
0.4
0.2
×
0.6
+
0.9
×
0.4
=
0.75
P(s=女生|o=长发)=\frac{P(s=女生,o=长发)}{P(o=长发)}=\frac{P(o=长发|s=女生)P(s=女生)}{P(o=长发|s=男生)P(s=男生)+P(o=长发|s=女生)P(s=女生)}=\frac{0.9×0.4}{0.2×0.6+0.9×0.4}=0.75
P(s=女生∣o=长发)=P(o=长发)P(s=女生,o=长发)?=P(o=长发∣s=男生)P(s=男生)+P(o=长发∣s=女生)P(s=女生)P(o=长发∣s=女生)P(s=女生)?=0.2×0.6+0.9×0.40.9×0.4?=0.75 下面对这个例子作一些补充,其中 s s s为隐状态,意思是我们不能直观看到, o o o是观测量,是我们我可以直观看到的。就像上面的例子一样,同学的真实性别我们观测不到,是隐状态,但是我们可以根据背影看到是否为长发,是否为长发就是观测量。 下面给出卡尔曼滤波器的两个式子, 卡尔曼滤波器的推导首先,为了便于阅读,我把系统的状态方程和观测方程和系统中状态转移图放在这里,每个量的含义都在上文有解释,这里不再赘述。
y
k
=
H
x
k
+
v
k
y_{k}=Hx_{k}+v_{k}
yk?=Hxk?+vk? 然后,在时间 t = 2 t=2 t=2的时候,我们需要计算 P ( x 2 ∣ y 1 , y 2 ) P(x_{2}|y_{1},y_{2}) P(x2?∣y1?,y2?)。 根据数学归纳法,假设
t
=
k
?
1
t=k-1
t=k?1时,
P
(
x
k
?
1
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
~
N
n
(
μ
^
k
?
1
,
Σ
^
k
?
1
)
P(x_{k-1}|y_{1},y_{2},\dots,y_{k-1})\sim N_{n}(\hat{\mu}_{k-1},\hat{\Sigma}_{k-1})
P(xk?1?∣y1?,y2?,…,yk?1?)~Nn?(μ^?k?1?,Σ^k?1?),在
t
=
k
t=k
t=k时, 因为
P
(
x
k
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
~
N
n
(
A
μ
^
k
?
1
+
B
u
k
?
1
,
A
Σ
^
k
?
1
A
T
+
Q
)
P(x_{k}|y_{1},y_{2},\dots,y_{k-1})\sim N_{n}(A\hat{\mu}_{k-1}+Bu_{k-1},A\hat{\Sigma}_{k-1}A^{T}+Q)
P(xk?∣y1?,y2?,…,yk?1?)~Nn?(Aμ^?k?1?+Buk?1?,AΣ^k?1?AT+Q),且
y
k
=
H
x
k
+
v
k
y_{k}=Hx_{k}+v_{k}
yk?=Hxk?+vk?,则有 知道上面
P
(
x
k
,
y
k
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
P(x_{k},y_{k}|y_{1},y_{2},\dots,y_{k-1})
P(xk?,yk?∣y1?,y2?,…,yk?1?)这个概率分布函数后,如何求
P
(
x
k
∣
y
1
,
y
2
,
…
,
y
k
)
P(x_{k}|y_{1},y_{2},\dots,y_{k})
P(xk?∣y1?,y2?,…,yk?),下面给定引理: 对于
P
(
x
k
,
y
k
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
P(x_{k},y_{k}|y_{1},y_{2},\dots,y_{k-1})
P(xk?,yk?∣y1?,y2?,…,yk?1?),根据以上引理,可以得到 上式看起来有点繁琐,我们令 x ^ k  ̄ = A μ ^ k ? 1 + B u k ? 1 \hat{x}_{\overline{k}}=A\hat{\mu}_{k-1}+Bu_{k-1} x^k?=Aμ^?k?1?+Buk?1?, P k  ̄ = A Σ ^ k ? 1 A T + Q P_{\overline{k}}=A\hat{\Sigma}_{k-1}A^{T}+Q Pk?=AΣ^k?1?AT+Q, K k = P k  ̄ H T [ H P k  ̄ H T + R ] ? 1 K_{k}=P_{\overline{k}}H^{T}[HP_{\overline{k}}H^{T}+R]^{-1} Kk?=Pk?HT[HPk?HT+R]?1,则 P ( x k ∣ y 1 , y 2 , … , y k ) P(x_{k}|y_{1},y_{2},\dots,y_{k}) P(xk?∣y1?,y2?,…,yk?)可以被重写成 P ( x k ∣ y 1 , y 2 , … , y k ) ~ ( x ^ k  ̄ + K k ( y k ? H x ^ k  ̄ ) , P k  ̄ ? K k H P k  ̄ ) P(x_{k}|y_{1},y_{2},\dots,y_{k})\sim(\hat{x}_{\overline{k}}+K_{k}(y_{k}-H\hat{x}_{\overline{k}}),P_{\overline{k}}-K_{k}HP_{\overline{k}}) P(xk?∣y1?,y2?,…,yk?)~(x^k?+Kk?(yk??Hx^k?),Pk??Kk?HPk?) 此时,我们知道
P
(
x
k
∣
y
1
,
y
2
,
…
,
y
k
)
~
(
x
^
k
 ̄
+
K
k
(
y
k
?
H
x
^
k
 ̄
)
,
P
k
 ̄
?
K
k
H
P
k
 ̄
)
P(x_{k}|y_{1},y_{2},\dots,y_{k})\sim(\hat{x}_{\overline{k}}+K_{k}(y_{k}-H\hat{x}_{\overline{k}}),P_{\overline{k}}-K_{k}HP_{\overline{k}})
P(xk?∣y1?,y2?,…,yk?)~(x^k?+Kk?(yk??Hx^k?),Pk??Kk?HPk?),为了形式上和
P
(
x
k
?
1
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
~
N
n
(
μ
^
k
?
1
,
Σ
^
k
?
1
)
P(x_{k-1}|y_{1},y_{2},\dots,y_{k-1})\sim N_{n}(\hat{\mu}_{k-1},\hat{\Sigma}_{k-1})
P(xk?1?∣y1?,y2?,…,yk?1?)~Nn?(μ^?k?1?,Σ^k?1?)一致,我们记 Σ ^ k = P k  ̄ ? K k H P k  ̄ = ( I ? K k H ) P k  ̄ \hat{\Sigma}_{k}=P_{\overline{k}}-K_{k}HP_{\overline{k}}=(I-K_{k}H)P_{\overline{k}} Σ^k?=Pk??Kk?HPk?=(I?Kk?H)Pk? 那么有 P ( x k ∣ y 1 , y 2 , … , y k ) ~ N n ( μ ^ k , Σ ^ k ) P(x_{k}|y_{1},y_{2},\dots,y_{k})\sim N_{n}(\hat{\mu}_{k},\hat{\Sigma}_{k}) P(xk?∣y1?,y2?,…,yk?)~Nn?(μ^?k?,Σ^k?),所以在当前时间 t = k t=k t=k时,在发生了测量值 y 1 , y 2 , … , y k y_{1},y_{2},\dots,y_{k} y1?,y2?,…,yk?的情况下,系统真实状态 x k x_{k} xk?为 μ ^ k \hat{\mu}_{k} μ^?k?的概率最大,我们也说 μ ^ k \hat{\mu}_{k} μ^?k?是系统在 t = k t=k t=k时真实状态 x k x_{k} xk?的最优估计。 总结一下上面的推导,一共五个式子。首先,我们知道
t
=
k
?
1
t=k-1
t=k?1时系统的状态
x
k
?
1
x_{k-1}
xk?1?符合
P
(
x
k
?
1
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
~
N
n
(
μ
^
k
?
1
,
Σ
^
k
?
1
)
P(x_{k-1}|y_{1},y_{2},\dots,y_{k-1})\sim N_{n}(\hat{\mu}_{k-1},\hat{\Sigma}_{k-1})
P(xk?1?∣y1?,y2?,…,yk?1?)~Nn?(μ^?k?1?,Σ^k?1?),即系统在
t
=
k
?
1
t=k-1
t=k?1时的真实状态
x
k
?
1
x_{k-1}
xk?1?的最优估计是
μ
^
k
?
1
\hat{\mu}_{k-1}
μ^?k?1?。现在根据
P
(
x
k
?
1
∣
y
1
,
y
2
,
…
,
y
k
?
1
)
~
N
n
(
μ
^
k
?
1
,
Σ
^
k
?
1
)
P(x_{k-1}|y_{1},y_{2},\dots,y_{k-1})\sim N_{n}(\hat{\mu}_{k-1},\hat{\Sigma}_{k-1})
P(xk?1?∣y1?,y2?,…,yk?1?)~Nn?(μ^?k?1?,Σ^k?1?)可以推算出
t
=
k
t=k
t=k时系统的状态
x
k
x_{k}
xk?符合
P
(
x
k
?
1
∣
y
1
,
y
2
,
…
,
y
k
)
~
N
n
(
μ
^
k
,
Σ
^
k
)
P(x_{k-1}|y_{1},y_{2},\dots,y_{k})\sim N_{n}(\hat{\mu}_{k},\hat{\Sigma}_{k})
P(xk?1?∣y1?,y2?,…,yk?)~Nn?(μ^?k?,Σ^k?), P k  ̄ = A Σ ^ k ? 1 A T + Q P_{\overline{k}}=A\hat{\Sigma}_{k-1}A^{T}+Q Pk?=AΣ^k?1?AT+Q K k = P k  ̄ H T [ H P k  ̄ H T + R ] ? 1 K_{k}=P_{\overline{k}}H^{T}[HP_{\overline{k}}H^{T}+R]^{-1} Kk?=Pk?HT[HPk?HT+R]?1 μ ^ k = x ^ k  ̄ + K k ( y k ? H x ^ k  ̄ ) \hat{\mu}_{k}=\hat{x}_{\overline{k}}+K_{k}(y_{k}-H\hat{x}_{\overline{k}}) μ^?k?=x^k?+Kk?(yk??Hx^k?) Σ ^ k = P k  ̄ ? K k H P k  ̄ = ( I ? K k H ) P k  ̄ \hat{\Sigma}_{k}=P_{\overline{k}}-K_{k}HP_{\overline{k}}=(I-K_{k}H)P_{\overline{k}} Σ^k?=Pk??Kk?HPk?=(I?Kk?H)Pk? 谈点对卡尔曼滤波器的理解,卡尔曼滤波器的实际做的就是时刻
t
=
k
?
1
t=k-1
t=k?1,在系统观测量
y
1
,
y
2
,
…
,
y
k
?
1
y_{1},y_{2},\dots,y_{k-1}
y1?,y2?,…,yk?1?已知的情况下,根据系统状态
x
k
?
1
x_{k-1}
xk?1?的条件概率密度函数,来计算在
t
=
k
t=k
t=k时,且系统观测量
y
1
,
y
2
,
…
,
y
k
y_{1},y_{2},\dots,y_{k}
y1?,y2?,…,yk?已知的情况下,系统状态
x
k
x_{k}
xk?的条件概率密度函数。如下图所示, 卡尔曼滤波器的相关基础知识笔者是自动化专业的,关于卡尔曼滤波器中的状态方程和观测方程,我就没多说,默认读者都是会的,如果大家不是很清楚,推荐阅读刘豹的《现代控制理论》第一章。 关于卡尔曼滤波器最难的也就是概率推算,这一块基本上是多元正态分布的知识,仅仅学习过概率论的同学应该看着很费解,推荐阅读高惠璇的《应用多元统计分析》第二章,从中可以系统的了解多元正态分布的定义和相关性质,本文的推导使用的知识都能从中找到对应的推导和证明。 关于和卡尔曼滤波器的相关知识很接近的知识是HMM(Hidden Markov Model)和粒子滤波,推荐看B站的徐亦达老师的卡尔曼滤波器部分,HMM和粒子滤波部分,讲的真的很好(建立在读者有扎实的数学基础层面上) 卡尔曼滤波器的仿真下面放上MATLAB仿真程序,
上面程序中的
t
=
1
t=1
t=1时,
P
(
x
1
∣
y
1
)
~
N
3
(
μ
^
1
,
Σ
^
1
)
P(x_{1}|y_{1})\sim N_{3}(\hat{\mu}_{1},\hat{\Sigma}_{1})
P(x1?∣y1?)~N3?(μ^?1?,Σ^1?)中的
μ
^
1
\hat{\mu}_{1}
μ^?1?对应的是posterior_probability_u,
Σ
^
1
\hat{\Sigma}_{1}
Σ^1?对应的是posterior_probability_sigma,这是我们事前根据自己对系统的了解设置的,在上述程序中的系统的真实初始值
x
1
=
[
0
;
0
;
0
]
x_{1}=[0;0;0]
x1?=[0;0;0],当我们把posterior_probability_u初始化为
[
0
;
0
;
0
]
[0;0;0]
[0;0;0]时,对于系统状态的第一个分量
x
(
1
)
x^{(1)}
x(1)仿真结果如下图, 卡尔曼滤波器的总结卡尔曼滤波器利用了两条线,第一条线是系统的状态方程,状态方程保证了系统状态变量的一个基本物理变换过程,即使有系统噪声的存在,也可以根据系统的时刻 t = k ? 1 t=k-1 t=k?1的状态值得到 t = k t=k t=k时,系统状态值大概值(概率分布)。第二条线是我们有系统的传感器传回来的测量值(大多时候传感器的测量噪声比较大)。根据这两条线,来计算系统最可能的状态值(即最优估计 μ ^ k \hat{\mu}_{k} μ^?k?)。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年7日历 | -2025/7/4 14:13:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |