Kalman滤波MATLAB实现实例——在温度测量中的应用

article/2025/10/5 20:25:08

参考:《卡尔曼滤波原理及应用MATLAB仿真》

原理介绍

假设我们要研究的对象是一个房间的温度。根据经验判断,这个房间的温度大概在25℃左右,可能受空气流通、阳光等因素影响,房间内温度会小幅度地波动。我们以分钟为单位,定时测量房间温度,这里的1分钟,可以理解为采样时间。假设测量温度时,外界的天气是多云,阳光照射时有时无,同时房间不是100%密封的,可能有微小的与外界空气的交换,即引入过程噪声W(k),其方差为Q,大小假定为Q=0.01(假如不考虑过程噪声的影响,即真实温度是恒定的,那么这时候Q=0)。相应地,A=1,F=1,Q=0.01,状态X(k)是在第k分钟时的房间温度,是一维的。那么该系统的状态方程可以写为
X(k)=X(k-1)+W(k)
现在用温度计开始测量房间的温度,假设温度计的测量误差为±0.5℃,从出厂说明书上我们得知该温度计的方差为0.25。也就是说,温度计第k次测量的数据不是100%准确的,它是有测量噪声V(k)的,并且其方差R=0.25,因此测量方程为Z(k)=Xk)+V(k)。
该系统的状态和观测方程为
X(k)=AX(k-1)+W(k-1)
Z(k)=HX(k)+V(k)
式中,X(k)是一维变量温度;A=1;F=1;H=1;W(k)和V(k)的方差为QR
模型建好以后,就可以利用 Kalman滤波了。假如要估算第k时刻的实际温度值,首先要根据第k-1时刻的温度值来预测k时刻的温度。
(1)假定第k-1时刻的温度值测量值为23.9℃,房间真实温度为24.0℃,该
测量值的偏差是0.1℃,即协方差P(k-1)=0.1^2。
(2)在第k时刻,房间的真实温度是24.1℃,温度计在该时刻测量的值为
24.5℃,偏差为0.4℃。我们用于估算第k时刻的温度有两个温度值,分别是k-1时刻23.9℃和k时刻的24.5℃,如何融合这两组数据,得到最逼近真实值的估计?
首先,利用k1时刻温度值预测第k时刻的温度,其预计偏差为P(k|k-1)=P(k-1)+Q=0.02,计算 Kalman增益
K=P(k|k-1)/(P(k|k-1)+R)=00741,那么这时候利用k时刻的观测值,得到温度的估计值为X(k)=23.9+0.0741×(24.1-23.9)=23.915℃。可见,与23.9℃和24.5℃相比较, Kalman估计值23.915℃更接近真实值24.1℃。此时更新k时刻的偏差P(k)=(1-K*H)P(k|k-1)=0.0186。最后由X(k)=23.915℃和P(k)=0.0186,可以继续对下一时刻观测数据Z(k+1)进行更新和处理。
(3)这样, Kalman滤波器就不断地把方差递归,从而估算出最优的温度值。X(0)和P(0)分别为滤波器初始值。

MATLAB仿真程序

% 程序说明:Kalman滤波用于一维温度测量的实例
function Kalman_main
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=120;%采样点个数,时间单位为分钟
CON=25;%室内温度理论值,房间温度在25摄氏度左右%对状态和测量初始化
Xexpect=CON*ones(1,N);%期望温度是25摄氏度,但会收到噪声影响
X=zeros(1,N);  %房间各时刻真实温度值
Xkf=zeros(1,N); %估计值
Z=zeros(1,N);  %温度计测量值
P=zeros(1,N); %初始化
X(1)=25.1;
P(1)=0.01;%初始化协方差
Z(1)=24.9;
Xkf(1)=Z(1);%初始化测量值24.9,可作为滤波器的初始估计状态%噪声
Q=0.01;%W(k)的方差
R=0.25;%V(k)的方差
W=sqrt(Q)*randn(1,N);
V=sqrt(R)*randn(1,N);%系统矩阵
F=1;
G=1;
H=1;
I=eye(1); 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模拟房间温度和测量过程,并滤波
for k=2:N%第一步:随时间推移,房间真实温度波动变化X(k)=F*X(k-1)+G*W(k-1);  %状态方程%第二步:随时间推移,获取实时数据Z(k)=H*X(k)+V(k); %观测方程%第三步:Kalman滤波X_pre=F*Xkf(k-1);  %状态估计         P_pre=F*P(k-1)*F'+Q; %协方差预测       Kg=P_pre*inv(H*P_pre*H'+R); %kalman增益e=Z(k)-H*X_pre;      %新息      Xkf(k)=X_pre+Kg*e;   %状态更新 P(k)=(I-Kg*H)*P_pre; %协方差更新
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算误差
Err_Messure=zeros(1,N);%量测值与真实值的误差
Err_Kalman=zeros(1,N);%估计与真实值的偏差
for k=1:NErr_Messure(k)=abs(Z(k)-X(k));Err_Kalman(k)=abs(Xkf(k)-X(k));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=1:N;
figure('Name','Kalman Filter Simulation','NumberTitle','off');
%一次画出理论值、真实值、测量值、估计值
plot(t,Xexpect,'-b',t,X,'-r',t,Z,'-k',t,Xkf,'-g');
legend('expected','real','measure','kalman extimate');         
xlabel('sample time');
ylabel('temperature');
title('Kalman Filter Simulation');
%误差分析
figure('Name','Error Analysis','NumberTitle','off');
plot(t,Err_Messure,'-b',t,Err_Kalman,'-k');
legend('messure error','kalman error');         
xlabel('sample time');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

仿真图

在这里插入图片描述
误差

结论

从仿真结果可以看出,kalman滤波与温度计测量的值相比,大大降低了偏差,使得状态尽可能逼近真实值。


http://chatgpt.dhexx.cn/article/8LudvA67.shtml

相关文章

图解卡尔曼滤波(Kalman Filter)

背景 关于滤波 首先援引来自知乎大神的解释。 “一位专业课的教授给我们上课的时候,曾谈到:filtering is weighting(滤波即加权)。滤波的作用就是给不同的信号分量不同的权重。最简单的loss pass filter, 就是直接把低…

卡尔曼滤波(Kalman Filter)原理理解和测试

Kalman Filter学原理学习 1. Kalman Filter 历史 Kalman滤波器的历史,最早要追溯到17世纪,Roger Cotes开始研究最小均方问题。但由于缺少实际案例的支撑(那个时候哪来那么多雷达啊啥的这些信号啊),Cotes的研究让人看着显得很模糊,因此在估计理论的发展中影响很小。17世纪…

Kaplan-Meier

Kaplan-Meier 算法 Kaplan-Meier,是一种生存分析的常用方法,用于研究某一个因素对于生存时间的影响。在医学广泛使用,比如新药物是否有效的增加癌症病人的存活时间。 计算方法:假设我们已经计算出了时间t1的生存概率是0.95&#…

Kalman滤波器从原理到实现

转载请注明出处:http://xiahouzuoxin.github.io/notes Kalman滤波器的历史渊源 We are like dwarfs on the shoulders of giants, by whose grace we see farther than they. Our study of the works of the ancients enables us to give fresh life to their finer…

Kalman Filter 通俗讲解

引言 Kalman Filter,很多人刚听到这个名词时,总是会下意识认为这就是个滤波器。我这里想要重点声明的是,Kalman Filter不是滤波,它是一种信息融合的过程。 那么Kalman Filter到底是什么?它在那些方面有着应用&#xf…

卡尔曼(kalman)详解

Kalmanfliter [TOC](Kalmanfliter) kalman详解贝叶斯准则(Bayes rule)全概率定理贝叶斯卡尔曼matlab仿真 kalman详解 贝叶斯准则(Bayes rule) 全概率定理 两个随机变量 X 和 Y 的联合分布(joint distribution)如下: p (x , y) p (X x , Y y)(Xx,Yy同…

kalman简单例子——初始化参数对kalman性能的影响

此篇为第⑤篇,多目标跟踪系列文章: 基础demor入门①②;公式推导③④;深入分析初始化参数的影响⑤; ① Matlab Kalman滤波例子——小球跟踪解析 :matlab官方例子,单目标跟踪。匀速模型和匀加速模型 ②Matlab Kalman Filter based Multiple object Tracking 官方例子 多目…

卡尔曼(kalman)滤波器原理

引言:卡尔曼滤波器适用于线性高斯系统,若为非线性系统,可以使用扩展卡尔曼滤波器。 一、状态估算器 如下图,如果我们需要知道火箭发射时尾部内部的实际温度,这个温度与火箭的燃料输入有关。但是由于里面温度过高&…

Kalman详尽原理介绍合集

目录 前言 1.线性kalman(LKF) 1.1LKF原理简介 1.2 适用场合 2.扩展kalman(EKF) 2.1EKF原理简介 2.2 适用场合 2.3 使用注意事项 3.无迹kalman(UKF) 3.1UKF原理简介 3.2 UT变换 3.3 适用场合 4.粒子滤波PF 4.1 PF原理简介 4.2 适用场合 前…

对Kalman(卡尔曼)滤波器的理解

分类: 计算机视觉 转载过来的,觉得不错,原文 http://blog.csdn.net/lanbing510/article/details/8828109 1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅…

Kalman滤波通俗理解+实际应用

一、Kalman用于解决什么的问题? 卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。 人话&#xff1…

IDEA开发及运行第一个Android项目

IDEA自动下载SDK、Gradle,保证能访问网络。 原来eclipse能使用的sdk,配到idea报错,就换成自动下载最新的了。 之前没成功可能是我防火墙禁用了上网。 新建项目 提示安装SDK 等待下载完成 继续建项目 选择手机或平板及目标设备API版本 选择…

怎么导入别人的android项目

到期末了好多同学都问我怎么把别人的安卓项目导进自己电脑里面,今天我来统一解答一下,希望有所帮助。 1.删除项目中原有的自动构建的文件 去到要导入项目的目录下把 .idea .gradle与build 三个文件夹,*.iml,local.properties删除…

android 开源项目:

android 开源项目: https://github.com/white-cat/ThinkAndroid 转自:http://glblong.blog.51cto.com/3058613/1354953 Android开源:数据库ORM框架GreenDao学习心得及使用总结 2014-01-26 23:40:01 标签: sqllite Android 开源…

Android项目工程结构介绍

Android项目工程结构介绍 (1)gradle和.idea Android Studio自动生成的文件,打包的时候一般会删掉再进行打包 (2)app 项目的代码资源都在其中,也是我们工作的核心目录 build :编译生成文件。生…

Android项目如何真机运行?

很多初学者在刚开始写Android项目的时候,会使用Android Studio自带的模拟器去运行项目,但是自带模拟器一般占内存大(占2G都算少的);运行慢(运行一个项目要启动半天);卡顿等等&#x…

26、Android创建项目

利用 Android Studio,您可以轻松地为各种类型的设备(例如手机、平板电脑、电视和可穿戴设备)创建 Android 应用。本页介绍了如何启动新的 Android 应用项目或导入现有项目。 如果您未打开项目,Android Studio 会显示欢迎屏幕&…

创建的第一个Android项目

Package name:项目的包名,一定要具有唯一性! 静待。。。 创建模拟器 版本问题找不到具体信息,就选择这一个把。相似度比较高。紧跟着后边我也配置了安卓10(Q) 提示你的反病毒程序可能会影响你的构建性能。…

Android开源项目

阿里巴巴 项目名称功能描述freelineFreeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品,也可以从 Freeline 官方主页来获取更多的信息。Freeline 由蚂蚁聚宝 Android 团队开发,它可以充分利用缓存文件,在几秒钟内迅…

Android项目框架搭建(一)

本篇先记录下当前项目中涉及的主要技术要点。也算是对所作项目的一次总结。如果这个过程能对你有些许的帮助,那可能就显得有意义点了。 一个完整的Android项目会涉及后台和前端。我们只关注于前端,也就是我们的app本身。 下面列出项目架构需要具备的技…