RS编码

RS 码是一类纠错能力很强的多进制BCH 码,由于采用了q 进制,所以它是多进制调制时的自然和方便的编码手段。因为RS 码能够纠正t 个q 位二进制码,即 可以纠正≤q 位二进制错误(当然,对于 q 位二进制码中分散的单个错误也能被纠正),所以适合于在衰落信道中使用,以 克服突发性差错。另外RS 码也被应用在计算机存储系统中,以克服这系统中存在的差错串。

RS编码过程:

(1)得到RS码的生成多项式g(x)
  (2)用信息码多项式 m(x)除以生成多项式 g(x),所得余式 r(x)为监督码多项式,将 监督码多项式r(x)置于信息码多项式之后,形成RS 码。

GF(2m)域中计算,码字长度:n=2m-1,纠错能力:t=(n-k)/2

matlab相应函数:

1)rsgenpoly:

Generator polynomial of Reed-Solomon code

genpoly = rsgenpoly(n,k,prim_poly)

genpoly = rsgenpoly(n,k,prim_poly) returns the narrow-sense generator polynomial of a Reed-Solomon code with codeword length n and message length k. The codeword length n must have the form 2m-1 for some integer m, and n-k must be an even integer. The output genpoly is a Galois row vector that represents the coefficients of the generator polynomial in order of descending powers. The narrow-sense generator polynomial is (X - A1)(X - A2)...(X - A2t) where A is a root of the default primitive polynomial for the field GF(n+1) and t is the code‘s error-correction capability, (n-k)/2. prim_poly is an integer whose binary representation indicates the coefficients of the primitive polynomial. To use the default primitive polynomial GF(n+1), set prim_poly to [].If prim_poly specifies the primitive polynomial for GF(n+1) that has A as a root.

The examples below create Galois row vectors that represent generator polynomials for a [7,3] Reed-Solomon code. The vectors g and g2 both represent the narrow-sense generator polynomial, but with respect to different primitive elements A. More specifically, g2 is defined such that A is a root of the primitive polynomial D3 + D2 + 1 for GF(8), not of the default primitive polynomial D3 + D + 1. The vector g3 represents the generator polynomial (X - A3)(X - A4)(X - A5)(X - A6), where A is a root of D3 + D2 + 1 in GF(8).

2)primpoly

Finding Primitive Polynomials

You can use the primpoly function to find primitive polynomials for GF(2^m) and the isprimitive function to determine whether a polynomial is primitive for GF(2^m). The code below illustrates.

m = 4;

allprimpolys = primpoly(m,‘all‘) % All primitive polys for GF(16)

i1 = isprimitive(25) % Can 25 be the prim_poly input in gf(...)?

function [alpha_to,index_of]=gen_galois()
clc
m=8;
n=2^m-1;
p=de2bi(285);
%p=[1 0 1 0 0 1];
alpha_to=zeros(1,2^m);
mask=1;
alpha_to(m+1)=0;
for i=1:m
alpha_to(i)=mask;
if(p(i)~=0)
 alpha_to(m+1)=bitxor(alpha_to(m+1),mask);
end
mask=mask*2;
end
mask=alpha_to(m);
for i=m+2:n
  if(alpha_to(i-1)>=mask)
  alpha_to(i)=bitxor(alpha_to(m+1),bitxor(alpha_to(i-1),mask)*2);
else
alpha_to(i)=alpha_to(i-1)*2;
end
end
alpha_to(2^m)=0;

index_of=zeros(1,2^m);
for i=1:2^m-1
  index_of(alpha_to(i))=i-1;
end
a=3;
b=27;
y=rs_mul(a,b,m,alpha_to,index_of)
ya=rs_add(a,b,m)

function y=rs_mul(a,b,m,alpha_to,index_of)
if a*b==0
   y=0;
else
   a1=index_of(a);
   b1=index_of(b);
   c=mod((a1+b1),(2^m-1));
   y=alpha_to(c+1);
end

function y=rs_add(a,b,m)
a1=de2bi(a,m);
b1=de2bi(b,m);
y1=bitxor(a1,b1);
y=bi2de(y1);

原文地址:https://www.cnblogs.com/atc001/p/9209291.html

时间: 2024-10-03 13:39:58

RS编码的相关文章

关于rs编码的理解

1,rs编码首先是线性循环编码,所谓线性循环编码就是说编码后的码组T(x)左移或右移都必然还是有限组码组中的一组,并且T(X)码组能够被g(x)整除,g(x)为生成多项式. 2,由信息码m(x)得到T(x)的原理: 3,关于域 所指的域为伽罗华域,简写为GF(2^m)域中的每个元素都可以用a^0,a^1,a^2...a^(m-1) 的和表示. 运算法则可以参考模2运算,不过乘法运算有区别,是模N算法,N不一定是2. 4,生成多项式g(x)=(x-a)(x-a^2)(x-a^3).....(x-a

RS码率控制自适应算法

影响因素 RS/ES码率关系的主要影响因素如下: 本算法将不受这些因素的影响,实现码率的自适应控制. ES编码器 对于ES编码器:编码器启动时,RS层根据输入的RS码率设置值给出一个ES码率的建议值:然后编码器以一定的频率(每次调用RS编码接口/每帧/每GOP,根据测试结果和实际需要拟定)更新ES码率. RS编码器 对于RS编码器:问题在于采取何种策略更新RS/ES码率的关系,自适应算法采取实际数据的统计值来更新. 方案一 在编码器启动后的一段时间内,采取如下方式计算RS/ES码率的关系: 其中

Ceph纠删码编码机制调研

1 Ceph简述 Ceph是一种性能优越,可靠性和可扩展性良好的统一的分布式云存储系统,提供对象存储.块存储.文件存储三种存储服务.Ceph文件系统中不区分节点中心,在理论上可以实现系统规模的无限扩展.Ceph文件系统使用了较为简单的数据地址管理方法,通过计算的方式直接得到数据存放的位置.其客户端程序只需要根据数据ID经过简单的计算就可以决定数据存放的位置. 2 存储容错机制简述 2.1 副本冗余容错机制 基于副本冗余的容错机制是将原始数据复制成多份,每一份称为一个副本.将这些副本分别存放在集群

[转]Reed Solomon纠删码

http://peterylh.blog.163.com/blog/static/12033201371375050233/ 纠删码是存储领域常用的数据冗余技术, 相比多副本复制而言, 纠删码能够以更小的数据冗余度获得更高数据可靠性. Reed Solomon Coding是存储领域常用的一种纠删码,它的基本原理如下:  给定n个数据块d1, d2,..., dn,n和一个正整数m, RS根据n个数据块生成m个校验块, c1, c2,..., cm.  对于任意的n和m,  从n个原始数据块和m

HDFS RAID实现方案(转)

原文链接:http://blog.chinaunix.net/uid-20196318-id-3213700.html 分布式文件系统主要用于解决海量数据存储的问题,如Goolge.Facebook等大型互联网企业都使用分布式文件系统作为数据存储的基础 设施,并在其上构建很多服务,分布式文件系统通常采用三副本的策略来保证数据的可靠性,但随着应用数据量的不断膨胀,三副本策略为可靠性牺牲的存储空间也 越来越大,如何在不降低数据可靠性的基础上,进一步降低存储空间成本? Facebook将erasure

DVB数字电视系统简介(DVB-C,DVB-S,DVB-T)

前一段时间在<通信原理>期末的时候研究了一下DVB数字电视系统.视音频编解码这些技术都是属于"信源"的技术,而<通信原理>研究的范围正好是它的补集,属于"信道"方面的技术.由于自己不是做这方面的,所以信道方面的技术此前接触的比较少,因此打算把搜集的资料简单整理一下记录下来以备查阅.本文就打算记录一下DVB方面的知识. 1.简介 数字视频广播(英语:Digital Video Broadcasting,缩写:DVB),是由"DVB P

分布式系统下的纠删码技术(一) -- Erasure Code (EC)

近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC.文章会分为多篇,主要将Erasure Code,LRC,  以及相关的数学基础,作为学习总结. 一.纠删码简介 分布式系统需要在硬件失效等故障发生后仍然能继续提供服务.就数据而言,HDFS采用每份数据3副本的方式,保证某些数据损失之后仍能继续使用. 数据的容错除了副本还有另一种做法,就是把丢失的数据计算出来.这就是纠删码的思想了.(PS: Sp

双重编解码算法对比

概述 双重编解码算法是实现数据保护的关键技术.磁盘阵列中的常用算法是RAID6,其属于Reed-solomon算法范畴.RAID6算法计算复杂度较高,往往需要硬件加速单元的支持.随着闪存技术的发展,新的编解码技术层出不穷,因此有必要了解常用阵列技术的双重编解码算法,通常来讲,常用双重编解码算法主要有如下三种: 1,二维(2D)奇偶校验方法 2,EVEN-ODD编码校验法 3,Reed-Solomon编码校验法 下面会对这三种算法的原理进行详细说明,然后对比这三种算法的性能及计算复杂度. 二维奇偶

FEC之我见四

接上文,来详细的说明一下FEC前向纠错的具体实现: FEC_matrix是一个比较常用的算法,Vandermonde,范德蒙矩阵是法国数学家范德蒙提出的一种各列为几何级数的矩阵. 范德蒙矩阵的定义: V = 其第i 行.第j 列可以表示为(αi)^(j-1). 范德蒙矩阵的性质:范德蒙矩阵行数为m,列数为n,矩阵具有最大的秩min(m, n). 范德蒙矩阵的应用:范德蒙矩阵应用之一就是在纠错编码中,常用的纠错码Reed-solomon 编码中冗余块的编码采用的即为范德蒙矩阵. 1)码流层面上的F