基于FPGA的FIR滤波器设计与仿真
扫描二维码
随时随地手机看文章
摘要:FIR数字滤波器以其良好的线性相位特性被广泛使用,属于数字信号处理的基本模块之一。FPGA具有的灵活的可编程逻辑可以方便地实现高速数字信号处理。为了提高实时数字信号处理的速度,利用FPGA芯片内部的ROM实现一种查找表结构的FIR数字滤波器。并用MATAB对实验结果进行仿真和分析,证明了设计的可行性。
关键词:有限冲击响应滤波器;硬件描述语言;查找表;现场可编程门阵列
0 引言
数字滤波器是数字信号处理的重要组成部分,其作用是从接收信号中提取出需要的信息同时抑制干扰,由于FIR滤波器的冲击响应是有限长的,因而有可能做成具有严格线性相位的。通常用以下两种方法来实现数字滤波器:一是把滤波器所要完成的运算编成程序并让计算机执行,也就是采用计算机软件实现;另一种是设计专用的数字硬件、专用的数字信号处理器或采用通用的数字信号处理器来实现。
常用的实时数字信号处理的器件有可编程的数字信号处理(DSP)芯片、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。在工程实践中,往往要求对信号处理要有高速性、实时性和灵活性,而已有的一些软件和硬件实现方式则难以同时达到这几方面的要求。随着电子信息技术的快速发展,很多信号处理器件开始用FPGA来取代传统的实现方法。与传统的实现方法相比,FPGA的显著优点是它的并行处理特性,可以显著提高滤波器的数据吞吐率。
随着可编程逻辑器件和EDA技术的发展,使用FPGA来实现数字信号处理,既具有实时性,又兼顾了一定的灵活性。FPGA具有的灵活的可编程逻辑可以方便地实现高速数字信号处理,突破了并行处理、流水级数的限制,有效地利用了片上资源,加上反复的可编程能力,越来越受到国内外从事数字信号处理的研究者的青睐。
1 FIR滤波器的结构特点
数字滤波器通常分为有限冲击响应(FIR)和无限冲击响应(IIR)两大类。FIR滤波器由以下几个特点:
(1)系统的单位冲击响应h(n)在有限个n值处不为零;
(2)系统函数H(Z)在|Z|>0处收敛,在|Z|>0处只有零点,有限z平面只有零点,而全部极点都在z=0处(因果系统);
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构(例如抽样频率结构)也包含有反馈的部分;
设FIR滤波器的单位冲击响应h(n)为一个N点序列,0≤n≤N-1,则滤波器的系统函数为:
就是说它有N-1阶极点在z=0处,有个N-1零点位于有限z平面的任何位置。
FIR滤波器有以下几种基本结构:横截型(卷积型、直接型);级联型;频率抽样型。这里,我们主要讨论直接型FIR滤波器的实现。
式(1)的系统的差分方程表达式为:
很明显,这就是线性移不变系统的卷积和公式,也是x(n)的延时链的横向结构。
2 FPGA概述及特点
FPGA即现场可编程门阵列,是20世纪90年代发展起来的。大部分FPGA采用基于SRAM的查找表(look up table,LUT)结构,也有一些军品和宇航级FPGA采用FLASH或者反熔丝工艺的查找表结构以提高可靠性。它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,具有更高的集成度,更强的逻辑实现能力和更好的设计灵活性。FPGA由许多独立的可编程逻辑模块组成,用户可以通过编程将这些模块连接起来实现不同的设计。FPGA器件的产生将半定制的门阵列电路的优点和可编程逻辑器件的用户可编程特性结合在一起。既解决了定制电路的不足,又克服了原有可编程逻辑器件门电路数量有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(InputOutput Block)和内部连线(Interconnect)三个部分。FPGA的基本特点如下。
(1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到可用的芯片;
(2)FPGA内部有丰富的触发器和I/O引脚资源;
(3)FPGA可做其他全定制或半定制ASIC电路的中试样片;
(4)FPGA是ASIC电路中设计周期最短,开发费用最低,风险最小的器件之一。
(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高集成度、可靠性的最佳选择之一。随着集成度密度的不断提高,FPGA器件几乎可以实现所有的数字电路功能。目前,器件集成度已经达到了数百万门数量级,工作频率可达300MHz以上。一般可在几个小时或几天内完成一个设计,并可随时修改。这加速了产品设计开发的进程,免去了昂贵的ASIC(专用集成电路(器件半导体生产工艺费用及投资风险,因此,FPGA技术已经成为电子工程师不可缺少的好帮手。
3 查找表结构的FIR算法
LUT本质上是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个具有4位地址线的16×1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有结果,并把结果写到RAM中,当输入一个信号进行运算就等于输入一个地址,找出对应的内容,然后输出。
由式(2)可见FIR滤波器系统函数是一种卷积的运算形式。如果用FPGA直接实现则计算速度很慢且占用大量的LE(逻辑单元),达不到系统对实时性的要求,于是想到能否将上述卷积运算转化成加减运算。
分布式算法(distributed arithmetic,DA)早在1973年就已经被Croisier提出来了,但是直到FPGA出现以后,才被广泛应用在FPGA中计算乘积和。
设FIR滤波器的阶数为N,输入数据x(n)的位宽为k,则x(n)可表示为:
也就是说:我们可以把每个输入数据的每一位的值分别与相应的FIR系数相乘(因为x(n)为数字信号,每个输入数据的每一位的值都为0或1,所以与h(n)相乘的结果非0即为h(n))然后再相加,然后再把所有位的相加值错位相加,可得到卷积的结果从而实现了将卷积运算转换成加法运算。
这样我们就可以针对N阶FIR滤波器的系数预先建立一个2的N次方的一个存储表,将系数和存放在对应的存储单元中。进行卷积运算时把输入数据的每一位组合成地址码,通过地址查找到相应的系数和,然后把所有位数的系数和移位相加即可完成卷积运算。通过查表的方式可以大大减少求和的次数,提高运算速度。
4 设计思路及步骤
4.1 FPGA系统设计的方法
用FPGA实现数字系统设计一般可分成以下几个步骤:设计输入、功能仿真、编译综合生成网表文件、设计实现、时序仿真、下载到芯片进行硬件验证。在每一步检查到的错误或缺陷都可以返回到上一层进行修改。
随着数字系统规模的不断增大,其复杂度也随之增大。层次化设计将系统逐层分为较小的、规模可控制的模块,是控制数字系统设计复杂度的一种有效方法。
层次化设计中有两个重要的核心思想,即模块化和原件重用。模块化是指将系统划分为几个子模块,而这些子模块又分别划分为更小的模块,直至不可再分。每个模块都可以看成是上一层模块的一个元件。原件重用是指同一个原件可以被不同的实体调用,或者被同一个实体多次调用。这样不但大大减轻了设计者的工作量,而且使程序结构更加优化,具有更好的可读性。
4. 2 设计实例的参数选取及生成
MATLAB的信号处理工具箱中包括许多可用于设计FIR数字滤波器的M文件。根据要设计的滤波器的参数、通带截止频率、阻带截止频率、采样频率、通带或阻带波纹要求等参数,可以利用MATLAB中的数字信号处理工具箱生成滤波器的系数。
在设计中,采用16阶FIR,输入数据宽12位,滤波器系数以及由这些系数演算出的ROM的初始化数据文件*.mif文件可以通过MATLAB计算生成。
因为是16阶的FIR,这样就需要65536个ROM单元来实现,ROM单元的位宽采用16位。利用器件中的ROM建立这样的查找表,首先要将ROM的初始化数据写到*.mif文件中,然后在Ouartsus II中将其指向对应的ROM设计模块。
当FIR的阶数增大时,ROM的存储量是以2的倍数增长的,因此采用一个ROM快分时查找表的方法来降低对ROM存储容量的要求。
4.3 模块化设计
用原理图和VHDL相结合的输入方式,分模块进行设计,项层模块采用图形化输入,在Quartsus II中进行设计输入。
系统由控制模块、输入数据移位模块、地址发生模块、存储器模块、运算模块等组成。下面介绍每一模块的基本功能。
(1)控制模块的作用是产生一系列的控制信号,对上述各种模块进行精确的控制。控制模块在收到A/D转换结束信号后,依次产生移位寄存器使能信号、并行到串行转换的装入信号、移位相加的装入信号、加减控制信号和滤波器结果输出信号等控制信号。使上述各个模块按照一定的时序进行操作,最终完成滤波功能。该模块采用VHDL的描述方式比较方便。
(2)输入数据移位模块的主要功能是使A/D转换后的数据通过不同的触发器,从而产生不同的延迟,以便取出输入数据不同位置上的数值,来构成ROM的地址。
(3)地址发生器模块的主要功能是将通过输入数据移位模块的不同延迟分别转换为查找表的串行地址,提供给存储器模块。根据结构化的程序设计思想,本模块可由12个单通道并、串转换模块组成。
(4)存储器模块是这种查找表结构FIR的核心。FPGA中ROM模块的设计可以通过Quartsus II软件中的Mega Wizard向导来生成。
(5)运算模块主要功能是将ROM的输出数据在此进行移位相加。这里实现的主要是加法和减法运算,运算速度很快。
最后的项层模块采用图形化输入,这样可以使设计思路更加清晰,也符合自上而下的FPGA主流设计方法。
5 仿真验证
为了验证设计的正确性,必须对设计进行全面充分的功能仿真和时序仿真,功能仿真一般用Mentor公司的Modelsim来进行,时序仿真使用QuartusII软件。Altera公司提供的QuartusII软件除了具有强大的编译综合功能之外,还提供了一定的波形(时序)仿真功能。因其输入和输出都是以波形的形式给出的,虽然看起来如同逻辑分析仪的输出形式,比较直观,但是难以对随机信号进行输入;随机信号的输出也难以分析,这就给我们的验证工作带来了很大的障碍。下面我们利用MATLAB与QuartusII实现联合仿真。
5.1 产生向量仿真文件
在MATLB中生成OuartusII仿真所需的输入文件*.vec。QuartusII仿真文件有两种格式,即*.vwf格式和*.vec格式。前者是在Quart-usII中通过波形编辑器生成的。当方针输入数据复杂时,用波形输入的方法难以胜任,特别是在数字信号处理领域,大多数仿真输入数据要叠加噪声,采用波形输入方式是不现实的。后者是按一定格式要求的文本文件输入方式,可以利用任何文本编辑器产生,只要符合对仿真文件的格式要求即可。
这里的仿真输入数据是在两个不同频率上的正弦波,频率分别为23Hz、58Hz。把这两个信号叠加在一起作为输入信号,用MATLAB软件生成仿真所需的vec文件。FIR滤波器的截止频率为40Hz。
在对仿真参数进行设置时,将仿真向量文件指向由MATLAB生成的文件,即可将MATLAB中生成的仿真信号导入之中进行仿真了。
5.2 验证输出结果
用QuartusII软件中的选项将仿真向量文件指向由MTLAB生成的*.vec文件,进行仿真。
将仿真结束后生成的波形文件,另存为*.tbl格式文件,以数据文件输入的方式将此*.tbl文件中的仿真输出信号的数值导入至MATLAB中,并进行频谱分析验证FIR数字滤波器设计的正确与否,并分析其性能优劣。
图1是输入信号的时域和频域图形,以及经过理想的低通滤波后得到的结果。低通滤波用MATLAB实现。可以看出经过滤波后,23Hz的频率成分被保留下来,而58Hz的频率成分被滤掉。图2是同一输入信号的时域和频域图形,以及经过FPGA实现的FIR数字滤波器低通滤波后的结果。
6 结束语
从这两幅图中,我们可以看到用FPGA实现的FIR滤波器,得到了和理论上滤波相似的结果,证明了设计的可行性及正确性。如果需要不同的滤波器,我们只要改变输入到ROM中的初始化文件数据即可。