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滤波理论及其在导航系统中的应用》

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js查询手机号码归属地[通俗易懂]

    js查询手机号码归属地[通俗易懂]js查询手机号码归属地

  • golang 进制转换_java string转integer

    golang 进制转换_java string转integer1-Youmaywriteyourconversionfunction(Fastest):funcString(nint32)string{buf:=[11]byte{}pos:=len(buf)i:=int64(n)signed:=i<0ifsigned{i=-i}for{pos–buf[pos],i=’0’+byt

  • 怎么安装汉化包(svn中文语言包安装)

    检查SVN与汉化包的版本是否一致1、查看tortoiseSVN的版本2、在SVN的安装目录下,将对应版本的汉化包拷过去注意,保证Languages目录下的文件都已删掉3、双击安装汉化包,安装完成时,在出现的最后一个页面中,选中ConfigureTortoiseSVNtousethislanguage即可直接应用。SVN1.12.1对应汉化包的…

  • Ubuntu 20.04 LTS上安装Edge浏览器

    Ubuntu 20.04 LTS上安装Edge浏览器文章目录Ubuntu20.04LTS上安装Edge浏览器Ubuntu20.04LTS上安装Edge浏览器本文部分内容转载自:HowtoInstallMicrosoftEdgeBrowseronUbuntu20.04|Linuxize,亲自安装测试并验证。Edge浏览器在各主要OS上均有正式版本发布,但是在Ubuntu上没有一个正式发布的版本。在Ubuntu上打开DownloadMicrosoftEdgeBrowser|Microsoft网页上看到不支持Ubuntu系

  • QXDM操作应用_飞机QDM

    QXDM操作应用_飞机QDMQXDM(TheQUALCOMMExtensibleDiagnosticMonitor)是高通公司(Qualcomm)公司发布的可以对手机终端所发数据进行跟踪有效工具,通过对数据的分析可以诊断信令流程、分析数据包的正确与否等。在测试中有重要作用,正确合理的使用可以为我们测试提供便捷的定位手段。QXDM是利用QPSTServer(Section3.3.1.1),通过USB延长线或…

  • phpspreadsheet中文手册_php file_put_contents

    phpspreadsheet中文手册_php file_put_contents今天遇到一个问题,涉及php与excel之间数据转换。之前一直用PHPExcel,他们的开发组不更新了。但是找到了PhpSpreadsheet。一、介绍用纯php编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式支持格式环境要求php5.6及以上php_zip支持并启用php_xml支持并启用php_gd2支持并启用安装>composerrequi…

发表回复

您的电子邮箱地址不会被公开。

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