汉明码实验报告Word文档下载推荐.docx

上传人:b****5 文档编号:19931720 上传时间:2023-01-12 格式:DOCX 页数:26 大小:83.97KB
下载 相关 举报
汉明码实验报告Word文档下载推荐.docx_第1页
第1页 / 共26页
汉明码实验报告Word文档下载推荐.docx_第2页
第2页 / 共26页
汉明码实验报告Word文档下载推荐.docx_第3页
第3页 / 共26页
汉明码实验报告Word文档下载推荐.docx_第4页
第4页 / 共26页
汉明码实验报告Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汉明码实验报告Word文档下载推荐.docx

《汉明码实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汉明码实验报告Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

汉明码实验报告Word文档下载推荐.docx

/*对汉明码进行编码效率分析*/

intBinary_Str_Check(string);

voidEncoding();

〃汉明码编码

voidEncoding_Z();

〃增余汉明码编码

voidDecoding();

〃汉明码译码

voidDecoding_Z();

〃增余汉明码译码

voidGet_H_Column();

〃获取汉明码监督矩阵的每一列

voidGet_H_Column_Z();

//获取增余汉明码监督矩阵的每一列

voidGet_Judge_Result();

/获取汉明码校码结果

voidGet_Judge_Result_Z();

/获取增余汉明码校码结果

voidChecking();

〃汉明码校码

voidChecking_Z();

〃增余汉明码校码voidGOTO_HMCding_Z();

};

HMCodinghmcoding;

〃全局变量

初始化模块

/******************************************************************/

voidHMCoding:

:

Initializing(int_n,int_k){一一

n=_n;

k=_k;

r=_n-_k;

cout«

"

请给定("

<

n<

"

k<

)汉明码的监督矩阵

H["

vvrvv"

]["

vvnvv"

]:

v<

endl;

H=newint*[叶1];

//初始化(n,k)汉明码监督矩阵

for(i=0;

i<

r+1;

i++)

H[i]=newint[n+1];

r;

for(j=0;

j<

n;

j++)

cin>

>

H[i][j];

//初始化增余项

j<

n+1;

H[r][j]=1;

H[i][n]=0;

//为X分配存储单元

X=newint[n+1];

X[j]=0;

Get_H_Column();

〃获取监督矩阵的每一列

Get_H_Column_Z();

〃进一步获取增余监督矩阵的每一列

}

〃获取监督矩阵的每一列,用于汉明码校码

voidHMCoding:

Get_H_Column()

{一一

stringtemp;

H_Column=newstring[n+1];

i<

{

temp="

;

if(!

H[j][i])temp+='

0'

else

temp+='

1'

H_Column[i]=temp;

}_

H_Column[n]="

000"

〃获取增余监督矩阵的每一列,用于增余汉明码校码

Get_H_Column_Z()

{~~~

H_Column_Z=newstring[n+2];

H_Column_Z[i]=H_Column[i]+'

H_Column_Z[n+1]="

0000"

Show_H(intx,inty)

{_

x;

jvy;

cout<

H[i][j]<

Get_G()

G=newint*[k];

k;

G[i]=newint[n];

if(i==j)

G[i][j]=1;

else

G[i][j]=0;

G[j][i+k]=H[i][j];

Show_G(intx,inty)

Get_G();

y;

j++)cout«

G[i][j]vv"

cout«

HM_Efficiency_Analysing()

码的

对("

*<

,"

)汉明码的评价如下:

("

vvnvv"

vvkvv"

E=k/n*100%="

vvk*1.0/n*100<

v"

%"

vvendl;

n<

,"

P=n*(n-1)*Pe*Pe="

n*(n-1)*Pe*Pe<

/*********************************

*********************************/

〃二进制序列合理性检测

intHMCoding:

Binary_Str_Check(stringtemp)

intflag=1;

//先假设输入的消息串不含除0、1外的字符

for(inti=0;

temp[i]!

='

\0'

(temp[i]=='

||temp[i]=='

)){

flag=0;

break;

}returnflag;

〃汉明码编码

Encoding()

A:

stringbinary_str;

intflag;

intbinary_num=0;

coutvv"

请输入待编码的二进制序列:

cin>

binary_str;

flag=Binary_Str_Check(binary_str);

while(binary_str[binary_num]!

binary_num++;

/*统计输入的二进制序列所含码元个数*/

if(binary_num%k!

=O&

&

flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/

您输入的二进制序列存在冗余,请重新输入!

\n"

gotoA;

if(binary_num%k!

!

flag)

您输入的二进制序列存在冗余且含除0、1外的字符,请重新

输入!

if(binary_num%k==0&

您输入的二进制序列含除0、1外的字符,请重新输入!

gotoA;

code_str="

for(i=O;

binary_num;

i=i+k)

for(j=O;

j++)/*获取k位信息元*/

if(binary_str[i+j]=='

O'

X[j]=O;

X[j]=1;

inttemp;

stringpartial_str="

for(intt=O;

t<

n;

t++)

{/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元

码组*/

temp=O;

temp+=X[j]*G[j][t];

if(temp%2==O)

partial_str+='

code_str+=partial_str;

}一一

进行("

vv*v"

)汉明码编码后的二进制序列为:

vcode_strvvendl;

计算机科学与工程系

Encoding_Z()

{_code_str="

A_Z:

stringbinary_str;

intbinary_num=O;

=0&

flag)/*序列所含码元个数不是k的整数倍,无法

全部编码*/

gotoA_Z;

gotoA_Z;

ivbinary_num;

jvk;

for(intt=0;

tvn;

码组*/temp=O;

for(j=0;

j++)temp+=X[j]*G[j][t];

if(temp%2==0){partial_str+='

X[j+k]=O;

}else{partial_str+='

X[j+k]=1;

//生成增余汉明码最后一位

//监督规则:

对原汉明码所有n个码元取模2和

intsum=0;

sum+=X[j];

if(sum%2==0)

n+1<

,"

)增余汉明码编码后的二进制序列为:

<

code_str<

/*********************************校*********************************/

〃利用汉明码校码

Checking()

B:

stringbinary_str;

请输入待译的二进制序列:

if(binary_num%n!

flag)/*序列所含码元个数不是n的整数倍,无法全部译码*/

gotoB;

if(binary_num%n!

flag){_

if(binary_num%n==0&

gotoB;

code_num=binary_num/n;

/统计n元码组的个数

check_code=newint*[code_num];

code_num;

check_code[i]=newint[n];

{/*每次取n个码元进行校正*/

j++){

check_code[i][j]=binary_str[i*n+j]-'

}Get_Judge_Result();

〃利用增余汉明码校码

Checking_Z()

B_Z:

stringbinary_str;

if(binary_num%(n+1)!

flag)/*序列所含码元个数不是n+1的整数倍,无法全部译码*/-

gotoB_Z;

if(binary_num%(n+1)!

flag)

if(binary_num%(n+1)==0&

code_num_z=binary_num/(n+1);

/统计n+1元码组的个数

check_code=newint*[code_num_z];

code_num_z;

check_code[i]=newint[n+2];

{/*每次取n+1个码元进行校正*/

check_code[i][j]=binary_str[i*(n+1)+j]-'

Get_Judge_Result_Z();

}一一一

〃获取汉明码校码结果

Get_Judge_Result()

stringpartial_str;

("

)汉明码校码结果如下:

endl;

码组状态校正后

tvcode_num;

partial_str="

ivr;

temp=0;

jvn;

temp+=H[i][j]*check_code[t][j];

if(temp%2==0)

//对partial_str进行判断for(i=0;

i++){

if(H_Column[i]==partial_str){一一flag=1;

break;

if(flag&

n)〃表示第i个码元出错,将其改正

check_code[t][j];

第"

i+1<

位错,可纠正"

check_code[t][i]=(check_code[t][i]+1)%2;

//1变0,0变1for(j=0;

i==n)〃表示全对

j++)cout<

全对"

〃获取增余汉明码校码结果

Get_Judge_Result_Z()

{一一一

("

)增余汉明码校码结果如下(注:

*表示无法识别的码元):

jvn+1;

//对partial_str进行判断

n+2;

if(H_Column_Z[i]==partial_str)

{~~一

flag=1;

n+1)〃表示第i个码元出错,将其改正

check_code[t][n+1]=1;

〃表示正确接收for(j=0;

位错,可纠正

i==n+1)//表示全对

check_code[t][n+1]=0;

〃表示两位出错并无法纠正for(j=0;

某两位出错,无法纠正"

coutvv'

*'

//*表示无法正确识别的码元

〃利用汉明码译码

Decoding()

)汉明码译码结果为:

for(i=0;

check_code[i][j];

}cout«

〃利用增余汉明码译码

Decoding_Z()

表示无

n+1vv"

)增余汉明码译码结果为(注:

*法识别的码元):

{一一if(check_code[i][n+1]==1)

}else{for(j=0;

'

GOTO_HMCding_Z()

charchoice仁'

\n***************欢迎进入("

"

)增余汉明

码编码/校码/译码系统****************\n"

由汉明监督矩阵导出的增余监督矩阵H["

叶1vv"

vvn+1<

]

为:

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

当前位置:首页 > 初中教育 > 英语

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

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