具体实施方式
本公开涉及一种在解码器侧实现多模态解码以维持互操作性并提升感知质量的方法。在本公开中,虽然如在参考文献[3GPP TS26.190,《AdaptiveMulti-Rate-Wideband(AMR-WB)speech codec;Transcoding functions》]中描述的AMR-WB用作示例性示例,但应该切记的是,这种方法也可以应用到其他类型的低比特率语音解码器,该参考文献的全部内容通过引用并入本文。
参照图1,为了实现这种多模态解码,时域激励解码器102首先对接收到的比特流101进行整体解码,例如AMR-WB比特流,以获得完整的时域码本激励线性预测(CELP)解码的激励。解码的时域激励通过线性预测(LP)合成滤波器103进行处理,以获得解码器内部采样频率的语音/声音信号时域合成。对于AMR-WB,该内部采样频率为12.8kHz,但对另一编解码器,它可能是不同的。
来自LP合成滤波器103的当前帧的时域合成通过分类器104-105-106-301(图1、图2和图3)进行处理,其中向所述分类器提供来自比特流101的话音有效性检测(VAD)信息109。分类器104-105-106-301分析时域合成并将其分类成无效语音、有效浊音语音、有效清音或通用音频。无效语音(在1051检测到)包括语音突发、表示主动语音突发期间具有浊音特性的帧的有效浊音语音(在1061检测到)、表示在语音突发期间具有清音特性的帧的有效的清音语音(在1062检测到)、以及表示音乐或混响语音的通用音频(在3010检测到)之间的所有的背景噪音。其他的类别可以添加或从上述类别得到。所公开的方法的目的是改进尤其(但并非排他性地)是无效的语音、有效的清音语音和通用音频的感知质量。
一旦确定了时域合成的类别,转换器/修正器107就使用非重叠频率变换将来自时域激励解码器102的解码的激励转换到频域。也可以使用重叠变换,但它意味着增加了端到端延迟,这在大多数情况下是不希望的。然后,在转换器/修正器107中,将激励的频率表示分离到不同的频带。频带可以有固定的大小,可以依赖于临界频带[[J.D.Johnston,“Transform coding of audio signalusing perceptual noise criteria”,IEEE J.Select.Areas Commun.,第6卷,第314-323页,1988年2月](其全部内容通过引入并入本文),或任何其他的组合。然后,计算每个频带的能量,并将其保存在转换器/修正器107的存储器中,以在整形(resample)处理后使用,以确保修正不改变全局的帧能量级。
转换器/修正器107执行的频域中的激励的修正可能会随着合成的分类而不同。对于无效的语音和有效的清音语音,整形可以包括对低频归一化再添加噪声,以及仅用噪声替换高频内容。解码的时域合成的截止频率、低频和高频之间的界限可以固定在约1至1.2kHz的值。当在未修正的帧和修正的帧之间进行切换时,保持解码的时域合成的一些低频内容以防止伪像。也可以通过选择频率区间(frequency bin)作为来自时域激励解码器102的解码的基音(pitch)的函数而使得截止频率逐帧可变化。修正处理具有除去与低比特率语音编解码器相关联的电噪声种类的效果。修正处理后,应用每频带的增益匹配,以取回每个频带的初始能量级,其中稍微增加6kHz以上的频率的能量,以补偿在这些频率上的LP滤波器增益下降。
对于被归类为通用音频的帧,转换器/修正器107中的处理是不同的。首先,对所有频带的每一个频带进行归一化。在归一化操作中,频带中低于频带内最大频率值的一部分的所有区间都被设置为零。对于更高的频段,每个频段内更多的区间归零。这以较高的比特预算模拟了频率量化方案,但更多的比特分配给了较低的频率。归一化处理后,可以应用噪声填充,用随机噪声替换归零的区间,但取决于不同的比特率,并不总是使用噪声填充。修正处理后,应用每频带的增益匹配,以取回每个频带的初始能量级,并沿频带应用取决于比特率的倾斜校正,以补偿在通用音频输入情形中对LP滤波器的系统性低估。通用音频路径的另一个不同来自于增益匹配并非应用在所有的频率区间上的事实。由于通用音频的频谱通常比语音更加多尖峰,因此当可以识别频谱脉冲并对其加重时,改善了感知质量。要做到这一点,只对频带内的最高能量区间应用具有倾斜校正的全增益匹配。对于最低能量区间,对这些区间只应用一部分增益匹配。这导致增加频谱动态。
在激励频率整形和增益匹配之后,转换器/修正器107应用逆频率变换,以获得修正的时域激励。该修正的激励通过LP合成滤波器108处理,以得到修正的时域合成。在去加重滤波器和重采样器112中最终去加重和重采样至16kHz(对于AMR-WB的示例)之前,取决于时域解码合成的分类,覆写器110简单地用来自LP合成滤波器108的修正后的时域合成覆写来自LP合成滤波器103的时域解码合成。
在无效的语音的情形中,与有效的清音语音的修正相比,唯一的区别是使用平滑器111用于平滑LP合成滤波器108以给出更平滑的噪声变化。其余的修正都与有效的清音路径相同。在下面的文本中,参照图2描述实现公开的方法的更详细的示例。
1)信号分类
参照图2,分类器104-105-106-301对于应用了修正的比特率在解码器执行如上文描述的语音/声音信号的时域合成的分类1021。为了简化附图的目的,图2没有示出LP滤波器103。解码器处的分类与如在参考文献[MilanJelinek和Philippe Gournay;PCT专利申请WO03102921A1,“A method anddevice for efficient frame erasure concealment in linear predictive based speechcodecs”]和[T.Vaillancourt等人,PCT专利申请WO2007073604A1,“Methodand device for efficient frame erasure concealment in speech codecs”]中描述的相似(这些参考文献的全部内容通过引用并入本文),加上对通用音频检测的一些适配。下面的参数用于在解码器处对帧进行分类:归一化的相关性rx、频谱倾斜度量et、基音稳定性计数器pc、在当前帧Es结束处声音信号的相对帧能量和过零计数器zc。这些用于对信号进行分类的参数的计算在下面说明。
归一化的相关性rx在帧结束处基于语音/声音信号的时域合成Sout(n)计算。使用来自时域激励解码器102的最后一个子帧的基音滞后(lag)。更具体地,归一化的相关性rx基音同步地计算如下:
其中x(n)=Sout(n),T是最后一个子帧的基音滞后,t=L-T,L是帧大小。如果最后一个子帧的基音滞后大于3N/2(N是子帧的大小),那么将T设置为最后两个子帧的平均基音滞后。
因此,归一化的相关性rx是使用语音/声音信号时域合成Sout(n)计算得到的。对于低于子帧大小(64个采样)的基音滞后,归一化的相关性在时刻t=L-T和T=L-2T计算两次,并且归一化的相关性rx作为这两次计算的平均值给出。
频谱倾斜参数et包含有关能量的频率分布的信息。作为非限定性的示例,解码器处的频谱倾斜被估计为时域合成的第一归一化自相关系数。它基于最后的3个子帧计算为:
其中x(n)=Sout(n)是时域合成信号,N是子帧大小,L是帧大小(在AMR-WB的示例中,N=64,L=256)。
基音稳定性计数器pc对基音周期的变化进行评估。它在解码器处如下计算:pc=|p3+p2-p1-p0| (3)
值P0,P1,P2和P3对应于来自当前帧的4个子帧的闭环基音滞后(在AMR-WB的示例中)。
相对帧能量Es计算为以dB为单位的当前帧能量Ef和其长期平均值Elt之间的差
Es=Ef-Elt (4)
其中当前帧能量Ef是在帧结束处基音同步地计算得到的以dB为单位的时域合成Sout(n)的能量
其中L=256(在AMR-WB的示例中)是帧的长度,T是最后两个子帧的平均基音滞后。如果T小于子帧的大小,那么将T设置为2T(对于短基音滞后使用两个基音周期计算得到的能量)。
使用下面的关系式更新有效语音帧的长期平均能量:
EH=0.99EH 十0.01Ef (6)
最后一个参数是在时域合成Sout(n)的一个帧上计算得到的过零计数器zc。作为非限制性的示例,过零计数器zc计数在该间隔期间时域合成的符号从正变为负的次数。
为了使分类更鲁棒,将分类参数放在一起考虑形成评价(merit)函数fm。为了这个目的,首先使用线性函数对分类参数进行缩放。让我们考虑参数Px,其缩放版本使用下式获得:
ps=kp·px+cp (7)
缩放后的基音稳定性计数器pc被截短(clip)在0和1之间。对于每个参数已经通过实验找到函数系数Kp和Cp。在该实现的示例中使用的值总结在表1中:
表1:解码器处的帧分类参数和其相应的缩放函数的系数
评价函数定义为:
其中上标s表示参数的缩放版本。
然后,使用评价函数fm并遵循在表2中总结的规则进行帧的分类:
表2:解码器处的信号分类规则
除此分类之外,与编码器的话音有效性检测(VAD)相关的信息109可被发送至比特流101中(图1),与在AMR-WB的示例中的情形一样。因此,一比特被发送到比特流101以指定编码器是否将当前帧视为有效内容(VAD=1)或无效内容(背景噪声,VAD=0)。当VAD信息表明内容是无效的时,分类器部分104,105,106和301然后将分类覆写为清音。
分类方案还包括通用的音频检测(见分类器部分301,图3)。通用音频类别包括音乐、混响语音,还可以包括背景音乐。分类的第二个步骤允许分类器104-105-106-301以较好的置信度确定当前帧可以被归类为通用音频。使用两个参数来实现该第二分类步骤。一个参数是如等式(5)中表达的总帧能量Ef。
首先,过去四十(40)个总帧能量变化的平均值用下面的关系式计算得到:
其中
然后,最后十五(15)个帧上的能量变化历史的统计偏差σE用下面的关系式确定:
得到的偏差σE给出对解码的合成的能量稳定性的指示。通常情况下,音乐比语音具有更高的能量稳定性(较低的能量变化历史的统计偏差)。
此外,第一个步骤的分类被用来评估当如在等式(5)中表达的帧能量Ef大于-12dB时被分类为清音NUV的两个帧之间的间隔。当帧被分类为清音,并且帧能量Ef大于-9dB时,意味着信号是清音而不是无声(silent),如果如在等式(6)中表达的长期有效语音能量Elt小于40dB,那么将清音间隔计数器设置为16,否则将清音间隔计数器NUV减小8。对于有效语音信号,计数器NUV也被限制在0和300之间,对于无效语音信号,被限制在0和125之间。应该提醒注意的是,在说明性的示例中,有效和无效语音信号之间的差可以从包含在比特流101中的话音有效性检测VAD信息推导得到。
对于有效语音信号,从该清音帧计数器得到长期平均值:
对于无效的语音信号则如下:
此外,当长期平均值很高,并且偏差σE也高时,例如在实现的当前示例中,当NUVlt>140并且σE>5时,长期平均值修正如下:
分类器104-105-106-301使用有关被分类为清音的帧之间的帧的数量的长期平均值的参数,来确定所述帧是否应被视为通用音频。越多清音帧在时间上接近,帧越可能具有语音特征(更小可能是通用音频)。在说明性的示例中,用来决定帧是否被视为通用音频GA的阈值定义如下:
帧是GA,如果:并且 (14)
加上在等式(9)中定义的参数以便不将大的能量变化分类为通用音频,而是将它保持为有效语音。
对激励的修正的执行取决于帧的分类,并且对一些类型的帧,根本没有修正。下表3总结了可以进行或不可以进行修正的情况。
表3:激励修正的信号类别
*可以取决于对通用音频类别进行或不进行修正。例如,可以仅当通用音频是无效的时候对其进行修正,或仅当通用音频是有效的时候进行修正,始终进行修正或根本不进行修正。
2)频率变换
在频域修正阶段,需要将激励表示到变换域。例如,通过使用给出25Hz频率分辨率的II型DCT(离散余弦变换)的转换器/修正器107的时域到频域转换器201实现时间到频率转换,但也可以使用任何其他合适的变换。如果使用另一种变换,那么频率分辨率(上面定义的)、频带的数目和每个频带的频率区间的数目(下文进一步定义)可能需要相应地修改。在时域到频域转换器201中计算的时域CELP激励fe的频率表示如下给出:
其中etd(n)是时域CELP激励,L是帧长度。在AMR-WB的示例中,对于对应的内采样频率12.8kHz帧长度是256个采样。
在时域CELP解码器,诸如102中,时域激励信号由以下给出:
etd(n)=bv(n)+gc(n) (15)
其中V(n)是自适应码本贡献,b是自适应码本增益,c(n)是固定码本贡献,g是固定码本增益。
3)每个频带的能量分析
在对时域激励进行任何修正之前,转换器/修正器107包括增益计算器208-209-210,其本身包括子计算器209,用来计算频域激励的每个频带的能量Eb并将计算得到的每个频带的能量Eb保存在存储器中以用于激励频谱整形后的能量调整。对于12.8kHz的采样频率,可以通过子计算器209如下计算能量:
其中CBb代表每个频带的累积频率区间,Bb为每个频带的区间数量,定义为:
Bb={4,4,4,4,5,6,6,6,8,8,10,11,13,15,18,22,16,16,20,20,20,16}
低频带可以对应于临界(critical)音频频带,如在Milan Jelinek和PhilippeGournay的PCT专利申请WO03102921A1,“A method and device for efficientframe erasure concealment in linear predictive based speech codecs”中描述的,其全部内容通过引用并入本文,但3700Hz以上的频带可以短一点,以更好地匹配这些频带中可能的频谱能量变化。频谱频带的任何其他的配置也是可能的。
4)无效和有效的清音帧的激励修正
a)时域贡献的截止频率对比噪声填充
为了实现无效帧和有效的清音帧的未修正激励和修正后激励之间的透明切换,至少保持时域激励贡献的较低频率。转换器/修正器107包括截止频率计算器203,用来确定停止使用时域贡献的频率,截止频率fc具有最小值1.2kHz。这意味着,始终保持解码的激励的第一个1.2kHz,并且取决于来自时域激励解码器102的解码的基音值,截止频率可以更高。8次谐波从所有子帧的最低基音计算得到,时域贡献保持高达该8次谐波。对8次谐波的估计计算如下:
其中Fs=12800Hz,Nsub是子帧的数量,T是解码的子帧基音。对于所有的i<Nb,其中Nb是被包括在频率范围Lf中的最大频带,通过搜索最高的频带以找到8次谐波所在的频带来进行验证,对于该最高的频带,依然验证下面的不等式:
其中Lf定义为:
Lf中的频带的索引将被称为它表明8次谐波可能位于的频段。截止频率计算器203使用下面的关系将最终的截止频率ftc计算为1.2kHz和8次谐波可能位于的频带中的最后频率之间的较高的频率,:
b)归一化和噪声填充
转换器/修正器107还包括将高于截止频率fc的频带的频率区间归零的归零器204。
对于无效帧和有效的清音帧,转换器/修正器107的归一化器205使用下面的关系在[0,4]之间归一化低于时域CELP激励fe的频率表示的频带的fc的频率区间:
然后,转换器/修正器107包括随机噪声产生器206,用来产生随机噪声,并通过加法器207来进行简单的噪声填充,以在所有的频率区间上以恒定的等级添加噪声。描述噪声添加的函数定义如下:
对于j=0:L-1
feN(j)=feN(j)+0.75·rand() (21)
其中rand是限制在-1到1之间的随机数产生器。
c)修正后激励频谱的每个频带的能量分析
增益计算器208-209-210的子计算器208用与在上面的第3小节描述的相同方法确定在频谱整形后每个频带的能量Eb’。
d)能量匹配
对于无效帧和有效的清音帧,能量匹配仅在于在对其初始值进行激励频谱修正后调整每个频带的能量。对于每个频带i,增益计算器208-209-210的子计算器210确定用来应用到频带中的所有区间的匹配增益Gb,以如下匹配能量:
其中Eb(i)是如在子计算器209中使用上面第3小节的方法确定的激励频谱修正之前的每个频带的能量,Eb’(i)是如在子计算器208中计算的激励频谱修正之后的每个频带的能量。对于特定的频带i,如在子计算器210中确定的修正后的(去归一化的)频域激励f′edN可以写为:
对于CBb(i)≤j<CBb(i)+Bb(i)
f′edN(j)=Gb(i)·f′eN(j) (23)
其中CBb和Bb在上面的第3小节中定义。
5)通用音频帧的激励修正
a)归一化和噪声填充
现在将参考图3。对于如通过分类部分301确定的通用音频帧,归一化是略有不同的,并通过归一化器302执行。首先,归一化因子Nf逐频带变化,对于低频带使用较大的值,对于高频带使用较小的值。这个想法允许在脉冲定位更准确的低频带的较高幅度,以及在脉冲定位不那么准确的较高频带的较低幅度。在这个示例性示例中,根据频带变化的归一化因子Nf定义为:
Nf={16,16,16,16,16,16,16,12,12,12,12,8,8,8,8,8,4,4,2,2,1,1,1}
对于特定的频带i,通用音频帧的时域激励(频域激励)fe的频率表示的归一化可以描述如下:
对于CBb(i)≤j<CBb(i)+Bb(i) (24)
其中Bb是每个频带的区间的数量,每个频带的累积频率区间是CBb,feN(j)是归一化频域激励。Bb和CBb在上面的第3小节中描述。
此外,归一化器302包括归零器(未显示),用来对每个频带中feN(j)的最大值的一部分Zf以下的所有频率区间进行归零以得到f’eN(j):
其中Zf可以表示为:
Zf={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,}
如果想要提高频谱的多峰性(peakyness),更积极的归零可以通过增大向量Zf的值来执行。
b)修正后激励频谱的每个频带的能量分析
增益计算器303-304-306的计算器部分303确定用与在上面的第3小节描述的相同方法的频谱整形之后的每频带的能量Eb’。
c)能量匹配
图3示出了增益计算器303-304-306,图4更详细描述了该增益计算器的计算器部分306。
对于通用音频帧,能量匹配更复杂,因为它的目的也是提高频谱动态。对于每个频带i,增益计算器303-304-306的计算器部分306的子计算器413计算如在等式(22)中类似地定义的估计的增益Ge:
其中Eb(i)是如在计算器部分304中使用如上面第3小节描述的方法确定的激励频谱修正之前的每个频带的能量,Eb’(i)是如在计算器部分303中计算的激励频谱修正之后的每个频带的能量。
计算器部分306的子计算器414使用下面的关系将增益G应用到来自归一化器302和频谱分割器401-420的归一化频域激励f’eN的第一个400Hz(或最先的4个频带)以提供修正的(去归一化的)频域激励f’edN:
f′edN(j)=Ge(i)·f′eN(j),对于CBb(i)≤j<CBb(i)+Bb(i)|0≤i<4(27)
查找器404确定在400Hz以上的每个频带j的最大值maxa≤j<b(|feN(j)|),其中a=CBb(i),b=CBb(i)+Bb(i)在上面的第3小节中定义。
对于包含在归一化频域激励的400Hz和2kHz(频带4至12)之间的频带(参见模块420和450),如果归一化频域激励在频率区间f′eN(j)≥0.86maxa≤j<b(|feN(j)|)中(参见模块451),则放大器402如在等式(28)的上面一行所示将来自子计算器413的增益Ge放大因子1.1。子计算器403根据等式(28)的第一行将来自放大器402的放大的增益应用到频率区间中的归一化频谱激励f’eN以获得修正的(去归一化的)频域激励f’edN。
再次,对于包含在归一化频域激励的400Hz和2kHz(频带4至12)之间的频带(参见模块420和450),如果归一化频域激励在频率区间′feN(j)<0.86maxa≤j<b(|feN(j)|)中(参见模块451),则衰减器405如在等式(28)的下面一行所示将来自子计算器413的增益Ge衰减因子0.86。子计算器406根据等式(28)的下面一行将来自衰减器405的衰减的增益应用到频率区间中的归一化频谱激励f’eN以获得修正的(去归一化的)频域激励f’edN。
用于总结,修正后的(去归一化的)频谱激励f’edN如下给出:
最后,对于频谱中更高的部分,在该示例中为归一化频域激励2kHz以上的频带(频带>12)(参见模块420和450),如果归一化频域激励在频率区间f′eN(j)≥0.86maxa≤j<b(|feN(j)|)中(参见模块452),那么将作为频带i的函数并且也可以是比特率的函数的倾斜添加到增益Ge,以补偿LPC滤波器过低的能量估计。每个频带的倾斜值δ(i)表示为:
倾斜通过倾斜计算器407-408计算得到,并通过子计算器409根据等式(30)的上面一行按频率区间应用到归一化频域激励f’eN,以得到修正的(去归一化的)频域激励f’edN。
再次,对于频谱中更高的部分,在该示例性示例中为归一化频域激励2kHz以上的频带(频带>12)(参见模块420和450),如果归一化频域激励在频率区间f′eN(j)≥0.86maxa≤j<b(|feN(j)|)中(参见模块452),那么衰减器410计算由子计算器406根据等式(30)的下面一行按频率区间应用到归一化频谱激励f’eN以获得修正的(去归一化的)频域激励f’edN的衰减增益[f′eN(j)/maxa≤j<b(|feN(j)|)]2。
用于总结,去归一化的频谱激励f’edN如下确定:
其中a和b在本文的上面有描述。也可以进一步增大应用到最新频带的增益,其中LPC的能量匹配是最差的。
6)逆频率变换
合成器453合成来自子计算器414,403,406,409和411的对修正的(去归一化的)频域激励f’edN的贡献,以形成完整的修正的(去归一化的)频域激励f’edN。
在频域处理完成后,将逆频率时间变换202应用于来自合成器453的修正的(去归一化的)频域激励f’edN,以找到时域修正后的激励。在这个示例性实施例中,频率到时间转换使用与对于时间到频率转换使用的给出25Hz分辨率的相同的II型DCT的逆过程实现。再次,可以使用任何其他的变换。获得如下的修正的时域激励e′td:
其中f’edN是修正后的激励的频率表示,L是帧长度。在这个示例性示例中,对于对应的12.8kHz的内部采样频率,帧长度为256个采样(AMR-WB)。
7)合成滤波和覆写当前的CELP合成
一旦完成激励修正,就通过合成滤波器108处理修正后的激励,以获得当前帧的修正的合成。覆写器110使用此修正的合成覆写解码的合成,从而提高感知质量。
最后的去加重和重采样到16kHz可以随后在去加重滤波器和重采样器112中进行。