深入剖析iLBC的丢包补偿技术(PLC)
转自:http://blog.csdn.net/wanggp_2007/article/details/5136609
丢包补偿技术(Packet Loss Concealment——PLC)是iLBC Codec中非常重要的一项技术,更是VOIP Codec应用中不可缺少的组成部分。iLBC的PLC只是在解码端进行封包补偿处理。在解码端根据收到的bitstream逐帧进行解码的过程中,iLBC decoder首先拿到每帧的 bitstream 要判断当前帧是否完整,如果没有问题则按照正常的iLBC 解码流程重建语音信号,见《深入剖析iLBC 解码器原理》;如果发生了语音封包丢失,那么就进入PLC单元进行处理。PLC主要根据前一帧的解码信息,利用基音同步重复的方法近似替代当前的丢失帧,以达到丢包补偿。
一、PLC unit 的几种情形

1、过去帧、当前帧都接收正确
进入正常的iLBC decoder解码流程,需要保存当前帧的状态信息,这些状态信息包括LPC信息、解码后的残差信号等。如果下一帧的比特率丢失的话,就要用到这些保存的信息。
2、仅当帧发生丢包
如果当前帧没有丢失,那么进入PLC unit重建LPC系数和残差信号。后面会详细介绍LPC和残差信号的补偿方法。
3、连续多帧发生丢包
如果发生连续多帧丢包,那么就需要多次进入PLC unit,并且需要利用经过补偿的帧状态信息。值得注意的是,越靠后面丢失的帧越难以精确的重建,所以对连续丢包的增益采用逐帧递减,以避免引入更大的信号失真。
4、过去帧经过PLC处理,需要与当前帧平滑处理
为了使经过PLC补偿的帧与接下来没有丢包的帧保持语音连续而需要进行平滑,主要根据前后帧的相关性处理。
二、PLC重建LPC系数
iLBC 的PLC对于丢失LPC的补偿是采用了过去帧的最后一个子帧的LPC系数来简单的重建。这个方法是显然的,因为无论从空间上还是时间上最后一个子帧都与当前丢失的LPC具有最大相关性。但是这种简单的复制当处理连续多帧时也显然会引入更大的失真。
三、PLC重建残差信号
激励信号(残差信号)通常可以分为两部分组成:准周期成分和类噪声成分。因此PLC实际上首先需要重建这两个部分,准周期成分可以根据测量前一帧的基音周期来近似得到,类噪声成分则可以通过产生随机噪声得到,二者的能量比例也可以借鉴前一帧的比例关系。所以首先要对前一帧进行基音检测,然后以基音同步的方式重建丢失帧的话音部分,然后利用相关性得到类噪声的增益,最后进行混合以重建整个残差信号。
在连续丢帧的情况下,为了减少各个补偿帧之间的相关性,会将能量进行逐帧递减,但依然会产生一定的听觉噪声。如果采用内插的方法,虽然可能音质会好些,但是却会引入更大的延时。
四、iLBC PLC的缺点
在连续丢帧的情况下,PLC所补偿的各个语音帧具有相同的频谱特性(相同的LPC造成)和基音频率,非常容易引入一种可察觉的噪声,尤其是当基音频率较高的时候,这种因为过分的周期性所引起的。通过适当的内插可以缓解这一问题,但往往引入更大的延时。
参考资料:
1、IETF:RFC3951.txt
2、潘搏胜《iLBC解码程序进阶处理之研究》
深入剖析iLBC的丢包补偿技术(PLC)的更多相关文章
- IP视频通信中的"丢包恢复技术”(LPR)
转自:http://blog.csdn.net/blade2001/article/details/9094709 在IP视频通话中,即使是在丢包率很小的情况下也会对使用效果造成较为明显的影响.正是由 ...
- IP通信中音频编解码技术与抗丢包技术概要
此文较长,建议收藏起来看. 一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一 ...
- 无线路由器wds桥接技术+丢包率
半根毛线http://www.cnblogs.com/hsd-/ 今天下午鼓捣了一下无线路由的wds桥接 算是计算机网络的作业 码来分享一下 1.首先设置主路由 我的主路由是斐讯4线 路由ip为192 ...
- MTU-TCP/IP协议栈-linux kernel-TCP丢包重传-UDP高性能-AI-
http://view.inews.qq.com/a/20161025A0766200窄带时代的QQQQ是窄带时代极具代表性的产品,在那个网络传输效率比较低的年代,大家还记得Google的首页吗?Go ...
- Android IOS WebRTC 音视频开发总结(五五)-- 音视频通讯中的抗丢包与带宽自适应原理
本文主要分析webrtc中的抗丢包与带宽自适应原理,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 文章内容主要来自中国电信北京研究院丁博士在 ...
- ping 丢包或不通时链路测试说明【转】
转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...
- MTU-TCP/IP协议栈-linux kernel-TCP丢包重传-UDP高性能-AI- ip数据报 tcp数据报
1.IP协议首部 TCP报文段的首部 UDP分组结构 ip数据报 tcp数据报 UDP校验 w 报文长度该字段指定UDP报头和数据总共占用的长度.可能的最小长度是8字节,因为UDP报头已经占用了 ...
- Android之网络丢包事件
原文链接 http://www.litrin.net/2013/03/01/android%E4%B9%8B%E7%BD%91%E7%BB%9C%E4%B8%A2%E5%8C%85%E4%BA%8B% ...
- 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...
随机推荐
- Xcode 6 正式版如何创建一个Empty Application
Xcode 6 正式版里面没有Empty Application这个模板,这对于习惯了纯代码编写UI界面的程序员来说很不习惯. 有网友给出了一个解决方法是,把Xcode 6 beta版里面的模板复制过 ...
- 【Networking】k8s容器网络 && golang相关
Bookmarks flannel/proxy.c at master · coreos/flannel kubernetes/kubernetes: Production-Grade Contain ...
- 深入理解学习Git工作流
http://blog.csdn.net/hongchangfirst/article/list/3 //可以看看 http://blog.csdn.net/hongchangfirst/articl ...
- Minimum Adjustment Cost
Given an integer array, adjust each integers so that the difference of every adjacent integers are n ...
- wxPython中文教程入门实例
这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下 wxPython中文教程入门实例 wx.Window 是一个基类 ...
- memcpy vs memmove
[本文连接] http://www.cnblogs.com/hellogiser/p/memcpy_vs_memmove.html [分析] memcpy与memmove的目的都是将N个字节的源内存地 ...
- HDU 2602 Bone Collector WA谁来帮忙找找错
Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...
- 【leetcode】Valid Sudoku (easy)
题目:就是判断已有的数字是否冲突无效,若无效返回flase 有效返回true 不要求sudo可解 用了char型的数字,并且空格用‘.'来表示的. 思路:只要分别判断横向 竖向 3*3小块中的数字是否 ...
- 【python】判断字符串日期是否有效
来源: http://www.jb51.net/article/66014.htm http://www.runoob.com/python/att-time-strptime.html 用time模 ...
- python2.7之MySQLdb模块 for linux安装
1.下载:MySQL-pythonhttp://sourceforge.net/projects/mysql-python/files/mysql-python-test/1.2.3b1/MySQL- ...