(7-4)汉明码编译码程序说明资料Word格式.doc

上传人:b****9 文档编号:13072088 上传时间:2022-10-04 格式:DOC 页数:12 大小:321.58KB
下载 相关 举报
(7-4)汉明码编译码程序说明资料Word格式.doc_第1页
第1页 / 共12页
(7-4)汉明码编译码程序说明资料Word格式.doc_第2页
第2页 / 共12页
(7-4)汉明码编译码程序说明资料Word格式.doc_第3页
第3页 / 共12页
(7-4)汉明码编译码程序说明资料Word格式.doc_第4页
第4页 / 共12页
(7-4)汉明码编译码程序说明资料Word格式.doc_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

(7-4)汉明码编译码程序说明资料Word格式.doc

《(7-4)汉明码编译码程序说明资料Word格式.doc》由会员分享,可在线阅读,更多相关《(7-4)汉明码编译码程序说明资料Word格式.doc(12页珍藏版)》请在冰豆网上搜索。

(7-4)汉明码编译码程序说明资料Word格式.doc

由于一个(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)

(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;

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)

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<

endl;

编码的思想为:

(2)译码程序:

循环输入待译码的码字序列,第一步判断输入是否符合输入条件:

输入必须是7位0,1序列,共有种情况。

但是种情况中只有即16个有效码字,那么第二步则是要判断是否是即16个有效码字,这也是编码的一个检错方式,利用其奇偶校验矩阵,校正子,接收到的码字序列为,判断是否等于0。

若等于0,则证明是有效码字;

若不等于0,则证明不属于16个有效码字的一个。

l奇偶校验矩阵

以下为纠错的关键程序:

3;

{

a=(v[0]*ht[0][j])^(v[1]*ht[1][j])^(v[2]*ht[2][j])^(v[3]*ht[3][j])^(v[4]*ht[4][j])^(v[5]*ht[5][j])^(v[6]*ht[6][j]);

result=result+a;

}

if(result!

=0)

cout<

"

输入的是无效的字码"

gotoloop;

elsecout<

输入字码有效"

cout<

您所输入的待译码的码字序列为:

接下来便是译码的两个主要方法:

第一个方法为查表法:

程序中check_table()函数便是查表法。

表格如下:

第二个方法编码方法便是:

系统码直接取信息位译码

程序如下:

for(j=0;

4;

if(j==0)

u[j]=v[3];

if(j==1)

u[j]=v[4];

if(j==2)

u[j]=v[5];

if(j==3)

u[j]=v[6];

u[j]<

3、程序附录

//(7,4)编译码程序

#include<

iostream>

usingnamespacestd;

voidcheck_table();

//编码程序

intmain()

{

intg[4][7]={{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个码字的一种线性组合,

inth[3][7]={{1,0,0,1,0,1,1},{0,1,0,1,1,1,0},{0,0,1,0,1,1,1}};

//声明校验矩阵H,

intht[7][3]={{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的上标)

intu[4];

//声明待编码的消息序列,即未编码前的信息序列

intv[7];

//声明编码后的码字序列

//ints[7];

inti,j,k;

//顺序输入待编码4位信息序列

lable:

请输入4位待编码消息序列:

for(i=0;

i<

i++)

{

cin>

>

u[i];

//判断是否输入正确数据

if((u[0]==0|u[0]==1)&

(u[1]==0|u[1]==1)&

(u[2]==0|u[2]==1)&

(u[3]==0|u[3]==1))

{

cout<

您所输入的待编码消息序列为:

for(i=0;

{

cout<

}

}

else

输入错误!

请输入正确的二进制4位0,1信息序列!

gotolable;

cout<

//输出生成矩阵

cout<

(7,4)汉明码的生成矩阵G为:

for(j=0;

cout<

g[i][j]<

cout<

endl;

//码字的系统结构分为冗余校验部分和消息部分,结构形式:

v(x)={v0,v1,v2,v3,v4,v5,v6}

//编码序列中v3,v4,v5,v6均为所提供的消息序列,对于(7,4)汉明码:

//v0=v3^v5^v6;

//v1=v3^v4^v5;

//v2=v4^v5^v6;

等待编码中……"

编码成功!

编码后的码字序列为:

//顺序输入7位待译码有效码字序列

loop:

inta,result=0;

cout<

请输入7位待译码有效的消息序列:

v[i];

i++

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

当前位置:首页 > 党团工作 > 党团建设

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

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