APP下载

基于查阶跃响应表的高效FIR滤波器设计及其FPGA实现

2014-07-29周恒箴曾祥希余震

中国新通信 2014年4期

周恒箴 曾祥希 余震

【摘要】 本文提出了一种采用查阶跃响应表方法实现的FIR数字滤波器设计方案,并以一个649阶FIR滤波器的FPGA设计为例,与传统的采用FPGA IPCORE实现方法进行了对比,分析该设计方法在FPGA的资源利用和系统时钟速率上的优势。通过实验数据验证,该方案可以解决现有技术中FIR滤波器需要大量乘法器和加法器的问题,达到了降低FPGA硬件资源使用、提高系统运行效率的效果。

【关键词】 FIR 数字滤波器 阶跃响应 FPGA

一、引言

在数字信号处理系统中,数字滤波器被广泛地应用于干扰的滤除、有用信号的提取、信号的整形等各方面。数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。FIR滤波器的单位冲激响应只能持续一段时间,由于它的线性相位特性和容易实现因此在工程上得到广泛应用。

FIR数字滤波器通过乘累加运算来实现,输入信号x(n)经过FIR滤波器过程是一个输入信号与滤波器系数进行线性卷积的过程,即:,其中y(n)为滤波器的输出,h(i)为滤波器的滤波器系数,N为滤波器的阶数。从表达式可以看出,每次输出y(n)需要进行N次乘法和N-1次加法操作实现。乘累加运算结构需要使用N个乘法器和N-1个加法器资源,而且随着滤波器的阶数N越大,需要的乘法器和加法器越多,占用的硬件资源也就越大。

为降低硬件资源的消耗,文献[1]提出了一种分布式算法(Distributed Arithmetic,DA)的滤波器设计结构,它将传统的乘、累加运算转化为加法和移位运算,利用ROM查找表将固定系数的乘累加运算转换成查找表操作,可以较大程度地提高运算速度。文献[2]和文献[3]也提出了改进的分布式算法,采用滤波器的多相分解结构对DA算法进行改进,以降低硬件资源的使用,但是不论是DA算法或者改进的DA算法,ROM查找表的大小会随着滤波器阶数N的增加而成指数增加,消耗更多的硬件资源,难以满足数据处理领域的高速实时性要求。在一些某些的应用场合,例如超高频无源射频识别阅读器的前向波形成形滤波,其输入波形为矩形波或者阶梯波,为了达到较好的滤波效果需要使用高阶的FIR滤波器,如果采用传统的乘累加结构或者分布式算法,会占用大量的硬件资源,增加设备的成本。

本文在FPGA上设计并实现了一种通过查阶跃响应表的方法实现FIR数字滤波器,当输入信号为矩形波或阶梯波时,利用该方法,可以解决现有技术中FIR滤波器需要大量乘法器和加法器的问题,达到了降低FPGA资源使用、提高系统运行速度的效果。

二、查阶跃响应法的方法

因此,我们可以将设计的FIR滤波器的单位阶跃响应存储在一张表中;再对需要进行FIR滤波的输入信号进行沿提取,提取出阶跃信号;再将每个阶跃信号的幅度和查表的数据相乘得到阶跃响应;然后对所有的阶跃响应结果求和,此求和结果等价于原信号直接经过FIR滤波器的滤波结果。

如果输入信号变化的间隔时间大于FIR滤波器的阶跃响应时间长度,只需要一路处理模块,模块根据输入阶跃信号的幅度计算并输出阶跃响应,然后对所有的阶跃响应求和。如果输入信号变化的间隔时间小于FIR滤波器的阶跃响应时间长度,则需要采用多路处理模块,阶跃信号依次分配给多个模块,每个模块输出各自的阶跃响应,最后,再对所有的模块的输出进行求和。

三、FPGA实现

FIR滤波器查阶跃响应表法的FPGA的实现如图1所示,由沿提取、沿分配器、阶跃响应池和加法器四个功能模块组成。其中阶跃响应池中的每个阶跃响应模块都是相同的,其结构如图2所示。

阶跃响应池由N个相同的阶跃响应模块构成,如图2所示,每个阶跃响应模块由沿检测、阶跃响应表(步骤1生成)、乘法器、缓存器和加法器组成。

每個阶跃响应模块的内部处理过程如下:经分配后的阶跃信号送入检测单元进行检测,检测单元输出三组信号:触发信号、启动信号和阶跃信号的幅度。当检测到有阶跃信号时,检测单元输出触发信号对缓存器进行刷新,将当前模块输出结果通过缓存器保存下来作为输出基准;与此同时,启动信号启动指针计数器进行查表,通过指针依次取出阶跃响应表中的数据;取表结果和阶跃信号的幅度输入到乘法器相乘;乘法器的输出和基准信号分别输入到加法器,其相加结果作为该阶跃响应模块的输出。

步骤4:阶跃相应池输出的N路阶跃响应信号S0S1 S2…. SN-1输入给加法器进行相加求和,其求和结果为该FIR滤波器的输出。

在每个阶跃响应模块中,由于有个加法器,可能会遇到加法器输出结果溢出的情况,例如连续两个上升沿的正阶跃信号相加,结果溢出出现负数。出现这种情况时可以通过扩展有效数据位数防止溢出;也可以通过满下面2个条件,对溢出结果不用处理:(1)采用二进制补码运算;(2)保证最后的加法器的输出范围能够满足输入信号x(n)和单位阶跃响应乘积的最大值和最小值。

四、实验结果与性能分析

4.1 实验过程

以下是利用该方法在Altera FPGA器件上实现的一个649阶FIR低通滤波器的实例。借助MATLAB的FDATool工具根据滤波器的指标进行滤波器设计。

4.2 与利用FIR IPcore方法实现的FIR模块进行功能对比

调用Altera的FIR IPcore生成FIR滤波器模块,与上述方法进行仿真对比,如图8所示,I_qpsk_i和I_qpsk_q是16QAM调制后的I、Q两路输入信号,O_IPcore_i和O_IPcore_q是IQ输入信号经过Altera FIR IPcore滤波器输出的结果,O_step_i和O_step_q是IQ输入信号经过查阶跃响应查表方法输出的结果。将两种方法生成的IQ数据对应先减,结果(s_sub)为0,说明两种方法的输出数据一致。

4.3 FPGA资源和系统时钟速度的对比

上述的查阶跃响应法的实例需要3个乘法器和4个加法器实现,如果采用Altera Cyclone IV系列器件,型号为EP4CGX150(该器件具有149,760LEs(逻辑单元)和6,480Kbit嵌入式存储器),编译工程进行对比,该方法需要使用498LEs和9个M9K;而采用Altera FIR IPcore实现该649阶滤波器模块,需要占用48846LEs和30个M9K。可以看出,采用查阶跃响应法实现的滤波器,在节省FPGA资源上有显著的优势。查阶跃响应法占用的资源和阶跃响应池中阶跃响应的个数关系密切,如果阶跃响应池中阶跃响应的个数一定,设计时占用的资源与滤波器的阶数关系不大,阶数变化主要是要修改指针计数器的地址。

从表1的数据可以看出,采用调IPcore的方法实现FIR滤波器模块,当滤波器阶数越大时,占用的LE资源和嵌入式存储器资源(M9K)也越多,由于逻辑资源的大量占用,导致FPGA布线的延时加长,从而影响到最大系统时钟频率(Fmax)。因此,在输入波形为矩形波或者阶梯波,而且输入信号变化的间隔时间大于FIR滤波器的阶跃响应时间长度时,采用查阶跃响应法在FPGA上省了大量的LE资源,对比FIR IPcore生成的FIR滤波器模塊,可以提高最大系统时钟速度。

五、结束语

从仿真和实验结果可以看出,当输入波形为阶梯波或者矩形波时,采用这种查询阶跃响应表的的方法能够解决现有技术中FIR滤波器需要大量乘法器和加法器的问题,达到了降低资源使用、提高系统运行速度的效果。

参 考 文 献

[1] WHITE Stanley A. Application of distributed arithmetic to digital signal processing: a tutorial review[J]. IEEE ASSP Magazine,1989,7:4-18

[2] 于亚萍,刘源,卫勇. 利用改进DA算法FIR滤波器的仿真与实现[J]. 计算机工程与应用,2011,47(27):77-79

[3] Yu Yaping, Liu Yuan,Wei Yong. Simulation and realization of FIR filter using modified distributed arithmetic architecture[J]. Computer Engineering and Applications[J]. 2011,47(27):77-79