线性分组码的编译码要点.pdf

上传人:tbuqq 文档编号:5006076 上传时间:2020-01-26 格式:PDF 页数:29 大小:1.11MB
返回 下载 相关 举报
线性分组码的编译码要点.pdf_第1页
第1页 / 共29页
线性分组码的编译码要点.pdf_第2页
第2页 / 共29页
线性分组码的编译码要点.pdf_第3页
第3页 / 共29页
线性分组码的编译码要点.pdf_第4页
第4页 / 共29页
线性分组码的编译码要点.pdf_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《线性分组码的编译码要点.pdf》由会员分享,可在线阅读,更多相关《线性分组码的编译码要点.pdf(29页珍藏版)》请在三一文库上搜索。

1、* 实践教学 * 兰州理工大学 计算机与通信学院 2013 年秋季学期 计算机通信课程设计 题目: 线性分组码( 7,3 )码的编译码仿真设计 专业班级:通信工程三班 姓名:彭佳峰 学号: 10250302 指导教师:彭铎 成绩: 摘要 本课题是应用 C语言对( 7,3 )线性分组码的编译码的软件设计。主要做了一下几项 工作:对三位正确的信息码进行编码;若输入的三位信息码有错,系统输出提醒,可以重 新输入;对七位接收到的码字判断是否有错,并在无错和有一位错误时进行译码,在有多 位错误时输出提醒,可以选择重新输入。 关键字: 线性分组码编码译码 C 语言 目录 前言 1 1 基本原理 2 1.1

2、 线性分组码的基本概念. 2 1.2 差错控制原理 . 2 1.3 线性分组码的纠检错能力. 3 2 线性分组码的编码 4 2.1 监督矩阵 . 4 2.2 生成矩阵 . 5 3 线性分组码的译码 7 4 设计与仿真 9 4.1 C 语言平台简介 . 9 4.2 整体流程图 . 9 4.3 编码流程图 10 4.4 译码流程图 10 5 仿真结果及分析 11 设计总结 . 17 参考文献 . 18 致谢 . 19 附录 . 20 1 前言 近年来,随着计算机、卫星通信及高速数据网的飞速发展,数据的交换、处理和存储 技术得到了广泛应用, 人们对数据传输和存储系统的可靠性提出了越来越高的要求。因此

3、, 如何控制差错、提高数据传输和存储的可靠性,成为现代数字通信系统设计工作者所面临 的重要课题。香农第二定理指出,当信息传输率低于信道容量时,通过某种编译码方法, 就能使错误率为任意小。差错控制编码在此定理指导下迅速发展起来,它使得传输数据本 身带有规律性,利用规律性来减少错误。 线性分组码是差错控制编码的重要一种。它的规律性在于局限在一个码组之内,编码 后长为 n 的一个码组中含有k 位信息元和 n-k 位监督元,监督元是随所传输的信息元而改 变的。接收端正式通过监督元和信息元之间的规律性来发现并纠正错误的。 2 1 基本原理 1.1 线性分组码的基本概念 (1)线性分组码 线性分组码是一组

4、固定长度的码组,可表示(n,k) ,通常它用于前向纠错。在分组 码中,监督位被加到信息位之后,形成新的码。在编码时,k 个信息位被编为n 位码组长 度,而 n-k 个监督位的作用就是实现检错与纠错。当分组码的信息码元与监督码元之间的 关系为线性关系时,这种分组码就称为线性分组码。 对于长度为n 的二进制线性分组码,它有 2 n 种可能的码组 2n,从码组中,可以选择 2 k M个码组( k #include #include /* 函数声明 */ void Begin(); void Code(); void Decoding(); /* 主函数*/ main() printf(“n这是( 7

5、,3 )线性分组码的编译码及验证的软件设计:n“); printf(“n“); Begin(); void Begin() char ch; fflush(stdin); printf(“ -n“); printf(“n“); printf(“ - 输入c 代表编码函数 Code -“); printf(“n“); printf(“n“); printf(“ - 输入d 代表译码函数 Decoding -“); printf(“n“); printf(“n“); printf(“ -n“); ch=getchar(); if(ch=c)Code(); 21 else if(ch=d)Decod

6、ing(); void Code() int C13,C27; int i; printf(“输入三位信息码 :n“); for(i=0;i3;i+) scanf(“ %d“, for(i=0;i3;i+) if(C1i!=0 Begin(); for(i=0;i3;i+) C2i=C1i; C23=C10+C12; C24=C10+C11+C12; C25=C10+C11; C26=C11+C12; for(i=0;i7;i+) if(C2i=2)C2i=0; else if(C2i=3)C2i=1; printf(“编码结果为 :n“); for(i=0;i7;i+) printf(“ %

7、d“,C2i); printf(“n“); printf(“_n“); Begin(); 22 void Decoding() int G37,P34,Q43,R17,HT73,R27,C3; int H47=0,S4=0,E7=0; int i,j,n,k,t=0; printf(“n输入生成矩阵 G:n“); for(i=0;i3;i+) for(j=0;j7;j+) scanf(“ %d“, printf(“n计算出矩阵 P:n“); for(i=0;i3;i+) for(j=3;j7;j+) Pij-3=Gij; for(i=0;i3;i+) for(j=0;j4;j+) printf

8、(“%20d“,Pij); printf(“n“); printf(“计算出矩阵 Q:n“); for(i=0;i3;i+) for(j=0;j4;j+) Qji=Pij; for(i=0;i4;i+) for(j=0;j3;j+) printf(“%26d“,Qij); printf(“ “); printf(“n“); 23 printf(“计算监督矩阵 H:n“); for(i=0;i4;i+) for(j=0;j3;j+) Hij=Qij; for(i=0;i4;i+) j=3; Hii+j=1; for(i=0;i4;i+) for(j=0;j7;j+) printf(“%11d“,

9、Hij); printf(“ “); printf(“n“); printf(“计算 H的转置矩阵 HT:n“); for(i=0;i4;i+) for(j=0;j7;j+) HTji=Hij; for(i=0;i7;i+) for(j=0;j4;j+) printf(“%20d“,HTij); printf(“n“); printf(“输入接收到的码字R1:n“); for(i=0;i7;i+) scanf(“ %d“, printf(“计算伴随式 S:n“); for(i=0;i4;i+) for(j=0;j7;j+) 24 Si=Si+R1j*HTji; for(i=0;i4;i+) i

10、f(Si%2=0)Si=0; else if(Si%2=1)Si=1; for(i=0;i4;i+) printf(“%2d“,Si); printf(“n_n“); for(i=0;i4;i+) t=t+Si; /* 当 S=0时,接收端认为传输无错。但是实际上,也可能存在多个错误,把此事的错误成 为不可就错误。 */ if(t=0) printf(“接收端认为接受的码字R1无错,此时错误图样E为:“); for(i=0;i7;i+) printf(“%2d“,Ei); for(i=0;i7;i+) R2i=R1i+Ei; if(R2i=2)R2i=0; for(i=0;i3;i+) Ci=

11、R2i; printf(“n译码结果 C为:n“); for(i=0;i3;i+) printf(“%2d“,Ci); printf(“n_n“); if(t!=0) 25 for(k=0;k7;k+) for(j=0,n=0;j4;j+) if(Sj=HTkj) n+; /*S=HT 中的某一行时,有一个错误或者多个错误。若是一个错误,系 统可以正确纠正,若是多个错误,按此方法纠错,会做出错误纠正。*/ while(n=4) Ek=1; printf(“此时接受的码字有一个错误,错误图样E为:n“); for(i=0;i7;i+) printf(“%2d“,Ei); for(i=0;i7;i+) R2i=R1i+Ei; if(R2i=2)R2i=0; for(i=0;i3;i+) Ci=R2i; printf(“n译码结果 C为:n“); for(i=0;i3;i+) printf(“%2d“,Ci); printf(“n_n“); Begin(); break; /*S!=HT 中的任意一行时,系统只能检错不能纠错。*/ while(k=7) 26 printf(“n此时接收到的码字有错, 但不能确定错误图样。 n“); printf(“n_n“); Begin(); break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1