到长时后滤波器到短时后滤波器3584长时后滤波器系数计算器83基音预测器抽头系数计算8110阶LPC解码语音逆滤波器基音周期提取8285短时后滤波器系数计算器10阶LPC预测器系数一阶反射系数
图A.8 自适应后滤波器框图原理
参考图A.8,10阶LPC逆滤波器模块81和基音周期提取模块82一起工作以从解码语音中提取基音周期。实际上,具有合理功能的基音提取器(不引进附加延迟)都可以用在这里。我们在这里描述的只是实现基音提取的一种可能方法。
10阶LPC逆滤波器81有如下传递函数:
10~~z?i A(z)?1??aii?1~是从Levinson-Durbin递推公式(图A.5中的块50)得到的,它在每一帧在这里系数ai的第一个矢量处被更新。这个LPC逆滤波器以解码语音作为它的输入,产生LPC预测残差序列{d(k)}作为它的输出。我们使用100个样点的基音分析窗和20到140个样点的基音周期范围。基音周期提取模块82保持一个长的缓冲区以保留LPC预测残差的最后240个样点。为方便检索,这240个LPC残差样值被标以d(-139),d(-138),?,d(100)而储存在缓冲器里。
基音周期提取模块82一帧一次地提取基音周期,在每帧的第三个矢量基音周期被提取。因此,LPC逆滤波器输出矢量应该以特殊的次序储存在LPC残差缓冲器里。对应于上一帧的第四个矢量的LPC残差矢量被储存为d(81),d(82),d(83),?,d(85),现行帧的第一个LPC残差矢量被储存为d(86),d(87),?,d(90),现行帧的第二个LPC矢量被储存为d(91),d(92),?,d(95),现行帧的第三个LPC残差矢量被储存为d(96),d(97),d(98),d(99),d(100)。样点d(-139),d(-138),?,d(80)只是以现行的时间次序排列的以前的LPC残差样值。
一旦LPC残差缓冲区准备好,基音周期提取模块82就以下列方式工作:首先,LPC残差的最后20个样值[d(81)~d(100)]通过一个1kHz的三阶椭圆低通滤波器(系数在附录
259
D中给出),然后按4:1压缩采样点数(也就是用因子4除采样数),这形成5个低通滤波的,4:1抽取的LPC残差样值,标以d(21),d(22),?,d(25)。储存在压缩后的LPC残差缓冲器中,除这5个采样外,其余55个采样d(-34),d(-33),?,d(20)通过移动以前帧压缩抽取后的LPC残差样值来获得。接着,压缩LPC残差样值的第i个相关由下式计算:
?(i)??d(n)d(n?i) (A.4.7)
n?125??时间滞后i=5,6,7?,35(对应于基音周期从20~140个样点值)。从31个计算出的相关值中,找出最大的一个对应的时间延迟τ,因为这个时间延迟τ是在4:1抽取的残差域中,所以,对应于最大相关的时间延迟应在4τ-3到4τ+3之间。为得到原来的时间解,我们用未抽取的LPC残差缓冲来计算未抽取的LPC残差的相关:
c(i)??d(k)d(k?i) (A.4.8)
k?1100延迟i=4τ-3,4τ-2,?,4τ+3,从这7个延迟中,可以确定出对应于最大相关的延迟
p0。
这种方法找出的时间延迟p0,可能产生的是真正的基音周期的倍数,在长时后滤波器中我们需要的是真正的基音周期,而不是它的倍数,因此,我们需要做的更多的处理是找出基本的基音周期。我们利用这样的事实,我们很频繁地估计基音周期,每20个语音样点一次。因为基音周期典型变化范围为20到40个样点,我们频繁地估计基音意味着在每次谈话的开始,在基音周期的倍数有机会出现在峰值检测处理之前。我们将首先得到基音周期。从这里开始,通过检查确认在前帧的基音周期附近是否有任何相关峰值出现,就有机会锁定基本的基音周期。
?是前帧的基音周期,如果上面获得的时间延迟并不与p?邻近,那么,我们对令 p??6,p??5,?,p??5,p??6也计算方程(A.4.8)。从这13个可能的时间延迟中,时间延i?p迟p1对应于最大相关,然后,我们检查确认这个新的延迟p1是否应该作为现行帧的基音周期输出。首先,我们计算:
d?k?d?k?p0??k?1d?k?p0?d?k?p0??k?1100100?0? (A.4.9)
?0是具有p0个样点延迟的单抽头基音预测器的最佳抽头权,然后?0的值被限钳位在0~1之间。接着,我们也计算?1
?1?d?k?d?k?p1??k?1d?k?p1?d?k?p1??k?1100100 (A.4.10)
?1是具有p1个样点延迟的单抽头基音预测器的最佳抽头权,然后,?1的值也被钳位在
0~1之间,则块82 的输出基音周期p以下式给出:
260
?p0 若?1≤0.4?0p?? (A.4.11)
若?>0.4?p?110基音提取模块82 提取基音周期后,基音预测器抽头计算器83计算解码语音的单抽头基
音预测器的最佳抽头权。基音预测计算器83和长时后滤波器71共用解码语音的长缓冲器。这个缓冲器含有解码语音样点sd??239?,sd??238?,sd??237?,?,sd?4?,sd?5?,这里长时后滤波器71用这个缓冲器作为这个滤波器的sd?1?到sd?5?对应于解码语音的当前矢量。
延迟单元。另一方面,基音预测器抽头计算器83用这个缓冲器来计算?
??k??990?sd?k?sd?k?p?0 (A.4.12)
k??99?sd?k?p?sd?k?p?接着,通过长时后滤波器系数计算器84得到基音周期p和基音预测抽头?,计算长时后滤波器系数b和gl如下:
,?<0.6?0 ?b??0.15? ,0.6≤?≤1 (A.4.13)
?,?>1?0.151 (A.4.14) 1?b总之,?越靠近单位圆,语音波形就越具有周期性。在方程(A.4.13)和(A.4.14)中,可以 gl?看到,如果??0.6,大致对应于清音或语音过渡区,则b?0,gl?1,长时后滤波器的传递函数为Hl(Z)?1,这意味着长时后滤波器关闭。相反,若0.6≤?≤1,长时后滤波器被打开,梳状滤波器的滤波程序由?决定。语音波形越具有周期性,滤波器的梳状越明显。最后,若?>1那么b被限于0.15;这是为了避免过多的梳状滤波。系数gl是长时后滤波器的一个调节因子以确保语音波形的浊音区相对于清语音或过渡区,幅度不是太大(如果gl在单位圆内保持为常数),则长时滤波后,浊音区将被放大大约(1+b)倍,这将使某些对应于清音或过渡区的听得不清楚或太弱的音变得和谐。
短时后滤波器系数计算器85在每帧的第一个矢量处根据方程(A.4.3),(A.4.4)和(A.4.5)计算短时后滤波器系数ai,bi和?。
4.8 输出PCM格式转换
在这一块解码语音矢量的五个样点被转换成为五个对应的A-律或?-律PCM样值,并以125?s的时间间隔序列输出这5个PCM样值。注意,如果这个内部线性PCM格式象在 3.1.1节中描述的那样经过更新,则在变换为A-律或?-律PCM之前,必须进行逆更新。
261