RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

编码过程首先在多个点上对这些多项式求冗余,然后将其传输或者存储。对多项式的这种超出必要值的采样使得多项式超定(过限定)。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。
        RS(Reed-Solomon)码是一类纠错能力很强的特殊的非二进制BCH码。对于任选正整数S可构造一个相应的码长为n=qS-1的 q进制BCH码,而q作为某个素数的幂。当S=1,q>2时所建立的码长n=q-1的q进制BCH码,称它为RS码。当q=2m(m>1),其码元符号取自于F(2m)的二进制RS码可用来纠正突发差错,它是最常用的RS码。

第一步:理解伽罗华域(有限域)
         伽罗瓦域本质上是一个受限的集合,以及一些数学运算,使得运算的结果仍然在这个集合中。对于二维码标准来说,要使用位为模数2的算子,字节为模数100011101(本原多项式x**8+x**4+x**3+x**2+1)的算子。这意味着使用GF(2**8),有时写成GF(256)。GF(256)中的数字都在0到255(含)的范围内。请注意,这也是可以用一个八位比特表示的范围(最大的八位比特是1111_1111,等于255)。

第二步:理解伽罗华域内的运算
        如前所述,GF(256)包含0到255(含)的数字。GF(256)中的数学运算具有循环性,也就是说,如果在GF(256)中进行数学运算,得到的数字大于255,那么就需要使用求模运算来得到一个仍然在伽罗瓦域中的数字。

在伽罗瓦域中,负数与正数具有相同的值,所以-n=n.换句话说,在伽罗瓦场算术中,始终要使用数字的绝对值。这就是说,伽罗瓦域内的加法和减法是一回事。伽罗瓦域内的加减法是按正常的方法做加减法,但又要进行模数运算。而由于我们使用的是模2运算(在QR码规范中提到过),这和执行XOR运算是一样的。

第三步:用模100011101生成2的幂次
       GF(256)中的所有数字都可以用2的幂来表示,具体来说,GF(256)中的所有数字都可以用2**n来表示,其中0 <= n <= 255。然而,如前所述,GF(256)中的所有数字本身必须在0到255的范围内,所以2**8对于伽罗瓦场来说似乎太大了,因为它等于256。

第四步:理解生成多项式
        我们在生成纠错码字方面已经取得了很大的进展,但我们还没有达到目的。下一步是了解生成多项式。如前所述,纠错编码使用多项式长除法。要做到这一点,需要两个多项式。第一个要使用的多项式叫做消息多项式。消息多项式使用数据编码步骤中的数据码字作为其系数。例如,如果数据码字转换为整数,是25,218和35,消息多项式将是25x**2+218x+35。在实践中,标准QR码的实际信息多项式要长得多,但这只是一个例子。信息多项式将被生成多项式所除。生成多项式是一个多项式,它通过把下面这些项乘起来得到其中n是必须生成的纠错码字数(见纠错表)。如上一节所述,α等于2。
第五步:生成纠错码
假设原始信息为00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100 00010001 11101100 00010001

转换成十进制

32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236, 17, 236, 17

对应的信息多项式为

假设我们的纠错码能够纠10个错误,使用如下生成多项式

现在是时候将信息多项式除以生成多项式了。除法步骤考虑到了伽罗瓦域的运算。

找出适当的项来乘以生成多项式,乘法的结果应该与消息多项式(在第一个乘法步骤中)或余数(在随后的所有乘法步骤中)的第一项相同。
把结果与信息多项式(在第一个乘法步骤中)或余数(在随后的所有乘法步骤中)异或。
执行这些步骤n次,其中n是数据码字的数量。
注意这些步骤与普通多项式长除法的步骤之间的不同。在乘法步骤之后,我们不做减法,而是执行XOR(在GF(256)中,这是同样的事情)。

在实际的数字通信传输信道上,信号发生错误是不可避免的。可以采用信道编码来尽可能地降低误码率。在信道编码中除了需要传送的信息之外,还加入了一些冗余信息,以便在收端检测出错误。

对于检出错误的处理方式常用的有三种:检错重发(ARQ)、前向纠错(FEC)、混合纠错(HEC)。对于前向纠错是不需要反馈信道的,在信道编码中含有纠错信息,实时性较强。RS编码在前向纠错中的使用比较常见。
       RS码是Reed Solomon码的简称,是属于循环码BCH码的一种,对于突发错误,RS码具有很好的纠错能力。 一个RS码,输入信号分成n*m比特一组,每组包括个n符号,每个符号由m个比特构成。对于一个可以纠正m个符号错误的RS码,其参数如表1所示。

使用IP Core设计RS编码器
       对于RS码的编码器,可以用带反馈的移位寄存器来实现,不过实现起来比较复杂。Altera为RS码提供了IP Core——RS Compiler来简化RS编码/译码器的设计。RS Compiler除了可在Quartus II中使用外,还可与DSP Builder配合使用(见图)。

双击该模块,出现RS Compiler对话框,如图5-10所示。选择“Encode”编码器,然后点击“Next”按钮,进行RS编码器的参数设置(见图5-11)。设置完成后就可以在Simulink中,如其它DSP Builder模块一样调用RS编码器来完成更大的设计了

使用IP Core设计RS译码器
        RS Compiler这个核也可以设计RS译码器。同设计RS编码器时一样调用RS Compiler,选择类型为“Decoder”的译码器,见图所示。接着的参数设置与RS编码器相同,这里不再赘述。最后设计好的RS译码器见图。

【FPGA】基于FPGA的RS码模块设计相关推荐

  1. 基于FPGA的UART异步串行通信发送模块设计与实现

    欢迎关注微信公众号"FPGA科技室",更多内容请关注 下一篇文请点击下列链接(接收模块设计) [基于FPGA的UART异步串行通信接收模块设计与实现] 本文发送模块: 在电子系统中 ...

  2. 计算机键盘接入fpga,基于FPGA的键盘接口设计毕业论文.doc

    单片机论文,优秀毕业论文,外文翻译,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机毕业论文,基于单片机毕业论文,毕业论文终稿,毕业论文初稿,毕业论文设计,单片机论文,本文档支持完 ...

  3. [FPGA]基于FPGA的数字跑表

    基于FPGA的数字跑表的设计与实现 一.设计要求 用FPGA设计并实现一个数字跑表,范围为0~59分59.99秒.可以实现数字跑表进行启动.停止计时和显示读数三个操作,可以在数码管上显示读数. 二.设 ...

  4. FPGA - 基于FPGA的HDMI显示

    写在前面 HDMI接口很早之前就想调试了,由于没有时间,就拖到了现在,而且毕业设计也是和视频处理系统有关,就趁这个机会把这个接口调试下. 开发环境 vivado 18.3 pynq - z2 HDMI ...

  5. 基于STM32的嵌入式语音识别模块设计实现

    介绍了一种以ARM为核心的嵌入式语音识别模块的设计与实现.模块的核心处理单元选用ST公司的基于ARM Cortex-M3内核的32位处理器STM32F103C8T6.本模块以对话管理单元为中心,通过以 ...

  6. stm32的语音识别_基于STM32的嵌入式语音识别模块设计实现

    介绍了一种以ARM为核心的嵌入式语音识别模块的设计与实现.模块的核心处理单元选用ST公司的基于ARM Cortex-M3内核的32位处理器STM32F103C8T6.本模块以对话管理单元为中心,通过以 ...

  7. 基于FPGA的远程升级系统概述

    目录 一.理论基础 二.核心程序 三.仿真测试结果 作者ID :fpga和matlab CSDN主页:https://blog.csdn.net/ccsss22?type=blog 擅长技术: 1.无 ...

  8. 基于FPGA数字时钟的设计(附源码)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...

  9. 源码系列:基于FPGA的数字电压表(AD)设计

    今天给大侠带来基于FPGA的数字电压表设计,附源码,获取源码,请在"FPGA技术江湖"公众号内回复"数字电压表设计源码",可获取源码文件.话不多说,上货. 设计 ...

最新文章

  1. Java计算一个对象所占内存大小_Java程序计算各种对象所占内存的大小的方法
  2. python cx_oracle配置_python连接oracle的模块cx_Oracle安装和配置
  3. SWPU第一届APP程序设计大赛筹备工作
  4. 训练日志 2019.4.13
  5. linux nvm 管理 nodejs,Nodejs 版本管理器: nvm 介绍
  6. 【转载】如何做个好员工?
  7. Leetcde每日一题:160.intersection-of-two-linked-lists(相交链表)
  8. Linux文本转语音合成教程,〔教程〕使用TTS将文本转语音输出
  9. 理解JSP页面中<%!%>与<%%>与<%=%>及out.write()
  10. selenium无法调用chrome或者firefox的原因
  11. C语言学习记录_2019.02.10
  12. 今天看了《一声叹息》
  13. 空间中常见曲面图形的绘制(matlab)
  14. 【AIS学习】12:AIS标准下载
  15. 机器人协同工作,RobotArt是怎么做到的呢?
  16. 【免费抢票】6月9日杭州,产品经理会议
  17. java根据物流单号查询物流详细
  18. 英语affrike非洲affrike单词
  19. 学生动漫网页设计模板下载 火影忍者(7页)大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板...
  20. 面试-Iteration Owner-新加坡航空

热门文章

  1. Flink 滚动窗口、滑动窗口详解
  2. flask+echarts+pyecharts+layui+bootstrap+爬虫 flask快速搭建学习
  3. 【玩转yolov5】使用TensorRT C++ API搭建yolov5s-v4.0网络结构(1)
  4. col-xs-*,col-sm-*,col-md-* 的意义
  5. 【vue3+ts后台管理】首页完成
  6. 博弈论(Bash博弈、Nim博弈、SG函数、组合博弈)
  7. HTTP,HTTPS,数据库等默认的端口号
  8. 轻松拆书,制作思维导图:ChatGPT一键生成
  9. 再见水印软件!2行Python给图片加水印,太太太强了
  10. 智选模式 VS HI模式,问界与阿维塔谁更胜一筹?