基于FPGA的分布式算法FIR滤波器的设计实现 中南大学信息与控制工程学院 王学梅 吴敏
发布时间:2007/8/20 0:00:00 访问次数:654
摘 要:本文介绍了能高效实现固定常数乘法的分布式算法原理,给出了在FPGA中用查找表实现FIR滤波器的算法设计,并通过Altera公司的EPF10K30器件进行了设计验证。
关键词:FIR滤波器;分布式算法;FPGA;查找表
FIR介绍
在许多信息处理过程中,如对信号的过滤、检测、预测等,都要广泛地用到滤波器,数字滤波器是数字信号处理中使用最广泛的一种方法,实现方法主要有IIR滤波器(无限冲激响应数字滤波器)和FIR滤波器(有限冲激响应数字滤波器)两种,其中,IIR滤波器需要执行无限数量卷积,能得到较好的幅度特性,其相位特性是非线性的;而FIR滤波器由有限个采样值组成,具有严格的线性相位特性。由于在数据通讯、语音信号处理、图像处理等传输过程中不能有明显的相位失真,而FIR滤波器在满足一定对称条件下可以实现IIR滤波器难以实现的线性相位,因而得到广泛应用。
FIR滤波器的数学表达式可用K阶内积来表示:
公式(略)
其中:
K:FIR滤波器的抽头数;
h(k):第k级抽头系数(单位脉冲响应);
x(n-k):延时k个抽头的输入信号。
FIR滤波器的单位脉冲响应h(k)均为实数,在幅度上只要满足下列两个条件之一,就能构成线性相位FIR滤波器。式(2)称为第一类线性相位的幅度条件(偶对称),式(3)称为第二类线性相位的幅度条件(奇对称)。
(k)=h(K-1-k) (2)
h(k)=-h(K-1-k) (3)
FIR滤波器最基本的结构是直接型,如图1所示。可以看出,FIR滤波器是由一个"抽头延迟线"的加法器和乘法器的集合构成,每个乘法器的操作数就是一个FIR系数。对每次采样y(n)都要进行K次连续的乘法和(K-1)次加法操作,能够提供这种算法性能的高性能硬件平台对大多数信号处理设计者来说都有很大的吸引力。
在滤波运算中,目前实现可采用两种方法:软件实现和硬件实现。软件实现是利用计算机把滤波器所要完成的运算编成程序通过计算机来执行。国内外的研究机构、公司已经推出了不同语言的信号处理软件包。但软件实现方法较慢,难以实时处理,主要用于教学和科研。硬件主要采用MCU(单片机)、DSP(数字信号处理器)和ASIC(专用集成电路)来实现。其中,单片机速度较慢;ASIC虽然性能良好,但灵活性差,只能实现一些特殊的功能;软件编程的DSP是一个典型的执行连续数学运算处理的可配置的信号处理硬件,目前应用较广。但是,DSP的串行指令执行方式,使其工作速度和效率大打折扣。因此,在一些高速应用中,系统性能不断增长,而DSP性能的提高却落后于需求的增长,从而产生了对新的数字信号处理实现方式的需求。
图1 直接型FIR滤波器结构图(略)
DA算法介绍
分布式算法(Distributed Arithmetic, DA)早在1973年就已经被Croisier提出来,由Peled和Liu进行了推广工作。直到现场可编程门阵列(Field Programmable Gate Array, FPGA)的查找表(Look Up Table, LUT)结构的出现,这种算法才重新受到重视,其主要原理如下。
为了分析简单起见,将FIR滤波器的表达式(1)改写为:
公式(略)
公式(略)
其中,x_{ab}表示x_{k}的第b位,x_{k}即x的第k次采样,则y可表示为:
公式(略)
改变式(6)的求和次序,结果可表示为:
公式(略)
可以看出,分布式算法是一种以实现乘加运算为目的的运算方法,与传统的乘累加运算不同在于执行部分积运算的先后顺序不同,这个过程可用图2的结构来实现。该算法可以利用一个查找表(LUT)实现映射,即用一个2K字宽(即2K行)、预先编好程序的LUT接受一个K位输入向量xb=[x0b, x1b,…, x(K-1)b]的映射,经查找表的查找后直接输出部分积table_out(b)=\sum_{k=0}^{K-1}h_{k} x_{kb} 。算法中的乘以位权2b可以通过图中的寄存器和累加器完成。这个过程可以用递规表达式表示成式(8),在执行了B次查找和B次累加后输出结果。
公式(略)
图2 DA算法结构图(略)
上面所介绍的是输入序列为无符号数的DA算法,在实际使用中,对于有符号数,一般用补码来表示,最高有效位是符号位用来区分正数和负数的。只要将图2中的累加器修改为带有加减控制的累加器即可,当符号位是“0”时,最高位进行加运算,反之进行减运算。
DA算法的FPGA实现
FPGA的特点
DA算法的计算需要一系列的查表、加减法运算,FPGA是物理级编程结构的可编程逻辑器件,其基本结构由4输入的查找表构成,如Altera公司的FLEX10K器件中的基本逻辑单元(Logic Element, LE)包含一个4输入查找表,而且它的嵌入式阵列块(Embedded Array Block, EAB)是一个2048位的可配置RAM,可将其配置成只读模式,生成一个更大的查找表,相对于串行运算为主导的通用DSP芯片来说
摘 要:本文介绍了能高效实现固定常数乘法的分布式算法原理,给出了在FPGA中用查找表实现FIR滤波器的算法设计,并通过Altera公司的EPF10K30器件进行了设计验证。
关键词:FIR滤波器;分布式算法;FPGA;查找表
FIR介绍
在许多信息处理过程中,如对信号的过滤、检测、预测等,都要广泛地用到滤波器,数字滤波器是数字信号处理中使用最广泛的一种方法,实现方法主要有IIR滤波器(无限冲激响应数字滤波器)和FIR滤波器(有限冲激响应数字滤波器)两种,其中,IIR滤波器需要执行无限数量卷积,能得到较好的幅度特性,其相位特性是非线性的;而FIR滤波器由有限个采样值组成,具有严格的线性相位特性。由于在数据通讯、语音信号处理、图像处理等传输过程中不能有明显的相位失真,而FIR滤波器在满足一定对称条件下可以实现IIR滤波器难以实现的线性相位,因而得到广泛应用。
FIR滤波器的数学表达式可用K阶内积来表示:
公式(略)
其中:
K:FIR滤波器的抽头数;
h(k):第k级抽头系数(单位脉冲响应);
x(n-k):延时k个抽头的输入信号。
FIR滤波器的单位脉冲响应h(k)均为实数,在幅度上只要满足下列两个条件之一,就能构成线性相位FIR滤波器。式(2)称为第一类线性相位的幅度条件(偶对称),式(3)称为第二类线性相位的幅度条件(奇对称)。
(k)=h(K-1-k) (2)
h(k)=-h(K-1-k) (3)
FIR滤波器最基本的结构是直接型,如图1所示。可以看出,FIR滤波器是由一个"抽头延迟线"的加法器和乘法器的集合构成,每个乘法器的操作数就是一个FIR系数。对每次采样y(n)都要进行K次连续的乘法和(K-1)次加法操作,能够提供这种算法性能的高性能硬件平台对大多数信号处理设计者来说都有很大的吸引力。
在滤波运算中,目前实现可采用两种方法:软件实现和硬件实现。软件实现是利用计算机把滤波器所要完成的运算编成程序通过计算机来执行。国内外的研究机构、公司已经推出了不同语言的信号处理软件包。但软件实现方法较慢,难以实时处理,主要用于教学和科研。硬件主要采用MCU(单片机)、DSP(数字信号处理器)和ASIC(专用集成电路)来实现。其中,单片机速度较慢;ASIC虽然性能良好,但灵活性差,只能实现一些特殊的功能;软件编程的DSP是一个典型的执行连续数学运算处理的可配置的信号处理硬件,目前应用较广。但是,DSP的串行指令执行方式,使其工作速度和效率大打折扣。因此,在一些高速应用中,系统性能不断增长,而DSP性能的提高却落后于需求的增长,从而产生了对新的数字信号处理实现方式的需求。
图1 直接型FIR滤波器结构图(略)
DA算法介绍
分布式算法(Distributed Arithmetic, DA)早在1973年就已经被Croisier提出来,由Peled和Liu进行了推广工作。直到现场可编程门阵列(Field Programmable Gate Array, FPGA)的查找表(Look Up Table, LUT)结构的出现,这种算法才重新受到重视,其主要原理如下。
为了分析简单起见,将FIR滤波器的表达式(1)改写为:
公式(略)
公式(略)
其中,x_{ab}表示x_{k}的第b位,x_{k}即x的第k次采样,则y可表示为:
公式(略)
改变式(6)的求和次序,结果可表示为:
公式(略)
可以看出,分布式算法是一种以实现乘加运算为目的的运算方法,与传统的乘累加运算不同在于执行部分积运算的先后顺序不同,这个过程可用图2的结构来实现。该算法可以利用一个查找表(LUT)实现映射,即用一个2K字宽(即2K行)、预先编好程序的LUT接受一个K位输入向量xb=[x0b, x1b,…, x(K-1)b]的映射,经查找表的查找后直接输出部分积table_out(b)=\sum_{k=0}^{K-1}h_{k} x_{kb} 。算法中的乘以位权2b可以通过图中的寄存器和累加器完成。这个过程可以用递规表达式表示成式(8),在执行了B次查找和B次累加后输出结果。
公式(略)
图2 DA算法结构图(略)
上面所介绍的是输入序列为无符号数的DA算法,在实际使用中,对于有符号数,一般用补码来表示,最高有效位是符号位用来区分正数和负数的。只要将图2中的累加器修改为带有加减控制的累加器即可,当符号位是“0”时,最高位进行加运算,反之进行减运算。
DA算法的FPGA实现
FPGA的特点
DA算法的计算需要一系列的查表、加减法运算,FPGA是物理级编程结构的可编程逻辑器件,其基本结构由4输入的查找表构成,如Altera公司的FLEX10K器件中的基本逻辑单元(Logic Element, LE)包含一个4输入查找表,而且它的嵌入式阵列块(Embedded Array Block, EAB)是一个2048位的可配置RAM,可将其配置成只读模式,生成一个更大的查找表,相对于串行运算为主导的通用DSP芯片来说