版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(7,4)汉明码编译码原理程序说明书1、线性分组码假设信源输出为一系列二进制数字0和1.在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。每个消息分组记为u,由k个信息位组成。因此共有种不同的消息。编码器按照一定的规则将输入的消息u转换为二进制n维向量v,这里n>k。此n维向量v就叫做消息u的码字(codeword)或码向量(code vector)。因此,对应于种不同的消息,也有种码字。这个码字的集合就叫一个分组码(block code)。一个长度为n,有个码字的分组码,当且仅当其个码字构成域GF(2)上所有n维向量空间的一个k维子空间时被称为线性(
2、linear)(n,k)码。对于线性分组码,希望它具有相应的系统结构(systematic structure),其码字可分为消息部分和冗余校验部分两个部分。消息部分由k个未经改变的原始信息位构成,冗余校验部分则是n-k个奇偶校验位(parity-check)位,这些位是信息位的线性和(linear sums)。具有这样的结构的线性分组码被称为线性系统分组码(linear systematic block code)。本实验以(7,4)汉明码的编译码来具体说明线性系统分组码的特性。其主要参数如下:码长:信息位:校验位:,且最小距离:由于一个(n,k)的线性码C是所有二进制n维向量组成的向量空间
3、的一个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)(1100101)(1100)(1011
4、100)(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;j<7;j+) if(j=3) vj= u0;if(j=4) vj= u1;if(j
5、=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 << " "cout<<endl;编码的思想为:(2)译码程序:循环输入待译码的码字序列,第一步判断输入是否符合输入条件:输入必须是7位0,1序列,共有种情况。但是种情况中只有即16个有效码字,那么第二步则是要判断是否是即16个有效码字,这也是编码的一个检错方式,利用其奇偶校验矩阵,校正子,接收到的码字序列为,判
6、断是否等于0。若等于0,则证明是有效码字;若不等于0,则证明不属于16个有效码字的一个。l 奇偶校验矩阵l 奇偶校验矩阵以下为纠错的关键程序:for(j=0;j<3;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&
7、lt;<"您所输入的待译码的码字序列为:"接下来便是译码的两个主要方法:第一个方法为查表法:程序中check_table()函数便是查表法。表格如下:k=4,n=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)(1000
8、110)(0111)(0010111)(1110)(0101110)(1111)(1111111)第二个方法编码方法便是:系统码直接取信息位译码程序如下:for(j=0;j<4;j+) if(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 <iostream>using namespace std;void check_table();/编码程序int main() int g47=
9、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,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
10、i,j,k;/顺序输入待编码4位信息序列lable:cout<<"请输入4位待编码消息序列:"<<endl;for(i=0;i<4;i+)cin>>ui;/判断是否输入正确数据for(i=0;i<4;i+)if(u0=0|u0=1)&(u1=0|u1=1)&(u2=0|u2=1)&(u3=0|u3=1)cout<<"您所输入的待编码消息序列为:"for(i=0;i<4;i+)cout<<ui;cout<<endl;else cout<&
11、lt;"输入错误!请输入正确的二进制4位0,1信息序列!"<<endl;goto lable;cout<<endl;/输出生成矩阵cout <<"(7,4)汉明码的生成矩阵G为:"<<endl; for(i=0;i<4;i+)for(j=0;j<7;j+)cout <<gij<< " "cout << endl;cout << endl;/编码程序/码字的系统结构分为冗余校验部分和消息部分,结构形式:v(x)=v0,v1,v2,
12、v3,v4,v5,v6/编码序列中v3,v4,v5,v6均为所提供的消息序列,对于(7,4)汉明码:/ v0=v3v5v6;/ v1=v3v4v5;/ v2=v4v5v6;cout<<" 等待编码中 "<<endl;cout<<"编码成功!编码后的码字序列为:"<<" "for(j=0;j<7;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=
13、1)vj= (u0u1)u2);/异或运算if(j=2)vj= (u1u2)u3);/异或运算cout << vj << " "cout<<endl;/顺序输入7位待译码有效码字序列loop: int a,result=0; cout<<"请输入7位待译码有效的消息序列:"<<endl;for(i=0;i<7;i+)cin>>vi;cout<<endl;for(i=0;i<7;i+)cout<<vi;/1.判断是否输入正确0,1序列 if(v0=0
14、|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;j<3;j+) a=(v0*ht0j)(v1*ht1j)(v2*ht2j)(v3*ht3j)(v4*ht4
15、j)(v5*ht5j)(v6*ht6j); result=result+a; if(result!=0) cout<<"输入的是无效的字码"<<endl; goto loop; else cout<<"输入字码有效"<<endl; cout<<"您所输入的待译码的码字序列为:" for(i=0;i<7;i+) cout<<vi; cout<<endl; /输出校验矩阵Hcout <<"(7,4)汉明码的校验矩阵H为:&quo
16、t;<<endl; for(i=0;i<3;i+)for(j=0;j<7;j+)cout <<hij<< " "cout << endl;cout << endl;/输出校验矩阵HT(这里的T为H 的上标,代表转置),目的是为了利用校正子进行编码检测s=r*HT;cout <<"(7,4)汉明码的校验矩阵H的转置矩阵为:"<<endl; for(i=0;i<7;i+)for(j=0;j<3;j+)cout <<htij<<
17、" "cout << endl;cout << endl;/检错算法check_table();/查表法cout<<"译码方法二:系统码直接取信息位译码 "<<endl;cout<<" 等待译码中 "<<endl;cout<<"译码成功!译码后的消息序列为:"<<" "for(j=0;j<4;j+) if(j=0) uj= v3;if(j=1) uj= v4;if(j=2) uj= v5;if(
18、j=3) uj= v6;cout << uj << " "cout<<endl;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<&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025《过秦论》中秦朝速亡原因的新视角分析课件
- 2025《祝福》女性形象课件
- 不合格管理制度培训
- 2026年国际航空货物运输代理合同
- 变电所检修工安全生产岗位责任制培训
- 2026年山西职业技术学院单招职业适应性考试题库带答案详解(综合卷)
- 气割、电焊工十不烧制度培训
- 2026年广东省湛江市单招职业适应性测试题库附答案详解(预热题)
- 2026年广东交通职业技术学院单招综合素质考试题库附参考答案详解(考试直接用)
- 2026年山西省长治市单招职业倾向性测试题库完整答案详解
- 公司北斗gps监控管理制度
- 恋爱观与家庭关系
- 酒店客房服务礼仪培训教材
- 律师执业技能课件
- 《老山界》省公开课一等奖全国示范课微课金奖课件
- 思想道德与法治2023年版电子版教辅教程-2
- 接触网运行检修与施工接触悬挂和附加导线安装与调整课件
- 甲状旁腺功能亢进的护理 课件
- 压力管道竣工资料范本
- DB50 372-2010 固定式低温绝热压力容器定期检验
- 《艾滋病教学课件》课件
评论
0/150
提交评论