✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab代码及仿真咨询内容点击👇
🔥 内容介绍
数据滤波是信号处理和控制系统领域中的一项关键技术,其目标是从包含噪声的观测数据中估计出信号的真实值,从而提高系统性能和可靠性。 在各种滤波算法中,卡尔曼滤波(Kalman Filter)凭借其在处理线性高斯系统中的卓越性能,被广泛应用于状态估计和预测领域。 然而,实际应用中,很多系统是非线性的,因此需要使用拓展卡尔曼滤波(Extended Kalman Filter, EKF)来处理非线性系统的数据滤波问题。 本文将深入探讨基于拓展卡尔曼滤波实现数据滤波的原理、步骤和应用,并分析其优缺点,以期为读者提供更全面的理解。
卡尔曼滤波与非线性系统的挑战
传统的卡尔曼滤波算法是为线性高斯系统设计的。 该算法假设系统状态的演化过程和观测过程都可以用线性方程来描述,并且噪声符合高斯分布。 在这种假设下,卡尔曼滤波能够提供最优的状态估计。 然而,现实世界中,很多系统都存在非线性特性,例如机器人运动学、目标跟踪、导航系统等。 这些系统的状态转移函数和观测函数通常是非线性的,直接应用传统的卡尔曼滤波算法会导致估计精度下降甚至发散。
非线性给卡尔曼滤波带来的主要挑战在于,它要求计算状态概率分布的均值和方差。 对于线性系统,状态的线性变换可以保证高斯分布的性质,即变换后的状态仍然服从高斯分布。 因此,可以通过简单的矩阵运算来计算状态概率分布的均值和方差。 但是,对于非线性系统,状态的非线性变换通常会破坏高斯分布的性质,导致无法准确计算状态概率分布的均值和方差。
拓展卡尔曼滤波(EKF)的原理与实现
拓展卡尔曼滤波(EKF)通过将非线性函数线性化来解决这个问题。 它的基本思想是:在当前估计的状态点附近,使用泰勒级数展开将非线性函数近似线性化,然后将线性化的结果应用到标准的卡尔曼滤波方程中。 具体来说,EKF将状态转移函数和观测函数进行一阶泰勒级数展开,并忽略高阶项,从而得到近似的线性化模型。
EKF的算法流程可以概括为以下几个步骤:
-
状态预测 (Predict): 利用状态转移函数预测当前时刻的状态。 设状态转移函数为 f(x, u, w),其中 x 是状态向量,u 是控制输入,w 是过程噪声。 状态预测方程为:
x<sub>k|k-1</sub> = f(x<sub>k-1|k-1</sub>, u<sub>k</sub>, 0)
其中,x<sub>k|k-1</sub> 表示基于 k-1 时刻的估计值对 k 时刻状态的预测,x<sub>k-1|k-1</sub> 表示 k-1 时刻的状态估计值。 过程噪声项 w 被设置为 0,因为这里只进行状态预测,并不考虑过程噪声的影响。
-
协方差预测 (Predict Covariance): 计算预测状态的协方差矩阵。 设过程噪声协方差矩阵为 Q,状态转移函数的雅可比矩阵为 F,协方差预测方程为:
P<sub>k|k-1</sub> = F<sub>k-1</sub> P<sub>k-1|k-1</sub> F<sub>k-1</sub><sup>T</sup> + Q<sub>k-1</sub>
其中,P<sub>k|k-1</sub> 是预测状态的协方差矩阵,P<sub>k-1|k-1</sub> 是 k-1 时刻的状态协方差矩阵,F<sub>k-1</sub> 是状态转移函数 f(x, u, w) 关于状态变量 x 在 x<sub>k-1|k-1</sub> 处的雅可比矩阵。
-
计算卡尔曼增益 (Calculate Kalman Gain): 根据观测模型和噪声的统计特性计算卡尔曼增益。 设观测函数为 h(x, v),其中 v 是观测噪声。 观测函数的雅可比矩阵为 H,观测噪声协方差矩阵为 R。 卡尔曼增益的计算方程为:
K<sub>k</sub> = P<sub>k|k-1</sub> H<sub>k</sub><sup>T</sup> (H<sub>k</sub> P<sub>k|k-1</sub> H<sub>k</sub><sup>T</sup> + R<sub>k</sub>)<sup>-1</sup>
其中,K<sub>k</sub> 是卡尔曼增益,H<sub>k</sub> 是观测函数 h(x, v) 关于状态变量 x 在 x<sub>k|k-1</sub> 处的雅可比矩阵。
-
状态更新 (Update): 利用观测值更新状态估计。 状态更新方程为:
x<sub>k|k</sub> = x<sub>k|k-1</sub> + K<sub>k</sub> (z<sub>k</sub> - h(x<sub>k|k-1</sub>, 0))
其中,x<sub>k|k</sub> 是 k 时刻的状态估计值,z<sub>k</sub> 是 k 时刻的观测值,h(x<sub>k|k-1</sub>, 0) 是对预测状态的观测预测,观测噪声项 v 被设置为 0。
-
协方差更新 (Update Covariance): 更新状态协方差矩阵。 协方差更新方程为:
P<sub>k|k</sub> = (I - K<sub>k</sub> H<sub>k</sub>) P<sub>k|k-1</sub>
其中,P<sub>k|k</sub> 是 k 时刻的状态协方差矩阵,I 是单位矩阵。
通过迭代执行以上步骤,EKF可以逐步逼近状态的真实值,实现数据滤波。
拓展卡尔曼滤波的应用
拓展卡尔曼滤波凭借其处理非线性系统的能力,在众多领域得到广泛应用。
-
目标跟踪: 目标跟踪是EKF的典型应用之一。 目标的状态通常包括位置、速度和加速度,而目标的运动模型通常是非线性的,例如匀速圆周运动或机动运动。 利用EKF可以根据雷达、摄像头等传感器提供的观测数据,估计目标的状态,实现对目标的跟踪。
-
机器人导航: 机器人导航需要估计机器人的位置和姿态。 机器人的运动模型和传感器模型,例如激光雷达和惯性测量单元(IMU),通常都是非线性的。 EKF可以融合来自不同传感器的信息,估计机器人的状态,实现自主导航。
-
姿态估计: 姿态估计是指估计物体在空间中的旋转角度。 姿态通常用欧拉角、四元数或旋转矩阵来表示,而这些表示方法本身就是非线性的。 利用EKF可以根据IMU或其他传感器的数据,估计物体的姿态,应用于航空航天、虚拟现实等领域。
-
金融预测: 某些金融模型的预测也涉及到非线性方程,EKF可用于对这些模型的参数进行估计,从而提高预测的准确性。
拓展卡尔曼滤波的优缺点分析
拓展卡尔曼滤波具有以下优点:
-
简单易实现: EKF基于卡尔曼滤波框架,原理相对简单,容易实现。
-
计算效率较高: EKF的计算复杂度主要取决于雅可比矩阵的计算,在状态维度不高的情况下,计算效率较高。
-
适用范围广: EKF可以应用于各种非线性系统,具有较强的通用性。
然而,EKF也存在一些缺点:
-
线性化误差: EKF通过泰勒级数展开将非线性函数线性化,忽略了高阶项,导致存在线性化误差。 当非线性程度较高时,线性化误差会显著降低估计精度,甚至导致滤波发散。
-
雅可比矩阵计算复杂: 计算雅可比矩阵需要进行偏导数运算,对于复杂的非线性函数,计算难度较大,容易出错。
-
对初始值敏感: EKF的性能对初始状态估计和协方差矩阵的选择比较敏感。 如果初始值设置不当,可能会导致滤波发散。
-
不保证最优性: 由于线性化误差的存在,EKF只能提供次优的估计结果,无法保证最优性。
总结与展望
拓展卡尔曼滤波(EKF)是一种广泛应用于非线性系统数据滤波的有效方法。 它通过将非线性函数线性化,将标准的卡尔曼滤波算法扩展到非线性系统。 EKF在目标跟踪、机器人导航、姿态估计等领域取得了广泛的应用。 然而,EKF也存在线性化误差、雅可比矩阵计算复杂等缺点。
为了克服EKF的缺点,研究人员提出了多种改进算法,例如无迹卡尔曼滤波(Unscented Kalman Filter, UKF) 和粒子滤波(Particle Filter)。 UKF通过无迹变换(Unscented Transformation) 逼近状态概率分布,避免了显式计算雅可比矩阵,提高了估计精度。 粒子滤波则采用蒙特卡洛方法,利用大量粒子来表示状态概率分布,能够处理高度非线性和非高斯系统。
未来的研究方向包括:
-
提高滤波精度: 研究更精确的非线性滤波算法,例如高斯求积卡尔曼滤波(Gauss-Hermite Kalman Filter, GHKF) 和高阶卡尔曼滤波等。
-
降低计算复杂度: 研究高效的雅可比矩阵计算方法,例如自动微分和伴随方法。
-
增强鲁棒性: 研究对初始值和模型误差不敏感的滤波算法,例如自适应卡尔曼滤波和鲁棒卡尔曼滤波。
-
与其他技术的融合: 将卡尔曼滤波与其他技术,例如深度学习和强化学习,融合起来,实现更智能的数据滤波和状态估计。
总之,拓展卡尔曼滤波作为一种经典的数据滤波算法,在处理非线性系统方面发挥着重要作用。 随着技术的不断发展,我们期待更加高效、精确和鲁棒的滤波算法出现,为各个领域的应用提供更强大的支持。
📣 部分代码
clear
% Define the system parameters
A = [0, 1; -.2, -.3];
B = [0.05; 1];
H = [1, 0];
Q = [0.1, 0; 0, 0.0001];
R = 0.5;
P = 10*eye(2);
x = [10; 0];
D = 0;
syst = ss(A,B,H,D);
T = 8e-3;
tspan = 0:T:50;
n_steps = length(tspan);
reshape(tspan,length(tspan),1);
uspan = ones(length(tspan),1);
% uspan = 1*sin(tspan*2*pi*1);
[y,~,x_real] = lsim(syst,uspan,tspan);
y = y + sqrt(R)*randn(n_steps,1);
syst_d = c2d(syst,T);
figure(1);clf(1);
step(syst); hold on;
step(syst_d);
% Create the Kalman Filter object
kf = KalmanFilter(syst_d.A, syst_d.B, syst_d.C, Q, R, P, x);
% kf = KalmanFilter(A, B, H, Q, R, P, x);
u_hist = zeros(length(n_steps),1);
y_est_hist = zeros(length(n_steps),1);
x_hist = zeros(length(n_steps),2);
x_hist(1,:) = x;
for i = 2:length(tspan)
% Predict and update steps
u = uspan(i); % Control input
z = y(i); % Measurement
kf = kf.predict(u);
kf = kf.update(z);
y_est = H*kf.x;
y_est_hist(i) = y_est;
x_hist(i,:) = reshape(kf.x,1,2);
end
% Display the state estimate
figure(2);clf(2);
plot(tspan,y,tspan,y_est_hist);
xlabel("Time (s)");
ylabel("System output");
legend("Measured","Estimated");
figure(3);clf(3);
subplot(2,1,1)
plot(tspan,x_real(:,1),tspan,x_hist(:,1));
xlabel("Time (s)");
ylabel("State x1 ");
legend("True","Estimated");
subplot(2,1,2)
plot(tspan,x_real(:,2),tspan,x_hist(:,2));
xlabel("Time (s)");
ylabel("State x2 ");
legend("True","Estimated");
⛳️ 运行结果
🔗 参考文献
[1] 宗长富,胡丹,杨肖,等.基于扩展Kalman滤波的汽车行驶状态估计[J].吉林大学学报:工学版, 2009.DOI:JournalArticle/5af2e697c095d718d8ffec91.
[2] 秦勤.雷达目标跟踪的卡尔曼滤波方法的研究[D].大连海事大学,2006.DOI:10.7666/d.y856073.
🎈 部分理论引用网络文献,若有侵权联系博主删除
👇 关注我领取海量matlab电子书和数学建模资料
🌿 往期回顾可以关注主页,点击搜索
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类
2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP
👇