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