• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: rs编码  

资源简介

支持GF(2^n)域的rs编解码,可直接修改参数实现不同方式的RS编码和解码

资源截图

代码片段和文件信息

#include “rs.h“



void encode_rs(int recd[nn] int data[kk] int  bb[nn-kk])
/* take the string of symbols in data[i] i=0..(k-1) and encode systematically
to produce 2*tt parity symbols in bb[0]..bb[2*tt-1]
data[] is input and bb[] is output in polynomial form.
Encoding is done by using a feedback shift register with appropriate
connections specified by the elements of gg[] which was generated above.
Codeword is c(X) = data(X)*X**(nn-kk)+ b(X) */
{
int ij ;
int feedback ;
for (i=0; i bb[i] = 0 ;
for (i=kk-1; i>=0; i--)
{
feedback = index_of[data[i]^bb[nn-kk-1]] ;
if (feedback != -1)

for (j=nn-kk-1; j>0; j--)
if (gg[j] != -1)
bb[j] = bb[j-1]^alpha_to[(gg[j]+feedback)%nn] ;
else
bb[j] = bb[j-1] ;
bb[0] = alpha_to[(gg[0]+feedback)%nn] ;
}
else
{
for (j=nn-kk-1; j>0; j--)
bb[j] = bb[j-1] ;
bb[0] = 0 ;
} ;
} ;

for (i=0; i recd[i] = bb[i] ;
for (i=0; i recd[i+nn-kk] = data[i] ;




void decode_rs(int recd[nn] int dataout[kk])
/* assume we have received bits grouped into mm-bit symbols in recd[i]
i=0..(nn-1) and recd[i] is index form (ie as powers of alpha).
We first compute the 2*tt syndromes by substituting alpha**i into rec(X) and
evaluating storing the syndromes in s[i] i=1..2tt (leave s[0] zero) .
Then we use the Berlekamp iteration to find the error location polynomial
elp[i]. If the degree of the elp is >tt we cannot correct all the errors
and hence just put out the information symbols uncorrected. If the degree of
elp is <=tt we substitute alpha**i  i=1..n into the elp to get the roots
hence the inverse roots the error location numbers. If the number of errors
located does not equal the degree of the elp we have more than tt errors
and cannot correct them. Otherwise we then solve for the error value at
the error location and correct the error. The procedure is that found in
Lin and Costello. For the cases where the number of errors is known to be too
large to correct the information symbols as received are output (the
advantage of systematic encoding is that hopefully some of the information
symbols will be okay and that if we are in luck the errors are in the
parity part of the transmitted codeword). Of course these insoluble cases
can be returned as error flags to the calling routine if desired. */
{
int ijuq ;
int elp[nn-kk+2][nn-kk] d[nn-kk+2] l[nn-kk+2] u_lu[nn-kk+2] s[nn-kk+1] ;
int count=0 syn_error=0 root[tt] loc[tt] z[tt+1] err[nn] reg[tt+1] ;
/* first form the syndromes */
for (i=1; i<=nn-kk; i++)

s[i] = 0 ;
for (j=0; j if (recd[j]!=-1)
s[i] ^= alpha_to[(recd[j]+i*j)%nn] ; /* recd[j] in index form */
/* convert syndrome from polynomial form to index form */
if (s[i]!=0) syn_error=1 ; /* set flag if non-zero syndrome => error */
s[i] = index_of[s[i]] ;
} ;
if (syn_error) /* if errors try and co

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        9507  2014-06-18 08:55  rs(6.17)\rs.cpp
     文件         876  2014-06-18 08:54  rs(6.17)\rs.h
     文件         611  2014-06-18 08:54  rs(6.17)\test_rs.cpp
     目录           0  2014-06-18 09:00  rs(6.17)\

评论

共有 条评论

相关资源