最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

卡尔曼滤波的MATLAB实现

来源:动视网 责编:小OO 时间:2025-09-27 11:36:06
文档

卡尔曼滤波的MATLAB实现

卡尔曼滤波的MATLAB实现一、实验内容一个系统模型为同时有下列条件:(1)初始条件已知且有。(2)是一个标量零均值白高斯序列,且自相关函数已知为。另外,我们有下列观测模型,即且有下列条件:(3)和是的零均值白高斯序列,且有(4)对于所有的j和k,与观测噪声过程和是不相关的,即我们希望得到由观测矢量,即估计状态矢量的卡尔曼滤波器的公式表示形式,并求解以下问题:(a)求出卡尔曼增益矩阵,并得出最优估计和观测矢量之间的递归关系。(b)通过一个标量框图(不是矢量框图)表示出状态矢量中元素和估计值
推荐度:
导读卡尔曼滤波的MATLAB实现一、实验内容一个系统模型为同时有下列条件:(1)初始条件已知且有。(2)是一个标量零均值白高斯序列,且自相关函数已知为。另外,我们有下列观测模型,即且有下列条件:(3)和是的零均值白高斯序列,且有(4)对于所有的j和k,与观测噪声过程和是不相关的,即我们希望得到由观测矢量,即估计状态矢量的卡尔曼滤波器的公式表示形式,并求解以下问题:(a)求出卡尔曼增益矩阵,并得出最优估计和观测矢量之间的递归关系。(b)通过一个标量框图(不是矢量框图)表示出状态矢量中元素和估计值
卡尔曼滤波的MATLAB实现

一、实验内容

    一个系统模型为

                    

同时有下列条件:

(1)初始条件已知且有。

(2)是一个标量零均值白高斯序列,且自相关函数已知为。

另外,我们有下列观测模型,即

                   

且有下列条件:

(3)和是的零均值白高斯序列,且有

          

(4)对于所有的j和k,与观测噪声过程和是不相关的,即

          

我们希望得到由观测矢量,即估计状态矢量的卡尔曼滤波器的公式表示形式,并求解以下问题:

(a)求出卡尔曼增益矩阵,并得出最优估计和观测矢量之间的递归关系。

(b)通过一个标量框图(不是矢量框图)表示出状态矢量中元素和估计值的计算过程。

(c)用模拟数据确定状态矢量的估计值并画出当k=0,1,…,10时和的图。

(d)通常,状态矢量的真实值是得不到得。但为了用作图来说明问题,表P8.1和P8.2给出来状态矢量元素得值。对于k=0,1,…,10,在同一幅图中画出真实值和在(c)中确定的的估计值。对重复这样过程。当k从1变到10时,对每一个元素i=1,2,计算并画出各自的误差图,即。

(e)当k从1变到10时,通过用卡尔曼滤波器的状态误差协方差矩阵画出和,而,。

(f)讨论一下(d)中你计算的误差与(e)中方差之间的关系。

二、实验原理

1、卡尔曼滤波简介

卡尔曼滤波是解决以均方误差最小为准则的最佳线性滤波问题,它根据前一个估计值和最近一个观察数据来估计信号的当前值。它是用状态方程和递推方法进行估计的,而它的解是以估计值(常常是状态变量的估计值)的形式给出其信号模型是从状态方程和量测方程得到的。

卡尔曼过滤中信号和噪声是用状态方程和测量方程来表示的。因此设计卡尔曼滤波器要求已知状态方程和测量方程。它不需要知道全部过去的数据,采用递推的方法计算,它既可以用于平稳和不平稳的随机过程,同时也可以应用解决非时变和时变系统,因而它比维纳过滤有更广泛的应用。

2、卡尔曼滤波的递推公式

………(1)        

………(2)

………(3)

………(4)

3、递推过程的实现

如果初始状态的统计特性及已知,并

令                     

又              

将代入式(3)可求得,将代入式(2)可求得,将此代入式(1)可求得在最小均方误差条件下的,同时将代入式(4)又可求得;由又可求,由又可求得,由又可求得,同时由与又可求得……;以此类推,这种递推计算方法用计算机计算十分方便。

三、MATLAB程序

%卡尔曼滤波实验程序

clc;

y1=[3.29691969,3.38736515,7.028301,9.71212521,11.42018315,15.97870583,22.06934285,28.30212781,30.44683831,38.75875595];  %观测值y1(k)

y2=[2.10134294,0.47540797,3.176888,2.49811140,2.91992424,6.17307616,5.42519274,3.05365741,5.98051141,4.51016361];        %观测值y2(k)

p0=[1,0;0,1];p=p0;  %均方误差阵赋初值

Ak=[1,1;0,1];       %转移矩阵

Qk=[1,0;0,1];       %系统噪声矩阵

Ck=[1,0;0,1];       %量测矩阵

Rk=[1,0;0,2];       %测量噪声矩阵

x0=[0,0]';xk=x0;    %状态矩阵赋初值

for k=1:10

    Pk=Ak*p*Ak'+Qk;               %滤波方程3

    Hk=Pk*Ck'*inv(Ck*Pk*Ck'+Rk);  %滤波方程2

    yk=[y1(k);y2(k)];             %观测值

    xk=Ak*xk+Hk*(yk-Ck*Ak*xk);    %滤波方程1

    x1(k)=xk(1);

    x2(k)=xk(2);                  %记录估计值

    p=(eye(2)-Hk*Ck)*Pk;          %滤波方程4

    pk(:,k)=[p(1,1),p(2,2)]';     %记录状态误差协方差矩阵

end

figure    %画图表示状态矢量的估计值

subplot(2,1,1)

i=1:10;

plot(i,x1(i),'k')

h=legend('x1(k)的估计值')

set(h,'interpreter','none')

subplot(2,1,2)

i=1:10;

plot(i,x2(i),'k')

h=legend('x2(k)的估计值')

set(h,'interpreter','none')

X1=[0,1.65428714,3.50300702,5.997852924,9.15040740,12.50873910,16.92192594,21.34483352,25.335144,31.54135330,36.93605670];  %由模拟得到的实际状态值X1(k)

X2=[0,1.65428714,1.84871988,2.47552222,3.17187816,3.35833170,4.41318684,4.42290758,4.54851792,5.800186,5.394470340];        %由模拟得到的实际状态值X2(k)

figure    %在同一幅图中画出状态矢量的估计值与真实值

subplot(2,1,1)

i=1:10;

plot(i,x1(i),'k',i,X1(i+1),'b')

h=legend('x1(k)的估计值','x1(k)的真实值')

set(h,'interpreter','none')

subplot(2,1,2)

i=1:10;

plot(i,x2(i),'k',i,X2(i+1),'b')

h=legend('x2(k)的估计值','x2(k)的真实值')

set(h,'interpreter','none')

for i=1:10   %计算x(k)的误差

    e1(i)=X1(i+1)-x1(i);

    e2(i)=X2(i+1)-x2(i);

end

figure       %画出误差图

subplot(2,1,1)

i=1:10;

plot(i,e1(i),'r')

h=legend('x1(k)的误差')

set(h,'interpreter','none')

subplot(2,1,2)

i=1:10;

plot(i,e2(i),'r')

h=legend('x2(k)的误差')

set(h,'interpreter','none')

figure       %通过用卡尔曼滤波器的状态误差协方差矩阵画出E[ε1(k/k)^2]和E[ε2(k/k)^2]

i=1:10;

subplot(2,1,1)

plot(i,pk(1,i),'r')

 h= legend('由状态误差协方差矩阵得到的E[ε1(k/k)^2]')

set(h,'Interpreter','none')

subplot(2,1,2)

plot(i,pk(2,i),'r')

h= legend('由状态误差协方差矩阵得到的E[ε2(k/k)^2]')

set(h,'Interpreter','none')

四、实验结果分析

(a)卡尔曼增益矩阵:

估计值与观测值之间的递归关系为:

(b)状态矢量估计值的计算框图:

(c)和的图:

(d)真实值与估计值的比较图:

各自的误差图:

(e)通过用卡尔曼滤波器的状态误差协方差矩阵画出的和:

(f)分析:(e)中的方差是(d)中的误差平方后取均值,是均方误差。误差直接由真实值减去估计值,有正有负,而均方误差没有这个缺陷,更能综合的表示滤波的效果。

文档

卡尔曼滤波的MATLAB实现

卡尔曼滤波的MATLAB实现一、实验内容一个系统模型为同时有下列条件:(1)初始条件已知且有。(2)是一个标量零均值白高斯序列,且自相关函数已知为。另外,我们有下列观测模型,即且有下列条件:(3)和是的零均值白高斯序列,且有(4)对于所有的j和k,与观测噪声过程和是不相关的,即我们希望得到由观测矢量,即估计状态矢量的卡尔曼滤波器的公式表示形式,并求解以下问题:(a)求出卡尔曼增益矩阵,并得出最优估计和观测矢量之间的递归关系。(b)通过一个标量框图(不是矢量框图)表示出状态矢量中元素和估计值
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top