1. 卡尔曼滤波器概述
卡尔曼滤波器是一种高效的递归滤波器,能够从一系列包含噪声的观测数据中估计动态系统的状态。它由Rudolf E. Kálmán在1960年提出,现已成为导航系统、计算机视觉、信号处理等领域的核心技术。
在雷达轨迹跟踪中,卡尔曼滤波器通过融合预测和测量信息,能够有效滤除噪声,提供平滑、准确的轨迹估计。其核心思想是利用系统模型预测状态,再通过观测值对预测进行修正,形成最优估计。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基本离散卡尔曼滤波器
2.1 算法原理
基本离散卡尔曼滤波器由两个主要阶段组成:预测和更新。
预测阶段:
code复制x̂_k|k-1 = F_k x̂_k-1|k-1 + B_k u_k
P_k|k-1 = F_k P_k-1|k-1 F_k^T + Q_k
更新阶段:
code复制K_k = P_k|k-1 H_k^T (H_k P_k|k-1 H_k^T + R_k)^-1
x̂_k|k = x̂_k|k-1 + K_k (z_k - H_k x̂_k|k-1)
P_k|k = (I - K_k H_k) P_k|k-1
其中:
- x̂:状态估计
- P:误差协方差矩阵
- F:状态转移矩阵
- Q:过程噪声协方差
- R:测量噪声协方差
- H:观测矩阵
- K:卡尔曼增益
2.2 MATLAB实现
matlab复制function [x_hat, P] = basic_kalman(z, F, H, Q, R, x0, P0)
x_hat = x0;
P = P0;
for k = 1:length(z)
% 预测
x_hat = F * x_hat;
P = F * P * F' + Q;
% 更新
K = P * H' / (H * P * H' + R);
x_hat = x_hat + K * (z(k) - H * x_hat);
P = (eye(size(P)) - K * H) * P;
end
end
3. 固定增益卡尔曼滤波器
3.1 原理与特点
固定增益卡尔曼滤波器将卡尔曼增益K固定为常值,避免了每次迭代计算增益矩阵的开销。这种方法适用于稳态系统,当滤波器收敛后,增益矩阵趋于稳定。
优点:
- 计算量小
- 实现简单
- 适合嵌入式系统
缺点:
- 仅适用于稳态系统
- 收敛速度可能较慢
3.2 MATLAB实现
matlab复制function [x_hat] = fixed_gain_kalman(z, F, H, K, x0)
x_hat = x0;
for k = 1:length(z)
% 预测
x_hat = F * x_hat;
% 更新
x_hat = x_hat + K * (z(k) - H * x_hat);
end
end
4. 平方根卡尔曼滤波器
4.1 数值稳定性问题
传统卡尔曼滤波器在计算过程中可能因数值误差导致协方差矩阵P失去正定性。平方根卡尔曼滤波器通过维护P
