所以编码总延时大于等于 240/8000=30(ms)。
再看 7.5ms 的延时,7.5ms 延时产生的原因是需要超前(look ahead)7.5ms,这
是因为编码 n 时刻的点需要 n+60 时刻的点数据,也就是需要知道 7.5ms 后的点。超
前的引入是因为在计算 n时刻的自相关时,需要 n时刻的点的左、右60 个点的数据。
为了实现超前,编码器不得不引入额外的 7.5ms 的延时。
3.1.3 G.723.1编码流程图
图 3-1 G.723.1编码流程图
G.723.1的编码器的流程图如图 3-1所示。它是基于线性预测分析合成的原理,
并力求使听觉加权的误差信号最小。首先,输入的音频信号按每帧 240 样本点划分成
帧,每一帧数据最先通过高通滤波器去除原始音频数据中的直流分量,进而每一帧又
平均分成 4 个子帧,则每个子帧 60 个样本。对于所有子帧,采用十阶的线性预测编
码滤波器(Linear Prediction Coder, LPC)计算各子帧的 LPC 系数,只把最后一个子
帧的 LPC 转换成线性频谱对(Linear Spectrum Pairs,LSP)系数,用预测分裂矢量
量化器(Predictive Split Vector Quantizer, PSVQ)进行量化。根据未量化的 LPC 系
数为每一个子帧创建一个共振峰听觉加权滤波器,该滤波器可以根据人类听觉的掩蔽
效应抑制一部分噪声。
对于每个子帧(120个样本),听觉加权后的语音信号输入到基音估计模块计算得
到一个开环基音周期,以此构造一个谐波噪声定形滤波器对语音数据进行滤波。结合
LPC 分析滤波器、听觉共振峰加权滤波器和谐波噪声滤波器形成一个组合滤波器,并
计算该滤波器的脉冲响应和零输入响应。用上述的开环基音周期值和组合滤波器的脉
冲响应,通过五阶基音搜索,然后将基音预测的贡献从目标信号中减去,得到相应子
帧的残差信号,最后对该残差信号进行矢量量化,如果要求输出是 6.3kbps,则采用
多脉冲最大似然量化(MP-MLQ),5.3kbps 则采用算术码本激励线性预测(ACELP)
量化,两种量化方法中固定码本激励信号的空间分布和脉冲搜索方法有所不同。
每个子帧的最后一个处理模块是缓存更新,在进入下一个子帧的编码之前需要一
些缓存数据,如合成滤波器、共振峰听觉加权滤波器和谐波噪声定形滤波器等。最后
是输出编码后数据,两种码率的位流格式有所不同,区别在于脉冲位置和幅度的编码,
实际上在加入了静音压缩功能后,G.723.1 编码器的输出码流可以有四种格式:
6.3kbps 的编码帧、5.3kbps 的编码帧、SID帧和静音帧。
3.1.4 G.723.1解码器
解码器操作也是逐帧完成的。首先从接收码流中提取 LSP 码本索引值,经过 LSP
解码、内插得到每一子帧的 LSP 参数,转换为 LPC 参数,构成 LPC 合成滤波器。然
后从接收码流中提取每一子帧的基音周期、基音增益码本索引和激励脉冲信息,分别
经过基音解码和激励解码得到激励信号 e[n],对激励信号 e[n]进行基音后滤波得到
ppf[n],再经过合成滤波器滤波获得重建语音,重建语音经过共振峰后滤波器和增益
调整单元即得到解码器的最后输出。 本科毕业设计说明书(论文) 第 13页 共 42页
图3-2 G.723.1语音解码器流程图
3.2 G.723.1算法C 代码的分析
本节内容的根据是:ITU-T G.723.1 的描述文档和 ITU-T Annex A,依据的代
码是G.723.1的定点程序。
3.2.1 主模块CODER.C 和Unti_LBC.C
(1)编码算法主模块
源文件为 coder.c,功能函数为coder()。在 coder()里负责调用其他模块的子 TMS320C5509的铁路通信语音实时系统设计(8):http://www.youerw.com/tongxin/lunwen_4033.html