音频丢包隐藏技术

        PLC 全称是 Packets Loss Cancellation,即丢包隐藏技术,是通话处理中必不可少的一项技术。通过修改音频编解码器,在编解码器中对于音频帧状态进行记录,记录当前帧及其前后帧的状态,当遇到丢包导致的丢帧时,通过 PLC 将丢失的数据包重建出来,减少重传。     

        在音频数据传输时,当出现网络信号不好,导致音频数据丢包,可以采用丢包隐藏技术进行自身模拟数据恢复,从而提高音频通话质量;

        当我们某些项目对接时,必须采用G711,G729,G723.1等音频编码时,那丢包隐藏技术就可以派上大用了,注意:丢包隐藏技术只能对解码后的原始音频pcm数据进行处理;

一、算法基本思想: 

        比如上次收到的音频包的序号为3,而本次收到的音频包的序号为6,则需要用plc模拟恢复出来两个包4和5,从经验值上来看,最多可以模拟恢复出来3个包,丢太多时效果就不好了,只能按丢包处理或采用其他手段进行恢复。

丢包隐藏处理技术分类:

      1 zero Insertion:用0替换丢失的帧

      2 Waveform substitution :用已接受的一段数据来重复构建丢失的数据,最简单的方式就是重复最后接受的帧,其他还有根据基本频率、时间间隙等波形技术,由于它易于实现,ITU在G711中实现了一个这种算法的例子

     PLC只是在解码端进行封包补偿处理,在解码端根据收到的bitstream逐帧进行解码的过程中,decoder首先拿到每帧的 bitstream 要判断当前帧是否完整,如果没有问题则按照正常的 解码流程重建语音信号;如果发生了语音封包丢失,那么就进入PLC单元进行处理。PLC主要根据前一帧的解码信息,利用基音同步重复的方法近似替代当前的丢失帧,以达到丢包补偿。 

1、过去帧、当前帧都接收正确

      进入正常的iLBC decoder解码流程,需要保存当前帧的状态信息,这些状态信息包括LPC信息、解码后的残差信号等。如果下一帧的比特率丢失的话,就要用到这些保存的信息。

2、仅当帧发生丢包

      如果当前帧没有丢失,那么进入PLC unit重建LPC系数和残差信号。后面会详细介绍LPC和残差信号的补偿方法。

3、连续多帧发生丢包

     如果发生连续多帧丢包,那么就需要多次进入PLC unit,并且需要利用经过补偿的帧状态信息。值得注意的是,越靠后面丢失的帧越难以精确的重建,所以对连续丢包的增益采用逐帧递减,以避免引入更大的信号失真。

4、 过去帧经过PLC处理,需要与当前帧平滑处理

     为了使经过PLC补偿的帧与接下来没有丢包的帧保持语音连续而需要进行平滑,主要根据前后帧的相关性处理。.

PLC的缺点

      在连续丢帧的情况下,PLC所补偿的各个语音帧具有相同的频谱特性(相同的LPC造成)和基音频率,非常容易引入一种可察觉的噪声,尤其是当基音频率较高的时候,这种因为过分的周期性所引起的。通过适当的内插可以缓解这一问题,但往往引入更大的延时。

自研项目:

        我自研了一个丢包隐藏算法,亲测效果还是非常不错的,windows平台和linux平台的我都已经编译好了,其他平台如有需要也可以支持,如果需要沟通交流可以跟我联系。

联系方式:

vx:unique_no_1  tel:18108010758

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音视频工具站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值