【MATLAB例程】 基于MVC(Max Versoria Criterion)的EKF和经典EKF的对比,例程用于二维平面的运动估计|附MATLAB代码下载链接

在这里插入图片描述

本文介绍一种基于Versoria函数改进的扩展卡尔曼滤波(MVC-EKF)算法,与传统EKF进行对比,重点解决传统EKF在非高斯噪声条件下的鲁棒性问题。

程序介绍

算法核心创新

本代码实现了一种基于Versoria函数改进的扩展卡尔曼滤波(MVC-EKF)算法,重点解决传统EKF在非高斯噪声条件下的鲁棒性问题。主要创新体现在:

  1. Versoria权重函数:通过指数型权重函数动态调整卡尔曼增益

  2. 协方差迭代机制:采用Joseph形式协方差更新公式

系统模型与公式推导

状态空间模型

  • 状态方程(线性运动模型):
    x k + 1 = [ 1 0 0 1 ] x k + [ 1 2 ] + w k x_{k+1} = \begin{bmatrix}1 & 0\\0 & 1\end{bmatrix}x_k + \begin{bmatrix}1\\2\end{bmatrix} + w_k xk+1=[1001]xk+[12]+wk
    过程噪声 w k ∼ N ( 0 , Q ) w_k \sim \mathcal{N}(0,Q) wkN(0,Q), Q = 0.01 I 2 Q=0.01I_2 Q=0.01I2

  • 观测方程(非线性测量模型):
    z k = [ x 1 , k x 2 , k ] + v k z_k = \begin{bmatrix}\sqrt{x_{1,k}} \\ \sqrt{x_{2,k}}\end{bmatrix} + v_k zk=[x1,k x2,k ]+vk
    观测噪声 v k ∼ N ( 0 , R ) + δ 10 < k < 30 ⋅ 10 v_k \sim \mathcal{N}(0,R) + \delta_{10<k<30}\cdot10 vkN(0,R)+δ10<k<3010, R = I 2 R=I_2 R=I2

雅可比矩阵计算

  • 状态转移雅可比矩阵:
    F k = ∂ f ∂ x = I 2 F_k = \frac{\partial f}{\partial x} = I_2 Fk=xf=I2

  • 观测雅可比矩阵(关键非线性处理):
    H k = [ x 1 x 1 2 + x 2 2 x 2 x 1 2 + x 2 2 1 2 x 1 1 2 x 2 ] H_k = \begin{bmatrix} \frac{x_1}{\sqrt{x_1^2+x_2^2}} & \frac{x_2}{\sqrt{x_1^2+x_2^2}} \\ \frac{1}{2\sqrt{x_1}} & \frac{1}{2\sqrt{x_2}} \end{bmatrix} Hk=[x12+x22 x12x1 1x12+x22 x22x2 1]
    该矩阵在预测状态 x ^ k − \hat{x}_k^- x^k处线性化,实现泰勒一阶近似

法实现流程

预测步骤(EKF与MVC-EKF共享)

x_pred = f(x_est(:,k-1))  
P_pred = F_k * P_est * F_k' + Q

更新步骤差异

步骤EKFMVC-EKF改进
卡尔曼增益 K k = P p r e d H k T S k − 1 K_k = P_pred H_k^T S_k^{-1} Kk=PpredHkTSk1 K k M V C = w M V C ⋅ K k K_k^{MVC} = w_{MVC} \cdot K_k KkMVC=wMVCKk
状态更新 x ^ k = x p r e d + K k ϵ k \hat{x}_k = x_pred + K_k \epsilon_k x^k=xpred+Kkϵk x ^ k M V C = x p r e d + K k M V C ϵ k \hat{x}_k^{MVC} = x_pred + K_k^{MVC} \epsilon_k x^kMVC=xpred+KkMVCϵk
协方差更新 P k = ( I − K k H k ) P p r e d P_k = (I - K_k H_k)P_pred Pk=(IKkHk)Ppred P k M V C = ( I − K k M V C H k ) P p r e d P_k^{MVC} = (I - K_k^{MVC} H_k)P_pred PkMVC=(IKkMVCHk)Ppred

性能评估方法

代码实现多维度误差分析,包含:

  1. 均方根误差(RMSE)
    RMSE = 1 N ∑ k = 1 N ( x ^ k − x k t r u e ) 2 \text{RMSE} = \sqrt{\frac{1}{N}\sum_{k=1}^N (\hat{x}_k - x_k^{true})^2} RMSE=N1k=1N(x^kxktrue)2
    该指标综合反映估计精度

  2. 极大值误差
    MAX_ERR = max ⁡ ( ∣ x ^ k − x k t r u e ∣ ) \text{MAX\_ERR} = \max(|\hat{x}_k - x_k^{true}|) MAX_ERR=max(x^kxktrue)
    反映算法在异常值冲击下的鲁棒性

  3. 标准差
    STD = 1 N − 1 ∑ k = 1 N ( e k − e ˉ ) 2 \text{STD} = \sqrt{\frac{1}{N-1}\sum_{k=1}^N (e_k - \bar{e})^2} STD=N11k=1N(ekeˉ)2
    表征误差分布的离散程度

运行结果

状态曲线:
在这里插入图片描述

状态误差曲线:
在这里插入图片描述

命令行的结果输出:
在这里插入图片描述

matlab代码

部分代码:

% 基于MVC的EKF,含有与EKF的对比二维平面的运动估计
% 核心:目标跟踪或状态估计,通过Versoria函数优化协方差更新
% 2025-06-21/Ver1

clear; clc; close all;
% rng(0);
%% 系统模型定义
% 定义状态空间模型
% x(k+1) = f(x(k)) + w(k)
% y(k) = h(x(k)) + v(k)

% 非线性状态转移函数
f = @(x) [x(1) + 1;  x(2) + 2];
% 非线性观测函数(距离与角度)
h = @(x) [x(1)^0.5; x(2)^0.5];

% f 和 h 的雅可比矩阵
F = @(x) [1, 0; 0, 1]; % f 的雅可比矩阵
% H = @(x) [2 * x(1), 1];     % h 的雅可比矩阵
H = @(x) [x(1)*(x(1)^2+x(2)^2)^(-0.5),x(2)*(x(1)^2+x(2)^2)^(-0.5);
    0.5*x(1)^(-0.5),0.5*x(2)^(-0.5)];     % h 的雅可比矩阵

完整代码下载链接:https://download.youkuaiyun.com/download/callmeup/91092933

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值