FPGA实现FIR抽取滤波器的设计之袁州冬雪创作
FIR(fini te impulse response)滤波器是数字信号处理系统中最基本的元件,它可以在包管任意幅频特性的同时具有严格的线性相频特性,同时其单位冲激响应是有限的,没有输入到输出的反馈,系统稳定.因此,FIR滤波器在通信、图像处理、形式识别等范畴都有着广泛的应用.在工程实践中,往往要求对信号处理要有实时性和矫捷性,而已有的一些软件和硬件实现方式则难以同时达到这两方面的要求.随着可编程逻辑器件的发展,使用FPGA来实现FIR滤波器,既具有实时性,又兼顾了一定的矫捷性,越来越多的电子工程师采取FPGA器件来实现FIR滤波器.
1 FIR滤波器工作原理
在进入FIR滤波器前,首先要将信号通过A/D器件停止模数转换,使之成为8bit的数字信号,一般可用速度较高的逐次逼进式A/D转换器,不管采取乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需颠末数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块.FPGA有着规整的外部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来讲,其并行性和可扩大性更好,操纵FPGA乘累加的疾速算法,可以设计出高速的FIR数字滤波器.
2 16阶滤波器布局
在滤波过程中实现抽取,对于抽取率为N的抽取滤波器而言,当出去N个数据时滤波器完成1次滤波运算,输出1次滤波成果.抽取滤波器的成果和先滤波后抽取的成果是一致的,只是对于同样的数据,停止滤波运算的次数大大减少.在数字系统中采取拙取滤
波器的最大优点是增加了每次滤波的可处理时间,从而达到实现高速输入数据的目标.采样数据与滤波器系数在节制电路的作用下,分别对应相乘并与前一个乘积累加,颠末多次(有多少阶就要多少次)反复的乘累加最后输出滤波成果,将相同系数归类,16阶滤波器公式:
乘法器的数量减少一半,但加法器的数量增多了,但相对乘法运算来讲,加法运算所占用的资源少的多,运算的速度也快得多.
3 滤波器系数的求取
使用Matlab集成的滤波器设计工具FDAtool,可以完成多种滤波器的数值设计、分析与评估,设计16阶低通滤波器参数如下:
采样频率:Fs为50MHz,滤波器归一化截止频率:Fc为0.4MHz,输入数据位宽:8位,输出数据宽度:16位FDAtool采取汉宁窗函数(Hanning)设计16阶线性相位FIR数字滤波器,并提取其特性参数h(n)浮点数值.
MATLAB中算出的系数h(n)的值是一组浮点数,停止浮点值到定点值的转换,用16位二进制补码暗示为
滤波器抽头数是16个,思索到线性FIR滤波器的偶对称特性,只思索8个滤波器抽头数,则需要一个28×8的表(其中指数8指的是8个滤波器抽头数,后面的8指的是输入数据的位宽).但是Virrex—e FPGA只能提供4输入的杏找表,所以要对查找表的地址停止电路分割.将8位地址线分为高4位和低4位,分别作为两个24×8的查找表的地址输入,从而指数倍地节俭了硬件资源.
4 主程序及仿真
在时钟和计数器的节制下,根据查找表输出成果位权的分歧,将输入数据向左移动相应的位数,低位依照位权的分歧补上个数相当的“0”,然后将移位数据停止累加操纵,输出最终滤波成果,这里的成果依旧是用二进制数据暗示的,只是位数因为移位和累加操纵增加了8位.
图五移位加法器的波形仿真图
以上即是基于分布式算法的FIR滤波器的三个主要模块的分析,为了能使该滤波器能正常工作,还需要用VHDL语言编写节制程序,使各模块毗连起来,总的来讲,该滤波器的实现原理图如下:
图六基于分布式算法的FIR滤波器顶层原理图在FPGA中,不管是基于乘累加的FIR滤波器,还是基于分布式算法的FIR滤波器(包含FIR滤波器的各模块)都是通过VHDL语言编程来实现的.
5 结语
本文所先容的基于FPGA、采取分布式算法实现FIR滤波器的方法,在提高系统运行速度和节俭硬件资源方面具有很大的优势.基于分布式算法的FIR滤波器布局可以扩大成任意阶数的FIR滤波器.而且,通过改变阶数和查找表中的系数,还可以将此设计矫捷地运用于实现高通、低通和带阻滤波器,可移植性较好.因此,这种方法在高速数字信号处理中将有很好的应用前景.