L/O/G/O基于FPGA的卡尔曼滤波器的设计与实现姓名:杨秋月学号:2010202120081基于FPGA的卡尔曼滤波器的设计与实现背景知识简介基于FPGA的卡尔曼滤波器的设计123仿真结果及相关结论4背景知识简介1.卡尔曼和卡尔曼滤波2.卡尔曼滤波原理3.卡尔曼滤波器的实现方法及比较卡尔曼和卡尔曼滤波卡尔曼(RudolfEmilKalman)匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《ANewApproachtoLinearFilteringandPredictionProblems》(线性滤波与预测问题的新方法)。卡尔曼滤波(Kalmanfiltering)当输入由白噪声产生的随机信号时,使期望输出和实际输出之间的均方根误差达到最小的线性系统。卡尔曼滤波采用状态空间法在时域内设计滤波器,是一种最优估计算法。自从被提出以来,获得了广泛的实际应用,其应用领域包括控制、通讯、信号处理、石油地震勘探、故障诊断、图像处理等。卡尔曼滤波原理卡尔曼滤波,是一种线性最小方差估计,特点是考虑了系统的模型误差和测量噪声的统计特性。设随机线形离散系统的状态方程为:观测方程为:式中为系统的状态向量,为系统的观测序列,为系统的过程噪声序列,为观测噪声序列,为系统控制输入,为状态转移矩阵,为系数矩阵,为观测矩阵。卡尔曼滤波原理因为控制规律是有规律的信号,可以先不考虑,假设=0。设k时刻的状态估计值为:卡尔曼滤波的递推步骤如下所示:状态一步预测值:预测误差方差:滤波增益:最佳滤波值:滤波误差方差:卡尔曼滤波器的实现方法及比较用DSP处理器实现在应用中,卡尔曼滤波器通常由DSP处理器来实现。使用DSP处理器具有设计简单灵活,可直接采用C语言矩阵运算的优点,但由于卡尔曼算法在运算中有大量的矩阵加减乘除运算且DSP处理器采用程序顺序执行的CPU架构,在要求较高的场合,不能满足系统高速、实时的需要。用FPGA实现采用的是硬件并行算法,能很好的解决速度和实时性的问题,并且具有灵活的可配置特性和优良的抗干扰能力,使得FPGA构成的数字信号处理系统非常易于修改、测试及硬件升级。基于FPGA的卡尔曼滤波器的设计1.FPGA设计简介2.基于FPGA的卡尔曼滤波器各功能模块设计(时钟分频模块AD控制模块卡尔曼滤波模块)1.FPGA设计简介一般地,数字滤波器的FPGA实现是用VHDL或VerilogHDL等硬件描述语言通过编写底层代码实现。这种编程方式效率低,难度大。利用Altera公司FPGA的DSP开发工具DSPBuilder设计卡尔曼滤波器,比基于硬件描述语言的设计周期更短,设计更容易。设计选用的FPGA是Altera公司CycloneⅡEP2C20Q240C8N,FPGA中I/O端口可自由定义,电路设计方便,编程灵活,不易受外部干扰。系统编译环境采用QuartusⅡ,顶层设计为图形化方式,易实现模块化。FPGA的主要任务是控制AD转换芯片进行数据转换,并从AD芯片中读取转换输出数据,进行卡尔曼滤波处理并输出。设计思路本实验以基于现场可编程逻辑门阵列FPGA器件和模数转换器设计的数据采集系统为硬件平台,进行算法设计。基于模块化设计思想,设计了时钟分频模块,AD转换芯片的FPGA控制模块和卡尔曼滤波模块。卡尔曼滤波模块采用DSPBuilder设计,转换成硬件描述语言VHDL后,应用软件Modelsim、QuartusII进行仿真并完成硬件验证。基于FPGA的卡尔曼滤波器各功能模块设计基于FPGA的卡尔曼滤波器各功能模块设计图1芯片模块结构划分示意图芯片模块结构芯片模块的划分如下图所示,分频模块和AD控制模块采用VHDL语言编程实现,卡尔曼滤波模块用DSPBuilder软件进行设计。单元功能模块设计*分频模块分频模块是将外部时钟进行分频设定,得到系统内部AD控制模块和卡尔曼滤波模块所需要的时钟,并为AD芯片提供时钟信号基准。此模块采用VHDL语言编程实现。这里给出10分频时序仿真图,其中分频模块的外部时钟输入频率为50MHz,产生的时钟频率为5MHz。图2分频模块时序仿真图基于FPGA的卡尔曼滤波器各功能模块设计*AD控制模块ADS8364的简介与工作原理采用ADS8364芯片对输入信号数据采样。ADS8364是TI公司的一款高速、低功耗、6路模拟输入、16位并行输出的模数转换器。六路模拟输入分为三组(A,B和C),每个输入端都有一个保持信号来实现所有通道的同时采样与转换功能,适合于多路采集系统的需要。ADS8364的时钟信号由外部提供,转换时间为20个时钟周期,最高频率为5MHz,ADS8364的6个通道可以同时进行采样/转换。ADS8364采用+5V工作电压,并带有80DB共模抑制的全差分输入通道以及6个4μs连续近似的模数转换器、6个差分采样放大器。另外,在REFin和REFout引脚内部还带有+2.5V参考电压。ADS8364的差分输入可在-VREF到+VREF之间变化。ADS8364与FPGA的接口连接如图。图3ADS8364与FPGA连接示意图基于FPGA的卡尔曼滤波器各功能模块设计ADS8364的工作原理三个保持信号(HOLDA,HOLDB,HOLDC)启动指定通道的转换。当三个保持信号同时被选通时,其转换结果将保存在六个寄存器中。A/D转换结果为16位,最高位为符号位,数据输出方式很灵活,分别由BYTE,ADD与地址线A2、A1、A0的组合控制。在ADS8364的HOLDX保持至少20ns的低电平时,转换开始。这个低电平可使各个通道的采样保持放大器同时处于保持状态,从而使各个通道同时开始转换。当转换结果被存入输出寄存器后,引脚EOC的输出将保持半个时钟周期的低电平。通过置RD和CS为低电平可使数据读出到并行输出总线。图4ADS8364工作时序图结合ADS8364的工作时序,如下图所示,在FPGA内部设计AD采样控制模块,为ADS8364采样提供所需的驱动信号,并从ADS8364中读取转换输出数据,同时为后续的电路提供相应的控制信号。图5AD采样控制模块与分频模块的图元文件连接图本设计以一通道的数据采样为例,状态机的状态定为22个(20个AD转换状态,2个读数据状态),状态机的输出控制位为16位。采用VHDL语言编程实现状态机后,生成图元文件。下图所示为AD采样控制模块与分频模块的图元文件的连接。图6AD采样控制模块时序仿真波形ADS8364的时钟输入由50MHz系统时钟10分频得到。AD芯片与其控制模块使用相同的5MHz时钟信号。编译后进行时序仿真,仿真波形如下图所示。*卡尔曼滤波模块DSPBuilder简介DSPBuilder是Altera公司推出的FPGA的系统级设计工具。它将Matlab和Simulink系统级设计工具的算法开发、仿真和验证功能与QuartusII的基于VerilogHDL及VHDL语言的设计流程整合在一起,实现了这些工具的集成,为用户提供了一个从软件到硬件的完整的DSP开发平台。基于FPGA的卡尔曼滤波器各功能模块设计使用DSPBuilder设计数字信号处理系统的流程为:(1)在Matlab/Simulink中建立一个*.mdl模型文件,用图形方式调用AlteraDSPBuilder和Simulink其他库中的图形模块进行数学模型设计;(2)利用Simulink图形化仿真分析功能对此设计模型进行纯数学上的仿真、验证及修改;(3)通过AlteraDSPBuilder中的SignalCompiler模块把Matlab/Simulink的设计文件(·mdl)转成相应的硬件描述语言VHDL设计文件(·vhd),以及用于控制综合与编译的RTL脚本;(4)在SignalCompiler里用选定的工具自动进行综合和编译,或用QuartusII调用上述VHDL文件,选择器件型号锁定引脚重新编译;(5)配置芯片(programdevice),即把SRAM对象文件(*.sof)下载到FPGA芯片.卡尔曼滤波算法矩阵运算的分解卡尔曼滤波算法涉及到矩阵运算,把矩阵运算分解成一系列加减乘除运算单元,利用DSPBuilder的加减乘除等模块来建模实现。利用平行的硬件技术来实现算法,可以提高执行速度。在本设计中,卡尔曼滤波算法的5个方程可以分解成如下的形式。(1)状态一步预测值分解为:其中:(2)预测误差方差分解为:其中:(3)滤波增益可分解为:其中:(4)最佳滤波值可分解为:其中:(5)滤波误差方差分解为:其中:输出预测可分解为:图7卡尔曼滤波系统模型基于FPGA的卡尔曼滤波器各功能模块设计(1)卡尔曼滤波系统模型在Matlab/Simulink中建立一个*.mdl模型文件,根据以上的等式,利用DSPBuilder库和Simulink库中的图形模块进行设计输入。本设计采用层次化设计,依据卡尔曼滤波算法分解的等式,利用DSPBuilder库中的加减乘除模块以及端口模块来实现建模。建立的顶层系统模型如下图所示。注:图中,sub1为来自Simulink库中的输入信号模块,信号y为未叠加噪声的原信号,yv为叠加高斯白噪声的待滤波的信号。fc1,fc2,sub2,sub3,sub4为卡尔曼滤波的五个子系统模块。(2)卡尔曼滤波模型的仿真结果●Simulink仿真结果图8叠加白噪声的正弦输入信号图9滤波后的信号和未叠加白噪声的正弦输入信号采用叠加高斯白噪声的正弦信号作为输入信号,对建立的滤波器模型进行仿真。图10误差波形从以上仿真结果看出,叠加噪声的输入信号通过滤波后,与未叠加噪声的正弦信号相吻合,待信号达到稳定后,误差在0.5度以内。Simulink仿真结果(续)●modelsim仿真结果在Simulink中进行的仿真是属于系统验证性质的,是对*.mdl文件进行的仿真,并没有对生成的VHDL代码进行过仿真。生成VHDL描述是RTL级的,是针对具体的硬件结构的,而在Matlab的Simulink中的模型仿真是针对算法实现的,这二者之间有可能存在软件理解上的差异,转换后的VHDL代码实现可能与mdl模型描述的情况不完全相符,这就需要针对生成的RTL级VHDL代码进行功能仿真。基于FPGA的卡尔曼滤波器各功能模块设计modelsim仿真结果(续)利用Modelsim进行功能仿真。设置输入输出信号均为模拟形式,仿真波形如下所示:比较两种仿真结果可知,modelsim与Simulink的仿真结果一致。图11modelsim功能仿真图●QuartusⅡ时序仿真基于FPGA的卡尔曼滤波器各功能模块设计在QuartusⅡ环境中打开DSPBuilder建立项目文件,选择器件型号进行编译和时序仿真,得到时序波形如下图所示。图12卡尔曼滤波的时序仿真图QuartusⅡ时序仿真(续)用DSPBuilder设计卡尔曼滤波模型是整个系统设计中的一个子模块,把卡尔曼滤波模型转化后的VHDL文件生成图元文件,如下图所示,以便在整个系统设计中调用。图13生成的卡尔曼图元文件在QuartusⅡ环境下,整个系统原理图设计中,调用各个子模块,构成完整的设计,然后进行编译、仿真、引脚分配等工作,最后配置芯片,把SRAM对象文件(*.sof)下载到FPGA芯片中,对硬件进行测试。利用LA1032逻辑分析仪(广州致远电子有限公司生产)对16位实验数据进行读取如下图所示,并转换处理,验证了本设计的正确性。图14LA1032逻辑分析仪读取数据基于FPGA的卡尔曼滤波器各功能模块设计利用LA1032逻辑分析仪验证总体设计的正确性卡尔曼滤波器在多领域中有重要的作用。FPGA可实现数字信号处理功能,并能满足实时性的要求。本设计基于FPGA器件和AD转换器的数据采集系统为硬件平台,进行了数据采集及卡尔曼滤波算法设计,尤其对基于DSPBuilder卡尔曼滤波器的设计实现进行了详述。采用DSPBuilder进行