发明内容
有鉴于此,本发明要解决的技术问题是,提供一种滤波方法及装置,能够减少滤波处理的延时,且,能够适应滤波阶数的变化。
为此,本发明实施例采用如下技术方案:
本发明实施例提供一种滤波方法,包括:
确定滤波的阶数L;
将输入数据划分为长度为N的第一分块数据,对每个第一分块数据进行2N点的FFT变换;将冲击响应划分为R个长度为N的第二分块数据,对每个第二分块数据进行2N点的FFT变换;RN≥L,R为大于等于1的整数;
分别对FFT变换后的第一分块数据以及相应的FFT变换后的第二分块数据进行点乘处理;
根据点乘结果确定滤波结果。
所述根据点乘结果确定滤波结果具体为:
将得到的各个点乘结果相加后进行2N点的IFFT变换;
将IFFT变换结果中的最后N个点作为滤波结果。
所述对每个第一分块数据进行2N点的FFT变换具体为:
将当前的第一分块数据与该第一分块数据前一个第一分块数据重叠,形成长度为2N的分块数据;
对所述长度为2N的分块数据进行FFT变换。
所述对每个第二分块数据进行2N点的FFT变换具体为:
将每个第二分块数据后面补零,得到长度为2N的第二分块数据;
对补零后的第二分块数据进行FFT变换。
本发明实施例还提供一种滤波装置,包括:
阶数确定单元,用于确定滤波的阶数L;
第一变换单元,用于将输入数据划分为长度为N的第一分块数据,对每个第一分块数据进行2N点的FFT变换;
第二变换单元,用于将冲击响应划分为R个长度为N的第二分块数据,对每个第二分块数据进行2N点的FFT变换;RN≥L,R为大于等于1的整数;
点乘单元,用于分别对FFT变换后的第一分块数据以及相应的FFT变换后的第二分块数据进行点乘处理;
结果确定单元,用于根据点乘结果确定滤波结果。
结果确定单元具体用于:
将得到的各个点乘结果相加后进行2N点的IFFT变换;
将IFFT变换结果中的最后N个点作为滤波结果。
第一变换单元包括:
第一分块子单元,用于将输入数据划分为长度为N的第一分块数据;
第一处理子单元,用于将当前的第一分块数据与该第一分块数据前一个第一分块数据重叠,形成长度为2N的分块数据;
第一变换子单元,用于对每个所述长度为2N的分块数据进行FFT变换。
第二变换单元包括:
第二分块子单元,用于将冲击响应划分为长度为N的第二分块数据;
第二处理子单元,用于将每个第二分块数据后面补零,得到长度为2N的第二分块数据;
第二变换子单元,用于对每个补零后的第二分块数据进行FFT变换。
对于上述技术方案的技术效果分析如下:
将输入数据以及冲击响应划分为长度为N的分块数据,对所述分块数据分别进行2N点的FFT变换,之后,分别将变换结果进行点乘处理,进而根据点乘结果确定滤波结果,从而通过将长阶数的滤波系数进行分解,减少了滤波处理的延时;并且,采用固定长度的FFT变换实现了各种滤波阶数下的滤波处理,即使滤波阶数发生变化,也无需重新设计滤波装置。
具体实施方式
现有技术中,通过FFT变换来实现对于输入信号x(n)的滤波,得到输出信号y(n)。但是,具有滤波处理延时长,随滤波阶数变化需重新设计滤波器等缺点。
据此,本发明实施例提供一种滤波方法及装置,通过将长阶数滤波器的系数进行分解,在减少计算量的同时能够灵活的减少滤波处理的延迟;并且,用固定长度的FFT变换实现变阶数的滤波。
具体的,在对数字信号处理,可以用循环卷积来计算线性卷积,而要用循环卷积计算N点与M点的线性卷积时至少需要N+M-1点的循环卷积,同样也就至少需要N+M-1点的FFT。如果输入信号为有限长度的信号,则可以在计算之前保留整个输入序列,然后再通过FFT进行运算。但是,在实际的应用环境中输入信号常常是无限长的,尽管理论上可以存储全部波形,紧接着对大量点数实行处理,但通常这种处理是不现实的,于是有了“重叠保留法”。假设每次计算N个输出,同时假设滤波器长度为M,则重叠保留法用公式描述如下:
A:计算输入信号的M+N-1点FFT:
B:计算补N-1个零点的h(n)的FFT:
进一步地,可以将这种将长时间输入的处理方式扩展到长阶数滤波器的情况。即:假如滤波器的长度也很长(比如在做回声消除时的滤波器),也可以利用相同的原理来进行计算。
对于卷积过程:
在式(4)中L为滤波器的长度,如把h(n)分解为两段长度为M和N(L=M+N)的序列,对式(4)进一步推导得到:
式(5)中,h′(n)是h(n)的后半部分,x′(n)由x(n)移位以后得到,也即:
h′(i)=h(i+M)i=0,1,…,N-1(7)
x′(n)=x(n-M)
对于α(n)的计算,可以使用上述“重叠保留法”;
对于β(n)的计算,只需要取出h(n)的后面N个点,同时将x(n)延迟M个采样点,再将这两个序列用“重叠保留法”进行计算;
最后再将计算得到的α(n)和β(n)相加即可得到对输入信号x(n)进行L阶滤波后得到的输出信号y(n)。
进一步考虑当M=N的时候,并且采用2N点的FFT(2N>N+M-1)变换,这时,即可实现用固定长度的FFT变换来进行各种阶数的滤波。具体推导过程如下:
将输入数据分成长度为N的数据块,同样的,输出数据也是长度为N的数据块,要计算第j个数据块的N个输出点,首先通过FFT变换将输入的x(n)序列变换到频域,具体计算方法参见式(9):
同样的,将冲击响应h(n)变换到频域可得:
于是可以得到α(n)的第j个数据块如式(11)所示:
此外,还要确定β(n)的第j个数据块,具体方法为:
将x′(n)变换到频域可得:
χ′(j)=FFT[x′0(j-1),x′1(j-1),…,x′N-1(j-1),x′0(j),…x′N-1(j)]
(12)
=FFT[x0(j-2),x1(j-2),…,xN-1(j-2),x0(j-1),…xN-1(j-1)]
将h′(n)也变换到频域可得:
因此,β(n)的第j个数据块为:
从而,得到对x(n)进行L(2N)阶滤波后,得到的输出数据y为:
y=α+β(15)
进一步地,可以将滤波阶数推广到L≤RN的情况,这里不再赘述。
以下,根据上述理论分析,结合附图详细说明本发明实施例滤波方法及装置的实现。
图1为本发明实施例一种滤波方法流程示意图,如图1所示,包括:
步骤101:确定滤波阶数L。
步骤102:将输入数据划分为长度为N的第一分块数据,对每个第一分块数据进行2N点的FFT变换。
步骤103:将冲击响应划分为R个长度为N的第二分块数据,对每个第二分块数据进行2N点的FFT变换;RN≥L;R为大于等于1的整数。
其中,步骤102和步骤103之间的执行顺序不限制,只要在步骤104之前执行即可。
步骤104:分别对FFT变换后的第一分块数据以及相应的FFT变换后的第二分块数据进行点乘处理。
步骤105:根据点乘结果确定滤波结果。
图1所示的本发明实施例中,将输入数据以及冲击响应划分为长度为N的分块数据,对所述分块数据分别进行2N点的FFT变换,之后,分别将变换结果进行点乘处理,进而根据点乘结果确定滤波结果,从而通过将长阶数的滤波系数进行分解,减少了滤波处理的延时;并且,采用固定长度的FFT变换实现了各种滤波阶数下的滤波处理,即使滤波阶数发生变化,也无需重新设计滤波装置。
图2为本发明实施例另一种滤波方法流程示意图,图2是在图1滤波方法基础上的更为详细的实现过程,如图2所述,包括:
步骤201:确定滤波的阶数L以及分块数据的长度N,使得RN≥L。
其中,R为根据滤波器阶数L以及分块数据长度N得到的分块数据的个数。
步骤202:分别根据长度N对滤波器的输入数据以及冲击响应进行划分,相应得到长度为N的第一分块数据以及R个长度为N的第二分块数据hi(n),i=0,1,…R-1。
步骤203:将滤波器的每个第二分块数据hi(n),i=0,1,…R-1后面补零到2N点,并做2N点的FFT变换得到Hi(k);i=0,1,…R-1;k=0,1,…,2N-1。
步骤204:对当前的第一分块数据进行串/并转换,得到x(n),n=0,1,…,N-1,并与前一个第一分块数据重叠组成当前待处理数据块xs(n)=x(n-N),n=0,1,…,2N-1,其中x(i),i<0表示前一个第一分块数据。
步骤205:对当前待处理数据块进行2N点的FFT变换,得到变换后的第一分块数据Xs(k),k=0,1,…,2N-1,s=0,1,...R-1。
步骤206:将Hi(k),i=0,1,…,R-1,k=0,1,…,2N-1与Xs-i(k),i=0,1,…,R-1,k=0,1,…,2N-1进行点乘处理,得到Wi,即:
Wi(k)=Hi(k)·Xs-i(k),i=0,1,…,R-1,k=0,1,…,2N-1。
其中,步骤202与步骤203~步骤205之间的顺序并不限制,只要步骤202在步骤201与步骤206之间执行即可。
步骤207:对R个Wi(k)进行叠加处理,得到Z(k):
k=0,1,…,2N-1。
步骤208:对Z(k)进行2N点的IFFT变换,得到z(n),n=0,1,…,2N-1。
步骤209:取出z(n)的最后N个点得到输出信号y(n),即:
y(n)=z(n+N),n=0,1,…,N-1。
图2所示的本发明实施例给出了更为具体的滤波实现方法流程,通过将长阶数的滤波系数进行分解,减少了滤波处理的计算量以及延时;并且,采用固定长度的FFT变换实现了各种滤波阶数下的滤波处理,即使滤波阶数发生变化,也无需重新设计滤波装置。
相应的,本发明实施例还提供一种滤波装置,如图3所示,该装置包括:
阶数确定单元310,用于确定滤波的阶数L。
第一变换单元320,用于将输入数据划分为长度为N的第一分块数据,对每个第一分块数据进行2N点的FFT变换。
第二变换单元330,用于将冲击响应划分为R个长度为N的第二分块数据,对每个第二分块数据进行2N点的FFT变换;RN≥L。
点乘单元340,用于分别对FFT变换后的第一分块数据以及相应的FFT变换后的第二分块数据进行点乘处理。
结果确定单元350,用于根据点乘结果确定滤波结果。
其中,如图4所示,第一变换单元320具体可以包括:
第一分块子单元410,用于将输入数据划分为长度为N的第一分块数据。
第一处理子单元420,用于将当前的第一分块数据与该第一分块数据前一个第一分块数据重叠,形成长度为2N的分块数据。
第一变换子单元430,用于对每个所述长度为2N的分块数据进行FFT变换。
第二变换单元340具体可以包括:
第二分块子单元510,用于将冲击响应划分为R个长度为N的第二分块数据。
第二处理子单元520,用于将每个第二分块数据后面补零,得到长度为2N的第二分块数据。
第二变换子单元530,用于对每个补零后的第二分块数据进行FFT变换。
图3~图5所示的本发明实施例中,第一变换单元和第二变换单元分别将输入数据以及冲击响应划分为长度为N的分块数据,对所述分块数据分别进行2N点的FFT变换,之后,由点乘单元分别将变换结果进行点乘处理,进而结果确定单元根据点乘结果确定滤波结果,得到滤波后的输出信号y(n),从而通过将长阶数的滤波系数进行分解,减少了滤波处理的延时;并且,采用固定长度的FFT变换实现了各种滤波阶数下的滤波处理,即使滤波阶数发生变化,也无需重新设计滤波装置。
本领域普通技术人员可以理解,实现上述实施例滤波方法的过程可以通过程序指令相关的硬件来完成,所述的程序可以存储于可读取存储介质中,该程序在执行时执行上述方法中的对应步骤。所述的存储介质可以如:ROM/RAM、磁碟、光盘等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。