https://segmentfault.com/a/1190000006847876

1)ITU Gxxx时代:G711,G722,G723.1,G729ab等等

2)AMRNB/WB,Speex,ILBC/ISAC,SILK时代

3)Opus/EVS时代

 

1、VOIP通信中Codec选择的几个时代。

1)ITU Gxxx时代:G711,G722,G723.1,G729ab等等

G711主要用在移动通信基站和基站之间的包交换网络中,并且在有些提供VOIP服务的监控摄像头上使用。64kbps,8khz压缩。

G722系列包括G722,G722.1,G722.2。是针对WB,16khz和SWB 32khz的压缩算法。比较著名的是G722.1 也就是Polycom的Siren Codec,他的特点语音编解码为数不多的频域编码框架,不仅对语音支持比较好,对音乐支持也还可以。在Polycom的VOIP设备中通常支持该编解码器。

G722.2就是AMR-WB+,是32khz语音编解码器,同时支持音乐编码,是AMR-WB的超宽带版本,但是由于他前向兼容AMR系列的框架,内核选择了CELP编解内核,对音乐编码有先天的问题

2)AMRNB/WB,Speex,ILBC/ISAC,SILK时代

AMR系列:作为8kbps~12kbps的语音编解码器,在一段时间内,质量是不错的,毕竟他是WCDMA和TDCDMA标准选择的语音编解码器。也通过3GPP标准开源。在有一段时间Yy语音和QTalk,微信语音留言都使用了AMR编解码器。但是他的问题是,有专利费,固定比特率。抗丢包性能一般。

  • Speex:Speex是由Jean Marc Valin(也是CELT的主要发明人)开发的编解码器,特点是免专利费,开源。支持宽带超宽带。缺点是这个编解码器可能是为了避开专利,并且受限于很多因素,编码质量并不好。无论是窄带宽带超宽带,对抗丢包,质量都很一般。但是这也是站在今天的角度看当时的技术,并且在当时能够提供免专利费的全频带,低速率(16kbps左右)语音编解码器确实没有,可以说,Speex填补了空白。并且Speex有一个显著特点是,Speex实际上不是一个编解码器,是一个音频处理集。包括AGC,AEC,ANS。可以完整的应用在一个VOIP通信系统中,并且他的AEC的自适应滤波部分做的相当不错,在PC上可以拿来使用。

  • ILBC和ISAC:ILBC编解码器是GIPS(WebRTC前身)第一个开源出来的编解码器。8khz,13.3kbps。窄带编解码器。他的特点是,抗丢包性好。信源编码的基础是去冗余,信道编码的基础是加冗余。去冗余的弊端就是抗丢包差,所以ILBC反其道行之,减少帧间冗余的压缩,增加每个帧独立性,使得当发生丢包的时候,丢包对抗效果好。ILBC在部分呼叫中心公司有广泛应用。ISAC是在GIPS被收购之后伴随WebRTC开源的编解码器,他的特点是支持16khz,24khz,32khz。支持带宽估计(这是很多语音编解码器不具备的)。并且他不是基于CELP框架,使用了频域编码框架+格型编码+算数编码的框架。具有一定特殊性。ISAC继承了ILBC的抗丢包优点,但是缺点也相当突出,由于用了频域编码器,高频语音编码效果不好,听起来有金属音,PESQ-WB MOS分低。

  • SILK:SILK面世时代比较晚,是以上编解码器中最晚开发一个编解码器。他的发明人是Ken Vos,也是ILBC,ISAC的主要开发者。Ken VOS在离开GIPS之后去了高通,为高通开发了一个宽带编解码器。然后到Skype为Skype开发SILK。Skpye有一段时间也是使用GIPS的方案,用ILBC和ISAC。后面自己开发Codec,他们第一个自己的Codec是VSOPC(好像,这里缺一个wiki的链接)。但是质量很差,用户抱怨。故请来了Vos开发SILK。Vos又在Skpye尝试新框架,Vos的SILK使用了预测加噪声整形的混合框架(第一使用类似框架的是Broadcom的BV16,BV32编解码器)。使用STP+LTP+STNS+LTNS两层后反馈嵌套(BV16和BV32是一个前馈+一个后馈,这里差图和wiki链接)。并且引入Delay Decision量化搜索方法,使得标量量化具有矢量量化的性能指标。可以说SILK的质量是非常好的一个编解码器。(这里差一个表),无论主观还是客观。虽然他充分挖掘相关性,但由于做到极致和非常完美,使得在丢包对抗上有一定帮助。并且他开发了RED辅助编码算法,提高他的抗丢包能力。

我个人,是非常推荐初级和中级算法工程师仔细阅读SILK编解码器,代码质量好(EE工程师中少见),并且用了很多基础算法,很多小技巧,甚至包括自动控制理论。对提升自己的能力很有帮助。

3)Opus/EVS时代

Opus在2012年横空出世,按照官网的说法,opus比HEAAC好,并给了一些demo。但事实真的是这样吗,Opus是由SILK+CELT混合的编码器,学术上的叫法叫做USAC,Unify Speech and Audio Coding。这点,EVS也是。意思是不区分音乐语音的编解码器。这个编解码器内有个一Music detector去判断当前帧是语音还是音乐,语音选择语言框架编码,音乐选择音乐框架编码(注意目前还没有统一框架,原因是框架一般是人体生理模拟,因为人有两个声学器官,嘴和耳朵,所以语音是针对声带,口腔,鼻腔见面,音乐是根据人耳朵结构的时间掩蔽,频域掩蔽,双耳暗示效益编码)。所以,Opus适合电台这种音乐语音混合编码器。但是由于Opus的音乐编码CELT的质量并不突出,所以Opus在双声道低速率(24kbps~32kbps左右)效果并不突出。在网站上的demo缺少钢琴,爵士,摇滚的demo。更多是流行音乐和民谣。高频分量相对弱些。但如果使用Opus有以下要注意事情,音频码率高些,不要限制编码器的模式。另外高通宣称有OPUS专利,来自大神Ken VOS。
EVS 主要是VoiceAge公司,Dolby公司,Fraunhofer,华为(北京苗磊兄弟,羡慕你们)联合开发的USAC编码器(这里面也有故事,和技术无关,我就不八卦了),低速率音乐编码器质量很好,源自dolby和Fraunhofer的HEAACv2技术。但是问题是,目前没有高效的嵌入式系统可用的编码器,不支持双声道,专利费不便宜哦。主要计划用在未来的VoLTE中(华为又要收苹果钱了哦)。