ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:194.49KB ,
资源ID:7791687      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7791687.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整版74汉明码编译码程序说明.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整版74汉明码编译码程序说明.docx

1、完整版74汉明码编译码程序说明(7,4)汉明码编译码原理程序说明书1、线性分组码 假设信源输出为一系列二进制数字0和1.在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。每个消息分组记为u,由k个信息位组成。因此共有种不同的消息。编码器按照一定的规则将输入的消息u转换为二进制n维向量v,这里nk。此n维向量v就叫做消息u的码字(codeword)或码向量(code vector)。因此,对应于种不同的消息,也有种码字。这个码字的集合就叫一个分组码(block code)。 一个长度为n,有个码字的分组码,当且仅当其个码字构成域GF(2)上所有n维向量空间的一

2、个k维子空间时被称为线性(linear)(n,k)码。对于线性分组码,希望它具有相应的系统结构(systematic structure),其码字可分为消息部分和冗余校验部分两个部分。消息部分由k个未经改变的原始信息位构成,冗余校验部分则是n-k个奇偶校验位(parity-check)位,这些位是信息位的线性和(linear sums)。具有这样的结构的线性分组码被称为线性系统分组码(linear systematic block code)。本实验以(7,4)汉明码的编译码来具体说明线性系统分组码的特性。其主要参数如下:码长:信息位:校验位:,且最小距离: 由于一个(n,k)的线性码C是所有

3、二进制n维向量组成的向量空间的一个k维子空间,则可以找到k个线性独立的码字, ,使得C中的每个码字v都是这k个码字的一种线性组合。 (7,4)汉明码的生成矩阵如下,前三位为冗余校验部分,后四位为消息部分。如果是待编码的消息序列,则相应的码字可如下给出:编码结构即码字,对于(7,4)线性分组码汉明码而言,为所提供的消息序列,而,。由以上关系可以得到(7,4)汉明码的全部码字如下所示: k=4,n=7的线性分组码消息码字消息码字(0000)(0000000)(0001)(1010001)(1000)(1101000)(1001)(0111001)(0100)(0110100)(0101)(1100

4、101)(1100)(1011100)(1101)(0001101)(0010)(1110010)(0011)(0100011)(1010)(0011010)(1011)(1001011)(0110)(1000110)(0111)(0010111)(1110)(0101110)(1111)(1111111)2、用C+编写(7,4)汉明码编译码程序的思路如下:(1)编码程序循环输入待编码消息序列,首先判断输入是否符合输入条件:输入必须是4位0,1序列,共有种情况。编码程序如下:(本人水平有限,使用直接赋值的方法,望见笑)for(j=0;j7;j+) if(j=3) vj= u0; if(j=4)

5、 vj= u1; if(j=5) vj= u2; if(j=6) vj= u3; if(j=0) vj= (u0u2)u3); /异或运算 if(j=1) vj= (u0u1)u2); /异或运算 if(j=2) vj= (u1u2)u3); /异或运算 cout vj ; coutendl;编码的思想为: (2)译码程序:循环输入待译码的码字序列,第一步判断输入是否符合输入条件:输入必须是7位0,1序列,共有种情况。但是种情况中只有即16个有效码字,那么第二步则是要判断是否是即16个有效码字,这也是编码的一个检错方式,利用其奇偶校验矩阵,校正子,接收到的码字序列为,判断是否等于0。若等于0,

6、则证明是有效码字;若不等于0,则证明不属于16个有效码字的一个。奇偶校验矩阵奇偶校验矩阵以下为纠错的关键程序:for(j=0;j3;j+) a=(v0*ht0j)(v1*ht1j)(v2*ht2j)(v3*ht3j)(v4*ht4j)(v5*ht5j)(v6*ht6j); result=result+a; if(result!=0) cout输入的是无效的字码endl; goto loop; else cout输入字码有效endl; cout您所输入的待译码的码字序列为:;接下来便是译码的两个主要方法:第一个方法为查表法:程序中check_table()函数便是查表法。表格如下:k=4,n=7

7、的线性分组码消息码字消息码字(0000)(0000000)(0001)(1010001)(1000)(1101000)(1001)(0111001)(0100)(0110100)(0101)(1100101)(1100)(1011100)(1101)(0001101)(0010)(1110010)(0011)(0100011)(1010)(0011010)(1011)(1001011)(0110)(1000110)(0111)(0010111)(1110)(0101110)(1111)(1111111)第二个方法编码方法便是:系统码直接取信息位译码 程序如下: for(j=0;j4;j+) i

8、f(j=0) uj= v3; if(j=1) uj= v4; if(j=2) uj= v5; if(j=3) uj= v6; cout uj ; 3、程序附录/(7,4)编译码程序#include using namespace std;void check_table();/编码程序int main() int g47=1,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1; /声明生成矩阵G,即4个线性独立的码字,可以使码本C中的码字v都是这k个码字的一种线性组合, int h37=1,0,0,1,0,1,1,0,1,0,1,1,1,

9、0,0,0,1,0,1,1,1; /声明校验矩阵H, int ht73=1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1; /声明校验矩阵H的转置矩阵HT(这里的T是H 的上标) int u4; /声明待编码的消息序列,即未编码前的信息序列 int v7; /声明编码后的码字序列 /int s7; int i,j,k; /顺序输入待编码4位信息序列lable: cout请输入4位待编码消息序列:endl; for(i=0;iui; /判断是否输入正确数据 for(i=0;i4;i+) if(u0=0|u0=1)&(u1=0|u1=1)&(u2=0|u2=1)&

10、(u3=0|u3=1) cout您所输入的待编码消息序列为:; for(i=0;i4;i+) coutui; coutendl; else cout输入错误!请输入正确的二进制4位0,1信息序列!endl; goto lable; coutendl;/输出生成矩阵 cout (7,4)汉明码的生成矩阵G为:endl; for(i=0;i4;i+) for(j=0;j7;j+) cout gij ; cout endl; cout endl;/编码程序 /码字的系统结构分为冗余校验部分和消息部分,结构形式:v(x)=v0,v1,v2,v3,v4,v5,v6/编码序列中v3,v4,v5,v6均为所

11、提供的消息序列,对于(7,4)汉明码:/ v0=v3v5v6;/ v1=v3v4v5; / v2=v4v5v6;cout 等待编码中 endl;cout编码成功!编码后的码字序列为: ; for(j=0;j7;j+) if(j=3) vj= u0; if(j=4) vj= u1; if(j=5) vj= u2; if(j=6) vj= u3; if(j=0) vj= (u0u2)u3); /异或运算 if(j=1) vj= (u0u1)u2); /异或运算 if(j=2) vj= (u1u2)u3); /异或运算 cout vj ; coutendl;/顺序输入7位待译码有效码字序列loop:

12、 int a,result=0; cout请输入7位待译码有效的消息序列:endl; for(i=0;ivi; coutendl; for(i=0;i7;i+) coutvi; /1.判断是否输入正确0,1序列 if(v0=0|v0=1)&(v1=0|v1=1)&(v2=0|v2=1)&(v3=0|v3=1)&(v4=0|v4=1)&(v5=0|v5=1)&(v6=0|v6=1) cout输入字码合法endl; else cout输入错误!请输入正确的二进制7位0,1码字序列!endl; goto loop; /2.判断是否为有效码字 for(j=0;j3;j+) a=(v0*ht0j)(v1

13、*ht1j)(v2*ht2j)(v3*ht3j)(v4*ht4j)(v5*ht5j)(v6*ht6j); result=result+a; if(result!=0) cout输入的是无效的字码endl; goto loop; else cout输入字码有效endl; cout您所输入的待译码的码字序列为:; for(i=0;i7;i+) coutvi; coutendl; /输出校验矩阵H cout (7,4)汉明码的校验矩阵H为:endl; for(i=0;i3;i+) for(j=0;j7;j+) cout hij ; cout endl; cout endl;/输出校验矩阵HT(这里的

14、T为H 的上标,代表转置),目的是为了利用校正子进行编码检测s=r*HT;cout (7,4)汉明码的校验矩阵H的转置矩阵为:endl; for(i=0;i7;i+) for(j=0;j3;j+) cout htij ; cout endl; cout endl;/检错算法check_table();/查表法cout译码方法二:系统码直接取信息位译码 endl;cout 等待译码中 endl;cout译码成功!译码后的消息序列为: ; for(j=0;j4;j+) if(j=0) uj= v3; if(j=1) uj= v4; if(j=2) uj= v5; if(j=3) uj= v6; c

15、out uj ; coutendl; system(pause); return 0;/查表法函数void check_table() cout译码方法一:查表法endl; cout k=4,n=7的线性分组码的全部码字 endl; cout 消息 码字 | 消息 码字endl; cout(0000) (0000000) | (0001) (1010001)endl; cout(1000) (1101000) | (1001) (0111001)endl; cout(0100) (0110100) | (0101) (1100101)endl; cout(1100) (1011100) | (1101) (0001101)endl; cout(0010) (1110010) | (0011) (0100011)endl; cout(1010) (0011010) | (1011) (1001011)endl; cout(0110) (1000110) | (0111) (0010111)endl; cout(1110) (0101110) | (1111) (1111111)endl;运行结果如下:编码结果为:译码结果为:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1