本文主要是介绍语音编解码器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为使VoIP能够可靠的进行语音通信,必须保证在一定话音质量的前提下尽可能地降低编码速率,这主要是依赖语音编码技术。在目前VoIP中常用的语音编码算法主要有以下几类:基于波形编码的算法;基于CELP模型的混合编码算法;以及GIPS公司自己提出的4种语音编码算法。
2.1.1 采用波形编码的编码器
波形编解码器基本上不考虑信号是如何产生的,而直接将输入的模拟信号抽样编码,然后将量化后的样值传送到终端,在终端原始信号被重组到与原信号大致接近的程度。因此波形编码方式是能够忠实地表现波形的编码方式。由于这类编码器通常将语音信号作为一般的波形信号来处理,所以它具有适应能力强、话音质量好、抗噪抗误码的能力强等特点。它最大的缺点是同其他的编解码器相比,它要使用大量的带宽,当波形编解码器用于低带宽时,话音质量下降得非常快。
脉冲编码调制(PCM)、自适应增量调制(ADM或∆M编码)、自适应差分编码(ADPCM)、自适应预测编码(APC)、自适应子带编码(ASBC)、自适应变换编码(ATC)等都属于波形编码。
2.1.1.1 G.711协议[4]
G.711是在电路交换电话网中普遍使用的一种波形编解码算法。G.711以8kHz作为抽样频率,如果使用统一量化方式,话音中通用的信号层次的每一个样本就要12比特来表示,这就产生了96kb/s的比特速率,如果使用不统一的量化方式,表示一个样本只需要8比特。G.711通常被称为脉冲编码调制(PCM)。G.711提供了良好的语音质量,其MOS值都在4.3左右。
2.1.1.2 G.726协议[4]
G.726协议采用的是ADPCM语音编码算法,提供了64kb/sPCM码流至低速率ADPCM码流的转换。协议给出40kb/s,32kb/s,24kb/s和16kb/s四种比特率。其中,40kb/s信道主要用于在数字电路倍增设备(DCME)上传送数据调制解调器信号,特别用于4.8kb/s以上速率的调制解调器;24kb/s和16kb/s信道主要用作DEME语音传送的过载信道。G.726设计的主要用途仍然是传统的电路交换网,但是其低比特率方案也可用于VoIP。
2.1.2 采用CELP模型编码的编码器
由于波形编码速率过高,占用较多的带宽资源,1985年提出了码激励线性预测(CELP)。它在保留参数模型技术精华的基础上,应用波形编码准则优化激励信号,使其与输入语音波形匹配,同时还利用了矢量量化和感知加权技术,从而在较低的数码率上获得了较高的合成语音质量。基于CELP的语音编解码算法已经成为目前主流语音编码算法。较成功的语音编码方案都是基于CELP技术的,如G.723、G.728、G.729等[5]。
2.1.2.1 G.723协议
G.723协议是一个双速率语音编码协议,其两种速率分别是5.3kb/s和6.3kb/s,较高比特率的输出基于ML-MLQ技术,提供某种程度上较高质量的音质;较低速率的输出基于CELP为系统设计人员提供了更大的灵活性。G.723.1协议的编解码算法中两种速率的编解码基本原理是一样的,只是激励信号的量化方法有差别。对高速率(6.3kb/s)编码器,其激励信号采用多脉冲最大似然量化(MP-MLQ)法进行量化,对低速率(5.3kb/s)编码器,其激励信号采用代数码激码线性预测(ACELP)法量化。
2.1.2.2 G.728协议
G.728协议采用的编码算法是LD-CELP,即低时延的码激励线性预测的算法。LD-CELP采用后向自适应预测器(Backward Adaptive Predictor)对短时谱和增益进行预测。LD-CELP编码器发送的只是激励矢量在码本中的地址标号,而解码端的滤波器参数和增益参数都是在解码端计算得来的。在大多数编码系统中,这类参数都是在编码端求,然后传输到解码端。
2.1.2.3 G.729协议
G.729协议是一个能在8kb/s速率上实现高质量语音编码的协议,它采用的是CS-ACELP即共轭结构算术码激励线性预测的算法。对输入的模拟语音信号用8KHz采样,16bit线性PCM量化。CS-ACELP以CELP编码模型为基础,它把语音分成帧,每帧10ms,也就是80个采样点。对于每一帧语音,编码器从中分析出CELP模型参数,其中包括线性预测系数,自适应码本和随机码本的索引值和增益,然后把这些参数编码并传送到解码端,在解码端,把收到的比特流恢复成参数编码,解码后得到各个参数,解码器利用这些参数构成激励源和合成滤波器,计算出合成语音,并用后置滤波器进一步增强音质,从而重现原始语音。
G.729A是对G.729语音编码标准的简化,具有比G.729更低的复杂度,在DSP上实现时占用较少的资源。它的编解码算法结构和G.729的编解码算法结构一样,其比特流与G.729的比特流可以相互操作。
2.1.1 GIPS公司提出编码协议
2.1.1.1 iLBC协议[6]
iLBC(internet Low Bit Codec)是GIPS(Global IP Sound)于2000年开发并被IETF标准化的的语音编解码器。iLBC是一种非常适合在IP网络上进行语音通信的编解码,主要为窄带语音通信而设计,但在实际的应用中它已突破了窄带的限制。iLBC有2种基本数据帧格式。一种是20ms的帧格式,语音数据经过编码之后的速率为15.2Kbps;另一种是30ms的帧格式,编码后的语音速率为13.3Kbit/s。由于编码独立于块,iLBC实际减小了由于丢包带来的知觉降低的传播。在高丢包率的IP包交换网络环境下,iLBC可获得非常清晰的语音效果。在窄带应用环境中,iLBC几乎没有语音延迟,断续或杂音,通话效果完全可以和传统电话媲美。由于iLBC算法具有较强的抗丢包率,因此该编解码器可以降低VoIP系统语音质量差的瓶颈,在实时通信系统如电话系统,视频会议,语音流和及时消息中有可观的应用前景。
2.1.1.2 EG.711
EG.711是GIPS公司基于标准G.711编码/解码器的改进型产品,具有极好的抗包丢失强健性。这种改进型编码/解码器,使严重超载的网络也能保持良好音质。
2.1.1.3 iPCM-wb
iPCM-wb是优质、低复杂度宽带编码/解码器,对于语音包丢失具有极好的恢复性,使通话质量明显优于PSTN。在端-端IP通信中使用时,iPCM-wb编码/解码器能够确保高端电话应用具有卓越的音质。
2.1.1.4 iSAC
iSAC是为在高速率和低速率下传送宽带语音质量的一种自适应的语音编码器,它能自动在低速率传输的情况下,在比特率和语音质量之间寻找最佳平衡。具有超强的抗丢包强健性。
2.1.1 VoIP语音编码器的比较
语音压缩编码研究的基本问题就是在一定的编码速率下,如何用较低的复杂度和较小的时延获得尽量好的重建语音,因此重建语音质量、编码速率、算法复杂度、算法延迟是衡量编解码器性能的四个主要因素。表2-1是上述VoIP常用语音编码器的指标的对比[1],[4],[5],[6] 。
纵观集中编解码器,iLBC有很多技术优势,主要表现在:
(1) 占用带宽少
在20ms帧时,iLBC所占总的带宽为27.73Kbit/s,而G.729A为29.6Kbit/s,G.723.1为19.7Kbit/s,GSM为34.8Kbit/s。
(2) 语音质量高
在20ms帧时,iLBC的MOS(平均主观得分)为3.981,而G.729为3.92,G.723.1为3.9,GSM为3.782。
(3) 支持多帧
支持20ms和30ms帧,对于不同的应用或VoIP设备更为灵活。
(4) 低时延和丢包处理特性
iLBC的主要优势在于对丢包的处理能力。在正常情况下,iLBC会记录下当前数据的相关参数和激励信号,以便在之后的数据丢失情况下进行处理;在当前数据接收正常而之前数据包丢失的情况下,iLBC会对当前解码出的语音和之前模拟生成的语音进行平滑处理,以消除不连贯的感觉;在当前数据包丢失的情况下,iLBC会对之前记录下来的激励信号进行相关处理并与随机信号进行混合,以得到模拟的激励信号,从而得到替代丢失语音的模拟语音。总的来说,和标准的低位速率编解码相比,iLBC使用更多自然,清晰的元素,能够精确模仿出原始语音信号。
在实际选择语音压缩标准时,要综合考虑带宽、时延、算法复杂度等几大因素。本课题中选择的编解码器为G.729A,它采用了共轭结构代数码激励线性预测技术,是编码速率和合成语音质量综合效率最优的压缩算法之一,被广泛的用在VoIP中,其在OPNET中有现成的实现模块。
表2-1 VoIP语音编码器的指标的对比
编码算法 | 编码类型 | 比特率 (kb/s) | MOS | 复杂性(MIPSonTIC54) | 时延/ms |
G.711 | PCM | 64 | 4.1 | 1.05 | 0.75 |
G.723.1 | ACELP | 6.3 | 3.9 | 43.7 | 30 |
MP-MLQ | 6.3 | 3.8 | 30 | ||
G.726 | ADPCM | 40/32/24/16 | 3.85 | 10.8 | 1 |
G.728 | LD-CELP | 16 | 3.61 | 97 | 3~5 |
G.729 | CSA-CELP | 8 | 3.92 | 10.88(G.729AB) | 10 |
iLBC(20ms) | 参数编码 | 27.73 | 3.981 | 35倍G.711 | 20 |
EG.711(10,20,30,40ms) | 改进型 PCM | <=G.711 | =G.711 | 4.8 | =帧长 |
iSAC(30~60ms) |
| 10~32 | =g.722.2 | 76倍G.711 | =帧长+3ms |
iPCM-wb(10,20,30,40ms) |
| 平均80 | >g.722.1 | 8.6MIPS | =帧长 |
这篇关于语音编解码器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!