具体实施方式
本发明实施例提供了一种虚拟重低音增强方法及***,用以可靠地产生音频信号的低频部分的各次谐波,并且不产生噪声,从而提高重低音增强效果。
本发明实施例提供的新的虚拟重低音增强的数字信号处理技术,通过滤波和变采样率技术将音频信号的低频部分单独抽取出来,然后将其变换到频域,再采用频域变调技术将低频部分的基频信号,按照各次谐波对应的频率进行变调,最后将处理后的信号恢复到时域,并与原音频信号合成,从而在增强了重低音效果的同时,不产生噪声。
下面结合附图对本发明实施例提供的技术进行说明。
参见图1,本发明实施例提供的一种虚拟重低音增强***包括:
第一低通滤波单元11,用于按照预设的截止频率对输入的音频信号进行低通滤波处理,得到该音频信号中的低频信号,该低频信号是时域的低频信号。
抽取单元12,用于按照预设的抽取倍数,对第一低通滤波单元11输出的低频信号进行抽取处理,并将处理后的信号发送给频域转换单元13。
频域转换单元13,用于将抽取单元12发送的低频信号转换为频域信号。
基频确定单元14,用于对频域转换单元13发送的频域信号进行分析,确定其中的基频信号。
变调单元15,用于对基频信号进行变调处理,得到多个谐波。
第一合成单元16,用于将变调单元15发送的多个谐波进行叠加,即将多个谐波进行复数相加,也就是说,将用于表示每个谐波的复数的实部和实部相加,将得到的和作为新的复数的实部;将用于表示每个谐波的复数的虚部和虚部相加,将得到的和作为新的复数的虚部;最后将新的复数所表示的信号作为叠加后的信号。
时域转换单元17,用于将第一合成单元16处理后得到的信号转换为时域信号。
插值单元18,用于按照预设的插值倍数,对所述时域转换单元17输出的信号进行插值处理,并将处理后的信号发送给第二低通滤波单元19。
第二低通滤波单元19,用于按照预先设置的截止频率,将插值单元18发送的信号进行低通滤波处理,并将处理后的信号发送给第二合成单元21。
延时处理单元20,用于按照预设时延值对输入的音频信号进行延时处理后发送给第二合成单元21。
第二合成单元21,将延时处理单元20输出的音频信号,与第二低通滤波单元19输出的信号进行合成。
自动增益控制单元22,用于将经过所述第二合成单元21合成的信号进行自动增益控制(AGC)。
较佳地,所述频域转换单元13包括:
分析窗单元,用于将抽取单元12输出的低频信号进行分析窗处理。
FFT单元,用于对经过分析窗单元处理后的信号进行快速傅里叶变换(FFT),得到低频信号的频域信号。
较佳地,所述时域转换单元17包括:
综合窗单元,用于将第一合成单元16输出的频域的低频信号进行综合窗处理。
IFFT单元,用于对经过综合窗单元处理后的信号进行快速傅里叶逆变换(IFFT),得到时域的低频信号。
下面对上述各个单元进行详细说明。
上述第一低通滤波单元11和第二低通滤波单元19的功能实际上是一样的,就是一个简单的低通滤波器(LPF),LPF主要作用是把信号的低频部分滤出来。
LPF的截止频率的设定需要考虑两个方面:一方面不能太小,太小容易使低频成分被衰减;另一方面也不能太大,因为后续还要通过抽取单元12进行进一步处理,如果截止频率太大,会容易造成信号频谱混叠。
通常音频信号中的1千赫兹(KHz)以下的频率部分就包含了几乎所有的低音成分,因此本发明实施例中的截止频率应不小于1KHz。
例如:抽取单元12采用M倍抽取比例,音频信号的采样率为44.1KHz,则抽取单元12抽取得到的信号的采样率降低为约44.1KHz/M,而信号的频率应在44.1KHz/2M以下才不会发生混叠,因此本发明实施例的第一低通滤波单元11和第二低通滤波单元19中预设的截止频率应不大于44.1KHz/2M。
抽取单元12和插值单元18:
抽取单元12和插值单元18主要采用采样率转换技术,抽取单元12的抽取即从输入的信号序列中,每隔M个点抽取一个点,M即是抽取倍数。相应地,插值单元18的插值是在输入的信号序列中,在每个点后***M-1个零,M即是插值倍数,其值与抽取倍数的值相同。
设置抽取单元12和插值单元18进行采样率转换的操作的目的,是通过降低采样率,使得频域转换单元13和时域转换单元17在较低的采样率下工作,因此可以大大降低运算复杂度。
进一步,本发明实施例考虑到虽然降采样可以减小FFT和IFFT的处理点数,但是增加的低通滤波操作会增加额外的运算量,并且降采样的倍数越高,低通滤波器的通带越窄,满足要求的滤波器的阶数越高。因此,需要折衷(tradeoff)。经过试验,本发明实施例可以选择8倍降采样处理,即M=8,例如,输入的音频信号的采样率为44.1KHz,则低通滤波器的截止频率fs必须满足:fs≤44100/2/8,即fs≤2756Hz。
本发明实施例采用的低通滤波器可以采用1.5KHz的截止频率的,64阶的FIR低通滤波器。阻带衰减大于50分贝(dB),低通滤波器由matlab设计。本发明实施例之所以没有选择在同样性能下阶数可以更低的IIR低通滤波器,原因包括:
FIR滤波器虽然有64阶,但是可以和抽取单元12和插值单元18一起构成快速算法***,真正的复杂度相当于64/8=8阶的FIR滤波器,因此算法的复杂度并不高;
而IIR滤波器由于有反馈操作,因此必须逐点运算,不能和变采样单元(即抽取单元12和插值单元18)组成快速算法***,另外,由于IIR滤波对数据精度要求较高,量化误差较大,因此也给设计带来一定困难,用较高精度的数据参与运算,往往增加运算量;
FIR滤波器具有线性相位,即所有频率具有相同的群延时,这点非常关键,不会带来相位失真。更为关键的是,在将增强后的低频信号与原信号叠加的时候,有一个相位对准的问题。如果采用IIR滤波器处理不当,就可能出现因反相而信号对消(phase cancel)的情况,因此会降低音频质量。
对于分析窗单元、综合窗单元、FFT单元和IFFT单元这些基本的数字信号处理单元,由于主要采用的是现有技术,因此本发明实施例不再赘述。
较佳地,基频确定单元14包括:
各频带频率确定单元,用于确定频域转换单元13输出的频域信号中各个频带(bin)对应的频率。
频带选取单元,用于按照预先设置的频率范围选取多个频带,并将这些多个频带中幅度最大的频带所对应的频率作为基频信号的频率,将该频带的幅度作为基频信号的幅度。
首先对各频带频率确定单元的功能进行详细说明。
信号通过FFT得到的频域信号,分为实部和虚部两部分,分别用Real和Imag表示。
假设FFT的点数用fftsize表示,则Real和Imag各为fftsize/2长度的序列。
可以通过实部和虚部得到频域信号用幅度和相位表示的形式,幅度和相位分别可以用magn和phase表示,则有:
得到了幅度和相位后,可以计算信号在每个bin里的准确频率,bin表示信号经过FFT变换到频域后的每个条带,即频带。例如,如果FFT点数为128,则共有128个bin。
第i个bin里的相位可以用Phase(i)表示,下面以计算第i个bin里的信号的准确频率为例进行说明。
假设上一帧第i个bin对应的相位为Phase_old(i),则可知上一帧和当前帧这两帧在该bin里的相位差Tmp为:
Tmp=Phase(i)-Phase_old(i)
因为第i个bin的标准相位差TmpS为:
其中,stepsize表示一次处理信号的步长,一般来说,stepsize比fftsize要小,有一定的重叠,这样处理会更加准确。较佳地,本发明实施例中取stepsize为fftsize的四分之一长度,即M=fftsize/stepsize=4
计算Tmp与TmpS的差值TmpD:
TmpD=Tmp-TmpS
将这个差值TmpD规划到正负π之间,得到TmpD′,由此可以计算得到频率偏差FreqD为:
最后,将FreqD与标准频率相加,即可得到第i个bin对应的准确频率值FreqS(i)为:
FreqS(i)=i*FreqPerBin+FreqD
其中,FreqPerBin表示每个频带的带宽。
下面详细介绍一下频带选取单元的功能。
假设原始输入的音频信号的采样率为44.1KHz,经过8倍抽取后,采样率降为约5.5KHz,如果采用256点的FFT,则每个bin里的频率范围约为20Hz,一般来说,基频的频率很低,在80Hz以下,因此只需对频率最低的几个bin进行搜索即可,较佳地,选取频率最低的4个bin,即在频率最低的四个bin里搜索基频信号,查看哪个bin里的幅度Magn最大,Magn最大的bin所对应的频率FreqS即是要寻找的基频信号的频率F,该bin对应的幅度即是基频信号的幅度MF。即:
F_i=arg[Max(Magn(i))],i=0~3
F=FreqS[F_i]
MF=Magn[F_i]
较佳地,所述变调单元15包括:
谐波频率确定单元,用于将基频信号的频率与预先设置的多个整数分别相乘,得到多个谐波的频率。
谐波幅度确定单元,用于将所述基频信号的幅度与预先设置的多个幅度比例因子分别相乘,得到多个谐波的幅度。
变调单元15的主要任务就是通过基频信号的频率F和幅度MF得到基频信号的各个谐波成分。
基频信号的各个谐波的频率都是基频信号的频率F的整数倍。较佳地,本发明实施例中只考虑最低的5次谐波,则各个谐波的频率和幅度分别为:
Fh(k)=kF,k=1,2,3,4,5
MFh(k)=a(k)MF,k=1,2,3,4,5
其中,a(k)表示第k次谐波的幅度比例因子,每个谐波的幅度比例因子是不同的,并且是预先设置好的,一般来说频率越高的谐波,能量越低,因此a(k)是一个大于零的小数,并且随着k的增大而减小。
然后,根据各个谐波的频率计算其准确相位,以第k次谐波为例,假设第k次谐波的频率Fh(k)在第i个bin的范围内,则Fh(k)与该bin内的标准频率的差的归一化值FreqD为:
FreqD=(Fh(k)-i*FreqPerBin)/FreqPerBin
计算相对相位差TmpD为:
TmpD与标准相位差相加得到准确的相位差Tmp:
将准确的相位差Tmp与计算得到Tmp之前累计的相位差Tmp_sum相加得到最终相位Phase(k)为:
Phase(k)=Tmp+Tmp_sum
并且,更新累计相位差Tmp_sum=Phase(k),其中,Tmp_sum的初始值为0。
最后,通过幅度MF(k)和相位Phase(k)就可以计算出该谐波的实部Real(i)和虚部Imag(i):
Real(i)=MF(k)*cos(Phase(k))
Imag(i)=MF(k)*sin(Phase(k))
第一合成单元16将所有的谐波进行叠加后就得到了基频信号的所有谐波成分的频域信号,时域转换单元17对该频域信号进行IFFT变换,就得到了其时域信号。
延时处理单元20:
延时处理单元20,将原始信号延时D个样本,D值即所谓的时延值。延时的目的是为了使得原始的音频信号与变调后的基频信号的相位对齐,以避免相位不对齐时造成信号对消。D值的设置方式如下:
D值的确定需要考虑对音频信号的基频部分进行一系列处理过程中的所有可能的延时,包括:第一低通滤波单元11和第二低通滤波单元19中的滤波器的长度,分析窗和综合窗的长度,以及FFT和IFFT转换所需要占用的时间等等。
假设第一低通滤波单元11和第二低通滤波单元19中的滤波器的长度为L,分析窗和综合窗的长度为W,则D值可以为:
D=L/2*2+W/2*M
其中,L/2为一个LPF的延时,共有两个LPF,所以低通滤波处理造成的延时为L;W/2为分析窗处理和综合窗处理造成的延时,因为这部分延时是在抽取后产生的,因此对于抽取前来说相当于还要增大M倍,因此为W/2*M
将延时了D个样本的原始音频信号与变调后的基频信号相加,可能发生饱和溢出,因此相加后的信号进一步需要进入自动增益控制单元22进行处理。
自动增益控制单元22:
一般的AGC模块用来自动改变信号的增益,将小信号放大,将大信号缩小,音量保持适中。而本发明实施例中的自动增益控制单元22并不是这样,因为对于音乐来说,旋律的起承转合,抑扬顿挫是自身的特点,并不能破坏,本发明实施例中使用AGC的目的是在保证声音不发生饱和失真的前提下,提高重低音的音量。也就是说,自动增益控制单元22为了使得一定时间范围内的幅度最大的信号处于饱和边界上,而该范围内的信号大小关系仍然保留,需要采用快降慢升的方法。
较佳地,自动增益控制单元22包括:
第一增益值单元,用于确定第二合成单元21得到的当前帧音频信号中绝对值最大的信号幅度值,将该信号幅度值与预先设置的目标阈值进行比较,得到第一增益值。
第二增益值单元,用于将第一增益值与上一帧音频信号采用的增益值进行比较,当第一增益值小于上一帧音频信号采用的增益值时,令第二增益值等于第一增益值;当第一增益值大于上一帧音频信号采用的增益值时,令第二增益值等于上一帧音频信号采用的增益值与预先设置的步长的和;其中,第二增益值属于预先设置的阈值范围。
帧内平滑单元,用于利用上一帧音频信号采用的增益值,通过斜坡函数对第二增益值做帧内平滑,得到当前帧音频信号采用的增益值。
输出单元,用于将当前帧音频信号采用的增益值与当前帧合成后的音频信号相乘,得到并输出自动增益控制后的音频信号。
例如,在第二合成单元21输出的当前帧音频信号中找到的绝对值最大的信号幅度值为Vmax,然后将Vmax和目标阈值Ti比较,目标阈值是希望信号幅度能够达到的理想值。将Ti和Vmax相比得到理想的增益值gain_t(即所述的第一增益值)为:
gain_t=Ti/Vmax
由于增益变化过快会带来信号突变噪声,因此,本发明实施例采用快降慢升的增益调整方式,包括:
假设当前帧的上一帧计算得到的最终增益值为gain_old,则:
如果gain_t<gain_old,则gain=gain_t,此操作表示快降,gain即所述的第二增益值,最小可降低到一个低阈值LowLimit。
如果gain_t>gain_old,则gain=gain_old+step,此操作表示慢升,其中step为预先设置的增益增大时的过渡步长,gain最大可增大到一个高阈值HighLimit。
也就是说,gain无论怎么调整,都要满足:gainLowLimit≤gain≤HighLimit。
进一步,用新计算出的增益gain和上一帧的gain_old做帧内平滑,可用如图2所示的斜坡函数来进行加权,斜坡函数定义为b(i)=1-i/N,则:
gainW(i)=b(i)gain_old+(1-b(i))gain,i=0~N-1
其中,gainW(i)为当前帧采用的做了帧内平滑后的样点i的增益,N表示每个帧的长度。
可以看出,由于斜坡函数在开始时对于上一帧的gain_old给与了较大权值,对于当前帧的gain给与了较小权值;而在末尾时正好相反。因此可以有效地平滑增益突变的影响。
最后,用做了帧内平滑的增益gainW(i)去处理第二合成单元21的输出信号,即自动增益控制单元22的输入信号input(i),得到输出信号output(i)为:
output(i)=input(i)*gainW(i),i=0~N-1
参见图3,本发明实施例提供的一种虚拟重低音增强方法包括步骤:
S101、按照预先设置的截止频率,提取音频信号中的低频信号,并按照预设的抽取倍数,对所述低频信号进行抽取处理。
S102、将抽取处理得到的低频信号经过分析窗的处理后,进行FFT,得到低频信号的频域信号,并确定该频域信号中各个频带对应的频率。
S103、按照预先设置的频率范围选取多个频带,并将多个频带中幅度最大的频带所对应的频率作为基频信号的频率,将该频带的幅度作为基频信号的幅度。
S104、将基频信号的频率与预先设置的多个整数分别相乘,得到多个谐波的频率;将基频信号的幅度与预先设置的多个幅度比例因子分别相乘,得到多个谐波的幅度;然后将多个谐波叠加,并将叠加后得到的信号通过IFFT转换为时域信号。
S105、对该时域信号进行综合窗的处理后,按照预设的插值倍数,对经过综合窗的处理后的时域信号进行插值处理;按照预先设置的截止频率,将经过插值处理后得到的信号进行低通滤波处理,得到变调处理后的基频信号。
S106、按照预设时延值对原始输入的音频信号进行延时处理,将经过延时处理后的音频信号与得到变调处理后的基频信号进行合成。
S107、将当前帧音频信号与当前帧变调处理后的基频信号合成后得到的音频信号进行自动增益控制。
其中的抽取步骤和插值步骤都是较佳的步骤,不是必需的步骤。
步骤S107中的自动增益控制包括:
步骤一:确定将当前帧音频信号与当前帧变调处理后的基频信号合成后得到的音频信号中绝对值最大的信号幅度值,将该信号幅度值与预先设置的目标阈值进行比较,得到第一增益值。
步骤二:将第一增益值与上一帧音频信号采用的增益值进行比较,当第一增益值小于上一帧音频信号采用的增益值时,令第二增益值等于第一增益值;当第一增益值大于上一帧音频信号采用的增益值时,令第二增益值等于上一帧音频信号采用的增益值与预先设置的步长的和;其中,第二增益值属于预先设置的阈值范围。
步骤三:利用第二增益值对当前帧合成后的音频信号进行增益控制。
较佳地,步骤三包括:
利用上一帧音频信号采用的增益值,通过斜坡函数对第二增益值做帧内平滑,得到当前帧音频信号采用的增益值,并将该增益值与当前帧合成后的音频信号相乘,得到当前帧自动增益控制后的音频信号。
综上所述,本发明实施例提供了一种新的虚拟重低音增强的数字信号处理方法及***,通过低通滤波和变采样率技术将信号低频部分抽取出来,然后用FFT将其变换到频域,再用频域变调技术,将基频信号按照各次谐波对应得频率进行变调,最后将处理后的基频信号通过IFFT恢复到时域,并与原信号合成,从而在不产生噪声的前提下,增强了音频信号的虚拟重低音。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。