基于FPGA的FIR低通滤波器设计与实现 下载本文

内容发布更新时间 : 2024/4/26 0:22:29星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

基于FPGA的FIR低通滤波器设计与实现

作者:叶敏 孙国强 张淑玲 来源:《软件导刊》2016年第10期

摘要:采用CycloneⅣ EP4CE115F29C7型号的FPGA芯片,选用分布式算法,实现了一个40阶的FIR低通滤波器。通过Verilog HDL编程语言在Quartus II的开发环境中实现FIR滤波器的各模块仿真验证,并加入A/D芯片AD9214BRS-80和D/A芯片AD5440YRUZ进行硬件测试。结果表明,该滤波器输出波形稳定,波形衰减达到实验要求。 关键词:FIR低通滤波器;FPGA;分布式算法 DOIDOI:10.11907/rjdk.161839 中图分类号:TP319

文献标识码:A文章编号:16727800(2016)010005603 0引言

FIR滤波器作为一种处理工具被广泛应用于信号处理和图像处理领域。在数字通信应用中,如信道均衡、频率渠道化等对FIR滤波器的诸要求较高[1]。随着FIR滤波器阶数的增加,滤波器实现的复杂性也随之增加。目前,有关FIR滤波器的实现依然存在一些问题,如采用DSP方式实现滤波器在并行设计方面有所欠缺,同时用于实现滤波器的专用信号芯片通用性比较差,无法做到广泛兼容。基于此,本文提出一种基于FPGA的低通滤波器实现方案,充分利用 FPGA的高可靠性、高速与实时性的优势,一定程度上解决上述问题[2,3]。近年来,已有多种算法用于可编程逻辑器件(FPGA)实现高效的FIR滤波器结构,其中基于分布式算法的FIR滤波器作为一种主要的数字信号处理算法受到广泛青睐[4]。分布式算法不仅结构简易而且可以采用模块化形式设计,可以满足不同需求。本文充分考虑FPGA和分布式算法的优点,基于FPGA,采用分布式算法实现了一个40阶FIR低通滤波器。 1FIR数字滤波器设计原理 1.1FIR低通滤波器结构

对于FIR数字滤波器而言,其单位冲激响应是有限长的,对于一个长度为N,阶数为N-1的FIR滤波器的系统函数可以表示为: H(z)=∑N-1i=0biz-i(1) 式(1)可用差分方程表示为:

龙源期刊网 http://www.qikan.com.cn

y(n)=∑N-1i=0x(n-1)h(i)(2)

式(2)中,x(n)是采样输入序列,h(i)是滤波器系数,y(n)表示滤波器的输出序列。

常用的FIR滤波器具有线性相位,滤波器系数满足中心对称,即: h(i)=±h(N-1-i)(3) 1.2分布式算法

本文采用并行DA算法,数据并行加载[5]。假设FIR滤波器的阶数是N阶,输入数据的位宽是M,则在时钟到来时,N个输入数据的最低位一同加载进行相应寻址,然后将N个结果进行相加再乘以20,将得到的值放在寄存器中,然后在下一时钟到来时,N个输入数据的第二位一同加载进行相应寻址,然后将N个结果进行相加再乘以21,然后与寄存器中的值进行相加。依此类推,N个输入数据的第M位并行加载寻址相加之后乘以2M,由于是最高位,须与之前寄存器中的值相减。

由于FIR滤波器系数是对称的,选择将与相同系数相乘的输入值进行预先相加,得到一个新的输入。在本系统中,原始滤波器是40阶,进行相加处理后,滤波器缩小为20阶,减小硬件规模。

2MATLAB设计FIR滤波器

滤波器设计指标如下:低通、阶数40阶、采样频率100kHz、信号截止频率25kHz、Hanning窗、输入数据位宽10位。为了获得40阶滤波器的系数,采用MATLAB中的FDATool工具对滤波器进行设计。为了验证FDATool所设计的FIR低通滤波器的合理性,本文采用Simulink仿真,仿真原理、结果分别如图1、图2所示。

图2中,由上至依次是3kHz信号、30kHz信号、3kHz和30kHz叠加信号经过滤波器后的结果,可以看到30kHz信号被滤掉,而3kHz没有衰减。 3FPGA实现FIR滤波器

整个FIR低通滤波器采用模块化设计,利用Verilog HDL语言编程来实现。输入模块存储由A/D芯片转换得到的二进制数,存储输入数据前,需对数据进行位扩展。此操作主要是为了使当前输入数据的最高位数值保持一致,当输入数据的最高位为1时,则该扩展位也为1,否则扩展位为0。当40个11位二进制数据并行加入到输入模块端口时,为了减少硬件规模,根据FIR滤波器系数的对称性,将输入数据进行预先相加。

龙源期刊网 http://www.qikan.com.cn

输入模块的输出连接并串转换模块,将输出模块的结果串行输出,输出为20个11位二进制数的每一位,从而使20个数据的相同bit同时输出,每4位作为ROM表模块的地址。也就是说,5组4阶的滤波器会有5个串并转换模块。按照设计,本系统存在5张ROM表,每张表中,所存储的是经过输入之后的4个系数的16种组合。ROM表的位宽设置为16位二进制数。

查找表中的数据被进行相应寻址,输出结果连接查找表相加模块,查找表相加模块将5张ROM表在同一时钟下的输出值相加,得到输入数据二进制数中的一位数和整个滤波器卷积的结果。

移位累加模块将查找表相加模块中的数据进行加权。移位累加模块的输入为查找表的输出,也就是每一位整体相加之后的结果(采用16位表示),由于原来的输入数据有10位,移位累加模块的输入就有10个16位2进制数,然后依次将上一次相加的结果向右移动移位。 以上各个模块的使能信号由使能控制模块产生,而系统的采样信号和对外围电路的控制信号由系统控制模块产生。该模块用于产生采样信号和对ADC及DAC进行控制。由于FPGA板内部时钟为50MHz,要得到100kHz的采样时钟,必须对它进行500分频。根据以上各模块设计,采用Verilog HDL编程,在Quartus II中编译好每个模块。 4系统性能测试

为证明所设计FIR滤波器的性能,本系统选取Altera Cyclone系列中的EP4CE115F29芯片进行调试,同时加入A/D芯片AD9214BRS-80进行模数转换和D/A芯片AD5440YRUZ进行数模转换。通过嵌入式逻辑分析仪SignalTap观察JTAG输出的波形,示波器检测其波形和频率,毫伏表观察输出信号的有效值和衰减值。当信号发生器输入3kHz的正弦波信号时,嵌入式逻辑分析仪显示如图3,示波器显示波形如图4所示。

结果显示所设计的40阶滤波器对于3kHz没有滤波效果,设计符合要求。通过系统联调后,需要检测滤波器性能,本文采用输出电压来评价滤波器设计是否达标。由信号发生器输送不同频率的正弦波,在示波器上观察信号峰峰值,用毫伏表观察输出信号的有效值和衰减/dB,具体情况如表1和图5~图8所示。

结果表明,低于通带衰减20kHz的信号通过滤波器后几乎不产生衰减,输出的电压峰值和有效值、衰减都变化不大;当达到截止频率25kHz时,衰减变为-15dB,比最开始减少6dB,由于本次设计为FIR低通滤波器,不是均方根滤波器,所以在截止频率时信号衰减为6dB,不是3dB。当输入信号频率达到30kHz时,输出电压衰减达到-50dB,衰减了41dB,由于本次设计要求阻带衰减为40dB,所以设计结果符合要求。 5结语