美文网首页matlab学习
Matlab 卡尔曼滤波

Matlab 卡尔曼滤波

作者: Kerwin_H | 来源:发表于2019-06-21 09:17 被阅读0次

% Kalman filter example of temperaturemeasurement in Matlab

% This M code is modified from Xuchen Yao'smatlab on 2013/4/18

%房间当前温度真实值为24度,认为下一时刻与当前时刻温度相同,误差为0.02度(即认为连续的两个时刻最多变化0.02度)。

%温度计的测量误差为0.5度。

%开始时,房间温度的估计为23.5度,误差为1度。

% intial parameters

n_iter = 1000; %计算连续n_iter个时刻

sz = [n_iter, 1]; % size of array. n_iter行,1列

t=-5:0.01:4.99;

tt=0.01*t.^2';

x = 24-tt; %温度的真实值

Q = 4e-4; %过程方差,反应连续两个时刻温度方差。更改查看效果

R = 0.25; %测量方差,反应温度计的测量精度。更改查看效果

z = x + sqrt(R)*randn(sz); % z是温度计的测量结果,在真实值的基础上加上了方差为0.25的高斯噪声。

%对数组进行初始化

xhat=zeros(sz); %对温度的后验估计。即在k时刻,结合温度计当前测量值与k-1时刻先验估计,得到的最终估计值

P=zeros(sz); %后验估计的方差

xhatminus=zeros(sz); %温度的先验估计。即在k-1时刻,对k时刻温度做出的估计

Pminus=zeros(sz); %先验估计的方差

K=zeros(sz); %卡尔曼增益,反应了温度计测量结果与过程模型(即当前时刻与下一时刻温度相同这一模型)的可信程度

% intial guesses

xhat(1) = 23.5-tt(1); %温度初始估计值为23.5度

P(1) =1; %误差方差为1

for k = 2:n_iter

%时间更新(预测)

xhatminus(k) = xhat(k-1)-(tt(k)-tt(k-1)); %用上一时刻的最优估计值来作为对当前时刻的温度的预测

Pminus(k) = P(k-1)+Q; %预测的方差为上一时刻温度最优估计值的方差与过程方差之和

%测量更新(校正)

K(k) = Pminus(k)/( Pminus(k)+R ); %计算卡尔曼增益

xhat(k) = ...

xhatminus(k)+K(k)*(z(k)-xhatminus(k)); %结合当前时刻温度计的测量值,对上一时刻的预测进行校正,得到校正后的最优估计。该估计具有最小均方差

P(k) = (1-K(k))*Pminus(k); %计算最终估计值的方差

end

FontSize=14;

LineWidth=3;

figure();

plot(z,'k+'); %画出温度计的测量值

hold on;

plot(xhat,'b-','LineWidth',LineWidth) %画出最优估计值

hold on;

plot(x,'g-','LineWidth',LineWidth);

%画出真实值

legend('温度计的测量结果', '后验估计', '真实值');

xl=xlabel('时间(分钟)');

yl=ylabel('温度');

set(xl,'fontsize',FontSize);

set(yl,'fontsize',FontSize);

hold off;

set(gca,'FontSize',FontSize);

figure();

valid_iter = 2:n_iter; % Pminus not validat step 1

plot(valid_iter,P(valid_iter),'LineWidth',LineWidth);

%画出最优估计值的方差 

legend('后验估计的误差估计');

xl=xlabel('时间(分钟)');

yl=ylabel('℃^2');

set(xl,'fontsize',FontSize);

set(yl,'fontsize',FontSize);

set(gca,'FontSize',FontSize);

disp('this is a string');

相关文章

  • Matlab 卡尔曼滤波

    % Kalman filter example of temperaturemeasurement in Matl...

  • 卡尔曼滤波及其无人驾驶应用

    无人驾驶汽车系统感知模块的重要技术——卡尔曼滤波,应用包括:卡尔曼滤波与行人状态估计扩展卡尔曼滤波(EKF)与传感...

  • 图文并茂,卡曼滤波

    ​卡尔曼滤波是如何工作? 看图说话! 我务必向大家介绍卡尔曼滤波器(Kalman Filter),因为它之所能, ...

  • iOS-卡尔曼滤波算法

    一:前言 滤波算法 用于过滤掉连续的数据中出现偏差较大的数据 二:卡尔曼滤波算法 <0>卡尔曼滤波的原理请自行百度...

  • 卡尔曼滤波

    把卡尔曼滤波写一下吧,思想很简单,不详细写了,就是根据方差实现的一种最优估计方法。 卡尔曼滤波五个基本的公式 1....

  • 卡尔曼滤波

    卡尔曼公式 先以状态协方差随时间的传播性,得到先验估计(时间更新),再利用测量值和最小二乘估计,得到后验估计(状态...

  • 卡尔曼滤波

    话不多说,我这里先给出我们的系统的模型方程,状态转移方程: 测量方程: 需要说明的是,这里的也可以是随变化的,但是...

  • 卡尔曼滤波

    概述   卡尔曼滤波(Kalman filter)是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全...

  • 卡尔曼滤波

    为什么看卡尔曼滤波 因为想要对变化/趋势进行预测,应用偏向于机械等故障类的预测。也看了不少卡尔曼滤波相关的东西,大...

  • 卡尔曼滤波

    本文是国外博主Bzarg在2015年写的一篇图解。虽然是几年前的文章,但是动态定位、自动导航、时间序列模型、卫星导...

网友评论

    本文标题:Matlab 卡尔曼滤波

    本文链接:https://www.haomeiwen.com/subject/toyeqctx.html