ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:174.45KB ,
资源ID:18457299      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18457299.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汉明码卷积码实验Word文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汉明码卷积码实验Word文档格式.docx

1、这些监督码元和信息码元之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。不同的编码方法有不同的检错或纠错能力。有的编码就只能检错不能纠错。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。汉明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在汉明码中的全部传输码字是由原来的信息和附加的奇偶监督位组成的。每一个这种奇偶位被编在传输码字的特定比特位置上。推导并使用长度为m位的码字的汉明码,所需步骤如下:1、确定最小的监督位数k,将它们记成D1、D2、Dk,每个监

2、督位符合不同的奇偶测试规定。2、原有信息和k个监督位一起编成长为m+k位的新码字。选择k监督位(0或1)以满足必要的奇偶条件。3、对所接收的信息作所需的k个奇偶检查。4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。卷积码实验原理:卷积码将k个信息比特编成n个比特,但k和n通常很小,特别适合以串行形式进行传输,时延小。与分组码不同,卷积码编码后的n个码元不仅与当前段的k个信息有关,还与前面的N-1段信息有关,编码过程中互相关联的码元个数为nN。卷积码的纠错性能随N的增加而增大,而差错率随N的增加而指数下降。汉明码程序编写:

3、#include #includeusing namespace std;#define Pe 0.0001class HMCodingprivate: int n,k,r;/汉明码参数 int i,j;/用于指示循环次数 int *H,*X,*G,*check_code; string *H_Column,*H_Column_Z,code_str; int code_num,code_num_z; public: void Initializing(int,int); void Show_H(int,int); void Get_G(); void Show_G(int,int); void

4、 HM_Efficiency_Analysing();/*对汉明码进行编码效率分析*/ int Binary_Str_Check(string); void Encoding();/汉明码编码 void Encoding_Z();/增余汉明码编码 void Decoding();/汉明码译码 void Decoding_Z();/增余汉明码译码 void Get_H_Column();/获取汉明码监督矩阵的每一列 void Get_H_Column_Z();/获取增余汉明码监督矩阵的每一列 void Get_Judge_Result();/获取汉明码校码结果 void Get_Judge_Re

5、sult_Z();/获取增余汉明码校码结果 void Checking();/汉明码校码 void Checking_Z();/增余汉明码校码 void GOTO_HMCding_Z(); HMCoding hmcoding;/全局变量 void HMCoding:Initializing(int _n,int _k) n=_n; k=_k; r=_n-_k; coutttt请给定( n , k)汉明码的监督矩阵Hr:endl; H=new int *r+1; for(i=0;ir+1;i+) Hi=new intn+1;r; for(j=0;jHij; /初始化增余项n+1;j+) Hrj=

6、1;i+) Hin=0; /为 X 分配存储单元 X=new intn+1; Xj=0; Get_H_Column();/获取监督矩阵的每一列 Get_H_Column_Z();/进一步获取增余监督矩阵的每一列 Get_H_Column() string temp; H_Column=new stringn+1; temp=; if(!Hji) temp+=0 else temp+=1 H_Columni=temp; H_Columnn=000 /获取增余监督矩阵的每一列,用于增余汉明码校码Get_H_Column_Z() H_Column_Z=new stringn+2; H_Column_

7、Zi=H_Columni+ H_Column_Zn+1=0000Show_H(int x,int y) for(i=0;x; for(j=0;y;Hij Get_G() G=new int *k;k; Gi=new intn; if(i=j) Gij=1; else Gij=0; Gji+k=Hij;Show_G(int x,int y) Get_G();GijHM_Efficiency_Analysing() coutttt对(,)汉明码的评价:( , )汉明码的效率E=k/n*100%=k*1.0/n*100% )汉明码的错误概率 P=n*(n-1)*Pe*Pe=n*(n-1)*Pe*Pe

8、 /* 编 码 模 块 */ /二进制序列合理性检测 int HMCoding:Binary_Str_Check(string temp) int flag=1;/先假设输入的消息串不含除 0、1 外的字符 for(int i=0;tempi!=0 if(!(tempi=|tempi=) flag=0; break; return flag; /汉明码编码Encoding() A: string binary_str; int flag; int binary_num=0;请输入待编码的二进制序列:binary_str; flag=Binary_Str_Check(binary_str); w

9、hile(binary_strbinary_num!) binary_num+;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&flag)/*序列所含码元个数不是 k 的整数倍,无法全部编码*/ cout您输入的二进制序列存在冗余,请重新输入!n goto A; if(binary_num%k!flag)您输入的二进制序列存在冗余且含除 0、1 外的字符,请重新 输入! if(binary_num%k=0&您输入的二进制序列含除 0、1 外的字符,请重新输入! code_str=binary_num;i=i+k)j+)/*获取 k 位信息元*/ if(binary

10、_stri+j= else Xj=1; int temp; string partial_str= for(int t=0;tt+) /*用 k 位信息元组成的向量与生成矩阵作矩阵乘法,得到对应 n 元 码组*/ temp=0; temp+=Xj*Gjt; if(temp%2=0) partial_str+= else partial_str+= code_str+=partial_str;ttt进行()汉明码编码后的二进制序列为:code_strEncoding_Z() code_str=A_Z:string binary_str;flag)/*序列所含码元个数不是 k 的整数倍,无法 全部

11、编码*/输入的二进制序列存在冗余,请重新输入! goto A_Z;输入的二进制序列存在冗余且含除 0、1 外的字符,请重新 输入!输入的二进制序列含除 0、1 外的字符,请重新输入!for(j=0;temp+=Xj*Gjt;if(temp%2=0) partial_str+= Xj+k=0;else partial_str+= Xj+k=1; /生成增余汉明码最后一位 /监督规则:对原汉明码所有 n 个码元取模 2 和 int sum=0; sum+=Xj; if(sum%2=0) partial_str+=进行 (n+1, ) 增余汉明码编码后的二进制序列为: n /* 校 码 模 块 */

12、 /利用汉明码校码Checking()B:请输入待译的二进制序列:) /*统计输入的二进制序列所含码元个数*/ if(binary_num%n! /*序列所含码元个数不是 n 的整数倍,无法 全部译码*/ goto B; flag) if(binary_num%n=0& code_num=binary_num/n;/统计 n 元码组的个数 check_code=new int*code_num;code_num; check_codei=new intn;i+) /*每次取 n 个码元进行校正*/ check_codeij=binary_stri*n+j- Get_Judge_Result()

13、; /利用增余汉明码校码Checking_Z() B_Z: if(binary_num%(n+1)!flag)/*序列所含码元个数不是 n+1 的整数倍, 无法全部译码*/ goto B_Z;输入的二进制序列存在冗余且含除 0、1 外的字符,请重新输入! if(binary_num%(n+1)=0& code_num_z=binary_num/(n+1);/统计 n+1 元码组的个数 check_code=new int*code_num_z;code_num_z; check_codei=new intn+2; /*每次取 n+1 个码元进行校正*/ check_codeij=binary_

14、stri*(n+1)+j- Get_Judge_Result_Z(); /获取汉明码校码结果Get_Judge_Result() int temp; string partial_str;()汉明码校码结果如下:码组 状态 partial_str= temp=0; temp+=Hij*check_codetj; if(temp%2=0) /对 partial_str 进行判断for(i=0; if(H_Columni=partial_str) flag=1;if(flag&n)/表示第 i 个码元出错,将其改正 for(j=0;check_codetj;cout 第i+1位错,可纠正 ; ch

15、eck_codeti=(check_codeti+1)%2;/1 变 0,0 变 1i=n)/表示全对 全对 /获取增余汉明码校码结果Get_Judge_Result_Z()增余汉明码校码结果如下(注:* 表示 无法识别的码元) :码组 状态 校正后 n+2; if(H_Column_Zi=partial_str) if(flag&n+1)/表示第 i 个码元出错,将其改正 check_codetn+1=1;/表示正确接收j+) couti=n+1)/表示全对 check_codetn+1=0;/表示两位出错并无法纠正 某两位出错,无法纠正 */* 表示无法正确识别的码元 /* 译 码 模 块 */ /利用汉明码译码Decoding()汉明码译码结果为:check_codeij; /利用增余汉明码译码Decoding_Z()增余汉明码译码结果为(注:* 表示无 法识别的码元) :

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

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