没有合适的资源?快使用搜索试试~ 我知道了~
首页卡尔曼滤波__c语言源代码
卡尔曼滤波__c语言源代码
4星 · 超过85%的资源 需积分: 2 47 下载量 175 浏览量
更新于2023-06-06
评论 1
收藏 2.03MB DOC 举报
最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kолмогоров等人的研究工作, 后人统称为维纳滤波理论。从理论上说,维纳滤波的最大缺点是必须用到无限过去的数据,不适用于实时处理。 为了克服这一缺点,60年代Kalman把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。 卡尔曼滤波是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型, 利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。它适合于实时处理和计算机运算。
资源详情
资源评论
资源推荐
卡尔曼滤波简介及其算法实现代码
卡尔曼滤波算法实现代码( , ++分别实现)
卡尔曼滤波器简介
近来发现有些问题很多人都很感兴趣。所以在这里希望能尽自己能力跟大家讨论一些力所能
及的算法。现在先讨论一下卡尔曼滤波器,如果时间和能力允许,我还希望能够写写其他的算
法,例如遗传算法,傅立叶变换,数字滤波,神经网络,图像处理等等。
因为这里不能写复杂的数学公式,所以也只能形象的描述。希望如果哪位是这方面的专家,欢
迎讨论更正。
卡尔曼滤波器 –
. 什么是卡尔曼滤波器
()
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,
泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人!
卡尔曼全名 ,匈牙利数学家, 年出生于匈牙利首都布达佩斯。
, 年于麻省理工学院分别获得电机工程学士及硕士学位。 年于哥伦比亚大学
获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和 年发表的论
文《 !" ##$%&'$'(》(线性滤波与预测
问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载:
#)**"""+$+$+*,"$**#*+# 。
简单来说,卡尔曼滤波器是一个“#$-#$&&(最优化自
回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的
广泛应用已经超过 年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系
统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边
缘检测等等。
..卡尔曼滤波器的介绍
(/$)
为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数
参考书那样罗列一大堆的数学公式和数学符号。但是,他的 条公式是其核心内容。结合现代
的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那 条公式。
在介绍他的 条公式之前,先让我们来根据下面的例子一步一步的探索。
假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也
就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对
你的经验不是 0的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声
(1!),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配
(12()。另外,我们在房间里放一个温度计,但是这个温度计也不准确
的,测量值会与有实际值偏差。我们也把这些偏差看成是高斯白噪声。
好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预
测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的
实际温度值。
假如我们要估算 3 时刻的是实际温度值。首先你要根据 34 时刻的温度值,来预测 3 时刻的温
度。因为你相信温度是恒定的,所以你会得到 3 时刻的温度预测值是跟 34 时刻一样的,假设
是 . 度,同时该值的高斯噪声的偏差是 度( 是这样得到的:如果 34 时刻估算出的最优温
度值的偏差是 ,你对自己预测的不确定度是 度,他们平方相加再开方,就是 )。然后,
你从温度计那里得到了 3 时刻的温度值,假设是 . 度,同时该值的偏差是 度。
由于我们用于估算 3 时刻的实际温度有两个温度值,分别是 . 度和 . 度。究竟实际温度是多
少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的 $-$ 来判
断。因为 &5.65.*75.85.9,所以 &6+:,我们可以估算出 3 时刻的实际温度值
是:.8+:;7.4.96.+ 度。可以看出,因为温度计的 $-$ 比较小(比较相
信温度计),所以估算出的最优温度值偏向温度计的值。
现在我们已经得到 3 时刻的最优温度值了,下一步就是要进入 38 时刻,进行新的最优估算。
到现在为止,好像还没看到什么自回归的东西出现。对了,在进入 38 时刻之前,我们还要
算出 3 时刻那个最优值(.+ 度)的偏差。算法如下:774&9;5.95+6.+。这里的
就是上面的 3 时刻你预测的那个 . 度温度值的偏差,得出的 .+ 就是进入 38 时刻以后 3
时刻估算出的最优温度值的偏差(对应于上面的 )。
就是这样,卡尔曼滤波器就不断的把 $-$ 递归,从而估算出最优的温度值。他运行的
很快,而且它只保留了上一时刻的 $-$。上面的 &,就是卡尔曼增益(
1)。他可以随不同的时刻而改变他自己的值,是不是很神奇!
下面就要言归正传,讨论真正工程系统上的卡尔曼。
. 卡尔曼滤波器算法
(< &)
在这一部分,我们就来描述源于 2的卡尔曼滤波器。下面的描述,会涉及一些基本
的概念知识,包括概率('((=),随即变量(>(),高斯或正态分配
(12()还有 ?4#$@ 等等。但对于卡尔曼滤波器的详细证明,
这里不能一一描述。
首先,我们先要引入一个离散控制过程的系统。该系统可用一个线性随机微分方程(%
?$$2A$B)来描述:
C7396 C73498DE7398739
再加上系统的测量值:
F7396GC7398>739
上两式子中,C739是 3 时刻的系统状态,E739是 3 时刻对系统的控制量。 和 D 是系统参数,
对于多模型系统,他们为矩阵。F739是 3 时刻的测量值,G是测量系统的参数,对于多测量系
统,G 为矩阵。739和 >739分别表示过程和测量的噪声。他们被假设成高斯白噪声7
1!9,他们的 $-$分别是 H,(这里我们假设他们不随系统状态变化
而变化)。
对于满足上面的条件7线性随机微分系统,过程和测量都是高斯白噪声9,卡尔曼滤波器是最优
的信息处理器。下面我们来用他们结合他们的 $-$来估算系统的最优化输出(类似上
一节那个温度的例子)。
首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是 3,根据系
统的模型,可以基于系统的上一状态而预测出现在状态:
C73I3496 C734I3498DE739JJJ++79
式79中,C73I349是利用上一状态预测的结果,C734I349是上一状态最优的结果,E739为现
在状态的控制量,如果没有控制量,它可以为 。
到现在为止,我们的系统结果已经更新了,可是,对应于 C73I349的 $-$ 还没更新。
我们用 ' 表示 $-$:
'73I3496 '734I349 K8HJJJ7.9
式 7.9中,'73I349是 C73I349对应的 $-$,'734I349是 C734I349对应的
$-$, K表示 的转置矩阵,H 是系统过程的 $-$。式子 ,. 就是卡尔曼滤
波器 个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值和测量值,
我们可以得到现在状态739的最优化估算值 C73I39:
C73I396C73I3498&7397F7394GC73I3499JJJ79
其中 & 为卡尔曼增益719:
&7396'73I349GK*7G'73I349GK89JJJ79
到现在为止,我们已经得到了 3 状态下最优的估算值 C73I39。但是为了要另卡尔曼滤波器不断
的运行下去直到系统过程结束,我们还要更新 3 状态下 C73I39的 $-$:
'73I396(/4&739G)'73I349JJJ79
其中 /为 的矩阵,对于单模型单测量,/6。当系统进入 38 状态时,'73I39就是式子7.9的
'734I349。这样,算法就可以自回归的运算下去。
卡尔曼滤波器的原理基本描述了,式子 ,.,, 和 就是他的 个基本公式。根据这 个
公式,可以很容易的实现计算机的程序。
下面,我会用程序举一个实际运行的例子。。。
. 简单例子
( ?#L#)
这里我们结合第二第三节,举一个非常简单的例子来说明卡尔曼滤波器的工作过程。所举的例
子是进一步描述第二节的例子,而且还会配以程序模拟结果。
根据第二节的描述,把房间看成一个系统,然后对这个系统建模。当然,我们见的模型不需要
非常地精确。我们所知道的这个房间的温度是跟前一时刻的温度相同的,所以 6。没有控制
量,所以 E7396。因此得出:
C73I3496C734I349JJJ++79
式子(.)可以改成:
'73I3496'734I3498HJJJ79
因为测量的值是温度计的,跟温度直接对应,所以 G6。式子 ,, 可以改成以下:
C73I396C73I3498&7397F7394C73I3499JJJ7:9
&7396'73I349*7'73I34989JJJ79
'73I396(4&739)'73I349JJJ79
现在我们模拟一组测量值作为输入。假设房间的真实温度为 . 度,我模拟了 . 个测量值,
这些测量值的平均值为 . 度,但是加入了标准偏差为几度的高斯白噪声(在图中为蓝线)。
为了令卡尔曼滤波器开始工作,我们需要告诉卡尔曼两个零时刻的初始值,是 C7I9和 '7I
9。他们的值不用太在意,随便给一个就可以了,因为随着卡尔曼的工作,C 会逐渐的收敛。
但是对于 ',一般不要取 ,因为这样可能会令卡尔曼完全相信你给定的 C7I9是系统最优的,
从而使算法不能收敛。我选了 C7I96 度,'7I96。
该系统的真实温度为 . 度,图中用黑线表示。图中红线是卡尔曼滤波器输出的最优化结果
(该结果在算法中设置了 H64,64)。
最佳线性滤波理论起源于 40年代美国科学家 Wiener和前苏联科学家K олмогоров等人的研究
工作,后人统称为维纳滤波理论。从理论上说,维纳滤波的最大缺点是必须用到无限过去的数
据,不适用于实时处理。为了克服这一缺点, 60年代 Kalman把状态空间模型引入滤波理论,
并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。卡尔曼滤波是以最小均方误差为估
计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,
利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。它
适合于实时处理和计算机运算。
现设线性时变系统的离散状态方程和观测方程为:
C739673M349NC73498<73M349NE7349
O7396G739NC7398!739
其中
剩余19页未读,继续阅读
皮蛋瘦肉
- 粉丝: 70
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2