FPGA的Kalman滤波器的设计
- 格式:pdf
- 大小:467.26 KB
- 文档页数:7
基于_FPGA_的卡尔曼滤波器的设计与实现FPGA(Field Programmable Gate Array)是一种可以重新编程的可编程逻辑器件,可以根据用户的需要进行重新配置和编程,从而实现不同的应用。
卡尔曼滤波器是一种用于估计系统状态的滤波器,能够通过利用过去观测值和当前的测量值来估计未来的状态。
在本文中,我们将探讨基于FPGA的卡尔曼滤波器的设计与实现。
卡尔曼滤波器是一种递归的估计算法,用于估计状态变量的最优估计。
它将过去的观测值和当前的测量值进行加权平均,得到对未来状态的估计。
在实时应用中,常常需要高速和高准确度的数据处理,这就需要一种高效的硬件实现方法。
基于FPGA的卡尔曼滤波器可以提供高性能的实时数据处理,同时还能够灵活地适应不同的实时应用的需求。
基于FPGA的卡尔曼滤波器的设计与实现主要包括以下几个方面:首先,需要设计FPGA的硬件结构。
硬件结构通常包括状态估计器、卡尔曼增益计算器和误差估计器等关键模块。
状态估计器用于估计当前系统的状态变量,卡尔曼增益计算器用于计算卡尔曼增益矩阵,误差估计器用于估计状态估计器的误差。
这些模块之间需要进行数据传递和计算,因此需要设计合适的数据通路和控制信号。
其次,需要进行FPGA的编程和配置。
FPGA可以通过硬件描述语言(如VHDL或Verilog)进行编程和配置。
在设计过程中,需要将卡尔曼滤波器的算法转化为相应的硬件描述,并利用FPGA的配置工具将其加载到FPGA芯片中。
然后,需要进行系统级的仿真和验证。
在设计过程中,可以通过使用仿真工具对系统进行仿真和验证。
通过仿真可以检查系统的功能和性能,并进行必要的调试和优化。
最后,需要进行性能评估和优化。
FPGA的设计和实现需要考虑多个指标,如延迟、功耗和面积等。
通过性能评估和优化可以找出系统的瓶颈,并进行相应的改进,以提高系统的性能。
总结起来,基于FPGA的卡尔曼滤波器的设计与实现是一个复杂的过程,需要进行硬件结构设计、FPGA编程和配置、系统仿真和验证以及性能评估和优化等多个步骤。
实时电子稳像系统中Kalman滤波器的FPGA实现
邓军;祁小平
【期刊名称】《仪器仪表用户》
【年(卷),期】2011(018)005
【摘要】针对实时电子稳像系统中Kalman滤波器的硬件实现问题,提出了一种Kalman滤波的FPGA实现方法.通过对电子稳像算法中Kalman滤波模型的分析,对滤波算法进行了化简,将滤波器的运算分解成简单的加、减、乘、除运算.利用硬件描述语言对Kalman滤波进行了FPGA实现,并对实现的滤波器进行了验证.通过软硬件仿真实验结果的对比,验证了所实现滤波器的有效性.
【总页数】4页(P83-86)
【作者】邓军;祁小平
【作者单位】中国科学院光电技术研究所,成都610209;中国科学院研究生院,北京100039
【正文语种】中文
【中图分类】TP391.4
【相关文献】
1.实时电子数字稳像系统并行处理的快速实现 [J], 时永刚;周渝斌;赵跃进
2.提高ASIC验证的速度与可视性基于FPGA的ASIC/SoC原型设计及基于FPGA 的系统在实时硬件速度下可以实现100%的内部信号可视性 [J], Mario Larouche
3.视频压缩系统中实时数据采集的FPGA实现 [J], 覃永新;陈文辉;杨叙
4.星载图像压缩系统中实时二维小波变换的FPGA设计与实现 [J], 王鸣哲;薛长斌;
张学全
5.基于FPGA的实时电子稳像 [J], 李刚;程志峰
因版权原因,仅展示原文概要,查看原文内容请购买。
1、c语言实现1//1. 结构体类型定义2typedef struct3{4 float LastP;//上次估算协方差 初始化值为0.025 float Now_P;//当前估算协方差 初始化值为06 float out;//卡尔曼滤波器输出 初始化值为07 float Kg;//卡尔曼增益 初始化值为08 float Q;//过程噪声协方差 初始化值为0.0019 float R;//观测噪声协方差 初始化值为0.54310}KFP;//Kalman Filter parameter1112//2. 以高度为例 定义卡尔曼结构体并初始化参数13KFP KFP_height={0.02,0,0,0,0.001,0.543};1415/**16 *卡尔曼滤波器17 *@param KFP *kfp 卡尔曼结构体参数18 * float input 需要滤波的参数的测量值(即传感器的采集值)19 *@return 滤波后的参数(最优值)20 */21 float kalmanFilter(KFP *kfp,float input)22 {23 //预测协方差方程:k时刻系统估算协方差 = k‐1时刻的系统协方差 + 过程噪声协方差24 kfp‐>Now_P = kfp‐>LastP + kfp‐>Q;25 //卡尔曼增益方程:卡尔曼增益 = k时刻系统估算协方差 / (k时刻系统估算协方差 +观测噪声协方差)26 kfp‐>Kg = kfp‐>Now_P / (kfp‐>NOw_P + kfp‐>R);27 //更新最优值方程:k时刻状态变量的最优值 = 状态变量的预测值 + 卡尔曼增益 *(测量值 ‐ 状态变量的预测值)28 kfp‐>out = kfp‐>out + kfp‐>Kg * (input ‐kfp‐>out);//因为这一次的预测值就是上一次的输出值29 //更新协方差方程: 本次的系统协方差付给 kfp‐>LastP 威下一次运算准备。
Kalman 滤波器的基本原理及仿真摘要:Kalman 滤波是对线性最小均方误差滤波的另一种处理方法,实际是维纳滤波的一种递推算法。
它采用的递推算法利用了前一时刻的估计值和新的观测值,大大提高了处理的实时性,同时也能自动跟踪随机信号统计特性的非平稳变化,对于解决很大部分的问题,他是最优,效率最高甚至是最有用的,因此得到了广泛的应用。
Kalman 滤波的应用包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。
近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。
关键字:Kalman 滤波 线性最小均方误差滤波 估计值 观测值一、Kalman 滤波器的提出Kalman 滤波器是源于匈牙利数学家Rudolf Emil Kalman 的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems 》(线性滤波与预测问题的新方法)。
在信号处理,通信和现代控制系统中,需要对一个随机动态系统的状态进行估计,由一个测量装置对系统状态进行测量,通过记录的测量值对状态进行最优估计例如:对一个一阶AR 模型()(1)()x n ax n w n =-+ 的输出状态进行估计。
观测方程是 ()()()y n x n v n =+()v n 是测量引入的白噪声,通过各()y n 的值估计()x n 。
这类最优估计问题称为卡尔曼滤波。
二、Kalman 滤波器的基本思想利用观测数据对状态变量的预测估计进行修正,以得到状态变量的最优估计,即 最优估计=预测估计+修正三、Kalman 滤波器的特点(1)算法是递推的,时域内设计滤波器,适用于多维随机过程的估计;(2)用递推法计算,不需要知道全部过去的值。
用状态方程描述状态变量的动态变化规律,因此,信号可以是平稳的,也可以是非平稳的;(3)误差准则仍为均方误差最小准则。
9、Kalman 滤波直观推导Kalman 滤波实质是线性最小方差估计]X ~X ~[E min T k k随机线性离散系统方程为1k 1k ,k 1k 1k ,k k W X X ----Γ+Φ=k k k k V X H Z +=过程噪声和观测噪声的统计特性,假设满足如下条件⎪⎪⎩⎪⎪⎨⎧=δ==δ==0]V W [E R ]V V [E ,0]V [E Q ]W W [E ,0]W [E T j k kj k Tj k k kj k T j k k 设k 时刻得到k 次观测值k 1Z Z ,且找到了1k X -的一个最优线性估计1k Xˆ-,即1k Xˆ-是1k 1Z Z - 的线性函数。
(1)k 时刻系统状态的预测估计值1k 1k ,k 1k ,k X ˆXˆ---Φ= (2)k 时刻系统观测值的预测估计值1k ,k k 1k ,k X ˆH Zˆ--= (3)获得k 时刻观测值k Z ,观测值与预测估计1k ,k Zˆ-之间误差 k1k ,k k 1k ,k k k k k 1k ,k k k 1K ,k k k V X ~H X ˆH V X H X ˆH Z ZˆZ Z ~+=-+=-=-=----造成误差的原因为预测估计1K ,k Zˆ-和观测值k Z 可能都存在误差。
(4)修正k 时刻状态的预测估计值,k K 为滤波增益矩阵)X ˆH Z (K X ˆXˆ1k ,k k k k 1k ,k k ---+= (5)获取k 时刻观测值k Z 前后对k X 的估计误差分别为1k ,k k 1k ,k XˆX X ~---= k k k XˆX X ~-= (6)根据最优滤波方差阵k P 求最优滤波增益矩阵k K 。
]X ~X ~[E P T k k k =k k 1k ,k k k k k 1k ,k k k 1k ,k 1k ,k k k k k k 1k ,k 1k ,k k k k 1k ,k k k V K X~]H K I [V K X ~H K X ~]X ˆH V X H [K X ~]X ˆH Z [K XˆX X~--=--=-+-=---=-------注:0]X ~V [E ,0]V X ~[E T 1k ,k k Tk 1K ,k ==--T kk k T k k 1k ,k k k T kTk k k T k k T 1k ,k 1k ,k k k T k T k k k T k k T 1k ,k k k T kTk 1k ,k k k T k k T 1k ,k 1k ,k k k T k k k TkT k k k T k k T 1k ,k k k T k T k 1k ,k k k T k k T 1k ,k 1k ,k k k T k k 1k ,k k k k k 1k ,k k k T k k K R K ]H K I [P ]H K I [K ]V V [E K ]H K I ][X ~X ~[E ]H K I [K ]V V [E K ]H K I ][X ~V [E K K ]V X ~[E ]H K I []H K I ][X ~X ~[E ]H K I []X ~X ~[E P K V V K ]H K I [X ~V K K V X ~]H K I []H K I [X ~X ~]H K I [}V K X ~]H K I }{[V K X ~]H K I {[X ~X ~+--=+--=+------==+------=----=-------------求最优增益k K 。
FPGA的Kalman滤波器的设计
FPGA的Kalman滤波器的设计 data
摘要:针对电路设计中经常碰到数据的噪声干扰现象,提出了一种Kalman滤波的FPGA实现方法。
该方法采用了TI公司的高精度模数转换器ADSl25l以及Altera公司的EPlCl2,首先用卡尔曼滤波算法设计了一个滤波器,然后将该滤波器分解成简单的加、减、乘、除运算。
通过基于FPGA平台的硬件与软件的合理设计,成功地实现了数据噪声的滤除设计,并通过实践仿真计算,验证了所实现滤波的有效性。
卡尔曼滤波是一个“Optimal Recursive Data Processing Algorithm(最优化自回归数据处理算法)”,对于解决很大部分的问题,是最优化的,效率最高甚至是最有用的。
传统的卡尔曼滤波是在DSP上实现的。
但是DSP成本相对较高,而且指令是串行执行的,不能满足有些要求较高的场合。
而FPGA由于其硬件结构决定了它的并行处理方式,无论在速度还是实时性都更胜一筹。
文中以基于FPGA器件和A/D转换器的数据采集系统为硬件平台,进行了卡尔曼滤波算法设计,详述了基于FPGA的卡尔曼滤波器的设计实现。
1 卡尔曼滤波算法
工程中,为了了解工程对象(滤波中称为系统)的各个物理量(滤波中称为状态)的确切数值,或为了达到对工程对象进行控制的目的,必须利用测量手段对系统的各个状态进行测量。
但是,量测值可能仅是系统的部分状态或是部分状态的线性组合,且量测值中有随机误差(常称为量测噪声)。
最优估计就是针对上述问题的一种解决方法。
它能将仅与部分状态有关的测量进行处理,得出从统计意义上讲误差最小的更多状态的估值。
误差最小的标准常称为估计准则,根据不同的估计准则和估计计算方法,有各种不同的最优估计,卡尔曼滤波是一种递推线性最小方差估计的最优估计。
系统的状态方程可设定为
式(3)为系统噪声。
设设备的量测噪声为Vk,系统得量测方程为
式中,是利用当前状态预测的结果,是当前状态最优的结果,Pk+1/k是*对应的covariance,Rk是对应的covanance,表示A的转置矩阵,Q是系统过程的covariance。
式(1),式(2)就是卡尔曼滤波器5个公式中的前两个,也就是对系统的预测。
可以得到将来状态k+l的最优化估算值。
式(9)中I为单位矩阵,对于单模型单测量,I=1。
当系统进入k+2状态时,Pk+1就是式(2)的Pk。
这样,算法就可以自回归的运算下去。
R为测量数据的方差;Q为系统过程噪声的方差,取值为,根据经验可设置为测量数据方差的1/10;P的初值可选为
单位阵,I为单位阵,X的处置可选为(0,0)T。
算法示意图,如图1所示。
将算法矩阵展开并写成乘加形式,令
这些公式包含了一些加、减、乘、除的数学运算,用FPGA 实现卡尔曼滤波就是用FPGA 实现这些运算。
2 硬件设计
2.1 A/D 选择
ADSl251是TI 公司生产的一种高精度、宽动态范围的24位△~∑乏结构的模数转换器。
采样保持器的输入形式采用差分模拟输入方式,设计了一个简单的电平转换电路使得端和端之间的电压波动范围为士2.5 V。
ADSl251的时钟频率由8 MHz 的外部晶振提供,系统时钟由FPGA 给出。
ADSl251的内部结构图,如图2所示。
输出有3种模式:同步、异步及掉电模式,异步模式与Kalman滤波器数据输入接口连接比较方便。
其时序如图3所示。
2.2 FPGA设计
FPGA的特点在于灵活,通用。
如果资源够用,可以实现各种数字组合,包括CPU。
本系统采用的:FPGA是Ahera公司低价位的EP1C12,该芯片内含有两个PLLs,12060LEs及239616 Total RAMbits。
在本系统的设计中,FPGA内主要实现以下几个功能:Kalman状态控制信号、Kalm-an滤波运算、A/D控制模块、时钟及波特率设置等。
卡尔曼滤波器的系统结构图,如图4所示。
通过A/D转换芯片采集转换数据后,进入FPGA的A/D控制模块,在Kalman状态控制信号的作用下,进行滤波运算,然后通过控制接口将滤波数据输出。
由此可见,卡尔曼滤波的实现包括两部分:Kalman状态控制信号和Kalman滤波运算。
3 Kalmaft滤波器的设计
在FPGA中实现Kalman滤波器,重点在于平衡资源利用率和处理速度、数据运算精度之间的矛盾,难点在于浮点加、减、乘、除的硬逻辑及卡尔曼滤波流程控制的实现。
一般地,实际应用中,数字采样重复频率是待采样信号最高频率成分的5倍以上能保证较好恢复原信号,本设计中出于后期升级的考虑,将采样率设置在800次/s,是输出信号带宽的20倍。
通过第2节中的分解,Kalman滤波器由16次加法、20次乘法、1次除法以及必要的输入、输出及循环控制组成,共45步。
状态控制器(Kal-man状态控制信号)实际是一个有限状态机,分别控制滤波器中的45步运算,决定其执行顺序,每一步利用计数器为其提供必要的时钟周期。
Kalman滤波运算主要是浮点计算,浮点表示常用的标准是IEEE 754,IEEE二进制浮点数算术标准(IEEE754)是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。
IEEE 754规定了4种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,较少使用)与延伸双精确度(79位元以上,通常以80位元实做)。
二进制浮点数是以符号数值表示法格式储存,将最高效位元指定为符号位元(Sign Bit);“指数部分”,即次高效的e位元,为浮点数中经指数偏差(Exponent Bias)处理过后的指数;“小数部分”,即剩下的f位元,为有效位数(Significand)减掉有效位数本身的最高效位元,如图5所示。
文中采用的单精度二进制小数,使用32个位元存储,如图6所示。
其中,31位是符号位;0表示正;1表示负;30~23位为阶数;22~0表示数值的有效位。
偏正值为+127。
其表示的具体值可用式(27)表示
指数部分采用一个无符号的正数值存储。
单精度的指数部分是-126~+127加上127,指数值的大小为1~254(0和255是特殊值)。
浮点小数计算时,指数值减去偏正值将是实际的指数大小。
由于资源的限制,滤波中的运算过程只能以有限的精度进行,但过低的精度容易引起滤波发散,同时为了兼顾A/D高达24 bit的分辨率精度,在IEEE754单精度浮点数格式的基础上按照浮点表示的原则做了改造,将指数部分减少到6位,尾数增加到25位,25位尾数可以完全表示A/D输出的24位采样值,并削弱舍入误差的影响,其格式如图7所示。
本系统对处理速度的要求并不高,运算部件的设计并不考虑速度优化。
加法器按以下通用的规则设计:
(1)阶码相减:两个操作数阶码相减,求得阶差d=|Ea-Eb|;
(2)尾数对齐:阶码小的操作数的尾数右移d位;
(3)尾数相加:完成移位处理后的尾数相加运算;
(4)转换:尾数相加的结果为负数时,转换为符号尾数的表示方式;
(5)前导0/1的判定:判定由于减法结果产生的左移位数,对于加法判定是否右移一位或不移,对前导0/1判定的结果进行编码以驱动规格化移位;
(6)规格化:规格化有效位并且根据移位的方向和位数修改最终的阶码Ef;
(7)舍入:根据IEEE标准判定最终结果的舍入,如果需要入,则最末有效位加1;如舍入引起溢出,则需要有效位右移1位,同时阶码Ef加1。
乘法器的设计相对简单,与加法器一样采用简单的设计规则:
(1)指数相加:完成两个操作数的指数相加运算;
(2)尾数调整:将尾数f调整为l/f的补码格式;
(3)尾数相乘:完成两个操作数的尾数相乘运算;
(4)规格化:根据尾数运算结果调整指数位,对尾数进行舍入截位操作,规格化输出结果。
采用Altera提供的IP核,除法器能完成IEEE754单精度除法运算。
数据进入该除法器前需要将自定义的浮点格式的阶码扩展为8位加上95,尾数右移两位,转换为标准单精度浮点,计算结果再由标准单精度浮点的按相反的方法转换为自定义浮点。
文中硬件编程语言是用Verilog实现的。
4 实测结果分析与结论
从系统输出数据中随机抽取一段数据用Matlab分析,其结果如图8所示。
实线C表示的是滤波前的噪声:虚线B表示的是滤波后的噪声。
很容易看出经过滤波后噪声降低了很多。
仿真与实测对比分析如表1所示。
5 结束语
卡尔曼滤波器在很多领域具有重要的作用,可以实现数字信号处理功能,并能满足实时性的要求。
用FPGA实现Kalman滤波过程,实现简便、成本较低、滤波效果好,被广泛应用于图像视频、陀螺惯导去噪、电子罗盘、雷达接收机目标跟踪处理、目标预测等图像、
数据采集与处理领域。