卡尔曼滤波程序

上传人:新** 文档编号:503860971 上传时间:2023-01-24 格式:DOC 页数:7 大小:51.50KB
返回 下载 相关 举报
卡尔曼滤波程序_第1页
第1页 / 共7页
卡尔曼滤波程序_第2页
第2页 / 共7页
卡尔曼滤波程序_第3页
第3页 / 共7页
卡尔曼滤波程序_第4页
第4页 / 共7页
卡尔曼滤波程序_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《卡尔曼滤波程序》由会员分享,可在线阅读,更多相关《卡尔曼滤波程序(7页珍藏版)》请在金锄头文库上搜索。

1、最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kojimor等队的研究工作,后人统称为维纳滤波理论。从理论上说,维纳滤波的最大缺点是必须用到无限过去的数据,不适用于实时处理。为了克服这一缺点,60年代Kalman把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。卡尔曼滤波是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。它适合于实时处理和计算机运算。现设线性时变系统的离散状态防城和观测方程为:X(k)=F(k,k

2、-1)X(k-1)+T(k,k-1)U(k-1)Y(k)=H(k)X(k)+N(k)其中X(k)和Y(k)分别是k时刻的状态矢量和观测矢量F(k,k-1)为状态转移矩阵U(k)为k时刻动态噪声T(k,k-1)为系统控制矩阵H(k)为k时刻观测矩阵N(k)为k时刻观测噪声则卡尔曼滤波的算法流程为:1. 预估计X(k)A=F(k,k-1)X(k-1)2. 计算预估计协方差矩阵C(k)A=F(k,k-1)xC(k)xF(k,k-1)+T(k,k-1)xQ(k)xT(k,k-1)Q(k)=U(k)义U(k)3. 计算卡尔曼增益矩阵K(k)=C(k)AxH(k)xH(k)乂C(k)A乂H(k)+R(k)

3、A(-1)R(k)=N(k)xN(k)4. 更新估计X(k)=X(k)A+K(k)xY(k)-H(k)xX(k)A5. 计算更新后估计协防差矩阵C(k)-=I-K(k)xH(k)xC(k)A乂I-K(k)乂H(k)+K(k)乂R(k)乂K(k)6. X(k+1)=X(k)-C(k+1)=C(k)-重复以上步骤其c语言实现代码如下:#includestdlib.h#includerinv.c_intlman(n,m,k,f,q,r,h,y,x,p,g)intn,m,k;doublef,q,r,h,y,x,p,g口;UUinti,j,kk,ii,l,jj,js;I_TIrT帕Tdouble*e,*

4、a,*b;e=malloc(m*m*sizeof(double);l=m;if(ln)l=n;a=malloc(l*l*sizeof(double);b=malloc(l*l*sizeof(double);for(i=0;i=n-1;i+)for(j=0;j=n-1;j+) ii=i*l+j;aii=0.0;for(kk=0;kk=n-1;kk+)aii=aii+pi*n+kk*fj*n+kk;)for(i=0;i=n-1;i+)for(j=0;j=n-1;j+) ii=i*n+j;pii=qii;for(kk=0;kk=n-1;kk+)pii=pii+fi*n+kk*akk*l+j;)for

5、(ii=2;ii=k;ii+) for(i=0;i=n-1;i+)for(j=0;j=m-1;j+)jj=i*l+j;ajj=0.0;for(kk=0;kk=n-1;kk+)ajj=ajj+pi*n+kk*hj*n+kk;)for(1=0;l=m-1;I+)for(j=0;j=m-1;j+)jj=I*m+j;ejj=rjj;for(kk=0;kk=n-1;kk+)ejj=ejj+hI*n+kk*akk*l+j;)js=rinv(e,m);If(js=0)free(e);free(a);free(b);return(js);for(i=0;i=n-1;i+)for(j=0;j=m-1;j+)jj

6、=i*m+j;gjj=0.0;for(kk=0;kk=m-1;kk+)gjj=gjj+ai*l+kk*ej*m+kk;for(i=0;i=n-1;i+)jj=(ii-1)*n+i;xjj=0.0;for(j=0;j=n-1;j+)xjj=xjj+fi*n+j*x(ii-2)*n+j;for(i=0;i=m-1;i+)jj=i*l;bjj=y(ii-1)*m+i;for(j=0;j=n-1;j+)bjj=bjj-hi*n+j*x(ii-1)*n+j;for(i=0;i=n-1;i+)jj=(ii-1)*n+i;for(j=0;j=m-1;j+)xjj=xjj+gi*m+j*bj*l;if(iik

7、)for(i=0;i=n-1;i+)for(j=0;j=n-1;j+)jj=i*l+j;ajj=0.0;for(kk=0;kk=m-1;kk+)ajj=ajj-gi*m+kk*hkk*n+j;if(i=j)ajj=1.0+ajj;for(i=0;i=n-1;i+)for(j=0;j=n-1;j+)jj=i*l+j;bjj=0.0;forbjj=bjj+ai*l+kk*pkk*n+j;)for(i=0;i=n-1;i+)for(j=0;j=n-1;j+)jj=i*l+j;ajj=0.0;for(kk=0;kk=n-1;kk+)ajj=ajj+bi*l+kk*fj*n+kk;)for(i=0;i=

8、n-1;i+)自由for(j=0;j=n-1;j+)jj=i*n+j;pjj=qjj;for(kk=0;kk1000# pragmaonce# endif/_MSC_VER1000#include#includecv.hclasskalman(public:voidinit_kalman(intx,intxv,inty,intyv);CvKalman*cvkalman;CvMat*state;CvMat*process_noise;CvMat*measurement;constCvMat*prediction;CvPoint2D32fget_predict(floatx,floaty);kal

9、man(intx=0,intxv=0,inty=0,intyv=0);/virtualkalman();#endif/!defined(AFX_KALMAN_H_ED3D740F_01D2_4616_8B74_8BF57636F2c0_INCLUDED_)=kalman.cpp=#includekalman.h#include/*testerdeprintertouteslesvaleursdesvecteurs,_*/*testerdechangerlesmatricesdunoises*/*replacestatebycvkalman-state_post?*/CvRandStaterng

10、;constdoubleT=0.1;kalman:kalman(intx,intxv,inty,intyv)(cvkalman=cvCreateKalman(4,4,0);state=cvCreateMat(4,1,CV_32FC1);process_noise=cvCreateMat(4,1,CV_32FC1);measurement=cvCreateMat(4,1,CV_32FC1);intcode=-1;/*creatematrixdata*/constfloatA口=1,T,0,0,0,1,0,0,0,0,1,T,0,0,0,1);constfloatH=1,0,0,0,0,0,0,0

11、,0,0,1,0,0,0,0,0);constfloatP=pow(320,2),pow(320,2)/T,0,0,pow(320,2)/T,pow(320,2)/pow(T,2),0,0,0,0,pow(240,2),pow(240,2)/T,0,0,pow(240,2)/T,pow(240,2)/pow(T,2);constfloatQ口=pow(T,3)/3,pow(T,2)/2,0,0,pow(T,2)/2,T,0,0,0,0,pow(T,3)/3,pow(T,2)/2,0,0,pow(T,2)/2,T);constfloatR=1,0,0,0,0,0,0,0,0,0,1,0,0,0,

12、0,0);cvRandInit(&rng,0,1,-1,CV_RAND_UNI);cvZero(measurement);cvRandSetRange(&rng,0,0.1,0);rng.disttype=CV_RAND_NORMAL;cvRand(&rng,state);memcpy(cvkalman-transition_matrix-data.fl,A,sizeof(A);memcpy(cvkalman-measurement_matrix-data.fl,H,sizeof(H);memcpy(cvkalman-process_noise_cov-data.fl,Q,sizeof(Q);memcpy(cvkalman-error_cov_post-data.fl,P,sizeof(P);memcpy(cvkalman-measurement_noise_cov-data.fl,R,sizeof(R);/cvSetIdentity(cvkalman-process_noise_cov,cvRealScalar(1e-5);/cvSetIdentity(cvkalman-error_cov_post,cvRealScalar(1);/cvSetIdentity(cvkalman-measurement_noise

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号