FEC详解二_第二十三卦详解

FEC详解二_第二十三卦详解前面简单说了一下FEC,以及它的配合使用的方法。下面我想详细说一下FEC算法:曾经有位大神在帖子里这么写着:采用改进型的vandermonde矩阵RS算法.其优点算法运算复杂度更低且解决了利用矩阵构造RS码当矩阵奇异时,构造的纠错码不为RS码的问题。FEC的方案:在RTP或私有协议头上扩展出包组头(Grouphead),一个Group有k个媒体包和r个冗余包组成,他们在Group

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前面简单说了一下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的过程简述如下:

FEC详解二_第二十三卦详解FEC详解二_第二十三卦详解

图中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可表示为如下所示:

FEC详解二_第二十三卦详解 FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

FEC详解二_第二十三卦详解


系数矩阵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个原始媒体包,根据下式:

FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

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

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

FEC详解二_第二十三卦详解

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

FEC详解二_第二十三卦详解

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

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

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169608.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sshd_config 中 PermitRootLogin 的探讨

    sshd_config 中 PermitRootLogin 的探讨众所周知,sshd_config是sshd的配置文件,其中PermitRootLogin可以限定root用户通过ssh的登录方式,如禁止登陆、禁止密码登录、仅允许密钥登陆和开放登陆,本文对其中比较罕见的forced-commands-only选项做了介绍及实战。

    2022年6月12日
    22
  • 初中英语语法(003)-be动词和一般动词的一般过去式

    初中英语语法(003)-be动词和一般动词的一般过去式be.动词和一般动词的过去式1、什么是过去式:当一个状态是当前的状态,或者一个动作发生在现在,那么就是现在时,动词要用现在式。当一个动作发生在过去,或者一个状态是过去的状态,现在已经没有了,那么就是过去时,动词要用过去式。因此,过去式用于过去的时间的状态和发生的事件。2、be.动词的过去式:be.动词的变化规则:am/is=&amp;gt;was,are=&amp;gt;were当时间副词改变的…

    2022年4月19日
    43
  • springboot整合mybatis配置_springboot 跨域

    springboot整合mybatis配置_springboot 跨域springboot整合dubbo+zookeeper项目结构:注意:在做此demo之前应该先自行搭建好zookeeper环境也可以搭建dubbo监控环境1.随便创建一个项目,之后添加一个maven项目用于存放接口packagecom.wzb.service;/***@authorSatsuki*@time2019/8/2717:51*@descripti…

    2022年4月19日
    49
  • 背包问题九讲[转载][通俗易懂]

    背包问题九讲[转载][通俗易懂]背包问题九讲P01:01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转

    2022年7月12日
    27
  • 如何用猪脸识别降低死猪理赔成本?这支学生团队靠「进击的巨猪」打败了商业老兵

    如何用猪脸识别降低死猪理赔成本?这支学生团队靠「进击的巨猪」打败了商业老兵撰文|王艺编辑|藤子12月17日,历时40天的2017京东金融全球数据探索者大赛落下帷幕。本次大赛分为商业组和算法组两个组别,分别从商业及算法两个层面围绕「登录行为识别」、「店铺销量预测」、「信贷需求预测」以及「猪脸识别」四个赛题展开角逐。大赛于11月6日启动,共有4624支团队报名,经过选拔赛,最终有36支团队步入

    2022年6月21日
    27
  • 软件著作权 源码_python申请软件著作权

    软件著作权 源码_python申请软件著作权申请软件著作权时需要清除代码中的注释,可以通过word和Notepad++组合操作来快速的完成1。使用word的插入文件功能合并多个源代码文件,操作方法为:新打开1个word文件,在“插入”标签栏下找到“对象”点击右边的小三角下拉菜单里选择“文件中的文字…”,然后在跳出来的文件选择对话框里选择要合并的文件,如果对话框里没有显示出需要的文件,可能是文件类型过滤器选择的不对,更改为“所有文件…

    2022年9月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号