FEC相关知识「建议收藏」

FEC相关知识「建议收藏」1概念和原理前向纠错前向纠错也叫前向纠错码(ForwardErrorCorrection,简称FEC),是增加数据通讯可信度的方法。在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输。FEC是利用数据进行传输冗余信息的方法,当传输中出现错误,将允许接收器再建数据。常用的前向纠错码(1)电视传输专用的前向纠错码电视节目广播前向纠错采用2/3码率格形码、卷积交织

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

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

1概念和原理

前向纠错

前向纠错也叫前向纠错码(Forward Error Correction,简称FEC),是增加数据通讯可信度的方法。在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输。FEC 是利用数据进行传输冗余信息的方法,当传输中出现错误,将允许接收器再建数据。

常用的前向纠错码

(1)电视传输专用的前向纠错码

电视节目广播前向纠错采用2/3码率格形码、卷积交织码RS码构成的级联码。RS(209187)分组码是截短的RS(255233)分组码,可以纠正11B的传输误码。为了减少突发脉冲干扰所造成的连续误码的影响,DMB-T传输系统在内码和外码之间插入了卷积交织编码(B=19M=22),总时延相当于36RS(209187)分组码。

(2)多媒体传输的前向纠错码

多媒体综合数据业务服务的前向纠错采用的是多层分组乘积码(Multi-levelBlockProductCode)。它是由分组乘积码BPC(37622992)构成的一种系统码,是二维分组乘积码BPC(40963249)的删余截短,其解码器可以采用高性能Turbo算法。

 

影响FEC性能三个主要因素

FEC的使用可以有效提高系统的性能,根据香农定理可以得到噪声信道无误码传输的极限性能(香农限)。FEC方案的性能主要由编码开销、判决方式、码字方案这三个主要因素决定。

1)编码开销:校验位长度(n-k)与信息位长度k的比值,称为编码开销。开销越大,FEC方案的理论极限性能越高,但增加并不是线性的,开销越大,开销增加带来的性能提高越小。开销的选择,需要根据具体系统设计的需求来确定。

2)判决方式:FEC的译码方式分为硬判决译码和软判决译码两种。硬判决FEC译码器输入为01电平,由于其复杂度低,理论成熟,已经广泛应用于多种场景。软判决FEC译码器输入为多级量化电平。在相同码率下,软判决较硬判决有更高的增益,但译码复杂度会成倍增加。微电子技术发展到今天,100G吞吐量的软判决译码已经可以实现。随着传送技术的发展,100G时代快速到来,软判决FEC的研究与应用正日趋成熟,并将在基于相干接收的高速光通信中得到广泛应用。

3)码字方案:当确定开销和判决方式后,设计优异码字方案,使性能更接近香农极限,是FEC的主要研究课题。目前,软判决LDPC码,由于其良好的纠错性能,且非常适合高并行度实现,逐步成为高速光通信领域主流FEC的方案

 

第三代FEC是高性能传输的关键

FEC在光纤通信中的应用研究起步较晚,从1988Grover最早将FEC用于光纤通信开始,光纤通信中的FEC应用可分为三代。

第一代FEC:采用经典的硬判决码字,例如汉明码、BCH码、RS码等。最典型的代表码字为RS255239),开销6.69%,当输入BER1.4E-4时输出BER1E-13,净编码增益为5.8dBRS255239)已被推荐为大范围长距离通信系统的ITU-T G.709 标准,可以很好匹配STM16帧格式,获得了广泛应用。1996RS255239)被成功用于跨太平洋、大西洋长达7000km的远洋通信系统中,数据速率达到5Gbit/s

第二代FEC:在经典硬判决码字的基础上,采用级联的方式,并引入了交织、迭代、卷积的技术方法,大大提高了FEC方案的增益性能,可以支撑10G甚至40G系统的传输需求,许多方案性能均达到8dB以上。ITU-T G .975.1中推荐的FEC方案可以作为第二代FEC的代表。

现有10G系统多采用第二代硬判决FEC,采用更大开销的硬判决FEC可以支撑现有系统的平滑升级。例如,10G海缆传输系统目前采用ITU-T G .975.1推荐的开销为6.69%的硬判决FEC方案,若采用20%开销的高性能硬判决FEC,较现有方案可提高1.5dB左右的编码增益,极大改善系统的性能。

第三代FEC:相干接收技术在光通信中的应用使软判决FEC的应用成为可能。采用更大开销(20%或以上)的软判决FEC方案,如Turbo 码、LDPC 码和TPC码,可以获得大于10dB的编码增益,有效支撑40G100G400G的长距离传输需求。

 

2开源库选取

目前找到了两种方案:

1、使用openfec    http://openfec.org/accueil.html

    但是该开源库代码量比较大,用起来也有点费事;编译通过cmake进行编译成一动态库(or静态库),windowcygwin内置cmake,可以顺利的编译(查看其readme),但是移植到android等其它ARM平台时比较麻烦;

2、使用更加小巧的feclib http://feclib.sourceforge.net/

    该算法也是开源的,但是代码量比较小,只需在工程中添加其相关的几个代码文件即可;

不过该算法不能纠正数据包内部的错误,直接通过冗余包找到丢失的数据包;如果需要纠正数据包内部的错误,其官网推荐了另外一个算法RSCODE http://rscode.sourceforge.net/

目前我们选择用的是第二个开源库FECLIB

 

 

 

3FECLIB接口介绍

FEC编码相关接口

fecEncoder *NewFecEncoder (void *userData,

  size_t (*userSend)(void *buf,size_t size, size_t count, void *userData),

  char **errorMessage,

  int s, int n, int k, int w, intg, int b)

函数说明:

函数功能:创建一个FEC编码容器

返回值:返回一个创建的FEC编码容器指针,后续的FEC编码需要用到此指针

参数说明:

userData 表示用户自定义的数据

userSend 数据在FEC编码后用于发送的回调函数

errorMessage 函数失败后的失败信息

s 表示每个数据包的大小

n 表示要发送的一组数据包的个数

k 表示每组数据包中要发送冗余包的个数

w 表示带型矩阵带宽的宽度

g 表示伽罗瓦域的大小

b 表示FEC编码器每秒应该限制输出的比特数

 

void FecEncode (fecPayload *buf, fecEncoder *f)

函数说明:

函数功能:把数据进行FEC编码

返回值:无

参数说明:

buf 表示需要FEC编码的数据

f 表示FEC编码容器的指针

FEC解码相关接口

fecDecoder *NewFecDecoder (void *userData, void (*userReceive)(

  void *userData, __int64_tposition, fecPayload *buf, int len))

函数说明:

函数功能:创建一个FEC容器

返回值:返回一个创建的FEC容器指针,后续的FEC编码需要用到此指针

参数说明:

userData表示用户自定义的数据

userReceive数据在FEC解码后处理的回调函数

 

size_t FecDecode (void *buf, size_t size, size_t count, fecDecoder *f)

函数说明:

函数功能:把数据进行FEC编码

返回值:无

参数说明:

buf 表示需要进行FEC解码的数据

size 表示每次进行FEC解码的长度

count 表示FEC解码的次数   size*count必须为buf的大小

f 表示FEC编码容器的指针

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

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

(0)
上一篇 2022年8月11日 下午3:36
下一篇 2022年8月11日 下午3:46


相关推荐

  • 正态分布方差推导_均匀分布的期望和方差公式

    正态分布方差推导_均匀分布的期望和方差公式概论:一维随机变量期望与方差二维随机变量期望与方差协方差1.一维随机变量期望与方差:公式:离散型:E(X)=∑i=1->nXiPiY=g(x)E(Y)=∑i=1->ng(x)Pi连续型:E(X)=∫-∞->+∞xf(x)dxY=g(x)E(Y)=∫-∞->+∞g(x)f(x)dx方差:D(x)=E(x²)-E²(x)标准差:根号下的方差常用分布的数学期望和方差:0~1分布…

    2026年1月14日
    8
  • 私有IP地址的范围是多少?

    私有IP地址的范围是多少?公用地址由 InterNIC 负责分配 主要面向注册并向 InterNIC 提出申请的组织机构 主要有 A B C D E 五类地址 1 A 类 地址范围是 1 0 0 0 到 127 255 255 255 主要分配给大量主机而局域网网络数量较少的大型网络 2 B 类 地址范围是 128 0 0 0 到 191 255 255 255 一般用于国际性大公司和政府机构 3 C 类 地址范围是 192 0 0 0

    2026年3月17日
    2
  • Pytest(15)pytest分布式执行用例[通俗易懂]

    Pytest(15)pytest分布式执行用例[通俗易懂]前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月29日
    12
  • python微信推送{u‘errcode‘: 40008, u‘errmsg‘: u‘invalid message type rid: 6111061f-19703d5b[通俗易懂]

    python微信推送{u‘errcode‘: 40008, u‘errmsg‘: u‘invalid message type rid: 6111061f-19703d5b[通俗易懂]记录一下前两天自己搞的一个蠢事,当时是要做一个微信信息推送,我先是按照微信的接口文档和网上的一些例子把代码写好了,测试的时候一直报这个40008,看微信接口文档又是说消息类型不对,大概就是说你给的data跟你定义的模板格式不对但是我都对了好几次,发现没问题,后面检查了一下接口的链接,发现跟接口文档里的不一样,应该是在复制别人的时候复制错了,换成文档里的链接后就正常了。所以,以后遇到这种{u’errcode’:40008,u’errmsg’:u’invalidmessagetyperid:

    2022年6月10日
    69
  • DeepSeek全攻略:从零到一的完整教程合集

    DeepSeek全攻略:从零到一的完整教程合集

    2026年3月15日
    3
  • 常用的TSO命令

    常用的TSO命令常用的 TSO 命令原帖地址 http bluemainfram com comments php DiscussionID 73TSO 命令由 TSO 用户在 TSO 环境下发出 如在主菜单下选择 P 6 可进入 TSO 命令处理工具 用于启动 停止软件系统 检查 设置系统软硬件设备的运行情况 运行系统作业等等 由于受篇幅所限 本附录只能列出主要的 TSO 命令和常用的使用方法 详细情况可参考 S 39

    2026年3月17日
    2

发表回复

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

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