现在的位置: 首页 > 综合 > 正文

LPC-10e综合器程序分析

2013年10月11日 ⁄ 综合 ⁄ 共 2211字 ⁄ 字号 评论关闭
文章目录

作者:JHJ(jianghuijun211@gmail.com)
日期:2012/08/24

欢迎转载,请注明出处

LPC-10e综合器程序分析

1.      综合器框图

2.      解码、误差校正(decode.c)

3.      参数插值(pitsyn.c)

当前帧插值运算需要用到前帧的后半帧的参数值,所以在修改程序值,这段程序需要修改。

由于每帧语音只传输一组参数,考虑一帧之内可能有不止一个基音周期,因此要对接收数值进行由帧块到基音块的转换和插值。

因此参数插值程序需要解决两个问题:(1)基音块的确定;(2)对各基音块如何插值。

参数插值的原则:

1)对数面积比参数值每帧插值两次;

2)RMS参数值在对数域进行基音同步插值;

3)基音参数值用基音同步的线性插值;

4)在浊音向清音过渡时对数面积比不插值。

预测系数、增益、基音周期、清/浊音等参数值每个基音周期(基音块)更新一次,这个过程在帧块到基音块的转换和插值中完成。

清音段由于没有基音周期,这里确定基因块长度的方法是平均切分;浊音段由于有基音周期,因此确定基音块是基于其基音周期的

需要处理的帧块的长度为lsamp = lframe + jsamp(其中lframe为本帧帧长,在本程序中为180个样点,jsamp为前一帧中未处理的样点)。 帧块到基音块的转换所用到的关键参数是帧的清/浊音,即由IVOICO(前一帧的后半帧voice值), VOICE(1)(当前帧的前半帧的值), 及 VOICE(2)( 当前帧的后半帧的值)这三个参数决定。IVOICO VOICE(1) VOICE(2)的八种组合决定着语音帧的四种状态:

1)清音(000)

以pitch = 45为步长划分基音块,参数rc, rms, ivuv为本帧的参数值,而未做插值运算。ipito=45,ivoico = 0,rmso 及rco为本帧的值。

2)清音 —> 浊音(001, 011/010)

清音与浊音的转换处再延时45个样点都作清音处理,即浊音段中前lframe / 4 =  45个样点需要当作清音处理,清音段,RC及RMS不插值,且RMS及RC的值是前帧相应的值。浊音段RC不插值,其值为本帧RC,RMS对数域插值。Ipito = 浊音段的pitch。

001

对于011/010,第1第2基音块由NL=45(NL即为浊音段中的样点放到清音段中处理的样点数)确定,其对应的rc,rms,ivuv都由前一帧参数决定。在[NL+1, lsamp]中,以pitch为步长确定本帧中其它基音块。nout = 2 + (lsamp – (nl + 1)) / pitch。在非第1第2基音块中,ivuv = 1 ipitch = pitch,rc为本帧rc值,rms插值计算。

简言之,清音段的基音块参数由前一帧参数决定,浊音段的基音块参数由当前帧插值决定。

3)浊音 —> 清音(110, 100/101)

浊音与清音的转换处再延时45个样点都作浊音处理,即清音段中前lframe / 4 =  45个样点需要当作浊音处理,因此程序中while语句循环两次,分别进行浊音段处理和清音段处理。浊音段,rc不插值,为前帧值,rms插值计算;清音段,rc和rms都不插值,都为本帧值。Ipito=清音段的pitch。

110      

对于100/101,浊音段的范围是取(jsamp(前帧中未处理的点) + 45),ivuv(基音块的清浊音判决) = 1, ipiti(基因块的基音值) = ipito(前帧基音值),RC为前帧RC值。剩余的点放到清音段处理,在清音段中,ipiti(基因块的基音值) = (本帧中未处理的样点数 / 2),ivuv(基音块的清浊音判决) = 0,RC为本帧RC值。在两段数据中分别进行rms和rc的对数域插值运算,但浊音段RC插值后为RCO,即前帧RC值,清音段RC插值后为当前帧RC值。

4)浊音(111)

只有在这种情况才需要对pitch进行线性插值运算,再以插值后的pitch值(线性增加)为步长划分基音块。各基音块的ivuv = 1,rc及rms需要在对数域插值。Ipito为插值后最后一个pitch值,而不一定是本帧pitch值了。Rc及rms保持不变。

 

图1

图示假设sjamp = 0, 若jsamp != 0,只要作相应偏移即可。

 

困惑的问题

1)是如何确定一个输入帧(由54BIT参数决定)的基音块的?(2007-11-9)

答:由pitch值决定。

2)基因块中的各参数值是如何确定的?(2007-11-9)

答:由3个半帧的voice值确定清浊音段范围,具体见图1。过渡段rc不插值。Pitch的确定原则是在清音段,对分清音段长求得pitch;在浊音段,pitch即为浊音段的pitch值。

在pitsyn__()中,IVOICO,IPITO,RMSO,RCO用来存储前一个窗的后半部分的参数值,在我们修改程序中(帧移90),由于是交错读取编码数据,因此我们需要用到前第二个窗的参数,这里需要修改,即IVOICO,IPITO,RMSO,RCO值有变化。

3)解码器输入和输出的关系。

答:延时一窗输出。

解码器输入为编码后的54-bit数据(为和编码器分析统一,认为此数据为(AF-2)中的参数),输出为(AF-3)参数合成后和部分(AF-2)合成后的180个样点(因为54-bit数据在转换成基因块时,若直接输出可能小于180个16-bit数据,但是输出确是180个16-bit的数据,所以这里要延时一个窗输出是有道理的)。

 

 

 

抱歉!评论已关闭.