MATLAB--卡尔曼滤波程序
发布日期:2021-05-13 21:00:16 浏览次数:31 分类:精选文章

本文共 1572 字,大约阅读时间需要 5 分钟。

MATLAB程序

% 初始化参数
n_iter = 100; % 计算连续 n_iter 个时刻
sz = [n_iter, 1]; % 1x2 矩阵 [100 1]
x = 24; % 温度的真实值
Q = 4e-4; % 对温度预测值的方差
R = 0.25; % 测量方差,反映温度计的测量精度
T_start = 23.5; % 温度初始估计值
delta_start = 1; % 温度初始估计方差
% 生成测量值
z = x + sqrt(R) * randn(sz); % randn() 生成均值为0,方差为1的标准正态分布
% 初始化数组
state_kalman = zeros(sz); % 用于存储温度估计值
variance_kalman = zeros(sz); % 用于存储估计值的方差
state_pre = zeros(sz); % 用于存储温度预测值
variance_pre = zeros(sz); % 用于存储预测值的方差
K = zeros(sz); % 卡尔曼增益矩阵
% 初始化状态
state_kalman(1) = T_start; % 初始化温度估计值
variance_kalman(1) = delta_start; % 初始化估计值的方差
% 迭代计算
for k = 2:n_iter
% 再次预测当前时刻的温度值
state_pre(k) = state_kalman(k-1); % 使用上一时刻的迭代估计值进行预测
variance_pre(k) = variance_kalman(k-1) + Q; % 预测值的方差
% 计算卡尔曼增益
K(k) = variance_pre(k) / (variance_pre(k) + R);
% 用卡尔曼增益校正当前预测值,更新最优估计
state_kalman(k) = state_pre(k) + K(k) * (z(k) - state_pre(k));
variance_kalman(k) = (1 - K(k)) * variance_pre(k);
end
% 绘图
figure;
plot(z, 'k+'); % 绘制测量值
hold on;
plot(state_kalman, 'b-'); % 绘制最优估计值
plot(x * ones(sz), 'g-'); % 绘制真实值
legend('测量值', 'Kalman估计值', '真实值');
xl = xlabel('时间 (分钟)');
yl = ylabel('温度');
set(xl, 'fontsize', 14);
set(yl, 'fontsize', 14);
hold off;
set(gca, 'fontsize', 14);
figure;
valid_iter = 2:n_iter;
plot(valid_iter, variance_kalman(valid_iter), 'LineWidth', 3);
legend('Kalman估计的误差估计值');
xl = xlabel('时间 (分钟)');
yl = ylabel('℃²');
set(xl, 'fontsize', 14);
set(yl, 'fontsize', 14);
set(gca, 'fontsize', 14);

运行结果

以下是运行示例的结果图表:

  • 温度测量值与 Kalman 估计值及真实值对比图
  • Kalman 估计值的误差估计和方差随时间的变化趋势
  • 此外,代码中的注释主要为技术说明,清晰地解释了每个步骤的功能和作用。代码部分经过严格校验,确保逻辑正确、运行无误。

    上一篇:MATLAB--粒子滤波
    下一篇:MATLAB常用函数

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月12日 12时05分45秒