欢迎光临
我们一直在努力

【MATLAB例程】线性卡尔曼滤波与RTS平滑,估计速度和位置,有误差对比

在这里插入图片描述

线性卡尔曼滤波(

K

a

l

m

a

n

F

i

l

t

e

r

,

K

F

Kalman Filter, KF

KalmanFilter,KF)与

R

a

u

c

h

T

u

n

g

S

t

r

i

e

b

e

l

Rauch–Tung–Striebel

RauchTungStriebel(RTS)平滑算法的完整对比仿真,以一维匀速运动模型为背景,对目标的位置和速度进行联合估计。通过构建前向滤波与后向平滑两级处理流程,系统性展示了 RTS 平滑相较于标准卡尔曼滤波在估计精度和误差稳定性方面的优势。 原创代码,非AI生成,请勿翻卖

文章目录

  • 程序介绍
    • 代码功能简介
    • 前向滤波:线性卡尔曼滤波
    • 后向平滑:RTS 平滑算法
  • 运行结果
  • MATLAB源代码

程序介绍

代码功能简介

代码实现了线性卡尔曼滤波(

K

F

KF

KF)与 Rauch–Tung–Striebel(

R

T

S

RTS

RTS)平滑算法的联合仿真与性能对比,以一维匀速运动模型为背景,对目标的位置与速度进行联合状态估计。通过“前向滤波 + 后向平滑”的两阶段处理流程,系统性展示了

R

T

S

RTS

RTS平滑在利用全时域信息、提升估计精度方面的优势。

前向滤波:线性卡尔曼滤波

代码的第一阶段采用标准线性卡尔曼滤波进行状态估计,包括预测与更新两个基本步骤。滤波器在每个时刻仅利用当前及历史观测信息对状态进行递推估计,因此具有实时性强、计算量低的特点,但在有限观测条件下,估计精度仍受噪声影响较为明显。

滤波过程中,代码同时保存预测结果与协方差信息,为后续

R

T

S

RTS

RTS平滑提供必要的中间量。

后向平滑:RTS 平滑算法

在完成前向卡尔曼滤波后,代码进一步引入

R

T

S

RTS

RTS平滑算法,对状态序列进行后向递推。RTS 平滑在每个时刻综合利用过去、当前以及未来的观测信息,对卡尔曼滤波结果进行全局修正,从而显著降低估计误差。

该过程通过前向预测协方差与滤波协方差构造平滑增益,实现对位置与速度估计的统一平滑处理。

运行结果

估计的位置和速度变化曲线,包含与真值的对比: 在这里插入图片描述 误差对比曲线: 在这里插入图片描述 命令行输出的RMSE对比: 在这里插入图片描述

MATLAB源代码

部分代码如下:

% Rauch-Tung-Striebel (RTS)平滑与线性的卡尔曼滤波
% 背景为估计位置和速度,可修改为其他应用环境
% 作者:matlabfilter
% 2026-01-15/Ver1

clear; clc; close all;
rng(0);

%% 系统参数设置
dt = 0.1; % 采样时间间隔
T = 50; % 总时间
N = T/dt; % 总步数
t = (0:N1)*dt; % 时间向量

% 状态向量 x = [位置; 速度]
% 状态转移矩阵 F (匀速模型)
F = [1, dt;
0, 1];

% 观测矩阵 H (只观测位置)
H = [1, 0];

% 过程噪声协方差 Q
q = 0.1;
Q = [q^3/3, q^2/2;
q^2/2, q];

% 观测噪声协方差 R
R = 1.0; % 观测噪声

%% 模拟真实数据和观测数据
x_true = zeros(2, N);
x_true(:,1) = [0; 2]; % 初始状态: 位置0, 速度2

z = zeros(1, N); % 观测值

rng(100); % 固定随机种子
for k = 2:N
x_true(:,k) = F * x_true(:,k1) + mvnrnd([0;0], Q)';
end

for k = 1:N
z(k) = H * x_true(:,k) + sqrt(R) * randn;
end

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

赞(0)
未经允许不得转载:171主机测评 » 【MATLAB例程】线性卡尔曼滤波与RTS平滑,估计速度和位置,有误差对比
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址