高效FIR滤波器的设计与仿真-基于FPGA

[11-20 16:13:31]   来源:http://www.88dzw.com  FPGA   阅读:8866

文章摘要: 众所周知,二进制数在实现乘法或加法时,数值为0的位是不参与运算的。因此,对输入信号进行编码时,如果能使0位的数量最多,则完成相应的运算所需要的硬件将会大大减少,运算的速度也会相应地提高很多。正则有符号数字量(Canonic signed digit,简称CSD)正是基于此思想而提出来的一种新型编码方法,它是具有最少非0元素的表示法。 CSD码的特性是最终表达式在两个数位之间至少有一个0。它的算法是从最低有效位开始,用10…01取代所有大于2的一序列,用1101取代1011;然后从最高有效位开始,用011代替101。例如十进制数231的CSD码为100101001,可以看出,在实现

高效FIR滤波器的设计与仿真-基于FPGA,标签:fpga是什么,fpga教程,http://www.88dzw.com
    众所周知,二进制数在实现乘法或加法时,数值为0的位是不参与运算的。因此,对输入信号进行编码时,如果能使0位的数量最多,则完成相应的运算所需要的硬件将会大大减少,运算的速度也会相应地提高很多。正则有符号数字量(Canonic signed digit,简称CSD)正是基于此思想而提出来的一种新型编码方法,它是具有最少非0元素的表示法。
    CSD码的特性是最终表达式在两个数位之间至少有一个0。它的算法是从最低有效位开始,用10…01取代所有大于2的一序列,用1101
取代1011;然后从最高有效位开始,用011代替101。例如十进制数231的CSD码为100101001,可以看出,在实现其乘法时,只需要4个加法器(如图1所示)。若采用普通的二进制代码实现,因(231)10=(11100111)2,需要5个加法器。可见,采用CSD码节省了加法器的数量。
    为了进一步提高效率,对于某些数据,还可以采用优化的CSD编码,即首先将系数拆分成几个因子,再实现每一个因子。如对231,首先拆分成7×33,然后分别实现因子7和33。7和33每个因子都只需要1个加法器(如图2所示),即实现231的乘法时只需要2个加法器,因此效率得到了更大的提高。
 
图1 231的CSD码的实现

 
图2 231的优化CSD码的实现

1.4 采用流水线技术
    在滤波器的加法运算中,根据内部的数据流规则,可以采用流水线技术将一个运算操作分解成一些小规模的基本操作,将进位和中间值存储在寄存器中,并在下一个时钟周期内继续运算。对于FPGA器件来说,采用流水线式的设计,可以在不增加电路成本和规模的基础上提高运算处理的实时性。

1.5 采用级联技术
    设计高阶的滤波器时,可以采用多个低阶滤波器级联而成,如n个10阶的FIR滤波器可以级联成一个10n阶的滤波器,级联后的滤波器可以
是对称的,也可以是非对称的。实践证明,采用分布式算法,级联后的滤波器不会因为长度的增加而使性能明显下降。

2 高效FIR滤波器的FPGA实现
    在实际的数字传输系统中,接收端和发送端为了达到最小的误码率,一般采用平方根升余弦滤波器。该滤波器的系统函数是:
 
式中:α是滚降系数,0≤α≤1,T为码元周期。
    若取滚降系数α=1,滤波器长度为31,每个码元取4个样点,滤波器的系数采用10位量化,则可得到平方根升余弦滤波器的系数为h(n)=
{4,7,2,-7,9,4,22,25,-3,-53,-83,-43,88,277,445,512,445,277,88,-43,-83,-53,-3,25,22,4,-9,-7,2,7,4}。
    根据以上思路,采用Altera公司Cyclone系列的EP1C3T100C6芯片,在Quartuas II开发软件下对此FIR滤波器进行设计及仿真。首先利用
VHDL语言完成设计输入,然后用Compiler进行编译调试。编译通过后,再利用该软件所提供的Waveform Editor进行时序仿真,得到的时序仿真波形如图3所示。其中,cP是控制输入的时钟信号,时钟频率为50 MHz,clr是加法器及锁存器的清零信号,低电平0有效,X是外部的输入信号,Y是最终的外部输出信号。

上一页  [1] [2] [3]  下一页


Tag:FPGAfpga是什么,fpga教程FPGA

《高效FIR滤波器的设计与仿真-基于FPGA》相关文章

分类导航
最新更新
热门排行