资源简介
利用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++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论