文档介绍:Kalman滤波算法
Kalman滤波算法
Kalman滤波算法
Kalman滤波算法
姓名:刘金强
专业:控制理论与控制工程
学号:2007255
◆实验目的:
(1)、掌握klman滤波实现的原理和方法
(2)、掌握状态向量预测公式的实现过程
(3)、了解Riccati差分方程实现的过程和新息的基本性质和过程的计算
◆实验要求:
问题:
F=[a1,a2,a3],其中a1=[ 0 0]的转置,a2=[0.3 1.0 0]的转置,a3=[0。1 0。2 0。4]的转置,x(0)=[3,—1,2]的转置;C=[b1,b2,b3],其中b1=[ 0。5]的转置,b2=[1,0。4]的转置,b3=[0.8 —0。7]的转置;V1(n)=[0 0 n1(n)sin(0.1n)]的转置,V2(n)=[n2(n) n3(n)];n1(n)为均值为零,方差为1的均匀分布白噪声;n2(n),n3(n)为均值为0,,n1(n),n2(n),n3(n)相互独立,试用卡尔曼滤波器算法估计x^(n)。
◆实验原理:
初始条件:
=E{x(1)}
K(1,0)=E{[x(1)- ][x(1)— ]},其中=E{x(1)}
输入观测向量过程:
观测向量序列={y(1),…………y(n)}
已知参数:
状态转移矩阵F(n+1,n)
观测矩阵C(n)
过程噪声向量的相关矩阵
观测噪声向量的相关矩阵
计算:n=1,2,3,………………。
G(n)=F(n+1,n)K(n,n+1)
Kalman滤波算法
Kalman滤波算法
Kalman滤波算法
Kalman滤波器是一种线性的离散时间有限维系统。Kalman滤波器的估计性能是:它使滤波后的状态估计误差的相关矩阵P(n)的迹最小化。这意味着,kalman滤波器是状态向量x(n)的线性最小方差估计。
◆实验结果:
◆程序代码:
(1)主程序
/********************************************************************
问题:
F=[a1,a2,a3],其中a1=[ 0 0]的转置,a2=[0。3 0]的转置,
a3=[0。1 0.2 0.4]的转置,x(0)=[3,—1,2]的转置;C=[b1,b2,b3],其中b1=[0。3 ]的转置,b2=[1,]的转置,b3=[0。8 —]的转置;V1(n)=[0 0 n1(n)sin(0.1n)]的转置,V2(n)=[n2(n) n3(n)];n1(n)为均值为零,方差为1的均匀分布白噪声;n2(n),n3(n)为均值为0,方差为0。1的均匀分布白噪声,n1(n),n2(n),n3(n)相互独立,试用卡尔曼滤波器算法估计x^(n)。
********************************************************************* 设计作者:刘金强
设计时间:2008年11月22日
作者专业:控制理论与控制工程
作者学号:2007255
********************************************************************/
#include 〈iostream。h〉
#include "MathMatrix。h”
Kalman滤波算法
Kalman滤波算法
Kalman滤波算法
#include 〈math。h〉
#include <string.h>
void GaussInverse(double **a, int n);
#define NUM 80 //最大序列数
void main()
{
CMathMatrix MM;
ﻩint i;
ﻩint j, w;
ﻩdouble F[3][3] = {1.0,0。3,0.1, 0, 0。1,0。2,0, 0, 0。4}; //状态转移矩阵
double F_1[3][3] = {1.0,,0。1,0, ,,0, 0, }; //状态转移矩阵的逆
ﻩdouble **FN = new double * [3]; //申请内存空间
ﻩfor (i = 0; i < 3; i++)
{
ﻩﻩFN[i] = new do