基于FPGA的高速高阶FIR滤波器的频域改进方法

2016-04-12 00:00:00郭晓伟陈钟荣夏利娜
现代电子技术 2016年11期

摘 要: 为了提高现场可编程门阵列(FPGA)设计的超高阶有限单位冲击响应(FIR)滤波器对数据进行实时处理,提出了一种改进的频域设计FIR滤波器方法。针对频域处理卷积运算时,由于补零耗时造成数据无法实时处理这一问题进行了改进。首先将长序列分成固定长度的子序列,将原来利用一个(快速傅里叶变换)FFT IP处理子序列的常规方案改为利用两个FFT IP进行运算,通过控制子序列输入两个FFT IP的时间差,便可以利用重叠相加法的原理,将子序列卷积之后的结果直接相加,便可得到卷积结果,从而达到信号实时处理的目的。实例仿真计算表明,提供的频域实现方法不仅能降低 FPGA资源消耗,还能够消除现有技术中的补零延迟现象,提高了处理速度。

关键词: FIR滤波器; 快速傅里叶变换; FPGA; 频域改进方法

中图分类号: TN713⁃34 文献标识码: A 文章编号: 1004⁃373X(2016)11⁃0055⁃04

Abstract: To implement the real⁃time data processing of using ultrahigh⁃order finite impulse response (FIR) filter designed with field⁃programmable gate array (FPGA), an improved method of FIR filter designed in frequency domain is put forward. The problem that the data can′t be processed in real time, caused by the zero padding time consumption, was solved for processing the convolution operation in frequency domain. A long sequence is divided into the subsequences with fixed length, and then the subsequence is processed with two FFT (fast Fourier transform) IPs instead of the conventional scheme with one FFT IP. By controlling the time difference between the two input FFT IPs, the principle of overlapping addition method can be utilized to add the results to obtain the convolution result after subsequences convolution, thus real⁃time processing of the signal is achieved. The instance simulation results show that the proposed frequency domain implementation method can reduce the FPGA resource consumption, eliminate the zero padding delay in the available technologies, and improve the processing speed.

Keywords: FIR filter; fast Fourier transform; FPGA; frequency domain improvement method

0 引 言

在数字信号处理系统中,FIR(Finite Impulse Response)滤波器是最基本的单元,由于其具有严格的线性相频特性,稳定的系统,FIR滤波器成为雷达、视频等信号处理的主要手段[1] 。

目前基于FPGA的FIR滤波器实现方案主要有三种:时域上基于乘法器结构的FIR滤波器和基于分布式算法的FIR滤波器,频域上基于快速傅里叶变换(Fast Fourier transform,FFT)的FIR滤波器。随着模拟数字转换器(Analog⁃to⁃digital Converter,ADC)的采样速率不断提高,为了实现信号的实时处理,对FIR滤波器的设计有着极高的要求,类似于FIR滤波器结构的脉冲压缩技术,FIR滤波器在FPGA设计中不仅需要考虑高速的处理速度,还需要考虑高达千阶的FIR滤波器所消耗的资源。

对于千阶甚至万阶的FIR滤波器,基于乘法器结构的FIR滤波器和基于分布式算法的FIR滤波器来说消耗的资源也是巨大的。基于FFT算法的FIR滤波器相对于前两种滤波器,在设计这种超高阶的滤波器在资源上有着绝对的优势,只是由于其实现的特点,传统的设计方案可能达不到像前两种滤波器一样流水线的处理速度。本文针对该不足,对传统设计进行改进。

本文通过XILINX virtex4 xc4vfx12 FPGA 进行设计,FFT计算使用的是内置FFT IP核,其具有很高的灵活性、容易扩展并且设计可以复用的特点[2]。首先介绍基于FFT法的FIR滤波器的基本原理并给出一个传统的设计方案;接着,给出一个改进的FIR滤波器的结构与设计方案;然后,给出在FPGA中的具体实现方法并进行仿真,最后,本文将仿真结果与Matlab仿真进行比较说明这一设计的可行性,并提出缺点和需要改进的地方。

1 基于快速傅里叶变换的FIR滤波器原理[3]

FIR滤波器的本质就是有限长序列与无限长序列的线性卷积。频域实现FIR的方法跟时域的不同之处在于实现卷积的方式不同,时域上的卷积相当于频域相乘,即:

如图1所示,FPGA实现卷积与理论不同的是,需要对数据和系数分别补零,序列长度为长度为需要取分别补和个零变成两个长度为的序列,然后分别进行点的FFT运算,运算的值相乘再进行IFFT运算,便可得到卷积之后的结果。但是在一般情况下需要处理的信号很长,如果当作是有限长序列的卷积的话,需要FFT和IFFT点数很大,而硬件的处理能力有限,不能对过长的数据进行FFT。所以一般将数据进行分段成多个长度为的有限长子序列集那么可以表示为:

式中,这样所求的线性卷积分成了无限个长度均为的短长度线性卷积的和。其中和之间会有一个范围为的个样本重叠。这就是重叠相加法在分段卷积中的应用。

2 常规的FFT法FIR滤波器在FPGA中的设计

基于FPGA常规的FFT方法设计的FIR滤波器,先确定FIR滤波器的阶数和需要对输入信号分段的长度M,从而确定FFT所需要的点数L(一般情况下FFT的点数n为正整数)。输入的信号虽然为,但是与原理的不同点在于FFT方法处理的序列并不是连续的,即在序列分段后对每个子序列补零成为L长度的新的子序列进行处理。实际处理的序列如下:

设计中使用的FFT模块使用产品自带的FFT IP 或自己设计的FFT IP,使其在流水线模式下工作,这样可以对序列进行连续的FFT运算。FFT IP核输入信号为复信号,输入的信号可以为IQ信号,也可以为实信号,此时虚部为0。如图2所示,信号Signal在一定速率下传入FIFO,因为FFT IP核每个时钟只能输入一个数据,在做信号FFT时,先从FIFO输出长度为M的信号,此时需要M个时钟周期;再关闭FIFO进行长度为N-1的补零,需要 N-1个时钟。所以真正处理数据的有效速率只有输入速率的,导致FFT实现FIR的方法不能实现流水线操作。实际应用中,为了提高效率,在资源够用的情况下,选取FFT能处理的最大点数,即在阶数M一定的情况下,使数据长度N尽可能大,从而提高有效的处理时间。但是分段卷积出来的数据需要先缓存,等待下一段卷积的数据进行数据叠加才能获得最后的卷积结果,从而再一次的降低处理效率。这对处理要求较高,系统无法做到实时处理,降低了系统的整体性能。

3 改进的FFT法FIR滤波器在FPGA中的设计

改进FIR滤波器设计原理在分割的长度上做了特定的选取,选取FFT点数的一半,并将序列分为第奇数个和第偶数个两序列,分别用两个FFT IP进行FFT运算。假设FFT的点数为(为正整数),FIR滤波器阶数当时,系数后补零成长度。选取分割数据的长度为那么FFT的点数也可以表示为首先将长度为的系数补个零成为长度为的系数序列再将信号按固定长度进行分段,将分段的子序列补长度的零成为长度的子序列。将这些子序列按顺序分为奇数序列和偶数序列两个子序列集,即:

其中从式(11)可以看出输出结果直接相加便为卷积的结果,结果与原理式(4)一致。对于每一个子序列来说卷积输出的延时相同,因为两个序列输入相差个时钟,输出也相差个时钟,而卷积输出序列的长度为两个子序列集输出的结果相加直接满足重叠相加原理。通过上述原理进行改进之后的FPGA设计结构图如图3所示。

本设计使用的FFT IP为Xilinx FFT IP核。改进设计中首先通过CoeforSignal信号控制输入的Signal是系数还是信号,这样设计,一是可以减少信号口;二是系数可以比信号更早的进行FFT运算,从而结果可以更早的存入RAM中,RAM使用写优先模式,信号序列FFT处理之后的结果可以直接寻址找到系数FFT结果进行复数相乘,不需要等系数FFT完全结束再进行寻址,从而节省时间与资源。Signal输入为信号时,第一组长度为N的数据进入第一个FFT IP,然后数据输入完成后再补个0。在第一个FFT补零的期间,信号进入第二个FFT IP。同样,第二个FFT补零期间,数据进入第一个FFT,从而可以实现无间断的FFT。两段数据输入相差的时钟始终为个时钟周期。具体的输入数据时序图如图4所示。

如图4所示,输入的信号可以不间断输入,分段成两个子序列进行前期处理,FFT IP选择的是流水线模式,开始信号每置高一个周期便可处理一次L点的FFT。FFT一开始输出的结果便可以寻找系数FFT的结果,对应相乘后输入到IFFT IP,IFFT IP输出的结果便为分段卷积的结果,信号分段卷积完成之后的时序图如图5所示。

如图5所示,因为数据具有相同的延时,所以具有严格的时序。输入的第一个分段信号与第二个分段信号分别进入两个FFT时相差N个时钟周期,因为处理数据为流水线操作,那么两段信号卷积出来的有效信号也相差N个时钟。两个输出信号相加就是所需的卷积结果。根据重叠相加法的原理,和之间会有一个范围为的个样本重叠,因为那么重叠范围为 ,重叠长度刚好为卷积输出长度的一半,那么前一个序列的后N个值与后一个序列的前N个值相加就为卷积出来的结果。如图5所示,此次设计的系统,两个FFT分别输出分段卷积的数据,且后一个卷积与前一个卷积刚好相差N个时钟。因为分段卷积长度为2N,前N个数据与前一个分段卷积相加,后N个数据与后一个分段卷积相加。这样重叠相加时就不需要多余的延时,便可得到卷积的结果,从而达到信号实时处理。

这种改进后的结构主要是根据重叠相加法的特点和FFT IP的特点选取特定的分段长度设计出来的。相比常规的设计,可以看出改进的方法大大降低了RAM资源的使用,完全的流水线操作实现了实时处理,虽然多使用了一个FFT IP和IFFT IP,但是相对为了提高效率必需提高FFT点数的常规方法,节省了许多资源。

4 改进方法在FPGA中的实现与仿真验证

为了验证改进方法在实际应用中的正确性,将设计完成的仿真得到的结果与Matlab计算得到的结果进行对比。设计使用的是Xilinx的virtex4 xc4vfx12 FPGA开发板,硬件设计平台为ISE 14.4,FPGA仿真平台ModelSim SE 10.1c。因为开发板资源有限,设计的信号与系数位宽都为8位,阶数最高为9位的FIR滤波器,输入的时钟为200 MHz,即可以对200 MS/s的数据进行实时处理。设计的结构如图3所示,其中使用的FFT点数为16点。后布局布线仿真如图6所示。

因为阶数较小,所以只在数值上进行仿真比较。如图6所示,当data_or_coef置高时,输入的是系数,当置低时,输入的是数据。FFT IP核在进行IFFT运算时,IFFT运算的结果会乘以点数即16,所以进行Matlab计算时会将输出的结果乘以点数16与上面的时序进行对比。Matlab运算的结果如图7所示。

FPGA输出的信号为复信号,因为输入的信号为实信号,那么输出的信号也为实信号,即虚部出来的数据为0,实部输出的便为卷积结果。而仿真结果虚部有值,但是很小可以近似为0,实部结果与Matlab运算趋势大体一致,但是数值上却有一定的误差。主要原因是FPGA计算FFT和IFFT过程中,由于精度的要求进行了数据的截位,造成了误差。由于硬件客观条件的限制,这种误差是不可避免的。如图8所示,可以看出,时钟达到了200 MHz,所以可以认定设计结果满足要求。

5 结 语

根据以上讨论可以看出,这种改进的结构解决了频域上实现FIR滤波器速度上的问题,并且比常规的结构更加节省资源,对于系数来说,设计的结构不仅可以随时改变系数值还可以改变系数的长度。但是这种方法在FPGA实现中输出的数据与理论值会有误差且无法避免,所以,基于FFT方法的FIR滤波器适用于超高阶的滤波器,但对精度有严格要求的系统,基于FFT的方法还需要进一步研究。

参考文献

[1] 郑军胜.动态系数FIR滤波器的FPGA研究[D].西安:西北大学,2011.

[2] 李大习.基于 FPGA的可配置FFT IP核实现研究[J].电子科技,2014,27(6):46⁃49.

[3] 王宇峰.基于FFT的快速卷积算法的FPGA实现[D].哈尔滨:哈尔滨工业大学,2011.

[4] 西瑞克斯(北京)通信设备有限公司.无线通信的Matlab和FPGA实现[M].北京:人民邮电出版社,2009.

[5] 彭柄睿.基于FPGA的数字正交解调与脉冲压缩[J].信息通信,2014(1):54⁃55.

[6] 祝美英,彭江英,辜润秋,等.基于FPGA的数字滤波器设计[J].科技创新与应用,2015(20):9⁃10.

[7] 赵岸,颜毅华,陈林杰,等.基于FPGA的高速FIR数字滤波器设计的改进方案[J].天文研究与技术,2015(1):109⁃117.

[8] SAYEGH S I. A pipeline processor for mixed⁃size FFTs [J]. IEEE transactions on signal processing, 1992, 40(8): 1892⁃1900.

[9] 范海波.基于FPGA的高速卷积的硬件设计实现[J].电子科技,2010(15):72⁃75.

[10] 李泽明,李锦明,杨燕姣.基于FPGA的高阶FIR滤波器设计[J].科学技术与工程,2013(23):6903⁃6906.

[11] 张震.基于FPGA通用型FIR滤波器的研究与设计[J].软件,2015(6):125⁃128.

[12] 徐红,叶丰,黄朝耿.高速率低功耗FIR数字滤波器实现[J].电视技术,2014(23):56⁃60.

[13] 贾广峰,付永庆,张旭.FPGA数字脉冲压缩系统的研究与实现[J].应用科技,2013(6):60⁃62.