1、由于一个(n,k)的线性码C是所有二进制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
2、)(0101)(1100101)(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=
3、 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;编码的思想为:(2)译码程序:循环输入待译码的码字序列,第一步判断输入是否符合输入条件:输入必须是7位0,1序列,共有种情况。但是种情况中只有即16个有效码字,那么第二步则是要判断是否是即16个有效码字,这也是编码的一个检错方式,利用其奇偶校验矩阵,校正子,接收到的码字序列为,判断是否等于0。若等于0,则证明是有效码字;若不等于
4、0,则证明不属于16个有效码字的一个。l 奇偶校验矩阵以下为纠错的关键程序:3; a=(v0*ht0j)(v1*ht1j)(v2*ht2j)(v3*ht3j)(v4*ht4j)(v5*ht5j)(v6*ht6j); result=result+a; if(result!=0) cout输入的是无效的字码 goto loop;else cout输入字码有效cout您所输入的待译码的码字序列为:接下来便是译码的两个主要方法:第一个方法为查表法:程序中check_table()函数便是查表法。表格如下:第二个方法编码方法便是:系统码直接取信息位译码程序如下:for(j=0;4;if(j=0) uj=
5、 v3;if(j=1) uj= v4;if(j=2) uj= v5;if(j=3) uj= v6; 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,0,0,0,1,0,1,1,1;/声明校验矩
6、阵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:请输入4位待编码消息序列:for(i=0;iui;/判断是否输入正确数据if(u0=0|u0=1)&(u1=0|u1=1)&(u2=0|u2=1)&(u3=0|u3=1)cout您所输入的待编码消息序列为:for(i=0;coutelse 输入错误!请输入正确的二进制4位0,1信息序列!goto lable;cout/输出生成矩阵cout (7,4)汉明码的生成矩阵G为: for(j=0;cout gijcout endl;/码字的系统结构分为冗余校验部分和消息部分,结构形式:v(x)=v0,v1,v2,v3,v4,v5,v6/编码序列中v3,v4,v5,v6均为所提供的消息序列,对于(7,4)汉明码:/ v0=v3v5v6;/ v1=v3v4v5;/ v2=v4v5v6; 等待编码中 编码成功!编码后的码字序列为:/顺序输入7位待译码有效码字序列loop: int a,result=0; cout请输入7位待译码有效的消息序列:vi;i+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1