首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 基于FPGA的Kalman滤波器实现研究
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于FPGA的Kalman滤波器实现研究
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-4-26 23:32
|
只看该作者
基于FPGA的Kalman滤波器实现研究
控制系统
,
导航系统
,
滤波器
,
成本
,
动态
Kalman滤波理论在20世纪60年代一经提出,便得到了军事、控制、通信等领域的极广泛的应用。它可以实现随机干扰下的线性动态系统的最优估计,目前Kalman滤波器的实现方式主要有两种,一是在PC机上实现,可以同时满足计算精度和实时性的要求,但是PC机体积大,质量重,成本高;二是通过DSP等芯片来实现,用这种方式实现的Kalman滤波器虽然体积小,质量轻,但是因其指令顺序执行的CPU架构,在系统复杂时无法满足系统的实时性要求。随着控制系统的复杂性的提高,系统的阶次变大,如组合导航系统的滤波,其滤波的阶次一般都要18阶,如果对系统进一步细化建模或增加其复杂性,其滤波阶次可以达到几十阶。因此,Kalman滤波器在工程应用中的实现遇到了系统体积、重量、成本和系统精度、速度等性能不能兼顾的问题。随着现代电子技术的发展,FPGA具有系统结构和逻辑单元灵活、集成度高以及适用范围宽等特点,可以很好地解决这个难题。因为FPGA采用的是硬件并行算法,能很好的解决速度和实时性的问题,并且其具有灵活的可配置特性和优良的抗干扰能力,使得FPGA构成的数字信号处理系统非常易于修改、测试及硬件升级。随着FPGA技术的不断成熟,其内嵌资源不断丰富,硬核乘法器和块RAM的数目不断增长,使得FPGA实现复杂的数字信号处理算法变得更为简单和快速。因此,本文对FPGA技术和Kalman滤波算法进行结合研究,探索Kalman滤波算法在FPGA中的实现方式并进行性能验证,以对基于FPGA的Kalman滤波算法的工程实现提供参考。
1 Kalman滤波算法理论
Kalman滤波是在时域内以信号的一、二阶统计特性已知为前提、以均方误差极小为判据,能自动跟踪信号统计性质的非平稳变化,具有递归性质的一种算法。它处理的对象是随机系统,并能正确估计出有用信号。设离散系统差分方程如下:
则Kalman滤波方程组如下: 状态一步预测方程:[[wysiwyg_imageupload:590:]] 从式(1)~(6)可知,若利用传统的处理器实现Kalman滤波算法,由于其指令执行的顺序性,至少需要分为5步来实现,其中每一步还都需要进行至少1次的加法和乘法等运算,每次运算都要顺序执行,其执行速度和效率很低;如果利用FPGA来进行Kalman滤波,根据其各步的逻辑关系,可以分为3步来实现,即第一步计算状态一步预测值
和一步预测均方误差Pk+1/k,第二步计算滤波增益Kk+1,第三步计算状态最优估值
和估计均方误差Pk+1/k+1。由此可知,利用FPGA技术可以实现Kalman滤波的并行计算,压缩计算时间,提高解算速度。因此,对FPGA的Kalman滤波进行研究开发,可实现基于FPGA的快速Kalman滤波解算,满足在对实时性要求更高的环境中使用。
2 在FPGA中实现Kalman滤波算法研究
由于FPGA实现Kalman滤波解算速度非常快,若利用FPGA的串行口依次输入观测值,由于数据串行输入的特点,会使FPGA的解算部分等待数据接收完毕才能执行滤波解算,导致整体的解算时间过长。为检验FPGA实现Kalman滤波器的计算性能,本文预先将观测值输入并保存于FPGA内的ROM中,以使FPGA可以连续地进行滤波解算,实现方案原理如图1所示。 [[wysiwyg_imageupload:591:]] 图1中,Kalman滤波解算在FPGA内完成,RAM和ROM使用FPGA内嵌的硬件RAM存储器,其中RAM暂存每步的中间结果,ROM存放滤波中的固定系数,如观测矩阵、噪声系数阵等。Kalman滤波的解算过程主要利用内嵌的硬核乘法器等资源来完成。因解算速度较快,解算结果暂存于一个稍大的存储器内,同时通过串行口输出到PC机上保存用于分析。该方案的关键问题是在FPGA中实现Kalman滤波算法。 FPGA实现Kalman滤波器,其实质就是控制数据的转移和存储并实现矩阵的相乘、加、减、求逆等运算。其中,数据的转移控制需要有限状态机(FSM)来完成,同时FPGA设计中,不可避免的会遇到资源与速度的问题。因此,需要对上述各关键技术进行研究和实现。
2.1 矩阵相乘在FPGA中的实现
Kalman滤波计算中最基本的步骤就是矩阵相乘。对于其中最常见的D=A×B×C型的矩阵相乘,有两种实现方式:方式一,分步相乘;方式二,直接相乘。事先将矩阵A,B,C分别存入ROM1,ROM2,ROM3中,方式一中,首先进行两个矩阵的相乘,多路选择开关MUX选通ROM1和ROM2,依次读取其中的数据进行乘加,完成前面两个矩阵的相乘,结果存入ROMTEMP中;然后,MUX选通ROMTEMP和ROM3,利用前面同样的资源,完成三个矩阵的连乘。方式二中,ROM1,ROM2,ROM3同时输出数据,MUX根据解算需要配置乘法器和加法器的输入,所有的过程同时进行。从上面的执行过程可知,方式一的执行需要占用更多的时间,而方式二的执行会占用更多的资源。对于上述N阶的3个矩阵相乘,其占用资源和所需时间如表1所示。[[wysiwyg_imageupload:592:]] 由表1可知,对于维数越大的矩阵相乘,需要的浮点加法器越多。由于浮点加法器的生成利用FPGA内的基本逻辑单元——可配置逻辑块(CLB),所以其占用的CLB等资源也越多。这种现象在上述方式二中尤为突出。本文中研究拟先实现二阶Kalman滤波器,阶次较低,资源相对充足,为检验FPGA实现Kalman滤波器的快速性,选用第二种方式进行矩阵相乘,以得到最快的解算速度。
2.2 有限状态机的运用
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。Kalman滤波中,由于解算过程中的逻辑关系,需要分步进行,所以需要用有限状态机来控制各步的转移。根据各步间的逻辑关系,可以将其大致分为4个状态:S0,S1,S2和S3状态。其中,S0为初始化状态,之后进入S1状态,计算[img=40,18][/img]和Pk+1/k,然后进入S2状态,计算Kk+1,最后计算解算结果
和Pk+1/k+1。计算Kk+1时,也需要将其分步实现。若将各步的解算归于同一个状态机内,则显得逻辑复杂。为使得各步的逻辑更加清晰,并且增加状态机的稳定性和安全性,使用交互状态机,如图2所示。[[wysiwyg_imageupload:593:]] 图2中,状态机的交互过程中,没置标志信号enble和finish分别用于启动和终止计算K值的状态,初始化时其值均为0。当计算完第一步进入S2时,enble置为1,启动计算K值的状态;当K值计算完成时,finish置为1,进入S3,enble和finish置为初值0,为下次状态交互做准备。进入原状态机继续进行下面的计算。 书写状态机时,采用三段式写法,一个模块采用同步时序描述状态转移,另一个模块采用组合逻辑判断转移条件并进行状态转移,第三个模块实现同步输出。三段式描述方法的状态机,做到了同步寄存器输出,消除了组合逻辑输出的不稳定和毛刺现象,而且更利于时序路径分组,综合与布局布线效果更佳。
2.3 资源分时复用
FPGA设计中,资源与速度是个矛盾体。FPGA中的资源是有限的,所以必须考虑资源的节省问题。由于Kalman滤波可以分3步进行,所以每一步可以利用其它步中相同的资源。此种方法可以在不降低总体速度的情况下,减少资源利用量;而对于阶次较高的Kalman滤波,此方法可以最大限度的增加并行性,提高速度。该设计中用到大量的乘法器、加法器以及CLB等资源,计算第一步时用到的资源会在第二步和第三步中用到,即同一资源被用到3次。以其中用到的某乘法器的分时复用为例,其输入端口在不同的时刻可以有不同的赋值,实现语句如下:
3 性能对比及分析 为验证本文研究利用FPGA实现Kalman滤波算法的性能,采用二阶Kalman滤波器进行实际性能对比测试。建立数学模型如下:选取状态转移矩阵
,无控制量,即控制阵Uk=0,噪声系数矩阵
,Wk是系统动态噪声,是均值为0、方差阵为
的白噪声随机序列,观测系数矩阵Hk+1=[1,0],Vk+1表示观测噪声,为均值为0,方差为2的白噪声;初始状态协方差阵为
。 对于该滤波器分别利用三种方式实现:采用Matlab在PC机上实现、利用DSP实现和利用FPGA实现。其中,PC机为DELL Dimension4700台式机,安装Matlab 7.0软件;DSP选用双精度浮点型
TMS320C6713
型号的芯片;FPGA型号为XC2VP30,主频100 MHz,内嵌多达136个硬核乘法器和2 MB硬件RAM。为得到更准确合理的结果,分别截取第1~3次、11~13次、21~23次的计算结果来对比。因为在PC机上利用Matlab实现的Kalman滤波器通过软件设置可以达到很高的计算精度,所以将其得到的结果作为标准值(真值),分别用FPGA实现和DSP实现的结果与其进行对比分析。选取估计均方误差阵Pk+1/k+1的第一个元素来进行对比分析各实现方式的性能,其解算结果对比如表2和表3所示。[[wysiwyg_imageupload:594:]]由表2可知,利用FPGA实现的滤波结果,其精度与用Matlab实现的精度相差无几,且略高于利用DSP实现的单精度的结果。由表3可知,在解算时间方面,利用FPGA实现方式的快速性远远高于利用其他两种方式。而且,对于阶次越高的Kalman滤波器的实现,传统处理器所需的时间越长,利用FPGA实现方式的时间的优越性越显著。
4 结语
针对Kalman滤波的传统实现方法的不足,本文提出利用具有可并行计算特点的FPGA来实现Kalman滤波的方案,并对FPGA实现Kalman滤波的三种方式进行了研究,确定了利用IP核作为主要计算元件的实现方式。对Kalman滤波实现过程中的关键问题进行了研究和实现。通过对PC机、DSP和FPGA三种实现方式的结果对比,验证了利用FGPA实现的Kalman滤波器具有较高的精度和极高的实时性。
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
测试测量
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议