第三章 Sage-Husa自适应卡尔曼滤波

系列文章目录

第一章 贝叶斯滤波

第二章 线性卡尔曼滤波

第三章 Sage-Husa自适应卡尔曼滤波


目录

系列文章目录

前言

一、系统模型

二、0均值噪声假设下的推导

1.观测噪声的估计

2.过程噪声的估计

三、Sage-Husa自适应卡尔曼滤波

1.序列均值和方差的迭代计算

2.计算步骤

参考文献


前言

        卡尔曼滤波器本身就是一个自适应滤波器,但是卡尔曼滤波需要已知噪声模型。这里的“自适应卡尔曼滤波器”则是指在卡尔曼滤波基础上的改进和优化,以适应未知噪声模型的系统,包括状态方程噪声和观测方程噪声。

        由于噪声未知,噪声参数的不准确可能会影响系统的输出。自适应卡尔曼滤波一边进行噪声参数估计,一边进行状态预测和更新。


一、系统模型

        卡尔曼滤波的系统模型在不同的文章中稍有不同,以下参考Sage-Husa自适应卡尔曼滤波原论文中的模型,并添加了控制项。

        对于自适应滤波来说,系统模型中的噪声的均值可以不为0,并在更新的过程中估计噪声项的均值。

二、0均值噪声假设下的推导

        假设系统模型中的噪声正态分布的均值为0,可以简化推导过程。本推导过程仅用于帮助大家从原理上理解Sage-自适应卡尔曼滤波,并不展示其最完整的推导过程。

        虽然系统模型中的噪声参数未知,但是我们可以构建一些变量,在自适应滤波的迭代过程中记录变量历史序列,并依据变量历史序列估计噪声参数。因为使用历史数据估计当前时刻的噪声参数,所以自适应滤波更适合噪声参数不变或者变化缓慢的情况。

1.观测噪声的估计

 

2.过程噪声的估计

三、Sage-Husa自适应卡尔曼滤波

1.序列均值和方差的迭代计算

2.计算步骤


参考文献

Adaptive Filtering with Unknown Prior Statistics

捷联惯导算法与组合导航原理(第1版修订终版)

【多源融合】自适应卡尔曼滤波的多种形式:遗忘卡尔曼滤波、渐消记忆卡尔曼滤波和自适应卡尔曼滤波_基于残差的自适应估计卡尔曼滤波-优快云博客

https://zhuanlan.zhihu.com/p/622985656

方差递推公式-优快云博客

### 自适应卡尔曼滤波原理 自适应卡尔曼滤波是一种改进型的卡尔曼滤波算法,旨在处理系统模型不确定性以及噪声统计特性未知的情况。传统卡尔曼滤波依赖于精确已知的过程和测量噪声协方差矩阵 \( Q \) 和 \( R \),但在实际应用中这些参数往往难以准确获得。因此,在线调整这两个重要参数成为必要。 #### 原理概述 通过引入额外机制来估计并更新过程噪声协方差 \( Q(k) \) 或者观测噪声协方差 \( R(k) \)[^1],使得即使面对变化的工作环境也能保持良好的性能表现。具体来说: - **基于残差的方法**:利用预测误差(也称为新息序列),即当前时刻的真实观测值减去由状态向量预测得到的结果之间的差异来进行评估; - **最大似然估计法 (MLE)** :假设数据服从某种概率分布函数,则可以通过最大化该分布下的可能性度量来求解最优参数组合; - **贝叶斯推断框架下实现**:采用先验信息与最新证据相结合的方式不断修正对于不确定性的认知水平。 ```python import numpy as np def adaptive_kalman_filter(x, P, z, H, F, B=0, u=0): """ 实现简单的自适应卡尔曼滤波器 参数: x : 初始状态向量 P : 初始估计误差协方差矩阵 z : 测量值列表 H : 观测矩阵 F : 状态转移矩阵 B : 控制输入影响矩阵,默认为零表示无控制作用 u : 外部控制变量,默认为零 返回: filtered_states: 过程中的每一个时间步的状态估值 """ n = len(z) I = np.eye(len(P)) # 初始化存储空间用于保存每次迭代后的状态估计及其对应的协方差 filtered_states = [] for k in range(n): # 预测阶段 x_pred = F @ x + B * u P_pred = F @ P @ F.T # 更新阶段 y = z[k] - H @ x_pred # 计算残差/创新项 S = H @ P_pred @ H.T + calculate_R_adaptively(y) # 动态计算R K = P_pred @ H.T @ np.linalg.inv(S) x = x_pred + K @ y P = (I - K @ H) @ P_pred filtered_states.append(x.copy()) return filtered_states def calculate_R_adaptively(residuals): """根据给定的新息序列动态调整观测噪声协方差""" alpha = 0.98 # 平滑因子 global R_estimated if 'R_estimated' not in globals(): R_estimated = residuals @ residuals.T else: R_estimated = alpha * R_estimated + (1-alpha)*(residuals @ residuals.T) return R_estimated ``` 上述代码展示了如何构建一个基本版本的自适应卡尔曼滤波器,并特别强调了 `calculate_R_adaptively` 函数的作用——它负责依据最新的残差情况实时调节观测噪声协方差矩阵 \( R \) 的取值[^2]。 ### 应用场景举例 在自动驾驶汽车领域内,传感器可能会受到天气条件的影响而产生偏差,这时就可以运用自适应卡尔曼滤波技术来自我校正定位精度。同样地,在金融市场的高频交易策略制定过程中也可以借助此类工具更好地应对市场波动带来的挑战[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值