[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)
毕业小助手
- 粉丝: 2761
- 资源: 5583
最新资源
- Git操作图解(带VS2022集成Git工具)
- Android Studio Ladybug(android-studio-2024.2.1.12-mac-arm.zip.001)
- IKBC机械键盘固件.tar
- python源码教程,超级详细,附开发教程手册,python前端开发,入门级教程,第二章
- TCR+FC型svc无功补偿simulink仿真模型,一共两个仿真,如下图所示,两个其实大致内容差不多,只是封装不同,有详细资料,资料中有相关lunwen,有背景原理和分析,有使用说明,有建模仿真总结
- 蜘蛛分拣机器人工作站工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 字符串批处理工具(源程序+代码)
- PSAT( Power System Analysis Toolbox)最新说明书.zip
- HTML+JS获取地理位置(经纬度)
- 基于simulink的车辆坡度与质量识别模型,扩展卡尔曼滤波,估计曲线与实际误差合理
- HTML+JS教程-实现图片页面内拖拽、拖放
- python源码教程,超级详细,附开发教程手册,python前端开发,入门学习第三章
- 神经网络基本概念及其在人工智能领域的应用概述
- EEMD算法应用于信号去噪.zip
- 使用comsol仿真软件 利用双温方程模拟飞秒激光二维移动烧蚀材料 可看观察温度与应力分布 周期为10us,变形几何部分本人还在完善学习中 三维的也有 还有翻阅的lunwen文献一起打包
- Android Studio Ladybug(android-studio-2024.2.1.12-windows-exe.zip.002)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈