摘要针对高阶FIR抽取滤波器直接型结构和多相滤波结构中存在乘法器资源使用较多,导致实际系统实现困难的问题,提出了一种适合FPGA实现的高效多相结构。该结构采用分时复用技术,通过提高FPGA工作时钟频率,对降采样后的滤波路数和每一路FIR滤波器中乘积和操作均复用一个乘法器,从而大幅节约了FPGA中乘法器资源的使用。结果表明,针对4096阶滤波器和降采样率为512的实际抽取滤波嚣系统,只需要8个乘法器,且在Xilinx公司VirtexⅣ芯片上能稳定工作在204.8 MHz的时钟频率上。
关键词抽取滤波器;FPGA;乘法器
由于具有高集成度、高速、可编程等优点,现场可编程门阵列(Field Programmable Gate Array,FPGA)已经广泛应用于多种高速信号实时处理领域中。抽取滤波作为多速率信号处理中基本运算单元,基于FPGA的FIR抽取滤波器设计和实现是数字下变频、信道化等众多领域中一个重要环节。目前,采用FPGA实现FIR滤波器主要存在的问题是FPGA芯片中乘法器资源较少。在已知硬件FPGA芯片乘法器资源约束条件下,设计更为有效的FIR滤波器实现结构是致力研究的内容。
目前,Altera和Xilinx公司都提供了可塑性很强的FIR滤波器IP核,只要改动相应的参数设置,就可以应用于不同产品中。然而,在某些对性能和实时性要求较高的场合下,FIR滤波器阶数和FPGA系统工作时钟频率均较高,上述FIR滤波器IP核无法直接使用,甚至无法应用。文中以Xilinx公司VirtexⅣ芯片为硬件平台,针对整数倍FIR抽取滤波器的多相结构特点,提出一种高效FPGA实现结构。该结构能使用很少的乘法器资源完成高阶FIR抽取滤波器,并且工作时钟为输入数据速率,有着良好的稳定性。
1 FIR抽取滤波器的多相结构
整数D倍抽取滤波器框图如图1所示,对应的输入输出关系为
其中,滤波器h(n1T1)的长度为N;T1和T2分别对应输入序列和输出序列时间间隔,且满足T2=DT1。根据式(1)和式(2)可以得到输出数据速率f2=1/T2为输入数据速率f1=1/T1的1/D,即f2=f1/D。
利用多相分解第1型式可以将H(z1)分解为
其中,。图2(a)给出了式(3)所示的抽取滤波器多相结构。
为进一步利用网络结构等效性,可以将抽取与各支路滤波器进行等效变换,从而得到如图2(b)所示更为有效的多相抽取滤波结构图,其中
相对图1所示的直接实现结构,图2(b)所示的高效实现结构具有如下两个特点:(1)各支路滤波器输入信号速率为原输入信号速率的1/D,从而可以使得各支路滤波器工作在较低的速率上。(2)各支路滤波器系数个数为原滤波器系数个数的1/D。因此,相比图1,图2(b)所示的滤波器结构具有更高的运算效率。
2 FIR抽取滤波器的多相结构实现
采用多相结构实现抽取滤波器的基本思想是将输入信号进行相应延迟和降采样后,分别送至D个通道进行滤波,然后将每一支路滤波后的数据相加,得到最终输出结果。如2(b)所示,降采样后进行第一个滤波通道的信号数据为…,x(0T1),x(DT1),x(2DT1),…,进入第二个滤波通道的信号数据为…,x(-1T1),x((D-1)T1),x((2D-1)T1)…,进入最后一个通道的数据为…,x((-D+1)T1),x(1T1),x((2D+1)T1),…,等等。结合上述特点,在FPGA进行实现时,可以将延迟和降采样结合在一起,采用图3(a)所示的实现结构进行抽取滤波。该结构中包括3个模块:(1)串并转换,将输入数据转换成D路并行信号。(2)多相滤波模块,将得到的D路并行信号分别进行滤波,每一路所采用的滤波器为原滤波器相应的多相分量。(3)加法模块,该模块将上述得到D路滤波后的数据相加得到最终的一路输出信号。
但随着降采样率D的增加,相应的所需要的FPGA资源也急剧增加。例如,当D=512时,图3(a)对应的实现结构需要至少512个乘法器,这在实际中难以满足要求。由于D较大时,各路滤波器工作时钟频率却很低。为了更少地使用乘法器资源,同时提高系统的工作效率,在图3(a)的基础上可以进一步优化结构。
改进后的实现结构核心思想:可以将图3(a)中D个通道分成L组,每组包括D/L通道,每一组采用分时复用方法进行实现滤波。同时,针对每一组滤波,进一步提高工作时钟频率,采用更少的乘法器实现抽取滤波器。下面将结合一个具体的设计要求给出更适合FPGA实现的多相滤波结构。该系统指标如下:输入数据速率(或系统时钟f1=204.8 MHz;降采样率D=512;滤波器阶数N=4 096;FPGA芯片Xilinx公司的VirtexⅣ芯片。
如果采用图1所示的直接型结构至少需要4 096个乘法器,采用图2(b)所示的多相滤波结构也至少需要512个乘法器,均无法满足指标要求。为此,可以采用复用方法进行实现。根据技术指标要求,原滤波器的多相分量含有N/D=8个系数,同时,每一路速率为fk=f1/D=0.4 MHz,因此,可以将D路滤波通道分成=8组,每组D/L=64路信号复用,同时滤波时乘法器进一步复用,则每一个滤波器工作频率为fl=fk×64 ×8=f1=204.8 MHz。图3(b)给出了优化后的抽取滤波器多相实现结构。由于每组多相滤波模块中同时完成64路的滤波功能,同时滤波器实现过程对成绩和操作也进行复用,每一组多相滤波模块只需1个乘法器,整个系统共需8个乘法器,大幅节约了乘法器资源。实际也可以根据不同的系统指标要求,针对不同的FPGA芯片性能,设置不同的复用路数和滤波器工作频率,使整个系统资源和性能均满足要求。
3 仿真结果
为验证该结构的正确性,可分两步完成:(1)采用Matlab程序进行功能仿真。(2)将FPGA程序运行结果与Matlab定点仿真程序结果进行进一步比较,以验证FPGA程序的正确性。图4给出了系统中采用的原型滤波器的幅频响应曲线。图5给出了采用Matlab分别对图1和图3(b)所对应的直接型结构和改进的多相结构仿真结果(灰色表示图1对应的仿真结果,黑色表示图3(b)对应的仿真结果)。从图5可以看出,两者运行结果相同,从而表明文中提出的FPGA结构正确。图6给出了FPGA程序Modelsim仿真结果。图7为FPGA程序输出数据与Matlab定点仿真程序输出数据对比结果(灰色表示Matlab定点程序对应的仿真结果,黑色表示Modelsim对应的仿真结果)。从图7可以看出设计的FPGA程序正确。
4 结束语
针对高阶FIR抽取滤波器,提出了一种更适合FPGA实现的优化多相结构。相对应直接型和传统的多相结构,设计的结构充分结合FPGA自身特点和多相滤波结构特性,采用分时复用技术,大幅降低了FPGA中乘法器资源的使用,能够采用一片FPGA实现高阶滤波。目前,该FPGA模块已经应用于一个实际的数字分路系统中,程序运行正确。