Matlab之Kalman:用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

Matlab之Kalman:用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法

简介: Matlab之Kalman:用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法
+关注继续查看

问题探究


用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。


image.png



卡尔曼滤波及数据滤波


      卡尔曼滤波(Kalman filtering)一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

      斯坦利·施密特(Stanley Schmidt)首次实现了卡尔曼滤波器。卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗计划的轨道预测很有用,后来阿波罗飞船的导航电脑使用了这种滤波器。 关于这种滤波器的论文由Swerling (1958), Kalman (1960)与 Kalman and Bucy (1961)发表。

      数据滤波是去除噪声还原真实数据的一种数据处理技术, Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态. 由于, 它便于计算机编程实现, 并能够对现场采集的数据进行实时的更新和处理, Kalman滤波是目前应用最为广泛的滤波方法, 在通信, 导航, 制导与控制等多领域得到了较好的应用



代码实现


clear all;

clc;

close all;



N=2000;

gv=0.0332;

m=500;

a=[-1.6 1.46 -0.616 0.1525];

Q2=0.005;%观测噪声方差

w=zeros(m*4,N);

alpher=zeros(m,N);


for j=1:m

   

   

v=randn(1,N)*sqrt(gv);


u=filter(1,a,v);



F=eye(4,4);

d=u;

C=zeros(4,N);

for i=5:N

   C(:,i)=[u(i-1);u(i-2);u(i-3);u(i-4)];

end

C(:,1)=[0;0;0;0];

C(:,2)=[d(1);0;0;0];

C(:,3)=[d(2);d(2);0;0];

C(:,4)=[d(3);d(2);d(1);0];


p_esti=eye(4,4);%状态误差自相关矩阵


for i=2:N

   w([4*j-3,4*j-2,4*j-1,4*j],i)=w([4*j-3,4*j-2,4*j-1,4*j],i-1);%一步预测误差

   alpher(j,i)=d(i)-C(:,i)'*w([4*j-3,4*j-2,4*j-1,4*j],i).'';%计算信息过程

   p_pre=p_esti;%一步预测误差自相关矩阵

   A=C(:,i)'*p_pre*C(:,i)+Q2;%新息过程自相关矩阵

   k=p_pre*C(:,i)/A;

   w([4*j-3,4*j-2,4*j-1,4*j],i)=w([4*j-3,4*j-2,4*j-1,4*j],i)+k*alpher(j,i);%状态估计

   p_esti=p_pre-k*C(:,i)'*p_pre;%状态估计误差自相关矩阵

end


end



MSE=sum(alpher.^2)/m;

MSE=MSE/max(MSE);

MSE=10*log10(MSE);

figure(1)

plot(MSE);

title(' 均方误差变化曲线');

xlabel('迭代次数n');ylabel('MSE');


w_aver=zeros(4,N);

for i=1:m

   w_aver(1,:)=w_aver(1,:)+w(4*i-3,:);

   w_aver(2,:)=w_aver(2,:)+w(4*i-2,:);

   w_aver(3,:)=w_aver(3,:)+w(4*i-1,:);

   w_aver(4,:)=w_aver(4,:)+w(4*i,:);

end


w_aver=w_aver/m;

figure(2)

hold on;

plot(w_aver(1,:),'b');

plot(w_aver(2,:),'b');

plot(w_aver(3,:),'b');

plot(w_aver(4,:),'b');

title('权向量的估计');

xlabel('迭代次数n');ylabel('抽头权值');

hold off;


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Native禁止使用系统私有库详解
解读Android Native对于系统私有库的限制,老版本的黑科技代码在N版本之后都可能导致APP崩溃。
1657 0
Java多线程-线程状态
线程状态 6个状态定义:java.lang.Thread.State New: 尚未启动的线程的线程状态。 Runnable: 可运行线程的线程状态,等待CPU调度。 Blocked: 线程阻塞等待监视器锁定的线程状态。
683 0
通过HTTP/2通道实时获取IoT设备状态和数据
通过HTTP/2通道实时获取IoT设备状态和数据 1.服务端订阅 1.1 服务端订阅流程 在IoT场景,有时候我们期望业务服务器能接收到设备状态和设备采集的数据,而不是通过云产品中转, 这时我们可以开启服务端订阅,IoT平台会把设备产生的消息通过HTTP/2通道推送到业务服务器,以便根据自身业务场景消费。
2180 0
拉勾网引入百度 AI,上线全新企业及招聘者身份审核机制;AI 法律咨询服务系统落户厦门海沧
海沧区司法局依托“法治海沧”微信公众号平台,在福建省率先上线了“智能海沧AI人工智能”。这套AI人工智能法律咨询服务系统,依托全国3000多万份判决文书大数据库
1201 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载