RS(255,223)纠错算法原理与项目源码

##1.背景

  • 数据在网络传输、存储过程中由于信道噪声条件,硬件设备等问题数据产生了差错,这时候应该如何处理呢?特别是现在企业对海量大数据的传输,存储的重视,要求我们使用一定的技术处理这些数据差错。
    ##2.纠错编解码原理简单介绍

  • 为什么纠错码具有发现错误!纠正错误的能力呢?纠错码又是按什么样的原理去编的呢?为了说明这些问题,我们首先介绍一些基本概念:由0和1组成的串称为字(Word),一些字的集合称为码(Code)。码中的字称为码字(Code Word)。不在码中的字称为废码(Invalid Code)。码中的每个二进制信号0或1称为码元(Code Letter)。

  • 我们下面举出几个关于纠错码的例子。设有长度为2的字,它们一共可有2x2=4个,力。因为当52中的一个字如10,在传递过程中其第一个码元1变为0,因而整个字成为00时,由于00也是52中的字,故我们不能发现传递中是否出错。但是,当我们选取52的一个子集如C2={00},作为编码时就会发生另一种完全不同的情况。因为此时01和10均为废码,而当H在传递过程中第一个码元由1变为0,即整个字成为01时,由于01是废码,因而我们发现传递过程中出现了错误。对00也有同样的情况。但是,这种编码有一个缺点,即它只能发现错误而不能纠正错误,因此我们还需要选择另一种能纠错的编码"现在我们考虑长度为3的字,它们一共可有2!3=8个,它们所组成的字集凡不仅能整个码字只会变为101!011或000,但是都可知其原码为001。对于码字110也有类似的情况"故对编码q,我们不仅能发现错误而且能纠正错误"当然,上述编码还有一个缺点,就是它只能发现并纠正单个错误。当错误超过两个码元时,它就既不能发现错误,更无法纠正了。
    ##3.Reed-Solomon 码(RS 码)原理

  • Reed-Solomon 码(RS 码)是 Reed和 Solomon于 1960 年发现的一类多元最大距离可分(MDS)码,其最小距离达到了 Singleton 限mind = n − k+ 1,从这个意义上讲,RS 码是最佳的。之后几十年里,RS 码的硬判决译码得到了深入的研究,其理论和技术都已经非常成熟。因而,RS码在现代数字通信、数据存储系统中得到了广泛的应用。
    ##4.Reed – Solomon编码抽象代数基础

  • 4.1定义 设G是一个非空集合,称映射为G上的一个二元运算,即对于G中仍以两个元a和b,唯一确定 (a,b).记为,为了方便起见,可写成c=ab.
    定义 设G是一个非空集合,是G上的一个二元运算,如果G满足下列条件:
    a)(结合律)对于任意,有
    b)(单位元)G中存在单位元,对于任意,满足
    c)(逆元)对于任意,存在的逆元,满足
    则称G为群,记为.
    如果群满足交换律,即对于任意,满足
    则称群 为交换群或阿贝尔群.

  • 4.2 环和域
    定义 设R是一个非空集合,R上有两个二元运算和,分别成为加法和乘法,如果R满足下列条件
    a)为加法阿贝尔群
    b)(结合律)对于任意,有
    c)(分配律)对于任意,有
    称R为环,记为,如果他对乘法满足交换律,即对任何
    称环为交换环
    定义 设为交换环,表示R中所有非零元的集合,如果在乘法运算下构成交换群,则称为域。

  • 4.3 有限域
    定义 设F为一个域,如果F只含有有限个元素,称F为有限域,含有q个元素的有限域记为,有限域也成为伽罗华域(Galois field),用GF(q)或表示q阶有限域。
    最简单的有限域是二元域GF(2)={0,1}。
    定义 对于GF(q)上的每个非零元素,存在最小整数k,使成立,则称为k阶元素。
    定义 对于GF(q)上的每个非零元素,如果其阶数是q-1,则称为本原元素。
    定义上的一个m次多项式,如果他的所有根都是中的本原元素,则称是m次本原多项式。
    例如,对于m = 8时上的m次本原多项式为
    对于m = 7时上的m次本原多项式为
    定义 设为中的元素,多项式是上使的最低次多项式,则称为最小多项式。具有相同最小多项式的元素,构成同一共轭系。

  • 4.4 欧几里得算法
    欧几里得算法给定两个正整数a,b,可以用欧几里得除法得到其最大公约数(a,b),并求得A,B,满足(a,b)=Aa+Bb。
    用欧几里得除法求(a,b)的步骤如下:
    第一步:不失一般性,假设a>b,且令
    第二步:用除以得到其商数和余数,亦即
    第三步:如果,停止运算,并记;否则,转第二步。
    欧几里得算法又被称为辗转相除法,这里是单调下降序列。
    用欧几里得算法可以求得A、B,沿用上述除法得到的和n,其方法如下:
    第一步:令
    第二步:计算
    第三步:如果,停止运算,此时,否则转第二步
    事实上,只是其中的一个特例。
    ##5.RS(255,223)编解码算法

  • 5.1字节交织器

  • 5.2 RS(255,223,32)生成方式


    ##Github项目源码

  • GitHub链接: https://github.com/RobinLiew/Reed-Solomon-error-correction

  • 使用例子

    public class RSErrorCorrectionImpl implements IRSErrorCorrection {private RSEncoder encoder=new RSEncoder();private RSDecoder decoder=new RSDecoder();public static Boolean isCanBeRecovered=true;private byte[] temp=new byte[233];private ByteBuffer buffer=new ByteBuffer() ;private byte[] enTemp=new byte[255];public byte[] rs_encode(byte[] data) {return encoder.encode(data);
    }public int rs_decode(byte[] recover, byte[] rsData) {byte[] result = null;result=decoder.decode(rsData);if(!isCanBeRecovered){return 1;}System.arraycopy(result, 0, recover, 0, result.length);return 0;
    }public static void main(String[] args){byte[] src=new byte[223];for(int i=0;i<223;i++){src[i]=(byte) new Random().nextInt(255);}byte[] srcdouble=new byte[446];for(int i=0;i<2;i++){System.arraycopy(src, 0, srcdouble, i*223, 223);}IRSErrorCorrection error = new RSErrorCorrectionImpl();byte[] en_data=error.rs_encode(srcdouble);//Deliberately mistaken the values of several data(故意弄错几个数据的值)en_data[0]=0;en_data[1]=4;en_data[3]=0;//byte[] recover = new byte[src.length];byte[] recover = new byte[srcdouble.length];int flag = error.rs_decode(recover,en_data);System.out.println("completion of the test!!!");
    }
    

扫码关注公众号

  • 后台回复“算法学习资料”免费获取更多算法学习教材及实战资料

RS(255,223)纠错算法原理与项目源码相关推荐

  1. GAT 算法原理介绍与源码分析

    GAT 算法原理介绍与源码分析 文章目录 GAT 算法原理介绍与源码分析 零. 前言 (与正文无关, 请忽略) 广而告之 一. 文章信息 二. 核心观点 三. 核心观点解读 四. 源码分析 4.1 G ...

  2. 【老生谈算法】基于matlab的运动目标识别与跟踪系统设计与算法原理及程序源码——目标识别算法

    基于matlab的运动目标识别与跟踪系统设计与算法原理 大家好,今天给大家介绍基于matlab的运动目标的监测与跟踪系统设计与原理. 视频图像分析主要是对运动图像序列进行分析处理,它通常涉及到运动检测 ...

  3. 社区发现算法原理与louvain源码解析

    前言 社区发现(community detection),或者社区切分,是一类图聚类算法,它主要作用是将图数据划分为不同的社区,社区内的节点都是连接紧密或者相似的,而社区与社区之间的节点连接则是稀疏的 ...

  4. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...

    功能概述 Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中. Excel的多个Sheet对应页面的多个Tab选项卡. 转换算法的难点在于,如何处理行列合并,将E ...

  5. 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...

  6. java仿酷狗音乐源码_【附项目源码】仿酷狗音乐客户端,浅淡动感歌词补充

    原标题:[附项目源码]仿酷狗音乐客户端,浅淡动感歌词补充 1.前言 之前写了几篇关于动感歌词的简单介绍,相信大家还有印象,这里就不多说了,这篇要说的是,关于翻译歌词和音译歌词,以及我在解析和显示这两种 ...

  7. 微信小程序校园社团管理系统项目源码来了~

    团队承接各类小程序定制,需要加微 code_gg_boy .小商城,购物,公司的一些管理,流程批准,视频播放次数授权. 云服务开发或java后端,都可以承接. 今天我们看下一个社团管理的小程序,麻雀虽 ...

  8. 计算机毕业设计题目参考以及如何选题附项目源码

    [选题一时爽 开题全迷茫 设计靠空想 答辩泪两行] 本文将对计算机毕业设计选题进行一些分析,并提供一些题目参考,相关的项目源码到评论区见.地址:ttdaima.com 对于大多数的同学(尤其是大学期间 ...

  9. Atitit. 查找linux 项目源码位置

    Atitit. 查找linux 项目源码位置 1. netstat   -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...

最新文章

  1. python中init和setup有什么区别_python – 为什么setup.py在安装期间运行模块__init__.py?...
  2. hdu-2553 N皇后问题(深搜 + 状态压缩)
  3. 从零写一个编译器(十三):代码生成之遍历AST
  4. C++基础学习(01)--(介绍,环境配置,基本语法,注释)
  5. ACL2020 | FastBERT:放飞BERT的推理速度
  6. mongodb python 存文件_Python保存MongoDB上的文件到本地的方法介绍
  7. java实验1机动车实验目的_《Java程序设计》实验指导书.doc
  8. 李开复:2018中国最大AI红利?是政策
  9. 11种刷新按钮的方法
  10. Collection的另外一个子类LinkedListSet集合
  11. Ubuntu安装Robo3T(Studio3T Free)
  12. 汽车电子(一)--- 整车CAN网络介绍
  13. 服务器名称指示(SNI)是什么东东?
  14. The YARN Timeline Service v.2
  15. 离散数学复习--Modular Arithmetic
  16. oracle安装后,电脑变得很卡,解决办法(安装的是oracle11g)
  17. mac 不显示 外接屏幕_教大家Mac外接显示器设置教程
  18. 考研时间安排和考研内容
  19. 史上最全互联网运维工作规划!
  20. 从特斯拉召回事件,窥探OTA汽车进化真面目

热门文章

  1. 【能效管理】变电所运维云平台在上海某医院的设计分析
  2. 《火星人敏捷开发手册2012-08-15》版发布:用户故事分类及示例
  3. Hadoop命令大全
  4. oracle一个表空间超出32g,Oracle表空间超出32G的解决方法
  5. AR vs VR:哪种技术更有潜力改变未来?
  6. 安卓adb shell模式下创建文件夹出现Permission denied时的解决办法
  7. 《炬丰科技-半导体工艺》清洗含有介电膜的半导体晶片的方法
  8. 我们的Web3创业项目,黄了
  9. HP VA7110 硬盘故障重建失败处理
  10. unity2d小游戏