kalman滤波融合原理及其matlab仿真「建议收藏」

kalman滤波融合原理及其matlab仿真「建议收藏」1、kalman原理卡尔曼滤波是一种递推式滤波方法,不须保存过去的历史信息,新数据结合前一刻已求得的估计值及系统本身的状态方程按一定方式求得新的估计值。1.1、线性卡尔曼假设线性系统状态是k,卡尔曼原理可用以下五个公式表达:X(k|k-1)=AX(k-1|k-1)+BU(k)………..(1)P(k|k-1)=AP(k-1|k-1)A’+Q…………

大家好,又见面了,我是你们的朋友全栈君。

1、 kalman原理

   卡尔曼滤波是一种递推式滤波方法,不须保存过去的历史信息,新数据结合前一刻已求得的估计值及系统本身的状态方程按一定方式求得新的估计值。

1.1、线性卡尔曼

     假设线性系统状态是k,卡尔曼原理可用以下五个公式表达:

X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)

P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)

X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)

Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)

P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)

式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量;式 (2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的 covariance,A’表示A的转置矩阵,Q是系统过程的covariance;现在状态(k)的最优化估算值为X(k|k);Kg为卡尔曼增益(Kalman Gain)。

1.2、扩展卡尔曼

   实际系统总是存在不同程度的非线性,对于非线性系统滤波问题,常用的处理方法是利用线性化技巧将其转化为一个近似的线性滤波问题,这就是扩展Kalman 滤波方法(Extended Kalman Filter,EKF )思路。扩展Kalman 滤波建立在线性Kalman 滤波的基础上,其核心是对一般的非线性系统将滤波值非线性函数f(*)和h(*)展开成Taylor级数并略去二阶及以上项,得到一个近似的线性化模型,然后应用Kalman 滤波完成对目标的滤波估计处理。

1.3、无迹卡尔曼

   扩展Kalman滤波是对非线性的系统方程或者观测方程进行泰勒展开并保留其一阶近似项,不可避免地引入了线性化误差。如果线性化假设不成立,采用这算法则会导致滤波器性能下降以至于造成发散。无迹Kalman 滤波(Unscented Kalman Filter,UKF )摒弃了对非线性函数进行线性化的传统做法,采用Kalman 线性滤波框架,对于预测方程,使用无迹变换(Unscented Transform,  UT) 来处理均值和协方差的非线性传递问题。

2、数据融合(信息融合)

    将经过集成处理的多传感器信息进行合成,形成一种对外部环境或被测对象某一特征的表达方式称为信息融合。常见由以下几种信息融合方法。

(1)综合平均法,即把各传感器数据求平均,乘上权重系数;

(2)贝叶斯估计法,通过先验信息和样本信息得到后验分布,再对目标进行预测;

(3)D-S法,采用概率区间和不确定区间判定多证据体下假设的似然函数进行推理;

(4)神经网络法,以测量目标的各种参数集为神经网络的输入,输出推荐的目标特征或权重;

(5)kalman法、专家系统法等。。。

3、matlab仿真

    本文实现对两路卫星定位数据(可理解为一路GPS数据,一路BD数据),首先进行kalman滤波,再进行信息融合,得到更加平稳且误差小的定位结果。

(1)两路数据,以.txt文件输入

kalman滤波融合原理及其matlab仿真「建议收藏」                              kalman滤波融合原理及其matlab仿真「建议收藏」             

     (2)获取数据

clc;
clear all           
longitude(1)=0;
latitude(1)=0;
y(1)=119.12256;

fid=fopen('.\test1.txt');  %打开数据总文件
B=textscan(fid,'%f %f');%把每一列的数据读入到读入到单元数组B中
C=[B{1} B{2}];          %从单元数组B中提取每列数据赋值给矩阵C
n=size(C,1);         %确定读入数据的坐标数目
longitude=C(:,1);latitude=C(:,2);      %赋值
fclose(fid);

fod=fopen('.\test2.txt');  %打开数据总文件
A=textscan(fod,'%f %f');%把每一列的数据读入到读入到单元数组B中
G=[A{1} A{2}];          %从单元数组B中提取每列数据赋值给矩阵C
num=size(G,1);         %确定读入数据的坐标数目
longitude2=G(:,1);latitude2=G(:,2);      %赋值
fclose(fod);

(3)kalman处理

longitude_fil(1)=y(1);
p_fil(1)=1;
for t=2:n;
    longitude_pre(t)=a*longitude_fil(t-1);
    p_pre(t)=a*p_fil(t-1)*a'+P;
    K(t)=p_pre(t)*H'*inv(H*p_pre(t)*H'+Q);
    longitude_fil(t)=longitude_pre(t)+K(t)*(longitude(t)-H*longitude_pre(t));
    p_fil(t)=(1-K(t)*H)*p_pre(t);
end

for i=1:n
     Err1(i)=RMS(y(i),longitude(i));
    Err2(i)=RMS(y(i),longitude_fil(i));
end

(4)融合处理

w1=var(longitude_fil-y);
w2=var(longitude2_fil-j);
disp('w1=');disp(w1);
disp('w2=');disp(w2);
result=(w2/(w1+w2))*longitude_fil+(w1/(w1+w2))*longitude2_fil;
w3=var(result);
disp('w3=');disp(w3);
disp('result=');disp(result);
for i=1:num;

dlmwrite('.\result.txt',result,'delimiter','%10.000f\t');

end 

figure(7);
hold on;
plot(1:num,longitude_fil,'-+k');
plot(1:num,longitude2_fil,'-*b');
plot(1:num,result,'-og');
%plot(1:n,result,'-*r');
hold off;
legend('滤波后1','滤波后2','融合后');
xlabel('采样次数','color','b');
ylabel('幅值','color','b');
title('坐标图线','color','m');

(5)滤波前后误差

kalman滤波融合原理及其matlab仿真「建议收藏」kalman滤波融合原理及其matlab仿真「建议收藏」

(6)测量值与滤波值

kalman滤波融合原理及其matlab仿真「建议收藏」kalman滤波融合原理及其matlab仿真「建议收藏」

(7)滤波后融合

kalman滤波融合原理及其matlab仿真「建议收藏」

总结:kalman滤波后的误差小于测量值误差;信息融合算法后的值更加接近真实值。

参考文献:[1]https://blog.csdn.net/gdut2015go/article/details/54139682

                  [2]《kalman滤波理论及其在导航系统中的应用》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139988.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 复变函数—–区域「建议收藏」

    复变函数—–区域「建议收藏」邻域、去心邻域平面上以Z0为中心,δ(任意的正数)为半径的圆:|Z-Z0|<δ内部的点的集合称为Z0的邻域,而称由不等式0<|Z-Z0|<δ所确定的点集为Z0的去心邻域。内点、开集设G为一平面点集,Z0为G中任意一点,如果存在Z0的一个邻域,该邻域内的所有点都属于G,那么称Z0为G的内点。如果G内的每个点都是它的内点,那么称G为开集。区域平面点集D称为一个区域,如果满足下列两个条件:1.D是一个开集;2.D是连通的,就是说D中任何两点都可以用完全属于D的一条折线连

    2022年7月15日
  • ​Docker 数据卷的管理及自动构建docker镜像

    ​Docker 数据卷的管理及自动构建docker镜像

    2022年2月17日
  • tkmapper教程_tkr和tka的区别

    tkmapper教程_tkr和tka的区别tkMapper入门1、tkMapper介绍1.1SpringBoot整合MyBatis以及tkMapper1.2在启动类上修改注解`@MapperScan`2、tkMapper的使用2.1创建数据表2.2创建实体类2.3创建Mapper接口2.4测试3、tkMapper的常用方法3.1类别实体类3.2类别接口增加修改删除查询查询所有根据主键查询条件查询分页查询带条件的分页查询关联查询1、通过多个单表操作实现2、自定义连接查询2.1、在DAO接口自定义方法2.2、创建Mapper文件1、

    2022年10月7日
  • jq 获取有焦点的input_jquery获得焦点和失去焦点

    jq 获取有焦点的input_jquery获得焦点和失去焦点前端网站中如果存在一些让用户填写内容的表单元素的话,我们可以使用JQ中获得焦点事件和失去焦点事件,来给用户作出一些提示的内容。今天我们就说一说JQuery下获得焦点和失去焦点的事件的使用方法。jqueryfocus()获得焦点事件focus()方法:当通过鼠标点击选中元素或通过tab键定位到元素时,该元素就会获得焦点。语法:例:input输入框获得焦点时改变其边框的颜色示例代码:当鼠标移入…

    2022年6月24日
  • 步入J2EE架构和过程「建议收藏」

    步入J2EE架构和过程「建议收藏」标 题:步入J2EE架构和过程发信站:BBS水木清华站(FriApr2616:02:082002)本文转自赛迪网开发者developer.ccidnet.com摘要Java2企业版(J2EE)平台由四个关键部分构成:规格说明、参考实现、兼容性测试套件和蓝图(BluePrint)计划。蓝图描绘了分布式组件架构最好的实践和设计指导方针。本文基于Rational统一过程和Bl

    2022年10月30日
  • SNMP 协议[通俗易懂]

    SNMP 协议[通俗易懂]一、SNMP协议概述简单网络管理协议(SNMP:SimpleNetworkManagementProtocol)是由互联网工程任务组(IETF:InternetEngineeringTaskForce)定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:SimpleGatewayMonitorProtocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理

    2022年10月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号