kalman滤波在温度测量中的应用

kalman滤波在温度测量中的应用

MATLAB代码如下:

function main
N=120;
CON=25;                     %采样点
Xexpect=CON*ones(1,N);      %期望值
X=zeros(1,N);               %真值
Xkf=zeros(1,N);             %KALMAN滤波处理状态,估计值
Z=zeros(1,N);               %测量值
P=zeros(1,N);
%赋初值
X(1)=25.1;      %初始值房间温度25.1%
P(1)=0.01;      %初始值协方差
Z(1)=24.9;      %初始测量值
Xkf(1)=Z(1);    %初始测量值作为初始估计状态
%噪声
Q=0.01;
R=0.25;
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
    %1 :随时间变化真实温度波动变化
    X(k)=F*X(k-1)+G*W(k-1);
    %2 :随时间推移,获取实时数据
    Z(k)=H*X(k)+V(k);
    %3 :卡尔曼滤波
    X_pre=F*Xkf(k-1);           %状态预测
    P_pre=F*P(k-1)*F'+Q;        %协方差预测
    Kg=P_pre*inv(H*P_pre*H'+R); %计算卡尔曼增益   inv求逆矩阵
    e=Z(k)-H*X_pre;             %信息
    Xkf(k)=X_pre+Kg*e;          %状态更新
    P(k)=(1-Kg*H)*P_pre;        %协方差更新
end
%计算误差
Err_Messure=zeros(1,N);     %测量值与真实值之间的偏差
Err_Kalman=zeros(1,N);      %卡尔曼估计与真实值之间的偏差
for k=1:N
    Err_Messure(k)=abs(Z(k)-X(k));  %abs绝对值和复数的模
    Err_Kalman(k)=abs(Xkf(k)-X(k));
end
t=1:N;
%画图显示
figure
plot(t,Xexpect,'-b',t,X,'-r.',t,Z,'-ko',t,Xkf,'-g*');
legend('期望值','真实值','观测值','Kalman滤波值');
xlabel('采样时间/s');
ylabel('温度值/℃');
%误差分析图
figure
plot(t,Err_Messure,'-b',t,Err_Kalman,'-k*');
legend('测量偏差','Kalman滤波偏差');
xlabel('采样时间/s');
ylabel('温度偏差值/℃');

运行结果:


 

 房间温度估计

房间温度误差分析 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值