一文详解自适应无迹卡尔曼滤波(AUKF)

算法背景

卡尔曼滤波,包括其非线性改良的变种,比如扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF),都是基于对过程噪声和观测噪声的假设。这些假设包括噪声的统计性质,比如均值、协方差等。

关于卡尔曼滤波两处噪声的来源及影响,在我之前的文章中已经有所提及:

一文详解卡尔曼滤波两处噪声的来源及影响https://blog.csdn.net/weixin_45766278/article/details/128426596

然而在很多实际应用中,过程噪声和观测噪声的统计特性是未知的,甚至可能是随时间变化的。因此固定的过程噪声协方差Q和观测噪声协方差R可能并不适合所有情况。

为了解决这个问题,自适应卡尔曼滤波,也即Adaptive Unscented Kalman Filter (AUKF)被提出。AUKF尝试动态地调整过程噪声协方差Q和观测噪声协方差R,使得滤波器能够适应系统的实际行为。

算法概述及核心运算式

AUKF的主要步骤与标准的UKF类似,包括初始化、Sigma点选择、预测和更新

只是AUKF在每次更新后,会进行一次调整步骤,通过观察预测误差来动态地更新过程噪声协方差Q和观测噪声协方差R。具体的更新规则可能因具体的应用而不同,但核心思想是,如果预测的协方差比实际的大,那么就需要减小噪声协方差,反之则需要增大。

以下是一个动态调整Q和R的基本公式:

eq?Q_i%20%3D%20Q_i%20%5Ctimes%20%5Cmax%5Cleft%281%2C%20%5Cfrac%7B%7CP_i%20-%20P_%7Bi_%7B%5Ctext%7Bprev%7D%7D%7D%7C%7D%7BQ_i%7D%5Cright%29%20%5C%5C%20R_i%20%3D%20R_i%20%5Ctimes%20%5Cmax%5Cleft%281%2C%20%5Cfrac%7B%7Cy_i%20-%20%5Chat%7By%7D_i%7C%7D%7BR_i%7D%5Cright%29

其中:

  • eq?%24Q_i%24eq?%24R_i%24 是过程噪声协方差矩阵 eq?%24Q%24 和观测噪声协方差矩阵 eq?%24R%24 的元素
  • eq?%24P_i%24eq?%24P_%7Bi_%7B%5Ctext%7Bprev%7D%7D%7D%24 分别是当前和上一步的状态协方差
  • eq?%24y_i%24eq?%24%5Chat%7By%7D_i%24 分别是实际和预测的观测值

示例及MATLAB代码

下面通过一个简单的例子来说明其核心思想:

假设我们正在跟踪一个运动目标的位置和速度,其运动是受到一些未知的随机扰动的。我们可以通过雷达来测量这个目标的位置(测量结果会受到随机噪声的影响)。在这个问题中,我们使用AUKF来估计目标的位置和速度。

以下是MATLAB代码:

function [x, P, Q, R] = aukf(f, x, P, h, z, Q, R)
    % 自适应无迹卡尔曼滤波器
    %
    % 输入:
    %   f: 非线性状态方程
    %   x: "先验"状态估计
    %   P: "先验"估计状态协方差
    %   h: 测量方程
    %   z: 当前测量值
    %   Q: 过程噪声协方差 
    %   R: 测量噪声协方差
    %
    % 输出:
    %   x: "后验"状态估计
    %   P: "后验"状态协方差
    %   Q: 调整后的过程噪声协方差
    %   R: 调整后的测量噪声协方差

    n = length(x); % 状态维度

    % Sigma点生成(这里使用简单的对称sigma点选择方法为例)
    X = [x, x*ones(1,n) + chol(P)', x*ones(1,n) - chol(P)'];

    % 时间更新(预测步)
    X = f(X);  % 通过非线性函数f传播sigma点
    x = mean(X, 2);  % 传播后的状态均值
    P_prev = P;  % 保存先前的P用于自适应调整
    P = cov(X') + Q;  % 传播后的状态协方差

    % 测量更新(校正步)
    Y = h(X);  % 通过非线性函数h转换sigma点
    y = mean(Y, 2);  % 转换后的均值
    Pyy = cov(Y') + R;  % 转换后的协方差
    Pxy = cov(X',Y);  % 交叉协方差
    K = Pxy / Pyy;  % 卡尔曼增益

    x = x + K * (z - y);  % 更新后的状态均值
    P = P - K * Pyy * K';  % 更新后的状态协方差

    % 自适应调整
    Q = Q * max(1, abs(diag(P - P_prev)) / diag(Q));
    R = R * max(1, abs(z - h(x)) / diag(R));
end

在这个示例中,f是一个描述目标运动的非线性函数,x是状态向量(包括位置和速度),P是状态协方差矩阵,h是描述雷达测量的非线性函数,z是雷达的测量值,Q是过程噪声协方差矩阵,R是测量噪声协方差矩阵。

需要注意,此代码中的Q和R调整步骤仅使用了简单的规则。在实际应用中,可能需要使用更复杂的规则来调整Q和R。

算法优缺点分析

优点:

  1. 适应性强:能够根据观测的一致性来动态调整过程和观测噪声的协方差,提高滤波器的性能。这使得AUKF能够适应变化的噪声条件,提高在这些条件下的估计精度。
  2. 对非线性系统的适应性:与EKF相比,更好地处理了非线性系统的问题,因为它们不需要计算雅可比矩阵或进行线性化。(当然这个优点UKF本身也有)

缺点:

  1. 计算复杂度:AUKF需要在每个时间步计算和更新噪声协方差矩阵,不太适用于对实时性要求较高的系统。
  2. 稳定性问题:过度调整噪声协方差可能导致滤波器的不稳定。
  3. 调参的难度:AUKF需要预先设置一些参数,如初始的噪声协方差矩阵和调整规则等。如何设置这些参数则可能需要通过试验来确定。

总的来说,AUKF在UKF基础上进行了一定改良,特别适用于噪声特性变化的情况。然而,它也需要更多的计算资源,并需要谨慎地选择参数和调整规则。

  • 6
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值