前一阵子,学习如何调用ISE中RS编码的IP核,进行信息序列的编码,多亏了有现成的IP核,大大减轻了工作量,于是便翻起了RS编码的Datasheet,发现用起来还蛮简单的,直到编了一段代码测试完,发现编码后的符号和MATLAB中RS编码函数输出的结果不一样,找了一天没发现两种结果不一致的原因出现在哪,直到对RS码的编码过程做了一点了解之后,才找到了原因。

1. RS编码简介
         RS码是一类具有很强纠错能力的多进制BCH码,适用于有突发错误的信道纠错。RS(n,k)码可以由m,n和k这3个参数表示,其中m表示码元符号取自域GF(2^m),n为码字长度,k为信息符号长度。对于一个可以纠正t个符号错误的RS码,有以下参数:
(1) 码字长度:n=2^m-1个符号或m(2^m-1)个比特;
(2) 信息符号:k(k=1,2,...)个符号段或km个比特;
(3) 监督码:2t=n-k个符号或2mt=m(n-k)个比特;
(4) 最小码距:dmin=2t+1个符号,或mdmin = m(2t+1)个比特。
        RS码的基本思想就是选择一个合适的生成多项式g(x),使得信息码字生成的编码码字除以g(x)的余式为0,说的明白点RS码属于BCH码,而BCH码也是一种循环码,所以RS码也是循环码,只是RS码是多进制的,其码字的生成方式仍然与循环码字的生成方式一致,主要区别在于生成多项式的选择上,RS码可以预先设计纠错能力t,然后产生对应的能纠t个符号错误的码字生成多项式。RS码生成多项式一般按照下面的公式选择:

上式中,a^i是GF(2^m)中的一个元素。
2. MATLAB与FPGA之RS编码比较
        MATLAB中,可以通过rsenc(msg,n,k)这个函数来进行RS编码,需要注意的是msg必须是经过gf函数后的符号,具体而言,在matlab中实现RS编码需要下面两步:
        msg = gf(msg0, m);
        msg_coded = rsenc(msg, n, k);
        这种情况下,根据m确定了GF(2^m)上的本原多项式,根据t=(n-k)/2确定了t的值,进一步确定了生成多项式。
        ISE中,RS编码IP核中存在Generator Start项,默认情况下为0,这个Generator Start代表什么含义呢?Datasheet上做了解释,其给出的生成多项式如下:

其中的n,k就不用解释了,n-k=2t,需要注意的是,这里下标i是从0开始的,matalb默认的生成多项式下标i是从1开始的,因此ISE中RS编码IP核如果Generator Start采用默认的值0的话,则编码结果与MATLAB结果必然不一致,这里只要在配置IP核时,将Generator Start改为1,则生成多项式与MATLAB中一致,编码的结果也与MATLAB的结果一致了。另外,需要强调的是,译码的时候,RS译码的IP核配置时,Generator Start应与编码的一致,这样才能保证两边的生成多项式一致,才能正确译码。

————————————————
版权声明:本文为CSDN博主「fallen-queen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011639609/article/details/51474950

Xilinx FPGA中RS编码IP核之Generator Start相关推荐

  1. Xilinx RS编码IP核仿真验证

    最近做的项目中用到了RS编码,FPGA代码中是通过调用Reed-Solomon Encoder IP核来实现的.这里以R-S(255,223)为例,分别对单通道和多通道两种情况进行了仿真验证,下面给出 ...

  2. LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解

    1.要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程:还有中间层的驱动文件编写以及上位机PC端的应用程 ...

  3. FPGA中DDR3 MIG ip核使用说明

    此篇是我在学习中做的归纳与总结,其中如果存在版权或知识错误请直接联系我,欢迎留言. PS:本着知识共享的原则,此篇博客可以随意转载,但请标明出处! 目录 1.DDR3工作原理 简介: DDR基础操作步 ...

  4. vivado中复数乘法器IP核使用小结

    vivado中复数乘法器IP核使用小结 添加ip核 进入工程,点击IP Catalog,在弹出的窗口中点击数学功能–math functions,选择multipliers–complex multi ...

  5. Xilinx FPGA中SRL(移位寄存器)资源

    SRL(移位寄存器)资源,在FPGA中都有,不过是叫不同的名字.Xilinx FPGA内部的LUT有个特殊功能,就是可以配置成可变长度SRL. 5输入的一个LUT可以变成32bit 的SRL 6输入的 ...

  6. FPGA——调用DDR的IP核(MIG核)

    关于DDR的基础知识可以看这篇文章: FPGA --DDR基础概念详解_居安士的博客-CSDN博客 总的来说,DDR是一个结构非常复杂的动态存储器,时序自己去写是非常困难的,但是Xilinx给我们有现 ...

  7. Vivado中FFT9.1 IP核的使用(1)

    目录 1.xilinx FFT IP介绍 2.FFT IP接口介绍 3.xilinx FFT IP的仿真测试 4.修改 5.参考: 1.xilinx FFT IP介绍 1)正向和反向复数FFT,运行时 ...

  8. 基于xilinx vivado的GTX/GTP ip核设置与例程代码使用详解

    本文目录 1 概述 2 参考文档 3 GTX的IP设置 3.1 本例程使用环境 3.2 GTX IP界面的设置情况 3.2.1 GTX IP设置第1页 3.2.2 GTX IP设置第2页 3.2.3 ...

  9. FPGA学习杂记4——IP核简介、调用、复制和PLL IP核介绍

    大部分内容来自野火的FPGA教学视频,笔者仅作整理,方便回顾. 视频地址:[野火]FPGA系列教学视频,真正的手把手教学,"波形图"教学法,现场画波形图写代码,硬件基于野火FPGA ...

  10. FPGA 单端口RAM IP核使用 vivado仿真

    一.各类存储器简介 ROM:只读,只有读接口(读地址.读数据) RAM:可读可写,有读接口(读地址.读数据)和写接口(写使能.写数据.写地址),默认任何时刻都能读,没有读使能,大小和位宽查手册,需要持 ...

最新文章

  1. Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
  2. Delphi 2010 新增功能之: IOUtils 单元(4): TDirectory.GetDirectories
  3. 003_SQL语言简介
  4. java 求数组最大子序列之和
  5. Method Not Allowed一例
  6. 地址栏地址 获取_直播源获取工具,支持斗鱼、虎牙、B站、企鹅电竞、YY、抖音、西瓜直播!...
  7. js RegExp正则表达式常见用例
  8. java飞机大战分数累加代码_JAVA 基础编程练习题39 【程序 39 分数累加】
  9. 【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理
  10. FFmpeg开发(一)常用处理视频命令
  11. mysql 5.6批处理慢_java – JDBC批处理执行速度极慢
  12. IT行业上盘与碟的区别
  13. nod32 升级方法
  14. 利用css制作3D按钮
  15. 动画 | 什么是红黑树?(与2-3树等价)
  16. TouchScript模拟鼠标点击
  17. 携职教育:四川2022年人力资源管理师考试报名通知
  18. 车仪表台上的装饰_45汽车仪表盘装饰_汽车仪表盘种类
  19. excel怎么设置打印区域_在excel上怎么可以使打印时,将整个纸张占满?
  20. dayjs,当年月周日

热门文章

  1. Mac最好用的SSH工具———SecureCRT使用以及下载
  2. 如何在官网下载java JDK
  3. 一文让你彻底了解iOS字体相关知识
  4. MATLAB显示中文乱码问题 MATLAB2016
  5. 2023年厦门大学全日制会计专硕(MPAcc)考研上岸前辈备考经验
  6. Android计算器效果截图,Android复杂计算器实现
  7. IDEA代码行数统计工具使用——statistic插件
  8. 微软应用商店_微软应用商店,居然藏着这8款神器?!
  9. 全志平台ov2710 sensor驱动调试记录
  10. monkey命令总结