0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

语音通信用哪些方法来提高语音质量

Dbwd_Imgtec 来源:未知 作者:李倩 2018-03-21 11:41 次阅读

语音通信是实时通信,影响语音质量的因素很多,大致可把这些因素分成两大类:一类是回声噪声等周围环境因素导致语音质量差;另一类是丢包延时等网络环境因素导致语音质量差。这两类因素由于成因不一样,解决方法也不一样。下面就讲讲用哪些方法来提高语音质量。

首先看由于周围环境因素导致语音质量差的解决方法。这类方法主要是用信号处理算法来提高音质,不同的因素有不同的处理算法,用回声消除算法把回声消除掉,用噪声抑制算法把噪声抑制住,用自动增益控制算法把音量调整到一个期望的值。这些都是信号处理领域比较专业的算法,好在现在webRTC已经开源,也包括这些算法(AEC/ANS/AGC)。我们只要把这些算法用好就有非常不错的效果。这些算法的调试中AEC相对复杂一些,我在前面的文章中(音频处理之回声消除及调试经验)专门写过怎么调试,有兴趣的可以去看一看。ANS/AGC相对简单,先在Linux下做一个小应用程序验证算法的效果,有可能要调一下参数,找一个相对效果较好的值。验证算法的过程也是熟悉算法怎么使用的过程,对后面把算法应用到方案中是有好处的。

再来看由于网络环境因素导致语音质量差的解决方法。网络环境因素主要包括延时、乱序、丢包、抖动等,又有多种方法来提高音质,主要有抖动缓冲区(Jitter Buffer)、丢包补偿(PLC)、前向纠错(FEC)、重传等,下面分别一一介绍。

1、Jitter Buffer

Jitter Buffer主要针对乱序、抖动因素,主要功能是把乱序的包排好序,同时把包缓存一些时间(几十毫秒)来消除语音包间的抖动使播放的更平滑。我在前面的文章(音频传输之Jitter Buffer设计与实现)中专门写过Jitter Buffer 的设计和实现,有兴趣的可以去看一看。

2、FEC

FEC主要针对丢包这种因素。FEC属于信道编码,想了解原理的朋友可以找相关文章看,这里就不讲了。再说我讲也讲不好,我掌握信源编码(语音编码就是信源编码的一种),对信道编码只是了解。语音上利用FEC来做补偿主要是在发端对发出的RTP包(几个为一组,称为原始包)FEC编码生成冗余包发给收端,收端收到冗余包后结合FEC解码得到原始的RTP包从而把丢掉的RTP包补上。至于生成几个冗余包,这取决于收方反馈过来的丢包率。例如原始包5个为一组,丢包率为30%,经过FEC编码后需要生成两个冗余包,把这7个包都发给对方。对方收到原始包和冗余包的个数和只要达到5个就可以通过FEC完美复原出5个原始包,这5个原始包中丢掉的就通过这种方式补偿出来了。原始RTP包有包头和payload,冗余包中还要加上一个FEC头(在RTP头和payload中间),FEC头结构如下:

其中Group first Sequence number是指这一组原始包中第一个的sequence number,original count是指一组原始包的个数,redundant count是指生成的冗余包的个数,Redundant index是指第几个冗余包。冗余包有自己的payload type 和sequence number,要在SIP的SDP中告诉对方冗余包的payload type是多少,对方收到这个payload type的包后就做冗余包处理。

FEC不依赖与语音包内的payload,对于丢失的包能精确的复原出来。但是它也有缺点,一是它要累积到指定数量的包才能精确的复原,这就增加了时延;二是它要产生冗余包发送给对方,增加了流量。

3、PLC

PLC也主要针对丢包因素。它本质上是一种信号处理方法,利用前面收到的一个或者几个包来近似的产生出当前丢的包。产生补偿包的技术有很多种,比如基音波形复制(G711 Appendix A PLC用的就是这种技术)、波形相似叠加技术(WSOLA)、基音同步叠加(PSOLA)技术等,这些都很专业,有兴趣可以找相关的文章看看。对codec而言,如果支持PLC功能,如G729,就不需要再在外部加PLC功能了,只需要对codec做相应的配置,让它的PLC功能使能。如果不支持PLC功能,如G711,就需要在外部实现PLC。

PLC对小的丢包率(< 15%)有比较好的效果,大的丢包率效果就不好了,尤其是连续丢包,第一个丢的包补偿效果还不错,越到后面丢的包效果越差。

把Jitter Buffer、FEC、PLC结合起来就可以得到如下的接收侧针对网络环境因素的提高音质方案:

从网络收到的RTP包如是原始包不仅要PUT进JB,还要PUT进FEC。如是冗余包则只PUT进FEC,在FEC中如果一组包中原始包的个数加上冗余包的个数达到指定值就开始做FEC解码得到丢失的原始包,并把那些丢失的原始包PUT进JB。在需要的时候把语音帧从JB中GET出解码并有可能做PLC。

4、重传

重传也主要针对丢包这种因素,把丢掉的包再重新传给对方,一般都是采用按需重传的方法。我在用重传的方法时是这样做的:接收方把收到的包排好序后放在buffer里,如果收到RTP包头中的sequence number能被5整除(即模5),就统计一下这个包前面未被播放的包有哪些没收到(即buffer里相应位置为空), 采用比特位的方式记录下来(当前能被5整除的包的前一个包用比特位0表示,丢包置1,不丢包置0,比特位共16位(short型),所以做多可以看到前16个包是否有丢包),然后组成一个控制包(控制包的payload有两方面信息:当前能被5整除的包的sequence number(short型)以及上面组成的16位的比特位)发给对方,让对方重发这些包。接收方收到这个控制包后就能解析出哪些包丢了,然后重传这些包。在控制包的payload里面也可以把每个丢了的包的sequence number发给对方,这里用比特位主要是减小payload大小,省流量。

在实际使用中重传起的效果不大,主要是因为经常重传包来的太迟,已经错过了播放窗口而只能主动丢弃了。它是这些方法中效果最差的一个。

5、RFC2198

RFC2198是RTP Payload for Redundant Audio Data(用于冗余音频数据的RTP负载格式),用了它后在当前RTP包中不仅可以承载当前语音的payload,还可以承载前几个包的payload,承载以前包的个数越多,在高丢包率的情况下效果越好,但是延时也就越大,同时消耗的流量也就越多。相比于FEC,它消耗的流量更多,因为FEC用一组RTP包编码生一个或多个成冗余包,而它一个RTP包就带一个或多个以前包的payload。在有线网络或者WIFI下可以用,在蜂窝网络下建议慎用。

以上就是我用过的提高音质的方法。还有其他方法,我没实践过,就不写了,写出来也是纸上谈兵。欢迎大家补充其他的方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语音通信
    +关注

    关注

    0

    文章

    50

    浏览量

    18724
  • FEC
    FEC
    +关注

    关注

    0

    文章

    40

    浏览量

    13688

原文标题:语音通信中提高音质的几个方法

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCM1681-Q1语音质量很差是什么原因导致的?

    我用1681播放语音语音质量很差,音源没有问题。我BCLK,SCLK都给的4.092MFCLK给的16K. 采用TDM格式8SLOT。寄存器我就配置了 09配置为07 就是TDM格式。你们能告诉我 音质不好的原因吗? 另外
    发表于 10-10 08:17

    基于网络性能的VoIP语音质量评价模型

    :由于路径延迟,抖动,丢包率的动态变化)会使VoIP应用的语音质量无法得到保证.为了提高传输质量和可靠性,有人提出基于路径多样性[1]的全文下载
    发表于 04-24 09:26

    可否使用labview和声卡的结合测试电话机的语音质量

    可否使用labview和声卡的结合测试电话机的语音质量。固定的发几个频率上的一段波形,然后用声卡接收波形,计算信噪比!不知道这样是否可行?求解!有用做过音频信号分析的大哥能不能讲一下你的测试方案是什么样的。
    发表于 02-23 16:02

    音质标准和评价方法

    除了频率范围外,人们往往还用其它方法和指标进一步描述不同用途的音质标准。 ●音质标准所谓声音的质量,是指经传输、处理后音频信号的保真度。目
    发表于 06-25 07:28

    安捷伦语音质量测量仪

    是德语音质量测试仪(VQT)技术概述
    发表于 07-03 10:07

    如何实现低码率语音编码MELP声码器?

    语音编码技术在当今数字通信尤其在无线系统中发挥着越来越重要的作用。利用语音编码技术可有效降低信息存储量、提高信道利用率。混合激励线性预测(MELP)
    发表于 08-19 07:34

    怎么实现基于无线传感器网络/ZigBee协议多跳语音通信结点的设计?

    为了适应ZigBee协议在无线传感器网络中语音通信的需求,在短距离上实现低成本、低功耗的无线语音通讯,设计了一种基于无线射频芯片的多媒体语音节点板的多跳
    发表于 05-25 06:03

    如何去提高语音引擎设计的质量和性能?

    如何去提高语音引擎设计的质量和性能?
    发表于 05-31 06:35

    资料下载:VoIP技术(4)--VoIP语音质量保证

    VoIP语音质量保证
    发表于 07-02 06:14

    基于E-Model的VoIP语音质量研究

    针对目前网络电话语音质量难以准确评价及预测的情况,基于E-Model 对VoIP 的语音质量进行预测。分析几个主要影响因素,如延时、丢包等对话音质量的影响,构建VoIP 语音质量预测
    发表于 03-23 08:48 17次下载

    Lumia手机间语音通话爆严重音质问题

    HD Voice, 中文也叫高清语音,是下一代电信语音质量标准,他代表着数字化更清晰的语音质量
    发表于 04-01 09:41 925次阅读

    水声语音通信体验质量的实时测量方法

    水声语音通信体验质量的实时测量方法_袁飞
    发表于 01-07 16:24 1次下载

    客观语音质量评估算法

    算法是最有用和最便捷的方法。在这篇论文里,我们将要讨论评估通信系统和网路中的语音质量的最新的ITU标准PESQ(语音质量的感知评估)和POLQA(感知客观
    发表于 12-27 14:14 2次下载

    罗德与施瓦茨的ATC语音质量保证系统增强安全性、可靠性和效率

      罗德与施瓦茨通过使用无线信号强度信息(RSSI)监测工具增强ATC语音质量保证系统(R&S AVQA),将ATC网络中的语音质量提高到一个新的水平。
    的头像 发表于 09-22 17:12 1965次阅读

    如何提升语音芯片的音质

    前文我们说过从硬性指标上来讲,采样率的提升不失为提高语音芯片音质的一个好办法,也有童鞋提出可以用量化位数来提升语音芯片音质;那么,小编就和大
    的头像 发表于 11-17 09:34 647次阅读
    如何提升<b class='flag-5'>语音</b>芯片的<b class='flag-5'>音质</b>?