一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种插值滤波方法和插值滤波装置与流程

2021-12-13 00:41:00 来源:中国专利 TAG:


1.本发明涉及数字信号插值滤波处理技术领域,具体涉及一种基于fpga实现的多路并行插值滤波方法和插值滤波装置。


背景技术:

2.在当今高度信息化的时代,通信技术起着举足轻重的作用。随着数字通信技术的飞速发展,各种数据传输业务也不断增加,同一个数字通信系统中常常需要传输不同速率的信号,因此需要采用多速率信号处理技术来实现不同的传输速率。高效的多速率滤波器是多速率信号处理系统的关键,因此对于一个多速率数字调制系统,实时高效的插值滤波方法起着决定性作用。在硬件实现上,fpga以其灵活性、并行性的特点得到广泛的应用,研究插值滤波器在fpga上的实现具有重大意义。
3.在现有公开报道的研究文献中,很多都是基于多相滤波器的结构,结合零值内插的特点来实现插值滤波处理。崔文玲在“宽带雷达信号的生成方法研究”,2007:35

38中提出一种通过构造辅助多相滤波器组来优化多相插值滤波的方法:当原型滤波器系数具有对称性时,作者通过构造辅助滤波器组使得多相结构中的子滤波器也具有对称性,利用对称性可以实现减少乘法运算的目的,但这种结构的处理时延依旧很大。吕朝在“无线通信基带信号处理核心算法模块设计”,2016:45

49中提出一种基于时钟分频的插值滤波结构:按照零值内插和卷积计算的特点将滤波器系数分为多组,系数队列每个时钟周期移动一次,数据以t分频(t为内插倍数)的时钟速率输入进行卷积运算。但该方法会将滤波器提升到很高工作时钟上,不利于提高数据处理速度,且高频工作会增加系统功耗。在现有设计中,乘法器和查找表等硬件资源的大量消耗限制了并行处理路数的提升,且部分设计结构在高阶滤波处理时具有很大的时延,对通信系统的整体设计带来不利。


技术实现要素:

4.有鉴于此,本发明实施例提供一种插值滤波方法和插值滤波装置,以降低滤波器的延时。
5.为实现上述目的,本发明实施例提供如下技术方案:
6.一种插值滤波方法,应用于滤波器中,方法包括:
7.获取滤波器的输入并行路数;
8.获取所述滤波器的抽头系数;
9.获取所述滤波器的差值倍数;
10.基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数;
11.基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期;
12.计算每路所述输入数据与所述滤波器的抽头系数的乘积;
13.由乘积结果中选择目标乘积结果进行累加输出。
14.可选的,上述插值滤波方法中,所述基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数,包括:
15.基于公式m=l*t计算得到滤波器的输出数据并行路数m,其中,所述l为输入并行路数,所述t为差值倍数;
16.基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期包括:
17.基于公式r=ceil[(n m)/t]计算得到每组并行多路输出信号所需的输入数据个数r,其中,所述n为滤波器的阶数,所述ceil[]表示向上取整;
[0018]
基于公式k=ceil[(n m)/t*l]计算得到输入数据所需的时间周期k。
[0019]
可选的,上述插值滤波方法中,所述计算每路所述输入数据与所述滤波器的抽头系数的乘积,包括:
[0020]
获取第l路的输入数据x(i)和滤波器的抽头系数h(n),其中,所述i=0,1,2,

,l

1,所述n为滤波器的阶数,所述n=0,1,2,


[0021]
计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,得到乘积结果res_i[j]=x(i)*h_rev(j),其中,所述h_rev(j)=h(n

j),(j=0,1,

,n)。
[0022]
可选的,上述插值滤波方法中,所述计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,包括:
[0023]
采用滤波器的fpga内部dsp资源计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,或者是采用移位相加的方式计算得到所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积。
[0024]
可选的,上述插值滤波方法中,所述由乘积结果中选择目标乘积结果进行累加并输出,包括:
[0025]
新建(k

1)个中间值寄存器组和1个输出值寄存器组,所述中间值寄存器组和输出值寄存器组的初始赋值都为0,所述中间值寄存器组和所述输出值寄存器组均包括m个寄存器,分别对应m路插值滤波后输出数据的中间值和输出值,记中间值寄存器组和输出值寄存器组分别为part_e[f]和y[f],其中e表示第e个中间值寄存器组,e∈[1,k

1],且e∈n;f表示第f路输出数据的中间值和输出值,f∈[0,m

1],且f∈n;
[0026]
其中,第1个中间值寄存器组的值等于其对应的目标乘积结果的累加和;第2至第(k

1)个中间值寄存器组的值等于前一个中间值寄存器组的值加上各自对应的目标乘积结果的累加和;
[0027]
输出值寄存器组的值等于第(k

1)个中间值寄存器组的值加上其对应的目标乘积结果的累加和。
[0028]
可选的,上述插值滤波方法中,计算输出值寄存器组的值的值过程包括:
[0029]
基于公式dout[u]=∑d(v)*h_rev(w)计算得到输出值寄存器组的值dout[u];
[0030]
其中,滤波器的输入数据为[d(0),d(1),d(2),d(3),
……
,d(r

1)];
[0031]
滤波器的输出值寄存器组的值记为dout[u],u=0,1,2,

,m

1,表示第u路插值滤波后数据输出;
[0032]
其中:v∈n,且ceil[u/t]≤v≤floor[(u n)mod;
[0033]
w=[t

u mod t]mod t (v

ceil[u/t])*t;ceil表示向上取整,floor表示向下取
整,mod为取模运算。
[0034]
一种插值滤波装置,应用于滤波器中,装置包括:
[0035]
数据采集单元,用于获取滤波器的输入并行路数;获取所述滤波器的抽头系数;获取所述滤波器的差值倍数;
[0036]
基础数据计算单元,用于基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数;基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期;
[0037]
输出单元,用于计算每路所述输入数据与所述滤波器的抽头系数的乘积;由乘积结果中选择目标乘积结果进行累加输出。
[0038]
可选的,上述插值滤波装置中,所述基础数据计算单元在基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数时,具体用于:
[0039]
基于公式m=l*t计算得到滤波器的输出数据并行路数m,其中,所述l为输入并行路数,所述t为差值倍数;
[0040]
基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期包括:
[0041]
基于公式r=ceil[(n m)/t]计算得到每组并行多路输出信号所需的输入数据个数r,其中,所述n为滤波器的阶数,所述ceil[]表示向上取整;
[0042]
基于公式k=ceil[(n m)/t*l]计算得到输入数据所需的时间周期k。
[0043]
可选的,上述插值滤波装置中,所述输出单元在计算每路所述输入数据与所述滤波器的抽头系数的乘积时,具体用于:
[0044]
获取第l路的输入数据x(i)和滤波器的抽头系数h(n),其中,所述i=0,1,2,

,l

1,所述n为滤波器的阶数,所述n=0,1,2,


[0045]
计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,得到乘积结果res_i[j]=x(i)*h_rev(j),其中,所述h_rev(j)=h(n

j),(j=0,1,

,n)。
[0046]
可选的,上述插值滤波装置中,所述输出单元在计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积时,具体用于:
[0047]
采用滤波器的fpga内部dsp资源计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,或者是采用移位相加的方式计算得到所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积。
[0048]
基于上述技术方案,本发明实施例提供的上述方案中,在获取到滤波器的输入并行路数、抽头系数和差值倍数后,基于获取到的数据计算滤波器的输出数据并行路数、每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期,然后再计算每路所述输入数据与所述滤波器的抽头系数的乘积,最后再基于预设规则由乘积结果中选择目标乘积结果进行累加输出,能够有效降低滤波器的延时时间。
附图说明
[0049]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
提供的附图获得其他的附图。
[0050]
图1为本技术实施例公开的插值滤波方法的流程示意图;
[0051]
图2为本技术实施例公开的插值滤波计算示意图;
[0052]
图3为本发明提供实例的乘积的计算结果;
[0053]
图4为本发明提供实例的中间值及输出值寄存器组的简易时序示意图;
[0054]
图5为本技术实施例公开的插值滤波装置的结构示意图;
[0055]
图6为本技术实施例公开的一种插值滤波装置中的输出模块的系统结构图;
[0056]
图7为所述输出模块中的预乘模块的详细结构示意图。
具体实施方式
[0057]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0058]
为了数据延迟时间,本技术公开了一种插值滤波方法,该方法应用于滤波器中,参见图1,方法可以包括:
[0059]
步骤s101:获取滤波器的输入并行路数、获取所述滤波器的滤波系数、获取所述滤波器的差值倍数;
[0060]
本步骤中,主要用于获取所述滤波器的输入数据及滤波器的相关配置参数,在本步骤中,可以将录波器的输入并行路数记为l,将滤波器的差值倍数记为t,所述抽头系数记为h(n),所述n为滤波器的阶数,所述n=0,1,2,


[0061]
步骤s102:基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数;
[0062]
基于公式m=l*t计算得到滤波器的输出数据并行路数m,其中,所述l为输入并行路数,所述t为差值倍数。
[0063]
步骤s103:基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期;
[0064]
在本步骤中,可以基于公式r=ceil[(n m)/t]计算得到每组并行多路输出信号所需的输入数据个数r,其中,所述n为滤波器的阶数,所述ceil[]表示向上取整;
[0065]
基于公式k=ceil[(n m)/t*l]计算得到输入数据所需的时间周期k,由周期k可以知晓,所述滤波器中需要用到k

1个中间值寄存器和1个输出值寄存器组。
[0066]
步骤s104:计算每路所述输入数据与所述滤波器的抽头系数的乘积;
[0067]
获取所述输入数据x(i)和滤波器的抽头系数h(n),其中,所述i=0,1,2,

,l

1,所述n为滤波器的阶数,所述n=0,1,2,


[0068]
计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,得到乘积结果res_i[j]=x(i)*h_rev(j),其中,所述h_rev(j)=h(n

j),(j=0,1,

,n)。
[0069]
为了提高乘积的计算速度,在本方案中,可以采用滤波器的fpga内部dsp资源计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,或者是采用移位相加的方式计算得到所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积。
[0070]
步骤s105:由乘积结果中选择目标乘积结果进行累加输出。
[0071]
在本步骤中,可以预先在所述寄存器内新建(k

1)个中间值寄存器组和1个输出值寄存器组,所述中间值寄存器组和输出值寄存器组的初始赋值都为0,所述中间值寄存器组和所述输出值寄存器组均包括m个寄存器,分别对应m路插值滤波后输出数据的中间值和输出值,记中间值寄存器组和输出值寄存器组分别为part_e[f]和y[f],其中e表示第e个中间值寄存器组,e∈[1,k

1],且e∈n;f表示第f路输出数据的中间值和输出值,f∈[0,m

1],且f∈n;
[0072]
其中,第1个中间值寄存器组的值等于目标乘积结果的累加和;第2至第(k

1)个中间值寄存器组的值等于前一个中间值寄存器组的值加上目标乘积结果的累加和;
[0073]
输出值寄存器组的值等于第(k

1)个中间值寄存器组的值加上目标乘积结果的累加和。
[0074]
在本技术实施例公开的技术方案中,计算中间值寄存器组的值等于前一个中间值寄存器组加上目标乘积结果的累加的过程包括:
[0075]
记待插值滤波处理的输入数据为[d(0),d(1),d(2),d(3),
……
,d(r

1)];
[0076]
输出数据的值记为dout[u],u=0,1,2,

,m

1,表示第u路插值滤波后数据输出,所述dout[u]为输出值寄存器组的值;
[0077]
根据零插值的特性以及滤波器卷积计算的性质,可以得到dout[u]的计算表达式如下:
[0078]
dout[u]=∑d(v)*h_rev(w)
[0079]
其中:v∈n,且ceil[u/t]≤v≤floor[(u n)mod;
[0080]
w=[t

u mod t]mod t (v

ceil[u/t])*t;ceil表示向上取整,floor表示向下取整,mod为取模运算;
[0081]
对于dout[u]计算表达式乘积项中的d(v),由于这些数据总共需要k个时钟周期才能全部到达,所以需将其分到(k

1)个中间值寄存器组和1个输出值寄存器组中计算并缓存;
[0082]
对于数据d(v),其对应于当前时钟周期并行输入的数据x(r),其中r=vmodl。若t=floor(v/l) 1小于k,则需要将x(r)放在第t个中间值寄存器组中第u路(part_t[u])中进行累加计算;若t=floor(v/l) 1等于k,则需要将x(r)放在输出值寄存器组第u路(y[u])中进行累加计算;
[0083]
由此可得第1个中间值寄存器组的表达式如下:
[0084]
part_1[u]=∑res_r[w];
[0085]
这里应该满足t=floor(v/l) 1=1;
[0086]
第2至k

1个中间值寄存器组的表达式如下:
[0087]
part_t[u]=part_t

1[u] ∑res_r[w];
[0088]
这里应该满足2≤t=floor(v/l) 1≤k

1;
[0089]
输出值寄存器组的表达式如下:
[0090]
y[u]=part_k

1[u] ∑res_r[w];
[0091]
这里应该满足t=floor(v/l) 1=k。
[0092]
为了便于用户更加清楚明了的明白上述方案的实时过程,本技术以以下实例对上述方案进行说明:
[0093]
输入并行路数l为4、滤波器的零值内插倍数t为6、64阶的fir滤波器为例,对方案进行说明,此时,滤波器共有65个抽头系数,r等于15,输出数据并行路数m=4*6=24;每输出24路并行信号则需要由r=ceil[(64 24)/6]=15个输入数据计算得到,这15个输入数据需要经过k=ceil[15/4]=4个时钟周期才能全部到达。
[0094]
对于各路并行输入数据[x(0),x(1),x(2),x(3)],将每路中的各项输入数据分别与顺序颠倒的滤波器抽头系数[h_rev(0),h_rev(1),h_rev(2),

,h_rev(64)]相乘(采用移位相加实现);得到的乘积结果如图3所示,下一步会从这些结果中选取相应值进行累加计算。在本实例中,由于15个输入数据需要4个时钟周期才能全部到达,因此需要建立3个中间寄存器组[part_1,part_2,part_3]和1个输出值寄存器组[y],每个寄存器组包含24个寄存器。下面将具体说明如何选取相应乘积值进行累加输出:
[0095]
待进行插值滤波的输入数据包括d(0),d(1),d(2),d(3),
……
,d(14),插值滤波器对应的24路并行输出为[dout(0),dout(1),

,dout(23)],如图7所示,根据零值内插和卷积计算的性质,可以得到:
[0096]
dout(0)=d(0)*h_rev(0) d(1)*h_rev(6) d(2)*h_rev(12)

d(10)*h_rev(60);
[0097]
dout(1)=d(1)*h_rev(5) d(2)*h_rev(11) d(3)*h_rev(17)

d(10)*h_rev(59);
[0098]
……
[0099]
dout(23)=d(4)*h_rev(1) d(5)*h_rev(7) d(6)*h_rev(13)

d(14)*h_rev(61);
[0100]
在上述表达式中,将输入数据d(0),d(4),d(8),d(12)划分至第一路并行输入数据x(0)中,将输入数据d(1),d(5),d(9),d(13)划分至第一路并行输入数据x(1)中,将d(2),d(6),d(10),d(14)划分至第一路并行输入数据x(2)中,将d(3),d(7),d(11)划分至第一路并行输入数据x(3)中。且含有[d(0),d(1),d(2),d(3)]的乘积式在第一中间寄存器组part1中计算;含有[d(4),d(5),d(6),d(7)]的乘积式在第二中间寄存器组part2中计算;含有[d(8),d(9),d(10),d(11)]的乘积式在第三中间寄存器组part3中计算;含有[d(12),d(13),d(14)]的乘积式在输出值寄存器组y中计算。
[0101]
即:
[0102]
采用第一中间寄存器组计算并存储d(0),d(1),d(2),d(3)与抽头系数的乘积;
[0103]
采用第二中间寄存器组计算并存储d(4),d(5),d(6),d(7)与抽头系数的乘积;
[0104]
采用第三中间寄存器组计算并存储d(8),d(9),d(10),d(11)与抽头系数的乘积;
[0105]
采用输出值寄存器组计算并存储d(12),d(13),d(14)与抽头系数的乘积;
[0106]
每个寄存器存储有24路并行输出数据,以第一中间寄存器组为例,参见图2,将所述输入数据和抽头系数并列排列成两列,上下相邻的两列的输入数据之间列号差为t,上下相邻的两列的抽头系数之间列号差为1,此时,将d(0),d(1),d(2),d(3)和与其同列的抽头系数进行乘积,得到第一中间寄存器组的第一路并行输出数据part_1(0),将所述抽头系数的向下移动一列,将此时d(0),d(1),d(2),d(3)和与其同列的抽头系数进行乘积,得到第一中间寄存器组的第二路并行输出数据part_1(1),再将所述抽头系数的向下移动一列,直至计算得到第一中间寄存器组的第24路并行输出数据part_1(24)的值。
[0107]
所述第一中间寄存器组的:
[0108]
part_1(0)=res_0(0) res_1(6) res_2(12) res_3(18);
[0109]
part_1(1)=res_1(5) res_2(11) res_3(17);
[0110]
……
[0111]
part_1(23)=0。
[0112]
与上述原理相同,将d(4),d(5),d(6),d(7)和与其同列的抽头系数进行乘积,得到第二中间寄存器组的第一路并行输出数据part_2(0),将所述抽头系数的向下移动一列,将此时d(4),d(5),d(6),d(7)和与其同列的抽头系数进行乘积,得到第二中间寄存器组的第二路并行输出数据part_2(1),再将所述抽头系数的向下移动一列,直至计算得到第二中间寄存器组的第24路并行输出数据part_2(23)的值。
[0113]
与上述原理相同,将d(8),d(9),d(10),d(11)和与其同列的抽头系数进行乘积,得到第三中间寄存器组的第一路并行输出数据part_3(0),将所述抽头系数的向下移动一列,将此时d(8),d(9),d(10),d(11)和与其同列的抽头系数进行乘积,得到第三中间寄存器组的第二路并行输出数据part_3(1),再将所述抽头系数的向下移动一列,直至计算得到第三中间寄存器组的第24路并行输出数据part_3(23)的值。
[0114]
与上述原理相同,将d(12),d(13),d(14)和与其同列的抽头系数进行乘积,得到输出值寄存器组的第一路并行输出数据y[0],将所述抽头系数的向下移动一列,将此时d(12),d(13),d(14)和与其同列的抽头系数进行乘积,得到暑促寄存器的第二路并行输出数据y[1],再将所述抽头系数的向下移动一列,直至计算得到输出值寄存器组的第24路并行输出数据y[23]的值。
[0115]
第一中间寄存器组的数值记为a1,第二中间寄存器组的值为a1 a2,第三中间寄存器组的值为a1 a2 a3,输出值寄存器组的值为a1 a2 a3 a4,其中,所述a1为前述计算得到的第一中间寄存器组的各路并行输出数据,所述a2为前述计算得到的第二中间寄存器组的各路并行输出数据,所述a3为前述计算得到的第三中间寄存器组的各路并行输出数据,所述a4为前述计算得到的输出值寄存器组的各路并行输出数据。
[0116]
如图4所示是本实例中寄存器组的一个简易时序示意图,其中输入数据的命名中前面数字表示第几个时钟周期,后面表示的是哪一路的信号,例如1_x0是第一个时钟周期第x[0]路并行输入的信号。寄存器组数据的命名中数字也表示是第几个时钟周期的信号,字母[a,b,c,d]则对应寄存器[part_1[0],part_2[0],part_3[0],y[0]]的相应累加项的值,例如1a表示由第一个时钟周期计算part_1[0]时选取的相应乘积值,在本实例中,1a对应的乘积值就是[res_0(0) res_1(6) res_2(12) res_3(18)]。可以看到输出值寄存器y[0]从第四个周期开始输出有效的滤波后第0路信号。
[0117]
为了验证本技术公开的技术方案的可靠性,申请人利用vivado_2018.3工具在xc7vx485tffg1157

1芯片平台上实现该实例,当数据和滤波器系数量化位数为10时,共消耗2811个luts和1481个registers。
[0118]
由上述方案可见,本发明上述实施例公开的技术方案基于零值内插和卷积计算的特点,可以多个中间值寄存器组和输出值寄存器组为核心,分多个寄存器组在数据全部到达的时钟周期内完成插值与滤波处理。对于每m路并行输出的结果,需要由前面k=ceil[(n m)/t*l]个时钟周期的输入数据来计算,本发明将第1至第k个时钟周期输入的数据应该参
与的乘积累加计算分别放到第1至第k

1个中间值寄存器和输出值寄存器中计算并缓存,这样只需要k个寄存器组来缓存累加和的值而不需要消耗大量资源缓存输入数据与系数的乘积,且能够实现系统的流水线处理,提高数据处理速度。本发明的插值滤波器结构简单,处理时延小,并且由于本设计对滤波器抽头系数个数和结构没有特定要求,可以适应各种阶数和各种系数结构的滤波器,具有良好的兼容性。
[0119]
对应于上述方法,本技术还公开了一种插值滤波装置,该装置可以应用于滤波器中,参见图5,装置包括:
[0120]
数据采集单元100,用于获取滤波器的输入并行路数;获取所述滤波器的抽头系数;获取所述滤波器的差值倍数;
[0121]
基础数据计算单元200,用于基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数;基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期;
[0122]
输出单元300,用于计算每路所述输入数据与所述滤波器的抽头系数的乘积;由乘积结果中选择目标乘积结果进行累加输出。
[0123]
与上述方法相对应,所述基础数据计算单元在基于所述输入并行路数、差值倍数计算滤波器的输出数据并行路数时,具体用于:
[0124]
基于公式m=l*t计算得到滤波器的输出数据并行路数m,其中,所述l为输入并行路数,所述t为差值倍数;
[0125]
基于所述输出数据并行路数、差值倍数以及滤波器的阶数计算得到每组并行多路输出信号所需的输入数据个数以及获取所输入数据所需的时间周期包括:
[0126]
基于公式r=ceil[(n m)/t]计算得到每组并行多路输出信号所需的输入数据个数r,其中,所述n为滤波器的阶数,所述ceil[]表示向上取整;
[0127]
基于公式k=ceil[(n m)/t*l]计算得到输入数据所需的时间周期k。
[0128]
与上述方法相对应,所述输出单元在计算每路所述输入数据与所述滤波器的抽头系数的乘积时,具体用于:
[0129]
获取第l路的输入数据x(i)和滤波器的抽头系数h(n),其中,所述i=0,1,2,

,l

1,所述n为滤波器的阶数,所述n=0,1,2,


[0130]
计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,得到乘积结果res_i[j]=x(i)*h_rev(j),其中,所述h_rev(j)=h(n

j),(j=0,1,

,n)。
[0131]
与上述方法相对应,所述输出单元在计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积时,具体用于:
[0132]
采用滤波器的fpga内部dsp资源计算所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积,或者是采用移位相加的方式计算得到所述输入数据x(i)与顺序颠倒后的抽头系数h_rev(j)的乘积。
[0133]
与上述方法相对应,所述输出单元由乘积结果中选择目标乘积结果进行累加并输出时,具体用于:
[0134]
新建(k

1)个中间值寄存器组和1个输出值寄存器组,所述中间值寄存器组和输出值寄存器组的初始赋值都为0,所述中间值寄存器组和所述输出值寄存器组均包括m个寄存器,分别对应m路插值滤波后输出数据的中间值和输出值,记中间值寄存器组和输出值寄存
器组分别为part_e[f]和y[f],其中e表示第e个中间值寄存器组,e∈[1,k

1],且e∈n;f表示第f路输出数据的中间值和输出值,f∈[0,m

1],且f∈n;
[0135]
其中,第1个中间值寄存器组的值等于其对应的目标乘积结果的累加和;第2至第(k

1)个中间值寄存器组的值等于前一个中间值寄存器组的值加上各自对应的目标乘积结果的累加和;
[0136]
输出值寄存器组的值等于第(k

1)个中间值寄存器组的值加上其对应的目标乘积结果的累加和。
[0137]
与上述方法相对应,所述输出单元计算中间值寄存器组的值等于前一个中间值寄存器组加上目标乘积结果的累加的过程时,具体用于:
[0138]
记待插值滤波处理的输入数据为[d(0),d(1),d(2),d(3),
……
,d(r

1)];
[0139]
输出数据的值记为dout[u],u=0,1,2,

,m

1,表示第u路插值滤波后数据输出,所述dout[u]为输出值寄存器组的值;
[0140]
根据零插值的特性以及滤波器卷积计算的性质,可以得到dout[u]的计算表达式如下:
[0141]
dout[u]=∑d(v)*h_rev(w)
[0142]
其中:v∈n,且ceil[u/t]≤v≤floor[(u n)mod;
[0143]
w=[t

u mod t]mod t (v

ceil[u/t])*t;ceil表示向上取整,floor表示向下取整,mod为取模运算;
[0144]
对于dout[u]计算表达式乘积项中的d(v),由于这些数据总共需要k个时钟周期才能全部到达,所以需将其分到(k

1)个中间值寄存器组和1个输出值寄存器组中计算并缓存;
[0145]
对于数据d(v),其对应于当前时钟周期并行输入的数据x(r),其中r=vmodl。若t=floor(v/l) 1小于k,则需要将x(r)放在第t个中间值寄存器组中第u路(part_t[u])中进行累加计算;若t=floor(v/l) 1等于k,则需要将x(r)放在输出值寄存器组第u路(y[u])中进行累加计算;
[0146]
由此可得第1个中间值寄存器组的表达式如下:
[0147]
part_1[u]=∑res_r[w];
[0148]
这里应该满足t=floor(v/l) 1=1;
[0149]
第2至k

1个中间值寄存器组的表达式如下:
[0150]
part_t[u]=part_t

1[u] ∑res_r[w];
[0151]
这里应该满足2≤t=floor(v/l) 1≤k

1;
[0152]
输出值寄存器组的表达式如下:
[0153]
y[u]=part_k

1[u] ∑res_r[w];
[0154]
这里应该满足t=floor(v/l) 1=k。
[0155]
如图6所示,本技术实施例公开的输出单元主要由多个预乘模块和加法模块构成,其中预乘模块用于完成单路输入数据分别与n 1个滤波器抽头系数的乘积计算,如图7所示,每个预乘模块由n 1个乘法计算组成,对于输入单路输入数据x(i),能够计算并输出乘积结果res_i[0],res_i[1],

,res_i[n];所述加法模块由m个累加计算组成,分别对应m路输出信号的中间值(中间寄存器的值)或者输出值(输出值寄存器组的值)。
[0156]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0157]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献