(7,4)汉明码编译码程序说明课件

(7,4)汉明码编译码原理程序说明书

1、线性分组码

假设信源输出为一系列二进制数字0和1.在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。每个消息分组记为u,由k个信息位组成。因此共有2k种不同的消息。编码器按照一定的规则将输入的消息u转换为二进制n维向量v,这里n>k。此n维向量v就叫做消息u的码字(codeword)或码向量(code vector)。因此,对应于2种不同的消息,也有2种码字。这2个码字的集合就叫一个分组码(block code)。

一个长度为n,有2个码字的分组码,当且仅当其2个码字构成域GF(2)上所有n

kkkkk维向量空间的一个k维子空间时被称为线性(linear)(n,k)码。

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

码长:n?2?1 信息位:k?2?1?m 校验位:m?n?k,且m?3 最小距离:

mmdmin?d0?3

由于一个(n,k)的线性码C是所有二进制n维向量组成的向量空间Vn的一个k维子

空间,则可以找到k个线性独立的码字,g0,g1,……gk?1 ,使得C中的每个码字v都是这k个码字的一种线性组合。

(7,4)汉明码的生成矩阵如下,前三位为冗余校验部分,后四位为消息部分。

?g0??1 1 0 1 0 0 0??g??0 1 1 0 1 0 0?????G??1????

g1 1 1 0 0 1 0?2?????1 0 1 0 0 0 1???g3???如果u??u0u1u2u3?是待编码的消息序列,则相应的码字可如下给出:

v?uG??u0u1u2u3??g0??g??1????u0g0?u1g1?u2g2?u3g3 ?g2???g3??编码结构即码字v??v0v1v2v3v4v5v6?,对于(7,4)线性分组码汉明码而言,

v3,v4,v5,v6为所提供的消息序列,而v0?v3?v5?v,v1?v3?v4?v5,6v2?v4?v5?v6。

由以上关系可以得到(7,4)汉明码的全部码字如下所示:

k=4,n=7的线性分组码 消息 (0000) (1000) (0100) (1100) (0010) (1010) (0110) (1110) 码字 (0000000) (1101000) (0110100) (1011100) (1110010) (0011010) (1000110) (0101110) 消息 (0001) (1001) (0101) (1101) (0011) (1011) (0111) (1111) 码字 (1010001) (0111001) (1100101) (0001101) (0100011) (1001011) (0010111) (1111111)

2、用C++编写(7,4)汉明码编译码程序的思路如下: (1)编码程序

循环输入待编码消息序列u??u0u1u2u3?,首先判断输入是否符合输入条件:输入必须是4位0,1序列,共有2种情况。

编码程序如下:(本人水平有限,使用直接赋值的方法,望见笑) for(j=0;j<7;j++) {

if(j==3) v[j]= u[0];

if(j==4) v[j]= u[1];

if(j==5) v[j]= u[2];

if(j==6) v[j]= u[3]; if(j==0)

4 v[j]= ((u[0]^u[2])^u[3]); //异或运算 if(j==1)

v[j]= ((u[0]^u[1])^u[2]); //异或运算 if(j==2)

v[j]= ((u[1]^u[2])^u[3]); //异或运算 cout << v[j] << \}

cout<

编码的思想为: v3?u0

v4?u1 v5?u2

v0?v3?v5?v6 v1?v3?v4?v5 v2?v4?v5?v6

(2)译码程序:

循环输入待译码的码字序列v??v0v1v2v3v4v5v6?,第一步判断输入是否符合输入条件:输入必须是7位0,1序列,共有2种情况。但是2种情况中只有2即16个有效码字,那么第二步则是要判断是否是2即16个有效码字,这也是编码的一个检错方式,利用其奇偶校验矩阵H,校正子s,接收到的码字序列为r,判断s?r*H是否等于0。若等于0,则证明是有效码字;若不等于0,则证明不属于16个有效码字的一个。

T4774T?1001011???? 奇偶校验矩阵H??0101110?

?0010111????100??010????001???T? 奇偶校验矩阵H??110?

?011????111??101???以下为纠错的关键程序:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4