码迷,mamicode.com
首页 > 其他好文 > 详细

RS编码

时间:2018-06-21 17:30:36      阅读:512      评论:0      收藏:0      [点我收藏+]

标签:power   put   some   amp   sage   output   nbsp   cto   integer   

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);

RS编码

标签:power   put   some   amp   sage   output   nbsp   cto   integer   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!