[TOC]
# 基于Matlab实现扩展卡尔曼滤波(EKF)
使用混合型扩展卡尔曼滤波器估计双摆模型在噪声干扰下的两个旋转角度(使用四阶龙格库塔法求解微分方程)。
## 1. 状态空间方程
在现代控制中,使用状态空间方程描述系统
$$\left\{\begin{matrix}
\dot{x}=f(x,u)\\
y = h(x,u)
\end{matrix}\right.$$
由于实际物理模型运行时系统可能受到扰动,并且测量存在误差(干扰),真实的状态空间方程为:
$$\left\{\begin{matrix}
\dot{x}=f(x,u)+\omega\\
y = h(x,u)+\nu
\end{matrix}\right.$$
$\omega, \nu$均为噪声且相互独立,$\omega \sim N(0, Q), \nu \sim N(0, R)$。
我们无法对噪声进行准确建模,如果可以,那么将噪声作为已知项带入状态空间方程可以准确得到系统的状态。但是我们拥有噪声的统计学信息,卡尔曼滤波正是利用了这些信息,通过预测-校正两大步骤得到系统状态的**最优估计**。
卡尔曼滤波器分为线性卡尔曼滤波器(KF)、扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF),后两种用于非线性系统的状态估计。
根据状态方程和测量方程的形式分为标准型(两个方程均为连续或者离散形式)和混合型(一个为连续方程,另一个为离散方程)。
## 2. 线性卡尔曼滤波
### 2.1 标准型
#### 2.1.1 连续型
连续且含噪声的线性状态空间方程为:
$$\left\{\begin{matrix}
\dot{x}(t)=A(t)x(t)+B(t)u(t)+\omega(t)\\
y(t) = C(t)x(t)+D(t)u(t)+\nu(t)
\end{matrix}\right.$$
初始值:$\hat{x}_{0}=E(x_{0})=m_{x_0},P_{0}=E[(x_0-m_{x_0})(x_0-m_{x_0})^T]=P_{x_0}$
$$z(t)=y(t)-C(t)\hat{x}(t)\\
K(t)=P(t)C^T(t)R^{-1}\\
\dot{\hat{x}}(t)=A(t)\hat{x}(t)+B(t)u(t)+K(t)z(t)\\
\dot{P}(t)=A(t)P(t)+P(t)A^T+Q(t)-K(t)R(t)K^T(t)
$$
用龙格库塔法求解微分方程得$x(t)和P(t)$。
#### 2.1.2 离散型
离散化(前向欧拉或后向欧拉)得:
$$\left\{\begin{matrix}
x_{k+1}=A_{k}x_{k}+B_{k}u_{k}+\omega_{k}\\
y_{k} = C_{k}x_{k}+D_{k}u_{k}+\nu_{k}
\end{matrix}\right.$$
初始值:$\hat{x}_{0}=E(x_{0})=m_{x_0},P_{0}=E[(x_0-m_{x_0})(x_0-m_{x_0})^T]=P_{x_0}$
* 预测(先验估计):
不考虑噪声,直接计算预测值$\hat{x}_{k|k-1}$,
$$\hat{x}_{k|k-1}=A_{k}\hat{x}_{k-1|k-1}+B_{k}u_{k}
\\P_{k|k-1}=A_kP_{k-1|k-1}A_k^T+Q_k$$
$\omega_k \sim N(0, Q_k), \nu_k \sim N(0, R_k)$,$x_{k|k-1}$表利用k-1时刻的后验估计计算k时刻的先验估计,$x_{k|k}$表k时刻的后验估计,$x_{k-1|k-1}$表k-1时刻的后验估计。
* 校正(后验估计):
利用测量值$y_k$进行修正,
$$z_k=y_k-C_k\hat{x}_{k|k-1}\\
S_k=C_kP_{k|k-1}C_k^T+R_k\\
卡尔曼增益:K_k=P_{k|k-1}C_k^TS_k^{-1}\\
修正:\hat{x}_{k|k}=\hat{x}_{k|k-1}+K_kz_k\\
更新:P_{k|k}=(I-K_kC_k)P_{k|k-1}(I-K_kC_k)^T+K_kR_kK_k^T$$
### 2.2 混合型
混合型状态空间方程为:
$$\left\{\begin{matrix}
\dot{x}(t)=A(t)x(t)+B(t)u(t)+\omega(t)\\
y_k = C_kx_k+D_ku_k+\nu_k
\end{matrix}\right.$$
* 预测(先验估计):
$$\dot{\hat{x}}(t)=A(t)\hat{x}(t)+B(t)u(t),\hat{x}_{(t_k-1)}=\hat{x}_{k-1|k-1}\\
\dot{P}(t)=A(t)P(t)+P(t)A^T+Q(t)-K(t)R(t)K^T(t), P_{(t_k-1)}=P_{k-1|k-1}$$
求解微分方程得:
$$\hat{x}_{k|k-1}=\hat{x}(t_k)\\
P_{k|k-1}=P(t_k)$$
* 校正(后验估计):
利用测量值$y_k$进行修正,
$$z_k=y_k-C_k\hat{x}_{k|k-1}\\
S_k=C_kP_{k|k-1}C_k^T+R_k\\
卡尔曼增益:K_k=P_{k|k-1}C_k^TS_k^{-1}\\
修正:\hat{x}_{k|k}=\hat{x}_{k|k-1}+K_kz_k\\
更新:P_{k|k}=(I-K_kC_k)P_{k|k-1}(I-K_kC_k)^T+K_kR_kK_k^T$$
## 3. 扩展卡尔曼滤波
用于处理非线性系统,
$$\left\{\begin{matrix}
\dot{x}=f(x,u)\\
y = h(x,u)
\end{matrix}\right.$$
本质思想是在每一点对系统进行线性化(泰勒公式)
### 3.1 标准型
#### 3.1.1 离散型
$$\left\{\begin{matrix}
x_{k+1}=f(x_k,u_k)+\omega_k\\
y_k = h(x_k)+\nu_k
\end{matrix}\right.$$
输入信号一般不会与输出直接相关。
* 预测(先验估计):
不考虑噪声,直接计算预测值$\hat{x}_{k|k-1}$,
$$\hat{x}_{k|k-1}=f(\hat{x}_{k-1|k-1},u_k)\\
F_k = \frac{\partial f}{\partial x}|_{\hat{x}_{k-1|k-1},u_k},雅可比矩阵\\
P_{k|k-1}=F_kP_{k-1|k-1}F_k^T+Q_k$$
* 校正(后验估计):
利用测量值$y_k$进行修正,
$$z_k=y_k-h(x_{k|k-1})\\
H_k = \frac{\partial h}{\partial x}|_{\hat{x}_{k|k-1}},雅可比矩阵\\
S_k=H_kP_{k|k-1}H_k^T+R_k\\
卡尔曼增益:K_k=P_{k|k-1}H_k^TS_k^{-1}\\
修正:\hat{x}_{k|k}=\hat{x}_{k|k-1}+K_kz_k\\
更新:P_{k|k}=(I-K_kH_k)P_{k|k-1}(I-K_kH_k)^T+K_kR_kK_k^T$$
按定义,扩展卡尔曼滤波器得到的不是最优估计,因为对系统进行了近似线性化。
#### 3.1.2 连续型
$$F(t)=\frac{\partial f}{\partial x}|_{\hat{x}(t),u(t)}\\
H(t)=\frac{\partial h}{\partial x}|_{\hat{x}(t)}$$
### 3.2 混合型
$$F(t)=\frac{\partial f}{\partial x}|_{\hat{x}(t),u(t)}\\
H_k = \frac{\partial h}{\partial x}|_{\hat{x}_{k|k-1}}$$
## 4. 实验
### 4.1 被控系统
![模型](./imgs/1.jpg)
$\alpha$-杆相对竖直方向转过的角度,$\dot{\alpha}$-杆相对竖直方向转动的角加速度,这是一个非线性系统。
取状态向量,得状态方程:
![模型](./imgs/3.jpg)
属于混合型。
## 参考
1. [B站DR_CAN](https://www.bilibili.com/video/BV1ez4y1X7eR?spm_id_from=333.999.section.playall&vd_source=be5bd51fafff7d21180e251563899e5e)
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab关于卡尔曼滤波(EKF)实现代码.zip
共17个文件
m:6个
mat:6个
jpg:3个
需积分: 5 10 下载量 48 浏览量
2024-07-02
12:39:33
上传
评论
收藏 557KB ZIP 举报
温馨提示
matlab关于卡尔曼滤波(EKF)实现代码.zip 关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF) 关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip关于卡尔曼滤波(EKF)实现代码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现扩展卡尔曼滤波(EKF)源码.zip (17个子文件)
基于Matlab实现扩展卡尔曼滤波EKF源码超详细注释+项目说明
lab_ode_rk4_explicit_x_withnoise.m 409B
t.mat 2KB
compare_Jacobian.m 1KB
lab_ode_rk4_explicit.m 398B
X_est_analy_Fk.mat 24KB
main.m 10KB
P_nrm_digital_Fk.mat 6KB
2019 РЕАЛИЗАЦИЯ РАСШИРЕННОГО ФИЛЬТРА КАЛМАНА.pdf 331KB
P_nrm_analy_Fk.mat 6KB
X_rk4.mat 21KB
lab_ode_rk4_explicit_x.m 400B
imgs
2.jpg 48KB
1.jpg 80KB
3.jpg 37KB
lab_ode_rk4_explicit_p.m 351B
README.md 5KB
X_est_digital_Fk.mat 24KB
共 17 条
- 1
资源评论
yava_free
- 粉丝: 5437
- 资源: 2092
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5 薪酬结构统计分析表(依据基本信息自动生成).xlsx
- 4 员工工资表-部门薪酬分析.xlsx
- 8 公司工程部人事薪酬分析.xlsx
- 13 公司人力资源薪酬工资统计表.xlsx
- 7 薪酬市场数据统计分析.xlsx
- 9 公司员工薪酬统计分析表.xlsx
- 10 财务分析员工薪酬统计表.xlsx
- 12 财务报表员工薪酬结算.xlsx
- 11 财务报表员工薪酬分析.xlsx
- 15 薪资情况分析表.xlsx
- 14 薪资筹划财务分析表.xlsx
- 18 财务汇报部门历年薪酬统计图表.xlsx
- 16 月度工资支出数据汇总图表.xlsx
- 17财务报告年度工资统计图表1.xlsx
- 20 工资表-部分统计-图表展示.xlsx
- 21 公司部门工资情况汇报图表模板.xlsx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功