MATLAB实现简单卡尔曼滤波——稍微做下笔记(2)

clear;close all;clc
% 卡尔曼滤波

A = 1;  % 状态转移矩阵
B = 0;  % 控制输入矩阵
H = 1;  % 观测矩阵
Q = 0.1;    % 过程噪声协方差矩阵,越大,模型不确定性越大,卡尔曼滤波估计值越偏向于测量值,越小,偏向于先验估计
R = 0.01;   % 观测噪声协方差矩阵,越大,观测值不确定性越大,卡尔曼滤波估计值越偏向于先验估计,越小,偏向于测量值

measurements = [196.32	169.13	141.94	131.88	111.85	103.94	104.72	87.05	79.02	71.12];

% 初始状态估计
x_hat = 0;
P = 1;

x_pred = zeros(size(measurements));
x_est = zeros(size(measurements));

for k = 1:length(measurements)
    % 预测步骤-时间更新
    x_pred(k) = A * x_hat;      % 先验估计值
    P_pred = A * P * A' + Q;    % 先验协方差矩阵
    
    % 更新步骤-测量更新
    K = P_pred * H' / (H * P_pred * H' + R);        % 卡尔曼增益矩阵
    z = measurements(k);
    x_hat = x_pred(k) + K * (z - H * x_pred(k));    % 状态估计值
    P = (eye(size(A)) - K * H) * P_pred;            % 状态方差矩阵
    
    % 估计值
    x_est(k) = x_hat;
end

disp('预测值:');
disp(x_pred);
disp('估计值:');
disp(x_est);
disp('观测值:');
disp(measurements);

plot(x_pred)
hold on
plot(x_est)
plot(measurements)
legend('预测值','估计值','观测值')
title(['Q = ',num2str(Q),'   R = ',num2str(R)])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值