继续学习iLBC Codec ...
一、iLBC解码器的流程
如图1是没有丢帧情况下的iLBC解码流程,当解码端收到Payload时,首先从bitstream里面解析出解码所需要的参数。这里的解码参数从LPC开始,然后是重建起始状态,接下来的sub frame重建与编码时的顺序一致,通过解码三级形状/增益矢量并且相乘再叠加在一起就得到了重建的残差信号。然后进入语音增强模块,提高语音信号的周期性,最后再经过合成滤波以及后处理模块得到解码语音。如果发生丢包,那么步骤1到5需要采用丢包补偿模块进行处理,关于丢包补偿(PLC)内容较多,以后再详细说明。
1、从bitstream中提取解码参数;
2、解码LPC系数,并且通过内插得到各个子帧的相应LPC系数,这个步骤比较直接,在各个speech codec的实现都基本相似;
3、重建57/58个样点的起始状态矢量。首先通过查找表解码DPCM样点,然后将解码的Scalar恢复矢量的功率,接下来通过时间反转和全通滤波得到57/58的起始状态矢量。剩下的23/22个样点矢量通过起始状态矢量构成的动态码书和相应的索引号进行解码重建。
4、利用已经解码的残差信号样点建立Codebook Memory,按照编码的顺序依次解码各个子帧,需要注意的是解码在起始状态之前的矢量时,需要对残差信号和目标矢量进行时间反转。
5、通过(ga