基于FPGA的FIR滤波器的性能研究
扫描二维码
随时随地手机看文章
摘要:目前FIR滤波器的一般设计方法比较繁琐,开发周期长,如果采用设计好的FIR滤波器的IP核,则开发效率大为提高。本方案基于Altera公司的CycloneⅡ系列芯片EP2C8Q208C8N,首先利用MATLAB中的滤波器函数fir2得出需产生的FIR滤波器的系数,再导入FIR IP Core,成功完成了FIR数字滤波器的设计。另外分析了阶数与不均匀采样数据对FPGA资源的影响和时生成FIR滤波器的输出性能的影响,并将实际输出的幅频特性图与我们需要的幅频特性图相比较,验证生成的FIR数字滤波器的性能。
关键词:FIR IP Core;FIR数字滤波器;滤波器系数;幅频特性图;EP2C8Q208C8N
在信号处理领域中,常常需要对信号进行加工处理,处理的本质就是信息的变换和提取,是将信息从各种噪声、干扰的环境中提取出来,变换成我们需要的形式。数字滤波器是由乘法器、加法器和延时单元组成的一种装置,是一个离散时间系统按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置。在一般情况下,图像处理及数据传输都要求信道具有线性相位特性。有限冲击响应(FIR)数字滤波器就可以做成具有严格的线性相位,同时又可以具有任意的幅度特性。此外,FIR滤波器的单位抽样响应是有限长的,因而滤波器一定是稳定的。故FIR滤波器广泛应用于数字系统处理领域。但目前FIR滤波器的设计方法比较繁琐,开发周期长,本文则介绍了一种简洁有效的设计方法,并且注重它的资源及性能分析。
随着IC(Integrated Circuit)技术的发展和EDA(Electronic Design Automatic)工具的完善,各大FPGA器件厂商及第三方都陆续推广专门的信号处理IP(Intellectual Property)Core,使得基于FPGA的数字信号处理DSP(Digital Signal Processing)系统的开发更加便捷,利用IP Core设计FIR滤波器,设计周期短,占用逻辑资源少,其运算速度相比DSP处理器有很大的提高,故IP核也逐渐成为数字信号处理实现高
速实时的一种方式。
在设计一个FIR滤波器之前,首先要确定滤波器的技术指标。本文是通过MATLAB算出滤波器的系数,导入IP核,就可通过FPGA实现任意的我们需要产生的滤波器。
1 FIR数字滤波器的设计
1.1 FIR数字带通滤波器的系数设计原理
本文以设计带通滤波器为例介绍如何设计基于IP核的FIR数字滤波器。现有一双T带阻滤波电路如图1所示,测量一系列不同频率对应的幅值,根据测量的幅频特性关系,我们可通过MATLAB算出需要设计的带通滤波器的系数。其带阻网络的中心频率计算公式:
图2为实际中用毫伏表逐点采样法测量带阻网络的幅频特性图,用MATLAB软件绘制出其幅频特性图。由于电阻电容的标称误差,实际中测量带阻电路,其中心频率点f0在3.7 kHz,衰减31.2133dB。
FIR数字带通滤波器的系数设计原理是:设带阻网络的幅频特性为H1(jw),FIR带通网络的幅频特性为H2(jw),要实现数字幅频均衡,则要满足:
由以上分析知:将带阻网络进行频率采样,测量带阻网络的频率值和对应的幅度值,则带通滤波器的幅度值实际可认为是带阻网络的幅度值的倒数。由带阻网络的幅频特性,可推算出需要产生的FIR带通滤波器的性能指标,如图3所示。
1.2 基于MATLAB的FIR数字滤波器的系数设计
最基本的FIR滤波器可用下式表示:
式(3)中x(n-i)是输入采样序列,h(i)是滤波器系数,N是滤波器的阶数,y(n)表示滤波器的输出序列。FIR数字滤波器设计的核心思想就是求出有限的脉冲响应来逼近给定的频率响应即求出这N个系数h(i)。
在MATLAB中提供了一些滤波器的函数,使FIR滤波器的运算更加方便和快速。
函数fir1是实现加窗线性相位FIR数字滤波器的经典设计方法,可以设计出低通、高通、带通和带阻滤波器。
函数fir2是基于频率取样的FIR滤波器设计方法,其滤波器的频率特性由矢量f和a决定,f和a分别为滤波器的频率向量和幅值向量。考虑到验证方法是采用数字幅频均衡,所设计的FIR带通滤波器是由带阻网络的幅频特性决定的,所以本文是采用函数fir2()设计的。
函数fircls是多波段有限最小二乘FIR滤波器设计。
函数rids是最小二乘线性相位FIR滤波器设计。
函数firpm是Parks-McClellan最优化FIR滤波器设计。
函数firreos是升余弦FIR滤波器设计。
函数kaiserord是用Kaiser窗进行设计的FIR滤波器的参数估计。
fir2()以频率取样为基础可设计出任意形状的FIR滤波器的频率响应,最基本的调用形式如下:
其中返回的行向量b是一个包含n+1个n阶FIR数字滤波器的系数,此FIR滤波器的频率特性是由频率向量f和幅值向量a决定的。
调用程序代码如下:
综上所述,我们只需要知道幅值与频率的关系,我们就可计算出任意阶数的FIR滤波器的系数。
1.3 基于FIR IP Core设计FIR数字滤波器
Mtera提供的FIR Compiler是一个结合Altera FPGA器件的FIR Filter Core,使得基于FPGA的数字信号处理DSP(Digital Signal Proce-ssing)系统的开发更加便捷,如果采用设计好的FIR滤波器的IP核,设计周期短,占用逻辑资源少,其运算速度相比DSP处理器有很大的提高。
使用FIR Core之前,首先必须保证MATLAB、Ouartus II及IP核本身,即FIR Compiler等工具安装正确。如果一切正常,打开QuanusⅡ,在MegaWizard Plug-In Manager库中的DSP子库中选择FIR Compiler,选择应用器件和输出文件名。再点击Next,则生成一个FIR Compiler功能模块,如图4所示。
单击Parameterize按钮,打开FIR滤波器核的参数设置窗口,进行FIR滤波器参数的配置。注意在Parameter Settings中,如果选择的是从文件中导入系数,则需要注意导入文件的格式,FIR Compiler支持的格式是一行只有一个数据,且文件最后不能有回车。所以在MATLAB生成滤波器系数时,对其进行列处理,再将滤波器系数复制到一个(.txt)文件,将(txt)文件导入。
再按照图4完成Step2、Step3,生成FIR模块如图5所示。此时只需要在顶层文件调用,编写其输入输出引脚。再编写外围模块AD、DA的程序,上电下载程序即可验证产生的FIR带通滤波器。
2 基于FPGA的FIR数字带通滤波器的系统测试
2.1 阶数对FIR数字滤波器的性能影响
采用EP2C8Q208C8N这款FPGA,逻辑资源数为8 256,能做到的FIR带通滤波器的最高阶数为310阶,AD转换芯片是采用8位模拟数字转换芯片、采样速率高达40 MSPS的TLC5540,基准电压选5 V,DA转换芯片是采用10位转换速率为165 MSPS的DAC9000。对FIR带通滤波器的实际输
出进行采样,再将采样的幅值和频率值导入MATLAB,得到的幅频特性曲线如图6所示。
阶数越高,其通频带越小,衰减特性也越尖锐,越接近我们需要设计的FIR带通滤波器,但不足之处就是耗费资源,其资源利用情况如表1所示。
2.2 不均匀采样数据对FIR数字滤波器的性能影响
不均匀采样,就是在幅度衰减剧烈的频率附近多选取数据采样点,而在其它幅度变化不剧烈的频段少选取采样点。在保持FIR滤波器阶数不变的前提下,改变每组采样数据的采样点个数,每组采样数据均采用不均匀采样,可以得到不同的频率向量f与幅度向量a,利用函数fir2()就可以得到不同的FIR滤波器特性系数。再将系数导入IP核,对产生的FIR带通滤波器的实际输出进行采样,再将采样的幅值和频率值导入MATLAB,得出的幅频特性曲线如图7所示。
知道采样数据的多少对FPGA的资源利用率无多大影响,但是会影响FIR带通输出波形的抖动,采样数据越密集,越能得出我们需要的幅频特性图。
3 结论
以上实验表明,在FPGA上用FIR IP Core实现FIR数字滤波器是一种很简洁有效的方法。如果FPGA资源比较大时,我们尽量选取高阶的FIR滤波器,这样能实现较好的滤波器性能;如果FPGA资源有限时,我们只能尽可能的选稍微高阶的滤波器,但是可以通过细化采样数据来达到较好的性能。