基于FPGA实现单路数字FIR滤波器的方法及装置与流程

文档序号:12828562阅读:172来源:国知局
基于FPGA实现单路数字FIR滤波器的方法及装置与流程

本发明涉及通信技术领域,具体涉及一种基于fpga实现单路数字fir滤波器的方法及装置。



背景技术:

在无线通信系统中,经常使用数字fir滤波器对输入信号进行滤波,抑制带外干扰,以获取高质量的信号。而fpga可以很好地解决并行性和速度问题,并且有配置灵活、易于升级等特点,是常用的实现数字fir滤波器的方法。例如,xilinx的virtex6系列芯片在fpga内部,不仅提供了多个称为dspslices的计算单元,还提供了可读写的lut单元、双端口ram单元。

设滤波器阶数为2m(滤波器系数对称),输入为x(n),输出为y(n),则此滤波器的计算公式为:

其中,i为变量,变量的取值范围为0~滤波器的阶数,m为滤波器阶数/2,n为采样点。

常用fpga内部的计算单元进行级联来实现fir滤波器,实现方法,如图所示,采用这种级联方式有个前提条件:fpga的计算时钟同fir滤波器的采样时钟一致。如fir的采样时钟为30.72m,那么fpga的计算时钟也为30.72m。但当前fpga的工艺,fpga的计算时钟可以达到200m~300m,甚至更高的频率,在fpga高时钟的运行条件下,可以极大的节省fpga的资源使用。

另一方面,通常设计的fir滤波器,系数都是对称的,滤波器的 计算公式可以修改为:

可以看出,采用对称的实现方式,乘法器的资源也将节省一半。

若fpga的计算时钟高于采样时钟(通常计算时钟和采样时钟设计为倍数关系)的条件下,通常fir滤波器采用并行多路的方法实现,设fpga的计算时钟为fpga的采样时钟的l倍,那么fpga可以同时进行l路fir滤波器计算,其结构图如图2所示,通过并行级联的实现方式,若滤波器并行路数不多,则要浪费一些延时资源和乘法器资源。

对于单路的滤波器设计,当前主要为分组相加的方式。如图3所示,设计滤波器的阶数m为时钟倍数l的正数倍,则把滤波器分组进行计算后相加。这种方式通过控制乘累加ram的读写信号进行数据对齐,并且把最终数据相加得到滤波器的输出,这种方案预存ram要存储所有需要进行计算的数据,当滤波器阶数较高时,需要预存ram的空间较大;分组计算后,要进行相加模式,当滤波器精度要求较高时(或阶数比较高时),此处加法所需要的资源也较大。



技术实现要素:

针对现有技术中的缺陷,本发明提供了一种基于fpga实现单路数字fir滤波器的方法及装置。

第一方面,本发明提供一种基于fpga实现单路数字fir滤波器的方法,包括:

fir滤波器在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量;

所述fir滤波器根据所述预设数量对输入数据进行分组,向每一所述乘法单元输入预设数量的输入数据,以使所述每一乘法单元对预设数量的输入数据进行乘累加计算;

所述fir滤波器采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加,并输出相加后的数据。

可选的,所述fir滤波器在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量,包括:

所述fir滤波器获取所述计算时钟周期为采样时钟周期的倍数,将所述倍数作为所述每一乘法单元在采样时钟周期内串行计算的预设数量。

可选的,所述fir滤波器采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加,包括:

所述fir滤波器将所述第一乘法单元乘累加计算的数据作为第二乘法单元累加的输入数据,并将所述第二乘法单元的输入数据与所述第二乘法单元乘累加计算的数据相加作为第三乘法单元累加的输入数据,直到将第a乘法单元的输入数据与第a乘法单元乘累加计算的数据相加;

其中,a为乘法单元的数量。

可选的,所述fir滤波器在获取每一乘法单元在采样时钟周期内串行计算的预设数量之后,所述方法还包括:

所述fir滤波器在系数对称时,将两倍预设数量的输入数据分为一组,向每一所述乘法单元输入两倍预设数量的输入数据,以使所述每一乘法单元对两倍预设数量的输入数据进行乘累加计算。

可选的,所述将两倍预设数量的输入数据分为一组,包括:

将系数相同的输入数据分为一组。

第二方面,本发明还提供了一种基于fpga实现单路数字fir滤波器的装置,包括:

获取模块,用于在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量;

第一数据输入模块,用于根据所述预设数量对输入数据进行分组,向每一所述乘法单元输入预设数量的输入数据,以使所述每一乘法单元对预设数量的输入数据进行乘累加计算;

计算模块,用于采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加;

输入模块,用于输出相加后的数据。

可选的,所述获取模块,用于:

所述fir滤波器获取所述计算时钟周期为采样时钟周期的倍数,将所述倍数作为所述每一乘法单元在采样时钟周期内串行计算的预设数量。

可选的,所述计算模块,用于:

将所述第一乘法单元乘累加计算的数据作为第二乘法单元累加的输入数据,并将所述第二乘法单元的输入数据与所述第二乘法单元乘累加计算的数据相加作为第三乘法单元累加的输入数据,直到将第a乘法单元的输入数据与第a乘法单元乘累加计算的数据相加;

其中,a为乘法单元的数量。

可选的,所述装置还包括,第二数据输入模块,用于在系数对称时,将两倍预设数量的输入数据分为一组,向每一所述乘法单元输入两倍预设数量的输入数据,以使所述每一乘法单元对两倍预设数量的输入数据进行乘累加计算。

可选的,所述第二数据输入模块,用于:

将系数相同的输入数据分为一组。

由上述技术方案可知,本发明提供的基于fpga实现单路数字fir滤波器的方法及装置,通过对输入数据进行分组,减少了每一乘法单元的存储数据的存储空间,另外通过先对每一分组的输入数据进行乘累加计算,然后再将乘累加计算后的数据采用级联加法的方式相加,输出相加后的数据,减少了加法所需求的fpga的资源,提高了fpga 的运行效率。

附图说明

图1为现有技术中fpga实现单路数字fir滤波器的级联示意图;

图2为现有技术中另一实施例提供的fpga实现多路数字fir滤波器的级联示意图;

图3为现有技术中另一实施例提供的fpga实现单路数字fir滤波器的示意图;

图4为本发明一实施例提供的基于fpga实现单路数字fir滤波器的方法的流程示意图;

图5为本发明一实施例提供的fpga实现单路数字fir滤波器的级联示意图;

图6为本发明一实施例提供的fpga实现单路数字fir滤波器的级联时序示意图;

图7为本发明一实施例提供的基于fpga实现单路数字fir滤波器的装置的结构示意图。

具体实施方式

下面结合附图,对发明的具体实施方式作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

图4示出了本发明一实施例提供的一种基于fpga实现单路数字fir滤波器的方法的流程示意图,如图4所示,该方法包括以下步骤:

101、fir滤波器在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量;

102、所述fir滤波器根据所述预设数量对输入数据进行分组,向每一所述乘法单元输入预设数量的输入数据,以使所述每一乘法单元对预设数量的输入数据进行乘累加计算;

103、所述fir滤波器采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加,并输出相加后的数据。

上述方法通过对输入数据进行分组,减少了每一乘法单元的存储数据的存储空间,另外通过先对每一分组的输入数据进行乘累加计算,然后再将乘累加计算后的数据采用级联加法的方式相加,输出相加后的数据,减少了加法所需求的fpga的资源,提高了fpga的运行效率。

上述步骤101中fir滤波器在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量,包括:

所述fir滤波器获取所述计算时钟周期为采样时钟周期的倍数,将所述倍数作为所述每一乘法单元在采样时钟周期内串行计算的预设数量。

上述步骤103中fir滤波器采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加,包括:

所述fir滤波器将所述第一乘法单元乘累加计算的数据作为第二乘法单元累加的输入数据,并将所述第二乘法单元的输入数据与所述第二乘法单元乘累加计算的数据相加作为第三乘法单元的输入数据,直到将第a乘法单元的输入数据与第a乘法单元乘累加计算的数据相加;

其中,a为乘法单元的数量。

设fir滤波器的计算时钟为采样时钟的l倍,fir滤波器的阶数为2m(m>l),根据fir滤波器系数对称性,fir滤波器需要计算m次乘累加(每次乘累加前有一个乘累加计算)。

设滤波器的输入为x(n),滤波器的输出为y(n),则此滤波器的计算公式为:

这样,此fir滤波器所需要的乘加单元为n个,n=m/l,此滤波器的延时和计算结构如图5所示。

由于在fir滤波器的系数对称时,乘法单元的资源将节省一半,例如原来需要采用8个乘法单元,这时则需要采用4个乘法单元。

在上述步骤101所述fir滤波器在获取每一乘法单元在采样时钟周期内串行计算的预设数量之后,所述方法还包括图1中未示出的步骤:

所述fir滤波器在系数对称时,将两倍预设数量的输入数据分为一组,向每一所述乘法单元输入两倍预设数量的输入数据,以使所述每一乘法单元对两倍预设数量的输入数据进行乘累加计算。

具体的,上述将两倍预设数量的输入数据分为一组,包括:将系数相同的输入数据分为一组。

例如,在fir滤波器的系数不对称时,需要8个乘法单元,其中fir滤波器会包括递减延时或者递增延时单元,会将输入数据在第一个乘法单元中存储8个采样点数的数据,通过递增或者递减延时后,在第二个乘法单元中存储8个采样点数的数据,直到在每一个乘法单元中均存储有8个采样点数的数据为止。这样第一个乘法单元将8个采样点数的数据计算完毕后,会发送至第二乘法单元,第二乘法单元再将第一乘法单元发送的数据以及自身计算的8个采样点数的数据进行计算之后,再将总数据发送至第三乘法单元,直至最后一个乘法单元计算完输出数据为止。

在fir滤波器的系数对称时,需要4个乘法单元,其中fir滤波器会包括递减延时和递增延时单元,会将输入数据在第一个乘法单元中存储8个采样点数的数据以及与系数相同的后8个采样点数的数据,通过递增和递减延时后,在第二个乘法单元中存储16个采样点数的数据,直到在每一个乘法单元中均存储有16个采样点数的数据为止。 这样第一个乘法单元将16个采样点数的数据计算完毕后,会发送至第二乘法单元,第二乘法单元再将第一乘法单元发送的数据以及自身计算的16个采样点数的数据进行计算之后,再将总数据发送至第三乘法单元,直至最后一个乘法单元计算完输出数据为止。

在fir滤波器的系数对称时,整个滤波器分为3部分:

第一部分,递减延时,输入为x(n),其特点为:

●每个采样点内,数据依次递减进行读取(读取l个数据)

●第一级延时单元,输出的首个数据为输入数据

●其余延时单元,输出的首个数据比前一级延时单元输出的首个数据要多延时l-1个采样点

第二部分,递增延时,输入为x(n),其特点为

●每个采样点内,数据依次递增进行读取(读取l个数据)

●第一级延时单元,输出的首个数据为输入数据延时m-n+l个采样点

●其余延时单元,输出的首个数据比前一级延时单元输出的首个数据要多延时l+1个采样点

第三部分,计算单元

●每个采样点内,系数依次地址递增变换

●根据滤波器系数对称,采用乘累加器进行计算

●加法单元包括2种方式:本级乘累加和同上一级的级联结果相加。根据不同时刻进行不同方式运行累加和级联直接得到最终计算结果。

下面通过具体的实施例对上述方法进行详细说明。

设fir滤波器的计算时钟为245.76m,数据的采样率为30.72m,滤波器的阶数为64阶。由于滤波器系数对称,每个采样点需要进行32次乘累加计算(每次乘累加前有一个乘累加计算)。由于每个乘法单元在数据采样周期内可以串行计算8次乘加运算 (245.76m/30.72m=8),总共需要4个乘法单元完成64阶滤波器的计算,其结构图(如图6所示)和计算的时序过程如下:

若计算其过程说明如下:

1)因为计算时钟为采样时钟的8倍(我们标注为clk0,clk1,……clk7),每个采样周期内可以完成8次乘加操作。

2)在x(n-3)采样时刻(内有8个时钟周期),对于下数第1个乘法单元:

(a)clk0完成y0=(x(n-24)+x(n-39))×coef(24)

(b)clk1完成y0=y0+(x(n-25)+x(n-38))×coef(25),即2项累加

(c)clk2完成y0=y0+(x(n-26)+x(n-37))×coef(26),即3项累加,……

(d)clk7完成y0=y0+(x(n-31)+x(n-32))×coef(31),即8项累加。

3)在x(n-2)采样时刻(内有8个时钟周期),对于下数第2个乘法单元:

(a)clk0完成y1=y0+(x(n-16)+x(n-47))×coef(16),即9项累加

(b)clk1完成y1=y1+(x(n-17)+x(n-46))×coef(17),即10项累加,……

(c)clk7完成y1=y1+(x(n-23)+x(n-40))×coef(23),即16项累加

4)在x(n-1)采样时刻(内有8个时钟周期),对于下数第3个乘法单元:

(a)clk0完成y2=y1+(x(n-8)+x(n-55))×coef(8),即17项累加

(b)clk1完成y2=y2+(x(n-9)+x(n-54))×coef(9),即18项累加,……

(c)clk7完成y2=y2+(x(n-15)+x(n-48))×coef(15),即24项累加

5)在x(n)采样时刻(内有8个时钟周期),对于下数第4个乘法

单元:

(a)clk0完成y3=y2+(x(n-0)+x(n-63))×coef(0),即25项累加

(b)clk1完成y3=y3+(x(n-1)+x(n-62))×coef(1),即26项累加,……

(c)clk7完成y3=y3+(x(n-7)+x(n-56))×coef(7),即32项累加,自此完成的计算。

在无线通信系统中,使用fpga进行数字fir单路滤波器计算,ram预存单元,除其中一块ram所需要存储的数据量较大外,其余最多只需要存储2l-2个数据;计算上采用分组累加,同时fpga内部级联加法的实现方式;利用fir滤波器对称结构,完成2组数据存储,其中一组数据存储以递增方式读取,一组数据存储以递减方式读取。

采用fpga内部乘法单元串行和并行相结合的方式,减少fpga内部资源的使用。和既往单路滤波器实现相比较,优点如下:

减少预存ram所需要的存储空间,除其中一块ram所需要存储的数据量较大外,其余最多只需要存储2l-2个数据,不需要存储所有需要计算的数据;分组后的加法,采用fpga内部级联的方式实现,减少fpga资源的使用,提高fpga的运行速率;另外,本方案同样也利用了fpga的对称性结构,乘法资源节省一半。

图7示出了本发明实施例提供的一种基于fpga实现单路数字fir滤波器的装置的结构示意图,如图7所示,该装置包括:

获取模块71,用于在计算时钟周期为采样时钟周期的整数倍时,获取每一乘法单元在采样时钟周期内串行计算的预设数量;

第一数据输入模块72,用于根据所述预设数量对输入数据进行分组,向每一所述乘法单元输入预设数量的输入数据,以使所述每一乘法单元对预设数量的输入数据进行乘累加计算;

计算模块73,用于采用级联加法的方式通过所述乘法单元将乘累加计算后的数据相加;

输入模块74,用于输出相加后的数据。

在本实施例的一个优选的实施方式中,所述获取模块,用于:

所述fir滤波器获取所述计算时钟周期为采样时钟周期的倍数,将所述倍数作为所述每一乘法单元在采样时钟周期内串行计算的预设数量。

在本实施例的一个优选的实施方式中,其特征在于,所述计算模块,用于:

将所述第一乘法单元乘累加计算的数据作为第二乘法单元累加的输入数据,并将所述第二乘法单元的输入数据与所述第二乘法单元乘累加计算的数据相加作为第三乘法单元的输入数据,直到将第a乘法单元的输入数据与第a乘法单元乘累加计算的数据相加;

其中,a为乘法单元的数量。

在本实施例的一个优选的实施方式中,所述装置还包括,第二数据输入模块,用于在系数对称时,将两倍预设数量的输入数据分为一组,向每一所述乘法单元输入两倍预设数量的输入数据,以使所述每一乘法单元对两倍预设数量的输入数据进行乘累加计算。

在本实施例的一个优选的实施方式中,所述第二数据输入模块,用于:

将系数相同的输入数据分为一组。

需要说明的是,上述方法与上述装置是一一对应的关系,上述方法的实施细节同样适用于上述装置,本实施例不再对上述装置进行详细说明。

本发明的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1