logo资料库

基于FPGA 的卡尔曼滤波器的设计与实现.pdf

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
基于 FPGA 的卡尔曼滤波器的设计与实现 仲婷婷,王长松,周晓敏,齐昕 (北京科技大学 机械工程学院机械电子工程系,北京 100083) 摘要:卡尔曼滤波器在社会各领域有着广泛的应用。采用 FPGA 硬件实现卡尔曼滤波器,解决了采用 DSP 软件方法实现存在的并行性和速度问题。文章以基于 FPGA 的数据采集系统为硬件平台,根据模块化设 计思想,采用 VHDL 编程实现 ADS8364 芯片控制模块,利用 FPGA 的系统级设计工具 DSP Builder 设计卡尔 曼滤波器模块,给出模块的软件仿真结果并完成整个系统的硬件验证。结果证明设计的正确性,同时表明 采用 DSP Builder,使卡尔曼滤波器的 FPGA 硬件实现更加简单,速度更快。 关键词:FGPA;卡尔曼滤波器; ADS8364; DSP Builder; Quartus II Design and Implemention of Kalman Filter based on FPGA Zhong tingting, Wang changsong, Zhou xiaomin, Qi xin (Mechatronic Engineering Department,School of Mechanical Engineering,University of Science and Technology Beijing, Beijing 100083,China) Abstract:The Kalman filter has been widely used in many society fields. The implementation of kalman filter using FPGA solves the problem of parallelism and speed existing in using DSP software.In this paper,with the hardware platform of data collection system based on FPGA and the concepts of modularization, the control module of ADS8364 is realized using VHDL, the Kalman filter model is designed using DSP Builder, results of software simulation of modules are given and hardware verification of the whole system is completed. Results prove the correctness of the design,and that it is simpler and faster to use DSP Builder to implement the Kalman Filter. Key words: FGPA;Kalman filter; ADS8364; DSP Builder; Quartus II 1 引言 卡尔曼滤波采用状态空间法在时域内设计滤波器,是一种最优估计算法。自从被提出以 来,获得了广泛的实际应用,其应用领域包括控制、通讯、信号处理、石油地震勘探、故障 诊断、图像处理等。在应用中,卡尔曼滤波器通常由 DSP 处理器来实现。使用 DSP 处理器 具有设计简单灵活,可直接采用 C 语言矩阵运算的优点[1],但由于卡尔曼算法在运算中有大 量的矩阵加减乘除运算且 DSP 处理器采用程序顺序执行的 CPU 架构,在要求较高的场合, 不能满足系统高速、实时的需要。而用 FPGA 实现卡尔曼滤波器,采用的是硬件并行算法, 能很好的解决速度和实时性的问题,并且其具有灵活的可配置特性和优良的抗干扰能力[2], 使得 FPGA 构成的数字信号处理系统非常易于修改、测试及硬件升级。 一般,数字滤波器的 FPGA 实现是用 VHDL 或 Verilog HDL 等硬件描述语言通过编写 底层代码实现。这种编程方式效率低,难度大。利用 Altera 公司 FPGA 的 DSP 开发工具 DSP Builder 设计卡尔曼滤波器,比基于硬件描述语言的设计,周期更短,设计更容易。 本文以基于现场可编程逻辑门阵列 FPGA 器件和模数转换器设计的数据采集系统为硬 件平台,进行算法设计。基于模块化设计思想,设计了时钟分频模块,AD 转换芯片的 FPGA 控制模块和卡尔曼滤波模块。卡尔曼滤波模块采用 DSP Builder 设计,转换成硬件描述语言 VHDL 后,应用软件 Modelsim、QuartusII 进行仿真并完成硬件验证。 2 卡尔曼滤波原理 卡尔曼滤波,是一种线性最小方差估计,特点是考虑了系统的模型误差和测量噪声的统 计特性[3,4]。卡尔曼滤波的一般方程在许多文献中有详细讨论,本文直接引用其结论。 1
设随机线形离散系统的状态方程为: x k 1 + Φ= k |1 + k x k Γ+ k 观测方程为: y k = xc k k + v k Gu k ω+ k k 式中 kx 为系统的状态向量, ky 为系统的观测序列, kω 为系统的过程噪声序列, kv 为 观测噪声序列, ku 为系统控制输入, 测矩阵。 |1+Φ 为状态转移矩阵, kΓ , k k kG 为系数矩阵, kc 为观 1) kω 、 kv 为零均值白噪声,满足 ⎧ ⎨ Cov ⎩ [ ωω j , k ⎧ ⎨ vvCov , ⎩ [ k j k 0 , [ ] E = ω k [ ] E T = ωω j [ ] vE 0 k [ ] vvE , = = T j k ] = Q δ kj k = R δ kj k ] 其中 kQ 为系统过程噪声 kω 的对称非负定方差矩阵, kR 为系统观测噪声 kv 的对称正定 方差阵,均为可知的,而 δ kj = 1 0 ⎧ ⎨ ⎩ k k = ≠ j j 2) kω 和 kv 不相关,即 Cov [ ω k , v j ] = E T [ νω j , k ] = 0 因为控制规律 ku 是有规律的信号,可以先不考虑,假设 ku =0。设k时刻的状态估计值 为: ˆ x k = ˆ x kk | 1 − + yK ( k k − ˆ xc k kk | 1 − ) ,卡尔曼滤波的递推步骤如下所示: 状态一步预测值: ˆ x − Φ= 1 kk | ˆ x k 1 − kk | 1 − (1) 预测误差方差: P kk 1| − Φ= kk 1| − P k +Φ 1 − T kk 1| − GQG T k k 1 − 1 − 1 − k (2) 滤波增益: K k = P kk | c T k ( Pc kk k | c T k 1 − 1 − + R k ) 1 − (3) 最佳滤波值: ˆ x k = ˆ x kk | 1 − + yK ( k k − ˆ xc k kk | 1 − ) (4) 滤波误差方差: P k = ( PcKI ) − kk | k k 1 − (5) 以上即为集中式卡尔曼滤波的基本方程。只要给定滤波初值 0ˆx 和 0P ,根据k时刻的观 测 ky 就可递推计算得此时刻的状态估计值 kxˆ 。 在一个滤波周期内,从卡尔曼滤波在使用系统信息和观测信息的先后次序来看,卡尔曼 2
滤波具有两个明显的信息更新过程:时间更新过程和观测更新过程。式(1)说明了根据k-1时 刻的状态估计预测k时刻状态的方法,式(2)对这种预测的质量优劣做了定量描述。这两式的 计算中,仅使用了与系统的动态特性有关的信息,如状态一步转移矩阵、噪声输入阵、过程 噪声方差阵。从时间的推移过程来看,这两式将时间从k-1时刻推进至k时刻,描述了卡尔曼 滤波的时间更新过程。其余各式用来计算对时间更新值的修正量,该修正量由时间更新的质 | −kkP 1 )、观测信息的质量优劣( kc )以及具体的观测信息 ky 量优劣( 所确定,这一过程描述了卡尔曼滤波的观测更新过程[5]。把以上方程改用方框图表示更能清 晰的看出卡尔曼滤波的过程,如下图所示。 kR )、观测与状态的关系( 0ˆx 0P 1−kQ P kk 1| − P Φ= kk k 1| − +Φ 1 − T kk 1| − GQG T k k 1 1 − − 1 − k ˆ x kk | − 1 Φ= ˆ x k − 1 kk | − 1 ky k →+1 k K k = cPccP kk | 1 − kk | T k ( 1 − k T k + R k ) 1 − kR ˆ x k = ˆ x kk | 1 − + yK ( k k − ˆ xc k kk | 1 − ) P k = ( I − PcK ) k k kk | − 1 滤波计算回路 增益计算回路 图1 卡尔曼滤波原理方框图 由图可得,卡尔曼滤波具有两个计算回路:增益计算回路和滤波计算回路。增益计算回 路是独立计算的,滤波计算回路依赖于增益计算回路。卡尔曼滤波的两个回路相互联系。 本设计应用在基于高频信号注入法的无传感器永磁同步电机的转子位置检测的系统中, 根据电机运动方程: =∑ T i i J d ω dt 经离散化后可得状态方程: x k 1 + Φ= k |1 + k x k Γ+ k Gu k ω+ k k 式中, =kx x 1 x 2 ⎡ ⎢ ⎣ ⎤ ⎥ ⎦ k , Φ + k |1 k = T 1 ⎡ ⎢ 10 ⎣ ⎤ ⎥ ⎦ , =Γ k T 2 2 T ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ , kG = 0 1 ⎡ ⎢ ⎣ ⎤ ⎥ ⎦ , kc =[ ]01 , kQ =2, kR =4。 系统量测方程为: y k = xc k k + v k 1x 、 2x 分别代表电机的转子位置角和位置角变化率。T为采样周期。先不考虑控制信号 的作用。噪声 kv 包括量测误差、A/D变换器产生的误差等等。在实时控制中,当外界突然扰 动,如突加负载引起速度位置发生变化时,可能会给出错误的结果。不过,在电机运行过程 中,这种状态持续时间相对较短,总的来看,不会造成太大影响。 3
3 FPGA 设计 尽管卡尔曼滤波原理的有良好的滤波效果,但由于其计算量大,当采样率高时,一个采 样周期内难以完成计算,且计算机的字长有限,使计算中舍入误差和截断误差积累、传递, 造成数值不稳定,因此用MCU和DSP难以实现。FPGA实现了并行计算,即有多个乘法器和 累加器并行处理数据,采用FPGA实现卡尔曼滤波器,输入和输出数据的计算同时进行,可 以大大提高滤波速度[5]。 本设计选用的FPGA是Altera公司CycloneⅡ系列的EP2C20Q240C8N,其内核采用1.5V电 源供电,功耗小,端口工作电压为3.3V。FPGA中I/O端口可自由定义,电路设计方便,编程 灵活,不易受外部干扰。系统编译环境采用QuartusⅡ,顶层设计为图形化方式,易实现模 块化。FPGA的主要任务是控制AD转换芯片进行数据转换,并从AD芯片中读取转换输出数 据,进行卡尔曼滤波处理并输出。芯片模块的划分如下图所示,分频模块和AD控制模块采 用VHDL语言编程实现,卡尔曼滤波滤波模块用DSP Builder软件进行设计。 外部时钟 分频模块 数据输入 AD 控 制模块 卡尔 曼滤 波模 块 FPGA 数据输出 图2 芯片模块结构划分示意图 4 单元功能模块设计 4.1 分频模块的设计 分频模块是将外部时钟进行分频设定,得到系统内部 AD 控制模块和卡尔曼滤波模块所 需要的时钟,并为 AD 芯片提供时钟信号基准。此模块采用 VHDL 语言编程实现。实现较 简单,这里直接给出其 10 分频时序仿真图。分频模块的外部时钟输入频率为 50MHz,产生 的时钟频率为 5MHz。 图 3 10 分频电路时序仿真图 4.2 AD 控制模块 4.2.1ADS8364 的简介与工作原理 采用 ADS8364 芯片对输入信号数据采样。ADS8364 是 TI 公司的一款高速、低功耗、 六路模拟输入、16 位并行输出的模数转换器[6]。六路模拟输人分为三组(A,B 和 C),每个输 人端都有一个保持信号来实现所有通道的同时采样与转换功能,适合于多路采集系统的需 要。ADS8364 的时钟信号由外部提供,转换时间为 20 个时钟周期,最高频率为 5MHz, ADS8364 的六个通道可以同时进行采样/转换。ADS8364 采用+5V 工作电压,并带有 80DB 共模抑制的全差分输人通道以及六个 4μs 连续近似的模数转换器、六个差分采样放大器。 另外,在 REFin 和 REFout 引脚内部还带有+2.5V 参考电压。ADS8364 的差分输入可在-VREF 到+VREF 之间变化。ADS8364 与 FPGA 的接口连接如下图。 4
信号调理电路 ADS8364 HOLDA HOLDB HOLDC A0 A1 A2 CS RD EOC CLK FPGA BYTE ADD REST WR D15…D0 DGND 图 4 ADS8364 与 FPGA 连接示意图 三个保持信号(HOLDA,HOLDB,HOLDC)启动指定通道的转换。当三个保持信号同时被 选通时,其转换结果将保存在六个寄存器中。A/D 转换结果为 16 位,最高位为符号位,数 据输出方式很灵活,分别由 BYTE, ADD 与地址线 A2、Al、A0 的组合控制。在 ADS8364 的 HOLDX 保持至少 20ns 的低电平时,转换开始。这个低电平可使各个通道的采样保持放 大器同时处于保持状态从而使每个通道同时开始转换。当转换结果被存人输出寄存器后,引 脚 EOC 的输出将保持半个时钟周期的低电平。通过置 RD 和 CS 为低电平可使数据读出到 并行输出总线。 4.2.2AD 采样控制模块 结合 ADS8364 的工作时序,如下图,在 FPGA 内部设计 AD 采样控制模块,为 ADS8364 采样提供所需的驱动信号,并从 ADS8364 中读取转换输出数据,同时为后续的电路提供相 应的控制信号。 图 5 ADS8364 工作时序图 虽然理论上可以在模数转换的 20 个 CLK 周期进行数据读取,但这样数字接口部分可能 会对模拟电路产生不良影响降低转换精度,所以最好是等模数转换过程完全结束后再读数 据。另外为了确保数据读取的可靠性,需要在 A2,A1 和 A0 等控制信号的状态完全稳定后 才进行数据读取[7]。本设计以一通道的数据采样为例,状态机的状态定为 22 个(20 个 AD 转换状态,2 个读数据状态),状态机的输出控制位为 16 位。采用 VHDL 语言编程实现状态 机后,生成图元文件。图 6 所示为 AD 采样控制模块与分频模块的图元文件的连接。ADS8364 的时钟输入由 50MHz 系统时钟 10 分频得到(AD 芯片与其控制模块使用相同的 5MHz 时钟 信号)。编译后进行时序仿真,仿真波形如图 7 所示。 5
图 6 AD 采样控制模块与分频模块的图元文件连接图 4.3 卡尔曼滤波模块 4.3.1 DSP Builder 简介 图 7 AD 采样控制模块时序仿真波形 DSP Builder 是 Altera 公司推出的 FPGA 的系统级设计工具[8]。它将 Matlab 和 Simulink 系统级设计工具的算法开发、仿真和验证功能与 QuartusII 的基于 Verilog HDL 及 VHDL 语 言的设计流程整合在一起,实现了这些工具的集成,为用户提供了一个从软件到硬件的完整 的 DSP 开发平台。 使用 DSP Builder 设计数字信号处理系统的流程为: (1)在 Matlab/Simulink 中建立一个*.mdl 模型文件,用图形方式调用 Altera DSP Builder 和 Simulink 其他库中的图形模块进行数学模型设计; (2)利用 Simulink 图形化仿真分析功能对此设计模型进行纯数学上的仿真、验证及修改; (3)通过Altera DSP Builder 中的SignalCompiler 模块把Matlab/Simulink 的设计文件(·mdl) 转成相应的硬件描述语言 VHDL 设计文件(·vhd),以及用于控制综合与编译的 TCL 脚本; (4)在 SignalCompiler 里用选定的工具自动进行综合和编译,或用 QuartusII 调用上述 VHDL 文件,选择器件型号锁定引脚重新编译; (5)配置芯片(program device),即把 SRAM 对象文件(*.sof)下载到 FPGA 芯片. 这种设计方式将已经成熟的在 MATLAB 中进行 DSP 算法设计优化的过程,与先进的 FPGA 硬件实现技术有机地融合到一起,实现软件设计与硬件验证的直接握手,大大简化设 计过程,提高设计效率,它的出现进一步推动了 FPGA 在数字信号处理领域的应用。 4.3.1 卡尔曼滤波算法矩阵运算的分解 6
卡尔曼滤波算法涉及到矩阵运算,把矩阵运算分解成一系列加减乘除运算单元,利用 DSP Builder 的加减乘除等模块来建模实现。利用平行的硬件技术来实现算法,可以提高执 行速度[9,10]。在本设计中,卡尔曼滤波算法的 5 个方程可以分解成如下的形式。 (1) 状态一步预测值 1 |ˆ −kkx 分解为: ˆ x − Φ= 1 kk | kk | 1 − ˆ x k 1 − =[ xl 1 xl 2 ]T k 其中: 1xl = 1 Tx x + 2 2xl = 2x (2) 预测误差方差 1 | −kkP 分解为: P kk | 1 − Φ= P k Φ T kk | 1 − 1 − + kk | 1 − GQG k 1 − k 1 − T k 1 − = pl 11 pl 21 ⎡ ⎢ ⎣ pl 12 pl 22 ⎤ ⎥ ⎦ 其中: 11pl = p 11 + Tp 12 + Tp 21 + 2 pT 22 12pl = 12 Tp p + 22 21pl = 22 Tp p + 22 22pl = 22 +p 2 (3) 滤波增益 kK 可分解为: K k = P kk | c T k ( Pc kk k | c T k 1 − 1 − + R k ) − 1 =[ K 1 ]T kK 2 其中: 1K = 11pl /( 11pl +4) 2K = 11pl /( 21pl +4) (4) 最佳滤波值 kxˆ 可分解为: ˆ x k = ˆ x kk | 1 − + yK ( k k − ˆ xc k kk | 1 − ) =[ x 1 ]T kx 2 其中: 1x = 1xl + 1K ( y - 1xl ) 2x = 2xl + 2K ( y - 1xl ) (5) 滤波误差方差 kP 分解为: PcKI − kk | ) k k P k = ( = 1 − p 11 p 21 ⎡ ⎢ ⎣ p 12 p 22 ⎤ ⎥ ⎦ 7
其中: 11p = 11pl - 1K 11pl 12p = 12pl - 1K 12pl 21p = 21pl - 2K 11pl 22p = 22pl - 2K 12pl 输出预测 kyˆ 可分解为: ˆ y k = |ˆ xc k kk 1 − = xl 1 由于卡尔曼滤波的基本方程是时间域内的递推形式,其计算过程是一个不断的“预测一 修正”过程,在求解时不要求存储大量的数据,并且一旦观测到了新的数据,随时可以算得 新的滤波值,因此这种滤波方程非常便于实时处理。 4.3.1 卡尔曼滤波模型的建立 在 Matlab/Simulink 中建立一个*.mdl 模型文件,根据以上的等式,利用 DSP Builder 库 和 Simulink 库中的图形模块进行设计输入。本设计采用层次化设计,依据卡尔曼滤波算法 分解的等式,利用 DSP Builder 库中的加减乘除模块以及端口模块来实现建模。建立的顶层 系统模型如下图所示。 上图中, sub1 为来自 Simulink 库中的输入信号模块,信号 y 为未叠加噪声的原信号, yv 为叠加高斯白噪声的待滤波的信号。fc1,fc2,sub2,sub3,sub4 为卡尔曼滤波的五个子系统模 图8 卡尔曼滤波系统模型 块。其中,fc2 为依据最佳滤波值: 方程分解的等式所建立 的子系统模型,如下图所示。同理根据其他方程分解的等式,利用 DSP Builder 库中的加减 乘除图形模块以及端口模块来实现建模,这里不详细给出。 1 − kk | kk | 1 − k + yK ( k k − ˆ xc k ˆ x = ˆ x ) 8
分享到:
收藏