位置:51电子网 » 技术资料 » 其它综合

基于FPGA的高速FIR数字滤波器的设计

发布时间:2008/5/29 0:00:00 访问次数:1069

1 引 言
  目前fir滤波器的实现方法主要有3种:利用单片通用数字滤波器集成电路、dsp器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用dsp器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。

  fpga有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用dsp芯片来说,其并行性和可扩展性更好。但长期以来,fpga一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在fpga中缺乏实现乘法运算的有效结构。本文利用fpga乘累加的快速算法,可以设计出高速的fir数字滤波器,使fpga在数字信号处理方面有了长足的发展。

2 matlab设计滤波器参数

  利用matlab为设计fir滤波器提供的工具箱,选择滤波器类型为低通fir,设计方法为窗口法,阶数为16,窗口类型为hamming,beta为0.5,fs为8.6 khz,fc为3.4 khz,导出的滤波器系数如下:

3 快速fir滤波器算法的基本原理

(1) 分布式算法

  分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先相加形成相应的部分积,然后再对各部分积进行累加得到最终结果。

  对于一个n(n为偶数)阶线性相位fir数字滤波器,输出可由式(1)表示:

(2) 乘法器设计

  高性能乘法器是实现高性能的fir运算的关键,分析乘法器的运算过程,可以分解为部分积的产生和部分积的相加两个步骤。部分积的产生非常简单,实现速度较快,而部分积相加的过程是多个二进制数相加的加法问题,实现速度通常较慢。解决乘法器速度问题,需要分别从这两个方面入手,减小部分积的个数,提高部分积相加运算的速度。

3.1 booth算法

  booth算法针对二进制补码表示的符号数之间的相乘,即可以同时处理二进制正数/负数的乘法运算。booth算法乘法器可以减少乘法运算部分积个数,提高乘法运算的速度。

  下面讨论一个m b×n b乘法器基本单元的设计。设乘数为a,为m比特符号数,2的补码表示,相应各比特位的值为ai(i=0,1,…,m-2,m-1),用比特串可表示为:

a=an-1an-2…a2a1a0 (2)

  设被乘数为b,为n比特符号数,2的补码表示,相应各比特位的值为bi(i=0,1,…,n-2,n-1),用比特串可表示为:

b=bn-1bn-2…b2b1b0 (3)

  macsoley提出了一种改进booth算法,将需要相加的部分积数减少为一半,大大提高了乘法速度。改进booth算法对乘数a中相邻3个比特进行编码,符号数a可表示为:

  

  因此,应用改进booth算法的乘法器运算过程仍然包括booth编码过程,即部分积产生过程和部分积相加过程。所不同的是,其产生的部分积个数减少到原来的一半。

3.2 wallace树加法

  在采用改进booth算法将部分积数目减少为原来的一半之后,乘法运算的主要问题就是处理多个多比特二进制操作数相加的问题。最直观的算法是将多个部分积逐一累加,但效率很低,运算时延巨大。

  wallace在1964年提出采用树形结构减少多个数累加次数的方法,称为wallace树结构加法器。wallace树充分利用全加器3-2压缩的特性,随时将可利用的所有输入和中间结果及时并行计算,因而可以将n个部分积的累加次数从n-1次减少到log2n次,大大节省了计算时延。如图2所示为wallace树结构与csa结构的对照,其结构的关键特征在于利用不规则的树形结构对所有准备好输人数据的运算及时并行处理。

  wallace树结构一般用于设计高速乘法器,其显著优点是速度快,尤其对处理多个数相加的情况具有相当的优越性,缺点是其逻辑结构形式不规整,在vlsi设计中对布局布线的影响较大。

3.3 进位的快速传递

  考虑到提高两个多比特操作数相加运算的速度,关键在于解决进位传递时延较大的问题。采用以牺牲硬件资源面积换取速度的方式,以独立的逻辑结构单独计算各个加法位需要的进位输入以及产生的进位输出,提高进位传递的速度,从而提高加法运算速度。

3.3.1 四位超前进位加法器的设计

  两个加数分别为a3a2a1a0,b3b2bb1b0,c-1为低位进位。令两个辅助变量分别为g3g2g1g0和p3p2p1p0:gi=ai&bi,pi=ai+bi。g和p可用与门、或门实现。

  一位全加器的逻辑表达式可化为:<

1 引 言
  目前fir滤波器的实现方法主要有3种:利用单片通用数字滤波器集成电路、dsp器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用dsp器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。

  fpga有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用dsp芯片来说,其并行性和可扩展性更好。但长期以来,fpga一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在fpga中缺乏实现乘法运算的有效结构。本文利用fpga乘累加的快速算法,可以设计出高速的fir数字滤波器,使fpga在数字信号处理方面有了长足的发展。

2 matlab设计滤波器参数

  利用matlab为设计fir滤波器提供的工具箱,选择滤波器类型为低通fir,设计方法为窗口法,阶数为16,窗口类型为hamming,beta为0.5,fs为8.6 khz,fc为3.4 khz,导出的滤波器系数如下:

3 快速fir滤波器算法的基本原理

(1) 分布式算法

  分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先相加形成相应的部分积,然后再对各部分积进行累加得到最终结果。

  对于一个n(n为偶数)阶线性相位fir数字滤波器,输出可由式(1)表示:

(2) 乘法器设计

  高性能乘法器是实现高性能的fir运算的关键,分析乘法器的运算过程,可以分解为部分积的产生和部分积的相加两个步骤。部分积的产生非常简单,实现速度较快,而部分积相加的过程是多个二进制数相加的加法问题,实现速度通常较慢。解决乘法器速度问题,需要分别从这两个方面入手,减小部分积的个数,提高部分积相加运算的速度。

3.1 booth算法

  booth算法针对二进制补码表示的符号数之间的相乘,即可以同时处理二进制正数/负数的乘法运算。booth算法乘法器可以减少乘法运算部分积个数,提高乘法运算的速度。

  下面讨论一个m b×n b乘法器基本单元的设计。设乘数为a,为m比特符号数,2的补码表示,相应各比特位的值为ai(i=0,1,…,m-2,m-1),用比特串可表示为:

a=an-1an-2…a2a1a0 (2)

  设被乘数为b,为n比特符号数,2的补码表示,相应各比特位的值为bi(i=0,1,…,n-2,n-1),用比特串可表示为:

b=bn-1bn-2…b2b1b0 (3)

  macsoley提出了一种改进booth算法,将需要相加的部分积数减少为一半,大大提高了乘法速度。改进booth算法对乘数a中相邻3个比特进行编码,符号数a可表示为:

  

  因此,应用改进booth算法的乘法器运算过程仍然包括booth编码过程,即部分积产生过程和部分积相加过程。所不同的是,其产生的部分积个数减少到原来的一半。

3.2 wallace树加法

  在采用改进booth算法将部分积数目减少为原来的一半之后,乘法运算的主要问题就是处理多个多比特二进制操作数相加的问题。最直观的算法是将多个部分积逐一累加,但效率很低,运算时延巨大。

  wallace在1964年提出采用树形结构减少多个数累加次数的方法,称为wallace树结构加法器。wallace树充分利用全加器3-2压缩的特性,随时将可利用的所有输入和中间结果及时并行计算,因而可以将n个部分积的累加次数从n-1次减少到log2n次,大大节省了计算时延。如图2所示为wallace树结构与csa结构的对照,其结构的关键特征在于利用不规则的树形结构对所有准备好输人数据的运算及时并行处理。

  wallace树结构一般用于设计高速乘法器,其显著优点是速度快,尤其对处理多个数相加的情况具有相当的优越性,缺点是其逻辑结构形式不规整,在vlsi设计中对布局布线的影响较大。

3.3 进位的快速传递

  考虑到提高两个多比特操作数相加运算的速度,关键在于解决进位传递时延较大的问题。采用以牺牲硬件资源面积换取速度的方式,以独立的逻辑结构单独计算各个加法位需要的进位输入以及产生的进位输出,提高进位传递的速度,从而提高加法运算速度。

3.3.1 四位超前进位加法器的设计

  两个加数分别为a3a2a1a0,b3b2bb1b0,c-1为低位进位。令两个辅助变量分别为g3g2g1g0和p3p2p1p0:gi=ai&bi,pi=ai+bi。g和p可用与门、或门实现。

  一位全加器的逻辑表达式可化为:<

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!