电子百科
目前,FIR滤波器的硬件实现有以下几种方式:
1.1、数字集成电路FIR滤波器
一种是使用单片通用数字滤波器集成电路,这种电路使用简单,但是由于字长和阶数的规格较少,不易完全满足实际需要。虽然可采用多片扩展来满足要求,但会增加体积和功耗,因而在实际应用中受到限制。
1.2、DSP芯片FIR滤波器
另一种是使用DSP芯片。DSP芯片有专用的数字信号处理函数可调用,实现FIR滤波器相对简单,但是由于程序顺序执行,速度受到限制。而且,就是同一公司的不同系统的DSP芯片,其编程指令也会有所不同,开发周期较长。
1.3、可编程FIR滤波器
还有一种是使用可编程逻辑器件,FPGA/CPLD。FPGA有着规整的内部逻辑块整列和丰富的连线资源,特别适合用于细粒度和高并行度结构的FIR滤波器的实现,相对于串行运算主导的通用DSP芯片来说,并行性和可扩展性都更好。
带有常系数的FIR滤波器是一种LTI数字滤波器。z阶或者长度为z的∏R输出对应于输入时间序列x[n]的关系由一种有限卷积数量形式给出,具体形式如下:
其中从f[0]≠0—直到f[L-1]≠0均是滤波器的z阶的系数,同时也对应于ΠR的脉冲响应。对于LTI系统可以更为方便地将(3,2)表示成z域内的形式:
其中F(z)是FIR的传递函数,其z域内的形式如下:
图1给出了z阶LTI型FIR滤波器的图解。可以看出,ΠR滤波器是由一个“抽头延迟线”加法器和乘法器的集合构成的。传给每个乘法器的操作数就是一个FIR系数,显然也可以称作“抽头权重”。过去也有人将FIR滤波器称为“横向滤波器”,就是说它的“抽头延迟线”结构。
图1 直接形式的FIR滤波器
(3.4)中多项式F(z)的根确定了滤波器的零点。仅有零点存在也就是FIR经常被称作“全零点滤波器”的原因。在第5章我们将讨论∏R滤波器中重要的一类(叫作CIC滤波器),它是递归的,但也是FIR。这是可能的,因为递归部分产生的极点已经被滤波器的非递归部分消除了。有效极点/零点图就变得只有极点了,也就是全零点滤波器或者是FIR。注意:非递归滤波器均是FIR,但是递归滤波器却可以是FIR或者是IIR。图2说明了这一关系。
图2 结构和脉冲长度之间的关系
有限长冲激响应(FIR)滤波器在数字信号处理中是一种基本的处理单元。无限长单位冲激响应(IIR)数字滤波器的优点是可以利用模拟滤波器设计的结果,但其缺点是不具有线性相位性。图像处理以及数据传输都要求信道具有线性相位特性,FIR滤波器可以做成严格的线性相位,避免被处理信号产生相位失真,还可以具有任意的幅度特性。此外,FIR滤波器的单位冲激响应是有限长的,因而滤波器一定是稳定的。
在数字滤波器的研究中,已经提出多种FIR滤波器的设计和实现方法,如并行结构、流水线结构、分布式结构等[1-3]。FIR滤波器计算量大,且要求实时实现。如何提高速度以满足信号处理的高效性和实时性一直是人们研究的重点和热点。脉动阵列是一种新型的流水线结构,所有处理单元是相同且全流水的,并且有模块化和规则化的特征,这对于硬件设计是很重要的。脉动阵列结构可以很好地满足高速实时信号处理的需要,提高数据的通过率及电路的执行速度。该结构结合了并行结构和流水线的优势,使FIR滤波器达到了更高的处理速度。
数字滤波器现在大多在DSP芯片上实现[4]。随着集成电路技术的发展,现在已有多种专用DSP芯片用于实现滤波、FFT等运算。另外,FPGA内部的规整的逻辑块阵列,很适合实现脉动阵列这种高度并行的运算。Altera公司新推出的Stratix系列FPGA内部有丰富的逻辑阵列资源及高性能嵌入式DSP块,能够高效地实现数字信号处理功能[5]。
本文首先介绍了FIR滤波器和脉动阵列的原理,然后设计了脉动阵列结构的FIR滤波器,画出电路的结构框图,并进行了时序分析,最后在FPGA上进行验证。结果表明,脉动阵列的模块化和高度流水线的结构使FIR滤波器在FPGA上获得了很好的性能,比串行结构的运算速度更快,呵以更好地满足数字信号处理中高效、实时的要求。
2 FIR滤波器及脉动阵列原理
2.1 FIR滤波器原理
数字滤波器用于改变输入信号X(n)的频谱特性以满足某种特定的设计要求。一个因果的数字滤波器可以用它的单位冲激响应h(n)、传输函数H(z)或者差分方程来表达。其中单位冲激响应和传输函数描述了系统的时域和频域性质,差分方程则反映了实现该滤波器所需的运算。
一个线性时不变因果滤波器可以用式(1)的差分方程描述:
如果1≤k≤N时,ak=0,则:
这就是一个M阶的FIR滤波器,是非递归运算。
2.2 脉动阵列
脉动阵列结构是1978年由Carneige-Mellon大学的H.T.Kung等人发展起来的一种专用处理器设计模型,是一种新的流水线结构,表示一种有节奏地汁算并通过系统传输数据的处理单元网络。这些处理单元规则地泵入泵出数据以维持规则的数据流[6]。由于其数据运算与传送方式类似于心脏或脉搏有节奏地跳动,因此被称为心动阵列或脉动阵列。利用脉动阵列可设计出一系列适合数字信号处理应用的模块化、规则且有效的运算结构。脉动阵列结构的基本特性如下:
(1)脉动性
数据在一个全局时钟的精确控制下,有节奏地经过计算和传递过程,最后通过网络。
(2)模块性和规则性
阵列由模块化的处理单元组成,各处理单元之间的互连方式均匀一致,并且计算网络可任意扩大。
(3)空间局部性和时间局部性
表现在数据从一个计算节点传递到下一个计算节点至少需要一个单元时间。
(4)有效的流水线结构
脉动阵列免除了形成数据流所需的控制开销。阵列内处理单元间的局部连接方式使阵列中负载均匀、连线极短,最大限度地减小了系统内部的通信延时,提高了处理单元的利用率,使整个阵列的系统性能得到充分发挥。
脉动结构是将线性映射技术用于规则依赖图上进行设计的。依赖图的边表示优先约束。脉动阵列设计中的基本矢量有:
(1)投影矢量:
(2)处理器矢量:PT=(p1 p2)
(3)调度矢量:ST=(S1 S2)
(4)硬件利用率:HUE=1/│STd │
3 FlR滤波器的脉动结构设计
3.1 FIR滤波器的脉动阵列结构
用调度不等式选择可行的调度矢量ST,并根据脉动结构的可行性限制条件选择投影矢量d和处理器空间矢量PT,然后用线性映射技术设计脉动列。
选择投影矢量、处理器矢量和调度矢量如下:
于是,节点IT=(i,j)被处理为:
节点IT=(i,j)的执行时间为:
硬件利用率:
以五阶FIR滤波器为例:
其中,d0,d1,d2和d3作为延时单元,m0,m1,…,m4为固定乘数的乘法器,乘数分别为ω0,ω1,…,ω4。乘法器m0和加法器a0构成处理器P0;乘法器m1和加法器a1构成处理器P1;类似的,m4和a4构成处理器P4。5个处理器同时工作,x(n)输入后同时到达5个处理器,分别和权重ωi相乘后,经不同的延时相加得到结果y(n)。
该设计框图很好地体现了2.2节提到的脉动阵列的4个基本特性。数据在网络中有节奏的输入、计算、传递并输出。
该结构由5个相同的模块化处理器构成,容易扩展,可实现任意阶的FIR滤波器。数据的输入、和权重的相乘、中间结果的寄存、数据的输出各需要一个单元时问,但这几种操作可同时进行,不会互相干扰。该脉动阵列结构以高度的流水线方式运行。
需要注意的是,在乘法器输出的时候需要对输出的数据进行一位扩展,以避免加法器的溢出问题。
3.2 时序分析
该结构的空问时间表示如图2所示。横轴为时间轴,纵轴为处理器轴。图中的每一行对应一个处理器。可以看到在时间轴的某一点上,输入数据x(n)在同一时间剑达所有处理器,即输入"广播";在处理器轴的某一点上,权重ωi在各处理器中处于相同的空间坐标,因此权重"保持";而输出数据y(n)在不同的空间和时间得到,所以输出"移动"。该FIR滤波器为输入广播、权重保持、输出移动型的脉动阵列结构。
借助于脉动阵列技术,输入和输出之间的处理可以同时进行,因此,总的执行时间变得最小。对该结构进行时序分析,如图3所示。在第一个时钟周期x(0)送到各处理器,和权重分别相乘后在第二个时钟周期得到y(0)=ω0x(0),在此同时数据x(1)已经输入;第三个时钟周期输入x(2),在处理器P0得到ω0x(1),此时处理器P1的结果ω1x(0)经一级延时后和P0的结果相加得到y(1)=ω0(1)+ω1x(O)。同理,第四个周期得到y(2)=ω0x(2)+ω1x(1)+ω2x(0),第五个周期得到y(3)=ω0x(3)+ω1x(2)+ω2x(1)+ω3x(O)…。
4 FPGA验证
以一个输入输出均为8 b的五阶FIR滤波器为例,对该脉动阵列结构的FIR滤波器在FPGA上进行验证。目标器件选用Stratix系列器件,编译软件为QuartusⅡ4.2。
Stratix系列器件是Altera公司推出的新型FPGA,其内部有丰富的嵌入式存储器、优化的数字信号处理(DSP)块和高性能I/O能力。Stratix器件是设计复杂的高性能系统的理想选择。StratiX器件使用DSP块实现大计算量应用所需的大数据吞吐量。DSP块由硬件乘法器、加法器、减法器、累加器和流水线寄存器组成[6]。从图1中可以看出,每个处理器单元由一个乘法器和一个加法器构成,这种结构很适合用FPGA内部的DSP块实现。
实验结果如表1所示。为了便于比较,使用相同的器件,还给出了串行结构FIR滤波器的实验结果。在串行结构中,每次计算1个x(n),需要3个时钟周期。脉动阵列结构每次计算5个x(n),需要5个时钟周期。每个x(n)为8 b数据。运算速度可以由下面的公式得出:
运算速度=(每次处理数据长度/运算耗用的时钟周期数)×系统时钟频率
从表中可以看出,在占用逻辑单元的数量上二者基本相当,虽然串行结构只占用了一个DSP块,脉动阵列结构占用了5个,但串行结构的最高运算速度只能达到284.93 Mb/s,脉动阵列可以达到1 840.32 Mb/s。显然脉动阵列结构更具优势,可以更好地满足数字信号处理中高效、实时的要求。本文基于脉动阵列技术,设计了高效的FIR滤波器,具有模块化和流水线的结构,并充分利用了FPGA资源,达到了较高的工作频率。
5 结 语
FIR滤波器是数字信号处理中的一种基本运算,有着广泛的应用。基于脉动阵列结构,本文设计了高效的FIR滤波器。模块化和高度流水线的结构使得其在FPGA上获得了较好的性能,完全可以满足系统高效、实时处理的要求,提高了系统运算速度并充分合理地利用了FPGA资源。另外,由于脉动阵列自身的特点,各级结构相同,方便扩展,可以实现任意阶的FIR滤波器。
1. 引言
随着数字信号处理理论及应用技术的迅速发展,在一个数字系统中只用一个采样频率已 经很难满足要求。在实际的应用中,经常会遇到采样率的转换问题,即要求一个数字系统能 工作在“多采样率”状态。近年来,建立在采样率转换基础上的“多采样率数字信号处理” 已成为数字信号处理学科中的主要研究内容之一。直观地考虑,首先将以采样率 F1 采集的 数字信号进行数模转换,这样就变成模拟信号,再按采样率 F2 进行模数转换,从而实现了 从F1 到F2 的采样率转换,这就是变换采样率的最简单方法。但是这样较麻烦,且易使信 号受到损伤,所以在实际应用的变采样系统中,改变采样频率并不经过模拟信号,而是完全 在数字域中实现的。在数字信号处理中,滤波占有极其重要的作用,适用于变采样率系统 中的数字滤波器就是本文要谈论的主要内容。
2.FIR 数字滤波器的设计过程及结构
数字滤波器根据其冲击响应函数的时域特性,可分为两种:无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。FIR 滤波器被广泛应用于各类数字信号处理系统, 它的系统总是稳定的,可以满足滤波器对幅度和相位特性的严格要求,避免模拟滤波器温漂 和噪声等问题,易实现线性相位且易用硬件实现,这些都是FIR 系统的突出优点,也是IIR 系统不易实现的。尽管IIR 滤波器系统比FIR 滤波器系统易取得较好的通带和阻带衰减特性, FIR 系统若要取得较好的衰减特性,一般要求系统函数H(z)阶次要高,也即滤波器长度M 要大。综合以上考虑,本文选用FIR 滤波器来完成设计。
2.1FIR 数字滤波器的基本原理及设计基础
图1 中x(n)是输入信号,x(n-i)是延时了i 个采样周期的输入信号,h(i)(i = 0,1,…,n-1)是第i 个延时节的加权值(即滤波器系数),y(n)是时刻t = nT 时滤波器的输出信号。
FIR 数字滤波器的设计一般要经过三步[2]:确定目标、逼近和计算机实现。通常在设计 滤波器之前,应该先根据具体的应用确定一些技术指标。指标的形式一般在频域中给出幅度 和相位响应。幅度指标主要有2 种方式,分别是绝对指标和相对指标。在确定了技术指标之 后,就可以根据数学知识和滤波器的基本原理确定滤波器的模型来逼近给定的指标。上两步 的结果通常是得到以差分或系数函数或冲击响应描述的滤波器,根据这个描述用硬件或软件 实现并分析其频率特性和相位特性。至此完成了一个滤波器设计的全过程。
2.2 利用Matlab 实现FIR 数字滤波器
Matlab 是一个交互式的以矩阵为基础的软件,它被广泛应用与教学、科研和工程设计 等各个领域。随着Matlab 软件的发展,尤其是Matlab 的信号处理工具箱的不断完善,不仅 数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到最优化。
在数字信号处理领域里,采样频率转换就是将信号采样频率从一个给定的频率F1=1/T1 转换到另一频率F2=1/T2 的过程,它是一个非线性过程。当新的采样频率高于原始频率,即 F2 > F1 时,称为升采样率或插值;反之,当新的采样频率低于原始频率,称为降采样率或 抽取。
设对某限带时间波形x(t),以采样率fs(在满足采样定理的条件下)进行采样,得到时
基于半带滤波器的优点,在半带滤波器的基础上设计FIR 滤波器一般采用等波纹逼近 法,该方法对同样的技术指标,能使误差均匀分布在整个频带,而且这种逼近法需要的滤波 器阶数低,且最大误差最小。
给定半带滤波器的设计指标:
通带截止频率为20KHz,采样频率为88.2KHz,通带波纹为0.001,阻带衰减70dB。
根据上述指标,结合其优点,利用Matlab 的信号处理工具中的remez 函数进行FIR 滤 波器的设计。remez 函数利用Parks-McClellan 算法,该算法利用remez 交换算法和切比雪 夫逼近理论来设计滤波器,使实际滤波器的幅频响应最优地拟合理想滤波器的幅频响应,使 它们之间最大误差最小化。
调用remezord 和remez 函数设计此滤波器, 由调用格式 [N,fo,ao,w]=remezord(f,m,,rip,Fs)[3]知道,首先根据设计指标确定remezord 函数的调用参数, 估算出滤波器的最低阶数N ,其返回函数再作为remez 函数的调用参数,再直接编写程序 调用remez 函数得到滤波器单位脉冲响应h(n),得到如图2 所示的幅频响应:
通过分析该半带滤波器的幅频响应,可以发现该滤波器的通带和阻带波纹俱在 0.0015dB 以内,阻带衰减达到了70dB。 程序运行结果显示,滤波器阶数N=43,基本符合设计要求。
3.FIR 数字滤波器的FPGA 硬件实现
由前面的Matlab 设计已经求得了要求的FIR 滤波器的滤波系数及阶数,下面利用FPGA来完成滤波器的硬件实现。FIR 滤波器主要是由乘加单元组成,如果按照直观结构直接构造 FIR 滤波器会占用大量资源,这显然是不经济的。现提出一种利用FPGA 硬件实现滤波的 TOP-DOWN 结构图,如图3 所示。它采用串行结构实现硬件[4]即将输入数据直接与其对应的滤 波系数相乘,但不需像并行结构中那样,必须所有的数都相乘完才能相加,而是将前一级乘 积锁存,直接与后一级乘积累加,这样就可以极大地节约硬件资源,提高执行速度。FIR 数 字滤波器系统主要分为数据存储和数据运算两大模块。数据存储模块主要功能是以时钟去控 制片选信号和地址译码,在ROM 查找表中读出与ROM 地址相对应的数据,即为滤波系数,并 将它与对应的输入信号同步输出至数据运算模块。数据运算模块主要功能就是完成输入信号 与对应滤波系数的相乘和累加。
4 结论
由于FPGA 具有速率高,面积小,性能可靠等特点,成为数字滤波器工作在很高频率上 的首先硬件实现方案。本文利用Matlab 设计了一个给定指标的适用于变采样率FIR 滤波器, 并对它进行了FPGA 硬件实现。
本文的创新点:提出一种基于FPGA 实现变采样率FIR 数字滤波器的硬件实现方案,节 约了硬件资源,降低设计成本,具有实用价值。
FIR数字滤波器在数字信号处理的各种应用中发挥着十分重要的作用,它能够提供理想的线性相位响应,在整个频带上获得常数群时延,从而得到零失真输出信号,同时它可以采用十分简单的算法予以实现。这些优点使FIR滤波器成为设计工程师的首选。在采用VHDL或VerilogHDL等硬件描述语言设计数字滤波器时。由于程序的编写往往不能达到良好优化而使滤波器性能表现一般,而采用调试好的IP Core需要向Al-tera公司购买。在此,采用一种基于DSP Builder的FPGA设计方法,使FIR滤波器设计较为简单易行,并能满足设计要求。
1 FIR滤波器介绍
1.1 FIR滤波器原理
对于一个FIR滤波器系统,它的冲激响应总是有限长的,最具体的FIR滤波器可用下式表示:
式中:r是FIR滤波器的抽头数;x(n-r)是延时,r个抽头的输入信号;b(r)是第r级抽头数(单位脉冲响应);M是滤波器的阶数;y(n)表示滤波器的输出序列。滤波器就是寻求一个可实现的系统函数H(z),使其频率响应H(ejω)满足所希望得到的频域信号,也可以用卷积的形式来表示:
y(n)=z(n)*h(n)
典型的直接I型FIR滤波器如图1表示,其输出序列y(n)满足下式:
1.2 设计要求
数字滤波器实际上是一个采用有限精度算法实现的线性非时变离散系统。它的设计步骤是先根据需要确定其性能指标,设计一个系统函数h(n)逼近所需要的性能指标,滤波器的系数计算可以借助Matlab强大的计算功能和现成滤波器设计工具来完成,最后采用有限的精度算法实现。该系统的设计指标为:设计一个16阶的低通滤波器,选模拟信号的采样频率Fs为5 kHz,要求信号的截止频率Fc=1 kHz,输入序列的位宽为9位(最宽位为符号位)。激励源为幅值为27,频率为800 Hz与1 600 Hz两个信号的混频信号。
2 基于DSP Builder设计FIR滤波器
2.1 DSP Builder介绍
DSP Builder是美国Al-tera公司推出的一个面向DSP开发的系统级设计工具,它在QuartusⅡ设计环境中集成了Matlab和SimuIinkDSP开发软件。以往使用的Matlab工具仅仅作为DSP算法的建模和基于纯数学的仿真,其数学模型无法为硬件DSP应用系统直接产生实用的程序代码,仿真测试的结果也往往是基于数学的算法结果。而以往的FPGA所需要的传统基于硬件描述语言的设计因考虑了FPGA硬件的延时与VHDL递归算法的衔接,以及补码运算和乘积结果截取等问题,所以相当繁琐。而对于DSP Builder而言,它作为Matlab的一个Simulink工具箱,使得用FPGA设计的DSP系统完全可以通过Simulink的图形化界面进行建模、系统级仿真。设计模型可直接向VHDL硬件描述语言转换,并自动调用QuartusⅡ等EDA设计软件,完成综合、网表生成以及器件适配乃至FPGA的配置下载,使得系统描述与硬件实现有机地融合,充分体现了现代电子技术自动化开发的特点与优势。
2.2 FIR滤波器的设计
2.2.1 FIR滤波器参数选取
采用Matlab提供的滤波器专用设计工具FDAtool仿真设计的滤波器,可满足要求的FIR滤波器幅频特性,由于浮点小数在FPGA中实现得比较困难,且代价太大,因而需要将滤波器的系数和输人数据转化为整数,其中量化后的系统可以在Matlab主窗口中直接转化,对于输入数据,乘以28的增益用Altbus控制位宽转化为整数输入。
2.2.2 FIR滤波器模型的建立
根据FIR滤波器原理,可以利用FPGA来实现FIR滤波电路。DSP Builder设计流程的第一步是在Matlab/Simulink中进行设计输入的,即在Matlab的Simulink环境中建立一个MDL模型文件,用图形方式调用DSP Builder和其他Simulink库中的图形模块,构成系统级或算法级设计框图,如图2所示。
2.2.3 在Simulink中的仿真并生成VHDL代码
完成模型设计之后,可以先在Simulink中对模型进行仿真,可以通过Simulink中的示波器模块查看各个步骤的中间结果。输入信号采用800 Hz和1 600 Hz,幅值相同的两个正弦信号的叠加。仿真结果如图3所示。从仿真波形可以看出,通过滤波器之后,1 600 Hz的信号能够被很好地滤除。
双击SignalCompiler可对以上的设计模型进行分析,选择相应的芯片,将以上设计模块图文件“翻译”成VHDL语言。
2.2.4 Modelsim的RTL仿真
在Simulink中进行的仿真属于系统验证性质的,是对mdl文件进行的仿真,并没有对生成的VHDL代码进行仿真。事实上,生成VHDL描述的是RTL级的,是针对具体的硬件结构,而在Matlab的Simulink中的模型仿真是算法级的,两者之间有可能存在软件理解上的差异,转化后的VHDL代码实现可能与mdl模型描述的情况不完全相符。这就需要针对生成的RTL级VHDL代码进行功能仿真,仿真结果如图4所示。
仿真结果说明,在Modelsim中仿真结果和Simulink里的仿真结果基本一致,该滤波器有较好的滤波效果。可以看出,输入正弦波经过数字化过程以后,能够在Modelsim中还原出模拟波形.符合设计的要求,可以在QLtortusⅡ的环境下进行硬件设计。
2.2.5 滤波器在FPGA上的实现
在QuartusⅡ环境中,打开DSP Builder建立的QuartusⅡ项目文件,在QuartusⅡ中再进行一次仿真,由此可以看到符合要求的时序波形。然后指定器件引脚,并进行编译,最后下载到FPGA器件中,就可以对硬件进行测试,加上clok信号和使能信号,用信号发生器产生所要求的两个不同频率的正弦信号,就可以在示波器上看到滤波后的结果。需要设计不同的滤波器电路是仅修改FIR滤波器模型文件就可以实现,这样不仅避免了繁琐的VHDL语言编程,而且便于进行调整。
3 结 语
在利用FPGA进行数字滤波器开发时,采用DSPBuilder作为设计工具,能加快进度。当然,在实际应用中,受精度、速度和器件选择方面的影响,可能对其转化的VHDL进行进一步的优化。