资源简介
利用c语言编写的rs编解码程序,里边有大概的注释。方便学习和研究,有一定的参考价值。里边包含编码和解码,有需要可以自取。
代码片段和文件信息
//rs code
//m=8
#include
#include
#include
#define mm 8 /* RS code over GF(2**4) - change to suit */
#define nn 255 /* nn=2**mm -1 length of codeword */
#define tt 10 /* number of errors that can be corrected */
#define kk 235 /* kk = nn-2*tt */
int pp[mm+1] = {1 0 1 1 1 0 0 0 1};
int alpha_to [nn+1] index_of [nn+1] gg [nn-kk+1] ;
int recd [nn] data [kk] bb [nn-kk] ;
void generate_gf()
/* 生成GF(2^m)空间 */
{
register int i mask ;
mask = 1 ;
alpha_to[mm] = 0 ;
for (i=0; i {
alpha_to[i] = mask ;
index_of[alpha_to[i]] = i ;
if (pp[i]!=0)
alpha_to[mm] ^= mask ;
mask <<= 1 ;
}
index_of[alpha_to[mm]] = mm ;
mask >>= 1 ;
for (i=mm+1; i {
if (alpha_to[i-1] >= mask)
alpha_to[i] = alpha_to[mm] ^ ((alpha_to[i-1]^mask)<<1) ;
else
alpha_to[i] = alpha_to[i-1]<<1 ;
index_of[alpha_to[i]] = i ;
}
index_of[0] = -1 ;
//alpha_to[nn] = 1;
for(i=0;i printf(“gf%d is%d\n“ialpha_to[i]);
}
void gen_poly()
/* 生成---生成多项式*/
{
register int ij ;
gg[0] = 2 ; /* primitive element alpha = 2 for GF(2**mm) */
gg[1] = 1 ; /* g(x) = (X+alpha) initially */
for (i=2; i<=nn-kk; i++)
{
gg[i] = 1 ;
for (j=i-1; j>0; j--)
if (gg[j] != 0)
gg[j] = gg[j-1]^ alpha_to[(index_of[gg[j]]+i)%nn];
else
gg[j] = gg[j-1] ;
gg[0] = alpha_to[(index_of[gg[0]]+i)%nn] ; /* gg[0] can never be zero */
}
//printf(“polynomial:\n“);
//for(i=0; i<=nn-kk; i++)
// printf(“%d “ gg[i]);
//printf(“\n“);
/* convert gg[] to index form for quicker encoding */
for (i=0; i<=nn-kk; i++)
gg[i] = index_of[gg[i]];
//printf(“polynomial:\n“);
//for(i=0; i<=nn-kk; i++)
// printf(“%d “ gg[i]);
//printf(“\n“);
}
void encode_rs()
/* 编码*/
{
register int ij ;
int feedback ;
for (i=0; i for (i=kk-1; i>=0; i--)
{
//逐步的将下一步要减的,存入bb(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] ; //plus = ^
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 ;
};
};
}
void decode_rs()
{/*解码*/
register 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=0; i if(recd[i] == -1)
recd[i] = 0;
else
recd[i] = index_of[recd[i]];
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 *
- 上一篇:cc2530连接光敏传感器测试代码.zip
- 下一篇:相机标定棋盘
相关资源
- C语言封装的HttpClient接口
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
- 数据结构(C语言版)ppt课件,清华,
- c语言编程经典例题100例 word版
- C语言编译器的设计与实现.doc
- C语言基础教程.pdf56620
评论
共有 条评论