FEC之我见二

前面简单说了一下FEC,以及它的配合使用的方法。下面我想详细说一下FEC算法

曾经有位大神在帖子里这么写着:采用改进型的vandermonde矩阵RS算法.其优点算法运算复杂度更低且解决了利用矩阵构造RS码当矩阵奇异时,构造的纠错码不为RS码的问题。

  • FEC的方案:在RTP或私有协议头上扩展出包组头(Group head),一个Group有k个媒体包和r个冗余包组成,他们在Group内拥有不同的组号,通过组号的连续性可以判断本组内数据包的丢失情况,从而选择性的予以恢复(冗余包丢失无需恢复)、因为UDP协议保障了包内数据的正确性,所以我们无需考虑包内纠错的情况。Group是一个完整的独立的FEC处理单元,不同Group之间无相关性。由于冗余性的存在,一个Group中任意k个数据包可以用来重建k个原始媒体包,如果丢失数据包数小于等于r,接受者收到一个Group中任意的k个数据包后,即可以通过组号信息确定丢失包的相对位置并进行FEC解码,以恢复k个原始媒体包。这里我们定义冗余包数r与原始媒体包数k的比值为FEC编码冗余度r/k,冗余度越高,抗丢包能力越强,同时传输效率也越低。

下面借鉴大神的FEC编解码算法进行简述:

1)数据包分割

对数据包FEc编码运算首先进行的是包内分割,将数据包分割为多个定长单元,定长单元成为自,设字长为w bits,w的取值一般为8/16/32。FEc编码对k个原始媒体包朱子进行处理,生成m个冗余数据包与之对应的字。

例如:现有两个原始数据包D1、D2,包的长度都为b bytes(对于包长不足b bytes的使用0补齐)-- b B,字长为w  bits -- w 位,那么一个数据包的总字长为1 = 8b/w。用这两个冗余包C1、C2的过程简述如下:

图中F代表FEC编码运算

2)Vandermonde编解码以及改进

设k个原始媒体包D=(D1,D2,...,Dk),,r个冗余数据包C=(C1,C2,...,Cr),那么传输组Group表示为Y=(Y1,Y2,...,Yn),其中Yi=Di(0<=i<=k-1),Y

j=Cj(k<=j<=n-1)。B为 n x k 维 FEC生成矩阵,有单位矩阵I和矩阵G组成,则一个Group可表示为如下所示:

通过这种方式构造的RS码是系统码,信息组以不变的形式在码组的任意k位(通常在最前面: D1,D2,...,Dk)。如果以数据包为对象,那么传输组的前k个包就是k个被保护的数据包。在接收端,如果接收者收到了Group中的任意k个数据包,即可根据所收到的数据包在Group中的位置信息,从FEC生成矩阵B中提取对应的行,组成一个新的 kxk 维矩阵B‘,显然

如果B’ 为非奇异矩阵,那么就可以通过如下逆变换得到原始数据报,完成恢复。

设计RS码的关键在于怎样设计生成矩阵B,也就是其系数矩阵G。本方案使用Vandermonde矩阵来构建系数矩阵G。常规定义Vandermonde矩阵V,r x k 维,如下所示:

系数矩阵G=V,该矩阵元素的运算都是在有限域GF(2^8)中进行的。Gij(i=0,1,...,r-1; j=0,1,...,k-1)为系数矩阵的元素,Ci(i=1,2,。。。,r)表示第i个冗余包,Dj(j=1,2,。。。,k)表示第j个原始媒体包,根据下式:

上式运算时以包分割后的数据为运算单位的,模运算使用查表方式实现。例如发端使用k=6,r=2的荣誉模式,那么对应的系数矩阵为:

根据上面系数矩阵,可以计算得到冗余包为:

生成冗余包C1C2,发送端就可以一次发送原始媒体包和冗余包。如果发送的途中原始媒体包D3,D4丢失,那么接收端就可以根据收到的包恢复丢失的原始媒体包,具体过程如下:

  • 由于接收到的原始媒体包再次产生冗余包:

  • 将其与接收到的冗余包作比较,就能得到丢失的原始媒体包的表达式:

  • 要求出D3、D4,可利用高斯消除法求出系数矩阵 的逆 矩阵,前提是该矩阵是非奇异的。

传统的Vandermonde矩阵构造RS码是,需要非奇异矩阵,由于Vandermonde矩阵元素取值与有限域,且元素的运算遵循有限域的运算规则,就会存在一定概率出现矩阵奇异,用该矩阵构造的纠错码就不是RS码,不能从任意k个包中恢复出原始媒体包。为此长沙这位大婶对该传统Vandermonde矩阵进行改进,解决了矩阵概率奇异的问题,具体实现见代码。

3)私有协议/RTP与FEC的结合,下文继续讲解

时间: 2024-10-03 13:38:46

FEC之我见二的相关文章

FEC之我见四

接上文,来详细的说明一下FEC前向纠错的具体实现: FEC_matrix是一个比较常用的算法,Vandermonde,范德蒙矩阵是法国数学家范德蒙提出的一种各列为几何级数的矩阵. 范德蒙矩阵的定义: V = 其第i 行.第j 列可以表示为(αi)^(j-1). 范德蒙矩阵的性质:范德蒙矩阵行数为m,列数为n,矩阵具有最大的秩min(m, n). 范德蒙矩阵的应用:范德蒙矩阵应用之一就是在纠错编码中,常用的纠错码Reed-solomon 编码中冗余块的编码采用的即为范德蒙矩阵. 1)码流层面上的F

FEC之我见三

继续上文讲解: 3) 标准的RTP头结构如下所示: 其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头.RTP扩展投中承载如下信息: 1).当前包所在的Group组序号,码流由连续的Group组成,每个Group拥有自己的唯一序号.(仅仅是小范围的唯一,序号大于255时,计数清零) 2).当前包所在的Group组大小 3).当前包在Group内的位置 RTP头中的7bit的PT字段标示负载的类型,对于标准类型如音频AAC.视频H264其参

FEC之我见一

顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是 纠错神髓:收到的媒体包+冗余包 >= 原始媒体包数据 直到满足 收到的媒体包+ 冗余包 >= 原始媒体包数据       则进入恢复模式,恢复出2 4,然后一次输出2 3 4 5 所谓的Qos,也可以理解为抖动缓冲,解决udp包乱序.包重复的问题 NAT保活,保持udp连接,简言之: 当你向一个公网服务器发送数据时,服务器可以翻转IP和端口向你发数据, 但如果你长时间不发数据给服务器,服务器若想用之前的IP和端

如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计硬件积木的!

一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子: 存在便有意义,特别对于已经投入大量资本运作起来的商业模式所诞生的产品.我们研究同类产品,能在一定程度上反推用户需求.而我做东西之前总喜欢调查下别人有没有做过,重造轮子只在迫不得已时!下面是我找到的一些国内外比较成熟的电子积木产品,大家感受下~ 第一个电子积木:[变相拼接电路图] 针对人群:小孩,very小孩 特点:简单的电路电子积木,通过连线拼接实现简单的电路功能 第二

从程序员到项目经理(二)

被任命为项目经理,是职业生涯的第一次飞跃,既惊喜又紧张.从现在开始,你要思考怎样才能胜任项目管理的工作,否则等着你的,很可能是一场悲剧. 一.升职之辨 1. 为什么是我 不是每个人都能当项目经理,程序员中只有一小部分能成为项目经理,大部分人会随着岁月的流逝,成为了“资深程序员”. 那为什么领导要选择我呢?一般人对自己所拥有的东西都会很快习以为常,认为这是自己应得的.一点也没错,这就是你应得的,原因也很简单,那是因为你比别人优秀一点. 其实领导挑选人才的标准很简单,那就是你比别人优秀,而且只需一点

一个二本学生的秋招经历和总结

先介绍一下自身情况,2011级二A院校本科生一枚,学校在二A院校中算中偏下的水平,非ACM,个人能力在班级算顶尖,但是和其他985,211大学比就只是中等水平.个人专业非计算机专业,读的是电子信息工程,如果你也学数电模电,学数字信号处理,数字图像处理,单片机,电磁波,嵌入式等等课程,那么恭喜你,我们学得差不多,只是专业名字不太一样而已. 为什么我选了这门专业? 报考的时候我就在想,我感兴趣的是什么,这里感谢我的父母并没有强迫指定让我读哪一门专业.但是身边读大学的人屈指可数,也没有借鉴到什么经验,

《上古天真论》第十二讲文字版

上古天真论篇第十二讲 主讲:徐文兵  主持:梁  冬 播出时间:2009-02-28  23:00—24:00 经文:黄帝曰:余闻上古有真人者,提挈天地,把握阴阳,呼吸精气,独立守神,肌肉若一,故能寿敝天地,无有终时,此其道生.中古之时,有至人者,淳德全道,和于阴阳,调于四时,去世离俗,积精全神,游行天地之间,视听八达之外,此盖益其寿命而强者也,亦归于真人. 梁冬:是的,重新发现中医太美.大家好,欢迎收听今天的<国学堂>之梁冬和徐文兵老师的请教.徐老师您好! 徐文兵:梁冬好!听众朋友们大家好!

老曹眼中的研发管理二三事

这是在gitchat上的第一次分享,中生代联手gitchat在做研发管理的专题活动,作为先锋,抛砖引玉. 关于管理,必然会谈到业界先贤德鲁克先生对管理的定义. 管理就是界定企业的使命,并激励和组织人力资源去实现这个使命.界定使命是企业家的任务,而激励与组织人力资源是领导力的范畴,二者的结合就是管理. 这是对企业管理的阐述,管理是一种实践,其本质不在于'知'而在于'行':其验证不在于逻辑,而在于成果:其唯一权威就是成就. 而我们多数人不是企业家,更多是基层的管理者,面对的一个或几个小型的组织.尤其

【转】谁说Vim不是IDE?(二)

谁说Vim不是IDE?(二) 环境配置 “如果你认为Vim只是一个文本编辑器,你就输了”——来自Vim老鸟 Vim以简洁的方式提供了丰富的配置功能,主要配置体系由一个文件和文件夹组成.在一台安装了Vim的OS X/Linux/Unix机器上,进入用户主目录,可以找到.vimrc文件和.vim文件夹,这就是Vim所有的配置信息. (1).vimrc介绍 用户目录下的.vimrc文件就是Vim针对当前用户的主配置文件,该文件不是必备的,没有的话就创建它.文件位于当前用户的主目录下,可以用~/.vim