实验五汉明码的编译码
- 格式:doc
- 大小:195.00 KB
- 文档页数:14
汉明码编译码实验一、实验目的1、掌握汉明码编译码原理2、掌握汉明码纠错检错原理二、实验内容1、汉明码编码实验。
2、汉明码译码实验。
3、汉明码纠错检错能力验证实验。
三、实验器材LTE-TX-02E通信原理综合实验系统----------------------------------------------模块8四、实验原理在随机信道中,错码的出现是随机的,且错码之间是统计独立的。
例如,由高斯白噪声引起的错码就具有这种性质。
因此,当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。
由于信息码元序列是一种随机序列,接收端是无法预知的,也无法识别其中有无错码。
为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。
这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。
在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。
不同的编码方法有不同的检错或纠错能力。
有的编码就只能检错不能纠错。
那么,为了纠正一位错码,在分组码中最少要加入多少监督位才行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致汉明码的诞生。
汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。
下面我们介绍汉明码的构造原理。
一般说来,若码长为n,信息位数为k,则监督位数r=n−k。
如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求2r− 1 ≥n 或2r ≥k + r + 1 (14-1)下面我们通过一个例子来说明如何具体构造这些监督关系式。
设分组码(n,k)中k=4,为了纠正一位错码,由式(14-1)可知,要求监督位数r≥3。
若取r=3,则n= k + r =7。
我们用α6α5…α0表示这7个码元,用S1、S2、S3表示三个监督关系式中的校正子,则S1 S2 S3的值与错码位置的对应关系可以规定如表14-1所列。
表14-1由表中规定可见,仅当一错码位置在α2 、α4 、α5 或α6 时,校正子S1 为1;否则S1 为0。
第一章 绪论1.1差错控制编码差错控制编码 1.1 1.1 概述概述数字信号在传输过程中,数字信号在传输过程中,由于受到干扰的影响,由于受到干扰的影响,码元波形将变坏。
码元波形将变坏。
接收端收接收端收到后可能发生错误判决。
到后可能发生错误判决。
由于乘性干扰引起的码间串扰,由于乘性干扰引起的码间串扰,可以采用均衡的办法来可以采用均衡的办法来纠正。
纠正。
而加性干扰的影响则需要用其他办法解决。
而加性干扰的影响则需要用其他办法解决。
在设计数字通信系统时,在设计数字通信系统时,应该应该首先从合理选择调制制度,首先从合理选择调制制度,解调方法以及发送功率等方面考虑,解调方法以及发送功率等方面考虑,使加性干扰不足使加性干扰不足以影响到误码率要求。
在仍不能满足要求时,就要考虑采用差错控制措施了。
从差错控制角度看,按加性干扰引起的错码分布规律不同,信道可以分为3类,即随机信道,突发信道和混合信道。
在随机信道中,错码的出现是随机的,而且错码之间是统计独立的。
而且错码之间是统计独立的。
在突发信道中,在突发信道中,错码是成串集中出现的,错码是成串集中出现的,而且在短而且在短促的时间段之间存在较长的无错码区间。
把既存在随机错码又存在突发错码的的信道称为混合信道。
对于不同类型的信道,应该采用不同的差错控制技术。
1.2 1.2 纠错编码原理纠错编码原理我们把信息码分组,为每组信息码附加若干监督码的编码称为分组码为每组信息码附加若干监督码的编码称为分组码(block (block code).code).在分组码中,在分组码中,监督码元仅监督本码组中的信息码元。
分组码一般用符号(n ,k )表示,其中n 是码组的总位数,又称为码组的长度(码长),k 是码组中信息码元的数目,码元的数目,n-k=r n-k=r 为码组中的监督码元的数目,或者称为监督位数目,分组码的结构如图2示,图中前k 位为信息位,后面附加r 个监督位。
其中a n-1到a r 为k 个信息位,个信息位,a a r-1到a 0为r 个监督位。
汉明码编译码汉明码编译码一设计思想汉明码是一种常用的纠错码,具有纠一位错误的能力。
本实验使用Matlab 平台,分别用程序语言和simulink来实现汉明码的编译码。
用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。
用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。
此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。
二实现流程1.汉明码编译码图 1 汉明码编译码框图1)根据生成多项式,产生指定的生成矩阵G2)产生随机的信息序列M3)由C MG得到码字4)进入信道传输S RH得到伴随式5)计算=T6)得到解码码流7) 得到解码信息序列2.汉明码误码性能分析误码率(SER )是指传输前后错误比特数占全部比特数的比值。
误帧率(FER )是指传输前后错误码字数占全部码字数的比值。
通过按位比较、按帧比较可以实现误码率和误帧率的统计。
3. 构建完整通信系统图 2 完整通信系统框图三 结论分析1. 汉明码编译码编写了GUI 界面方便呈现过程和结果。
输入信息序列Huffman 编码Hamming 编码信道Hamming 译码Huffman 译码输出信息序列噪声图 3 汉明码编译码演示GUI 界面以产生(7,4)汉明码为例说明过程的具体实现。
1)根据生成多项式,产生指定的生成矩阵G用[H,G,n,k] = hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H 、G 以及码字长度n 和信息位数k100101101011100010111H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1101000011010011100101010001G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦2) 产生随机的信息序列M0010=01000111M ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦3) 由C MG =得到码字010001101101000010111C ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦4) 进入信道传输假设是BSC 信道,错误转移概率设定为0.1传输后接收端得到的码流为000011110100000111101R ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦红色表示错误比特。
汉明码(Hamming)的编码和译码算法本文所讨论的汉明码是一种性能良好的码,它是在纠错编码的实践中较早发现的一类具有纠单个错误能力的纠错码,在通信和计算机工程中都有应用。
例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错。
简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。
如果对汉明码作进一步推广,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,而且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。
各种码之间的大致关系显示如下。
一、汉明码的编码算法输入:信源消息u(消息分组u)输出:码字v处理:信源输出为一系列二进制数字0和1。
在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。
每个消息分组记为u,由k个信息位组成。
因此共有2k种不同的消息。
编码器按照一定的规则将输入的消息u转换为二进制n 维向量v ,这里n >k 。
此n 维向量v 就叫做消息u 的码字(codeword )或码向量(code vector )。
因此,对应于2k 种不同的消息,也有2k 种码字。
这2k 个码字的集合就叫一个分组码(block code )。
若一个分组码可用,2k 个码字必须各不相同。
因此,消息u 和码字v 存在一一对应关系。
由于n 符号输出码字只取决于对应的k 比特输入消息,即每个消息是独立编码的,从而编码器是无记忆的,且可用组合逻辑电路来实现。
定义:一个长度为n ,有2k 个码字的分组码,当且仅当其2k 个码字构成域GF(2)上所有n 维向量组成的向量空间的一个K 维子空间时被称为线性(linear )(n, k)码。
汉明码(n ,k ,d )就是线性分组(n, k)码的一种。
其编码算法即为使用生成矩阵G :v = u ·G 。
汉明码的编码和译码算法汉明码(Hamming)的编码和译码算法本⽂所讨论的汉明码是⼀种性能良好的码,它是在纠错编码的实践中较早发现的⼀类具有纠单个错误能⼒的纠错码,在通信和计算机⼯程中都有应⽤。
例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产⽣数据位错误,这时可以利⽤汉明码来检测并纠错。
简单的说,汉明码是⼀个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。
如果对汉明码作进⼀步推⼴,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,⽽且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。
各种码之间的⼤致关系显⽰如下。
⼀、汉明码的编码算法输⼊:信源消息u(消息分组u)输出:码字v处理:信源输出为⼀系列⼆进制数字0和1。
在分组码中,这些⼆进制信息序列分成固定长度的消息分组(message blocks)。
每个消息分组记为u,由k个信息位组成。
因此共有2k种不同的消息。
编码器按照⼀定的规则将输⼊的消息u转换为⼆进制n 维向量v ,这⾥n >k 。
此n 维向量v 就叫做消息u 的码字(codeword )或码向量(code vector )。
因此,对应于2k 种不同的消息,也有2k 种码字。
这2k 个码字的集合就叫⼀个分组码(block code )。
若⼀个分组码可⽤,2k 个码字必须各不相同。
因此,消息u 和码字v 存在⼀⼀对应关系。
由于n 符号输出码字只取决于对应的k ⽐特输⼊消息,即每个消息是独⽴编码的,从⽽编码器是⽆记忆的,且可⽤组合逻辑电路来实现。
定义:⼀个长度为n ,有2k 个码字的分组码,当且仅当其2k 个码字构成域GF(2)上所有n 维向量组成的向量空间的⼀个K 维⼦空间时被称为线性(linear )(n, k)码。
汉明码(n ,k ,d )就是线性分组(n, k)码的⼀种。
其编码算法即为使⽤⽣成矩阵G :v = u ·G 。
汉明编译码系统自行设计实验一、 实验原理差错控制编码的基本作法是:在发送端被传输的信息序列上附加一些监督码元,这些多余的码元与信息之间以某种确定的规则建立校验关系。
汉明码(7,4)是一种纠错码,是能纠正单个错误的线性分组码。
它有以下特点:码长n=2m -1 最小码距d=3 信息码位 k=2n -m -1纠错能力t=1监督码位r=n -k这里m 位≥2的正整数,给定m 后,既可构造出具体的汉明码(n ,k )。
汉明码的监督矩阵有n 列m 行,它的n 列分别由除了全0之外的m 位码组构成,每个码组只在某列中出现一次。
系统中的监督矩阵如下图所示:1110100H=01110101101001其相应的生成矩阵为:1000101010011100101100001011G=汉明译码的方法,可以采用计算校正子,然后确定错误图样并加以纠正的方法。
图9.1和图9.2给出汉明编码器和译码器电原理图。
a 6 a 5 a 4 a 3 a 2 a 1 a 0a 6 a 5 a 4 a 3图9.1汉明编码器电原理图●●●●●●●●●a 6 a 5 a 4 a 3a 6 a 5 a 4 a 3 a 3 a 3 a 3图9.2汉明译码器电原理图3-8译码器校正子生成错码 指示765432 1● ●● ● ●●●●表1.1 (7,4)汉明编码输入数据与监督码元生成表4位信息位 a 6, a 5, a 4, a 3 3位监督码元 a 2, a 1, a 04位信息位 a 6, a 5, a 4, a 3 3位监督码元a 2, a 1, a 00000 000 1000 101 0001 011 1001 110 0010 110 1010 011 0011 101 1011 000 0100 111 1100 010 0101 100 1101 001 0110 001 1110 100 01110101111111表1.1为(7,4)汉明编码输入数据与监督码元生成表。
汉明码编译码汉明码编译码一设计思想汉明码是一种常用的纠错码,具有纠一位错误的能力。
本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。
用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。
用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。
此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。
二实现流程1.汉明码编译码生成矩阵G信息序列M产生码字C信道计算伴随式S接收码流R校验矩阵H解码码流C2解码信息序列M2图 1 汉明码编译码框图1)根据生成多项式,产生指定的生成矩阵G2)产生随机的信息序列M3)由C MG得到码字4)进入信道传输5) 计算=TS RH 得到伴随式 6) 得到解码码流7) 得到解码信息序列2. 汉明码误码性能分析误码率(SER )是指传输前后错误比特数占全部比特数的比值。
误帧率(FER )是指传输前后错误码字数占全部码字数的比值。
通过按位比较、按帧比较可以实现误码率和误帧率的统计。
3. 构建完整通信系统图 2 完整通信系统框图 输入信息序列Huffman 编码Hamming 编码信道Hamming 译码Huffman 译码输出信息序列噪声三 结论分析1. 汉明码编译码编写了GUI 界面方便呈现过程和结果。
图 3 汉明码编译码演示GUI 界面以产生(7,4)汉明码为例说明过程的具体实现。
1) 根据生成多项式,产生指定的生成矩阵G 用[H,G,n,k] = hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H 、G 以及码字长度n 和信息位数k100101101011100010111H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦ 1101000011010011100101010001G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦2) 产生随机的信息序列M0010=01000111M ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦3) 由C MG =得到码字010001101101000010111C ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦4) 进入信道传输假设是BSC 信道,错误转移概率设定为0.1 传输后接收端得到的码流为000011110100000111101R ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦红色表示错误比特。
姓名:学号:班级:
第周星期第大节
实验名称:汉明编码和译码实验
一、实验目的
1.掌握汉明码编译码原理。
2.掌握汉明码纠错检错原理。
3.通过纠错编解码实验,加深对纠错编解码理论的理解。
二、实验仪器
1.ZH5001A通信原理综合实验系统
2.20MHz双踪示波器
三、实验内容
2.编码规则验证
(1)输入数据为0011
(2)输入数据为1100
3.译码数据输出观测
(1)m序列方式为11
(1)不加错
♦观测加错指示TPC03与错码检测指示输出波形TPW03波形
(2)加1位错
♦观测加错指示TPC03与错码检测指示输出波形TPW03波形
(4)加3位错
(1)不加错
加2位错不能全部正确译码
(4)加3位错
四、思考题
2.汉明编码器模块的使能开关,译码器模块的使能模块(H_EN断路器)起什么作用?
从电路图中可以看出,没有插入H_EN时,汉明编码器被短路,输出数据没有经过汉明编码。
插入H_EN时,输出数据经过汉明编码。
《数据通信原理》实验报告实验题目:汉明码的编译码专业班级:信息工程2班姓名学号:赵星敏201342351 李明阳201342300指导教师:刘钰实验五 汉明码的编译码一、实验目的1、理解汉明码的编码原理2、掌握利用simulink 进行汉明码编译码仿真的方法3、掌握利用matlab 指令进行汉明码编译码的方法 二、实验原理在数字通信系统中,为了实现信息的可靠传输,需要采用差错控制来发现并纠正错误。
进行差错控制的方法就是对信息进行差错控制编码,差错控制编码种类较多,其中线性分组码是常用的一类编码,具有编码效率高,实现较简单以及检纠错能力较强等特点。
一般数字通信系统模型由信源信宿、加解密、编解码、调制解调等模块组成,其中有些通信模块是组成整个通信系统所必不可少的,有些模块是可以不需要的。
差错控制编解码属于编解码器通信模块,为了方便分析差错控制编码性能,通过将通信系统简化为如图5-1所示的信息传输系统来搭建仿真实验平台进行分析研究。
图5-1编码,有时也称为纠错编码。
不同的编码方法,有不同的检错或纠错能力,有的编码只能检错,不能纠错。
一般说来,付出的代价越大,检纠错的能力就越强。
在选择差错控制编码时需要考虑到编码效率、检纠错的能力等方面因素的影响。
按照是否将信息码元进行分组可以将差错控制编码分为分组码和非分组码,线性码是指信息位和监督位满足一组线性方程的码,任一(n,k)线性分组码的编码效率为k/n 。
Simulink 通信模块中提供了二进制线性分组码编解码器:Binary Linear Encoder 和Binary Linear Decoder 。
汉明码是汉明(Hamming)于1950年提出的能纠正一位错码且编码效率较高的线性分组码,它可以用一种简洁有效的方法进行解码。
汉明码不是仅指某一种码,而是指一类码。
二进制汉明码应满足条件:2n-k =1+n,令m=n-k,汉明码n 和k 服从关系式:码长n=2m -1;信息位k=2m -1-m ;最小距离dmin=3(指汉明距离)。
课程名称通信原理实验序号实验8实验名称汉明码编译码及纠错能力验证实验实验地点B702实验学时 2 实验类型验证性指导教师实验员专业_电子信息工程__ 班级14电信一班学号姓名2016年12 月15 日五、测试/调试及实验结果分析图片说明:CH1(黄色)帧同步信号CH2(浅蓝色)编码后信号CH3(粉红色)编码前信号CH4(深蓝色)译码后信号保护位无加错的时候设置的原始信号是:1100,编码后的信号是:1100001,译码后的信号为:1100。
对照图片的波形图,无误输出,汉明码正确。
有延时的现象。
1位加错的时候:设置的原始信号是:1100,编码后的信号是:1101001译码后的信号是:1100 通过计算S1、S2、S3可知错误位为:a3 对照译码后的波形与编码前的波形,可知已经纠错成功。
汉明码的一位纠错功能实现。
有延时的现象。
2位加错的时候:设置的原始信号是:1100,编码后的信号是:1111001码后的信号是:0111 对照无错的编码后序列,可知错误位为:a3、a4 对照译码后的波形与编码前的波形,可知译码后的波形与编码前的波形对不上。
(7,4)汉明码的2位纠错功能无法实现。
3位加错的时候:设置的原始信号是:1100,编码后的信号是:1011001码后的信号是:0111 对照无错的编码后序列,可知错误位为:a3、a4、a5 ,对照译码后的波形与编码前的波形,可知译码后的波形与编码前的波形对不上。
(7,4)汉明码的3位纠错功能无法实现。
4位加错的时候:设置的原始信号是:1100,编码后的信号是:0011001码后的信号是:0111 对照无错的编码后序列,可知错误位为:a3、a4、a5 、a6 ,对照译码后的波形与编码前的波形,可知译码后的波形与编码前的波形对不上。
(7,4)汉明码的4位纠错功能无法实现。
六、实验结论与体会1.课堂上对汉明码的理解不够深入,经过本次实验明显加深了我对汉明码的理论的认识和理解,实际动手才是关键2.经过编码后的编码序列,在加错码的时候,对a0、a1、a2位没有影响,也就是说这三位不会在无错的时候编码是什么,加错后这三位的编码还是一样3.一位加错时,(7,4)汉明码有检错以及纠错的功能,两位加错的时候,只有检错的功能,却没有纠错的功能,三位或三位以上加错时,既没有检错的功能,也没有纠错的功能;4.(7,4)汉明码作为一种信道编码的方式,具有一定的纠错检错能力。
汉明码编译码及纠错性能验证目录一、实验目的 (2)二、实验原理 (2)1.汉明编译码介绍 (2)2.汉明编译码原理 (2)3.举例说明 (3)4.实验框图说明 (3)5.框图中各个测量点说明 (4)三、实验任务 (5)四、实验步骤 (5)1. 实验准备 (5)2.汉明码编码原理验证 (5)3.汉明译码观测及纠错能力验证 (8)4.实验结束 (10)五、实验分析 (11)一、实验目的1.学习汉明码编译码的基本概念;2.掌握汉明码的编译码方法;3.验证汉明码的纠错能力。
二、实验原理1.汉明编译码介绍汉明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
汉明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是 1 就变成 0,原来是 0 就变成 1)来将其纠正。
2.汉明编译码原理●汉明码编码采用(4,7)汉明码,信息位数k=4,监督位数r=n-k=3,可以纠一位错码,生成矩阵G=[1 0 0 0 1 1 10 1 0 0 1 1 00 0 1 0 1 0 10 0 0 1 0 1 1],编码情况见表格1。
表格1 (7,4)Hamming编码表●汉明码译码计算校正子S=[S1,S2,S3],其中S1=a6⨁a5⨁a4⨁a2S2=a6⨁a5⨁a3⨁a1S3=a6⨁a4⨁a3⨁a0校正子S 的值决定了接收码元中是否有错码,并且指出错码的位置,见表格 2。
表格 2 错码位置示意3.举例说明信息位a6a5a4a3=1001,根据表格 1(4,7) Hamming 编码表,编码为1001100,如果在信道传输的过程中产生一位误码,编码接收时变为1101100 ,我们计算校正子:S1=a6⨁a5⨁a4⨁a2=1S2=a6⨁a5⨁a3⨁a1=1S3=a6⨁a4⨁a3⨁a0=0校正子S=110,查找表格 2 错码位置示意,a5产生误码,则译码输出信息位1001。
自主设计实验二.汉明码编译码121180165赵博睿一.实验原理汉明码是差错控制编码的一种,是一种线性分组码,可以纠一位错,利用监督位和信息位的线性方程关系实现监督。
满足n=k+r,n=2^r-1的关系,本次实验采用的是(7,4)汉明码。
二.设计思路本次实验可以分为6个模块:m序列产生模块、汉明编码模块、编码输出模块、信道加错模块、接收译码模块、译码输出模块。
1.m序列产生模块:上次实验做过,因此不赘述设计思路;2.汉明码编码模块:需要将m序列缓冲到一个寄存器中进行汉明编码,编码方法由生成矩阵G决定,需要将编码数据放入到另一个寄存器中。
3.编码输出模块:将寄存器中编好的数据输出,需要另一个寄存器进行并行存储到串行输出的转换,并且需要一个同步计数器跟踪串行输出的首位。
4.信道加错模块:需要一个计数器来进行固定频率的加错,需要一个寄存器进行汉明码串行输出到并行存储的转换。
5.译码输出模块:将加错后的汉明码进行纠错译码并且输出,需要一个同步信号查找首位,需要一个寄存器进行译码,需要一个寄存器进行译码后数据并行存储到串行输出的转换。
从技术层面来讲,需要三种技术:同步技术、串/并行转换技术、编译码技术。
三.Verilog代码module hanmingma(clk,mout,hout,tout);input clk;//晶振clk信号//output reg mout;//m序列输出//output reg hout;//汉明码输出//reg mclk;//m序列clk//reg hclk;//汉明码clk//reg [3:0] mreg;//m序列寄存器//reg [6:0] hreg;//用来汉明码编码的汉明码寄存器//reg [6:0] hreg2;//用来输出的汉明码寄存器//reg [6:0] rereg;//接收端汉明码寄存器//reg [3:0] m;//m序列产生寄存器//reg [7:0] count1;//mclk计数器//reg [7:0] count2;//hclk计数器//reg [1:0] mcount;//m序列同步计数器//reg [2:0] hcount;//汉明码同步计数器//reg [6:0] ecount;//加错计数器//reg [3:0] rem;//用来译码的译码m序列寄存器//output reg tout;//译码输出//reg [3:0 ]rem2;//用来输出的译码m序列寄存器//reg[2:0] tcount;//译码输出同步计数器//reg [2:0] a1;//接收端同步寄存器1//reg[2:0] a2;//接收端同步寄存器2//reg [3:0] acount;//接收端同步计数器//always @(posedge clk)beginif(count1==223)//分频产生32khz时钟信号mclk// beginmclk<=~mclk;count1<=0;endelsecount1<=count1+1;if(count2==127)//分频产生56khz的时钟信号hclk// beginhclk<=~hclk;count2<=0;endelsecount2<=count2+1;endalways @(posedge mclk)//产生m序列并且输出到mout// beginif(m==0)m=1;elsebeginm[0]<=m[0]^m[3];m[1]<=m[0];m[2]<=m[1];m[3]<=m[2];mout<=m[3];endendalways @(posedge mclk)//将mout输入到mreg寄存器中并且计数,每当存入4个数据时进行汉明码编码并存储到hreg寄存器中,并且重新开始计数//beginmreg[3:1]<=mreg[2:0];mreg[0]<=mout;if(mcount==2)beginhreg[6:3]<=mreg[3:0];hreg[2]<=mreg[3]^mreg[2]^mreg[1];hreg[1]<=mreg[1]^mreg[2]^mreg[0];hreg[0]<=mreg[3]^mreg[0]^mreg[2];mcount<=mcount+1;endelsemcount<=mcount+1;endalways @(posedge hclk)//将hreg中的汉明码存入hreg2中用以输出,hreg2中的最高位输出到hout并且进行移位,同时进行计数,输出7个数据之后重新将hreg中的数据存入hreg2中并且重复上述输出过程//beginhout<=hreg2[6];hreg2[6:1]<=hreg2[5:0];if(hcount==6)beginhreg2<=hreg;hcount<=0;endelsehcount<=hcount+1;endalways @(posedge hclk)//模拟加错信道,将hout输入到接收端汉明码寄存器,并将接收端寄存器数据移位,同时进行错码周期计数,当传输18个数据时,将当前数据取反输入给接收端//beginrereg[6:1]<=rereg[5:0];if(ecount==17)beginrereg[0]<=~hout;ecount<=0;endelsebeginrereg[0]<=hout;ecount<=ecount+1;endendalways @(posedge hclk)//进行接收端汉明码首位寻址,若两个同步监督寄存器中有一个为0,即连续两个7位序列中有一个无错误,视为同步成功,将同步计数器归0,否则同步计数器数值不变,继续寻找满足条件的首位//beginif(acount==6)beginif(a2==0||a1==0)acount<=0;elseacount<=6;endelseacount<=acount+1;endalways @(posedge hclk)//接收端纠错译码和监督,寻找首位时进行同步监督,并将同步监督寄存器1值赋给同步监督寄存器2,以实现监督连续两组汉明码的目的,与上一个模块共同作用保证同步,并同时进行纠错译码,将译码后的结果放到译码m序列寄存器中// beginif(acount==6)begina1[2]<=rereg[6]^rereg[5]^rereg[4]^rereg[2];a1[1]<=rereg[5]^rereg[4]^rereg[3]^rereg[1];a1[0]<=rereg[6]^rereg[5]^rereg[3]^rereg[0];a2<=a1;rem[3]<=((~(rereg[5]^rereg[3]^rereg[4]^rereg[1]))&(rereg[6] ^rereg[5]^rereg[3]^rereg[0])&(rereg[6]^rereg[5]^rereg[4]^re reg[2]))^rereg[6];rem[2]<=((rereg[5]^rereg[3]^rereg[4]^rereg[1])&(rereg[6]^re reg[5]^rereg[3]^rereg[0])&(rereg[6]^rereg[5]^rereg[4]^rereg [2]))^rereg[5];rem[1]<=((rereg[5]^rereg[3]^rereg[4]^rereg[1])&(~(rereg[6] ^rereg[5]^rereg[3]^rereg[0]))&(rereg[6]^rereg[5]^rereg[4]^r ereg[2]))^rereg[4];rem[0]<=((rereg[5]^rereg[3]^rereg[4]^rereg[1])&(rereg[6]^re reg[5]^rereg[3]^rereg[0])&(~(rereg[6]^rereg[5]^rereg[4]^rer eg[2])))^rereg[3];endendalways @(posedge mclk)//译码后的m序列输出,将译码m序列寄存器中的数据存入rem2中,rem2中最高位输出到tout并进行移位,并同时进行计数,输出4个数据后将m序列寄存器中的数据再次存入rem2中,重复上述输出过程//begintout<=rem2[3];rem2[3:1]<=rem2[2:0];if(tcount==3)beginrem2<=rem;tcount<=0;endelsetcount<=tcount+1;endendmodule四.实验结果分析1.程序仿真结果分析:图1.汉明码编码仿真分析:图中的hout为..1110100 1011000 0010110 0011101.., 经查表(此表格在报告最后附录给出)可知分为别1110,1011,0010,0011的汉明码编码,而1110-1011-0010-0011也符合mout的输出,所以这个仿真结果表明编码成功。
汉明码编译码实验报告引言:汉明码是一种检错纠错编码方法,常用于数字通信和计算机存储中。
它通过在数据中插入冗余位,以检测和纠正错误,提高数据传输的可靠性。
本实验旨在通过编写汉明码的编码和解码程序,对汉明码的编译码原理进行实际验证,并分析其性能。
一、实验目的:1. 了解汉明码的编码和解码原理;2. 掌握汉明码编码和解码的具体实现方法;3. 验证汉明码在检测和纠正错误方面的有效性;4. 分析汉明码的性能及其应用范围。
二、实验原理:1. 汉明码编码原理:汉明码的编码过程主要包括以下几个步骤:(1)确定数据位数和冗余位数:根据要传输的数据确定数据位数n,并计算冗余位数m。
(2)确定冗余位的位置:将数据位和冗余位按照特定规则排列,确定冗余位的位置。
(3)计算冗余位的值:根据冗余位的位置和数据位的值,计算每个冗余位的值。
(4)生成汉明码:将数据位和冗余位按照一定顺序排列,得到最终的汉明码。
2. 汉明码解码原理:汉明码的解码过程主要包括以下几个步骤:(1)接收数据:接收到经过传输的汉明码数据。
(2)计算冗余位的值:根据接收到的数据,计算每个冗余位的值。
(3)检测错误位置:根据冗余位的值,检测是否存在错误,并确定错误位的位置。
(4)纠正错误:根据错误位的位置,纠正错误的数据位。
(5)输出正确数据:输出经过纠正后的正确数据。
三、实验过程:1. 编码程序设计:根据汉明码编码原理,编写编码程序,实现将输入的数据进行编码的功能。
2. 解码程序设计:根据汉明码解码原理,编写解码程序,实现将输入的汉明码进行解码的功能。
3. 实验数据准备:准备一组数据,包括数据位和冗余位,用于进行编码和解码的实验。
4. 编码实验:将准备好的数据输入编码程序,得到编码后的汉明码。
5. 传输和接收实验:将编码后的汉明码进行传输,模拟数据传输过程,并接收传输后的数据。
6. 解码实验:将接收到的数据输入解码程序,进行解码,检测和纠正错误。
7. 实验结果分析:分析编码和解码的正确性,检测和纠正错误的能力,并对汉明码的性能进行评估。
兰州理工大学课程设计报告课程名称:通信系统课程设计设计名称:汉明码的编码和译码姓名:学号:班级:指导教师:起止日期:2014.4.7-2014.4.9课程设计任务书学生班级:学生姓名:学号:设计名称:汉明码的编译和译码起止日期:2012.6.11-2012.6.25 指导教师:课程设计学生日志课程设计评语表汉明码的编码和译码一、 设计目的和意义1. 学习汉明码的编码和译码;2. 学习Matlab 的相关使用,学会用Malab 解决实际问题;3. 培养自己全面、独立思考的能力。
二、 设计原理2.1汉明码编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。
若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。
若取r=3,则n=k+r=7。
我们用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。
表1 校正子和错码位置的关系则由表1可得监督关系式: 16542s a a a a =⊕⊕⊕()226531s a a a a =⊕⊕⊕ ()3 36430s a a a a =⊕⊕⊕()4 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。
监督位2a 、1a、a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s、2s 、3s 的值为0(表示编成的码组中应无错码)654265316430000a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩ (5)式(5)经过移项运算,接触监督位265416530643a a a a a a a a a a a a=⊕⊕⎧⎪=⊕⊕⎨⎪=⊕⊕⎩ (6)式(5)其等价形式为:6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(7)式(6)还可以简记为0T T H A •=或0TA H •= (8)其中111010011010101011001H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦[]6543210A a a a a a a a =[]0000=111011011011P ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦100010001r I ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦ 所以有[]r H PI = (9)式(6)等价于[][][]21065436543111110101011a a a a a a a a a a a Q⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦(10)其中Q 为P 的转置,即T Q P = (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。
汉明码编译码一设计思想汉明码是一种常用的纠错码,具有纠一位错误的能力。
本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。
用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。
用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。
此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。
二实现流程1.汉明码编译码图 1 汉明码编译码框图1)根据生成多项式,产生指定的生成矩阵G2)产生随机的信息序列M得到码字3)由C MG4)进入信道传输S RH得到伴随式5)计算=T6)得到解码码流7)得到解码信息序列2.汉明码误码性能分析误码率(SER)是指传输前后错误比特数占全部比特数的比值。
误帧率(FER)是指传输前后错误码字数占全部码字数的比值。
通过按位比较、按帧比较可以实现误码率和误帧率的统计。
3. 构建完整通信系统图 2 完整通信系统框图三 结论分析1. 汉明码编译码编写了GUI 界面方便呈现过程和结果。
图 3 汉明码编译码演示GUI 界面以产生(7,4)汉明码为例说明过程的具体实现。
1) 根据生成多项式,产生指定的生成矩阵G用[H,G,n,k] = hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H 、G 以及码字长度n 和信息位数k100101101011100010111H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1101000011010011100101010001G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 2) 产生随机的信息序列M输入信息序列Huffman 编码Hamming 编码信道Hamming 译码Huffman 译码输出信息序列噪声0010=01000111M ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦3) 由C MG =得到码字010001101101000010111C ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦4) 进入信道传输假设是BSC 信道,错误转移概率设定为0.1 传输后接收端得到的码流为000011110100000111101R ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦红色表示错误比特。
汉明码(Hamming)的编码和译码算法本文所讨论的汉明码是一种性能良好的码,它是在纠错编码的实践中较早发现的一类具有纠单个错误能力的纠错码,在通信和计算机工程中都有应用。
例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错。
简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。
如果对汉明码作进一步推广,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,而且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。
各种码之间的大致关系显示如下。
一、汉明码的编码算法输入:信源消息u(消息分组u)输出:码字v处理:信源输出为一系列二进制数字0和1。
在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。
每个消息分组记为u,由k个信息位组成。
因此共有2k种不同的消息。
编码器按照一定的规则将输入的消息u转换为二进制n 维向量v ,这里n >k 。
此n 维向量v 就叫做消息u 的码字(codeword )或码向量(code vector )。
因此,对应于2k 种不同的消息,也有2k 种码字。
这2k 个码字的集合就叫一个分组码(block code )。
若一个分组码可用,2k 个码字必须各不相同。
因此,消息u 和码字v 存在一一对应关系。
由于n 符号输出码字只取决于对应的k 比特输入消息,即每个消息是独立编码的,从而编码器是无记忆的,且可用组合逻辑电路来实现。
定义:一个长度为n ,有2k 个码字的分组码,当且仅当其2k 个码字构成域GF(2)上所有n 维向量组成的向量空间的一个K 维子空间时被称为线性(linear )(n, k)码。
汉明码(n ,k ,d )就是线性分组(n, k)码的一种。
其编码算法即为使用生成矩阵G :v = u ·G 。
《数据通信原理》实验报告实验题目:汉明码的编译码专业班级:信息工程2班姓名学号:赵星敏 201342351 李明阳201342300指导教师:刘钰实验五汉明码的编译码一、实验目的1、理解汉明码的编码原理2、掌握利用simulink进行汉明码编译码仿真的方法3、掌握利用matlab指令进行汉明码编译码的方法二、实验原理在数字通信系统中,为了实现信息的可靠传输,需要采用差错控制来发现并纠正错误。
进行差错控制的方法就是对信息进行差错控制编码,差错控制编码种类较多,其中线性分组码是常用的一类编码,具有编码效率高,实现较简单以及检纠错能力较强等特点。
一般数字通信系统模型由信源信宿、加解密、编解码、调制解调等模块组成,其中有些通信模块是组成整个通信系统所必不可少的,有些模块是可以不需要的。
差错控制编解码属于编解码器通信模块,为了方便分析差错控制编码性能,通过将通信系统简化为如图5-1所示的信息传输系统来搭建仿真实验平台进行分析研究。
图5-1编码,有时也称为纠错编码。
不同的编码方法,有不同的检错或纠错能力,有的编码只能检错,不能纠错。
一般说来,付出的代价越大,检纠错的能力就越强。
在选择差错控制编码时需要考虑到编码效率、检纠错的能力等方面因素的影响。
按照是否将信息码元进行分组可以将差错控制编码分为分组码和非分组码,线性码是指信息位和监督位满足一组线性方程的码,任一(n,k)线性分组码的编码效率为k/n。
Simulink通信模块中提供了二进制线性分组码编解码器:Binary Linear Encoder和Binary Linear Decoder。
汉明码是汉明(Hamming)于1950年提出的能纠正一位错码且编码效率较高的线性分组码,它可以用一种简洁有效的方法进行解码。
汉明码不是仅指某一种码,而是指一类码。
二进制汉明码应满足条件:2n-k=1+n,令m=n-k,汉明码n和k 服从关系式:码长n=2m-1;信息位k=2m-1-m;最小距离dmin=3(指汉明距离)。
当m=3,4,5,6,7,8,…时,分别有(7,4),(15,11),(31,26),(63,57),(127,120),(255,247),…汉明码。
汉明码的基本思想:在k 个信息位上加r 个校验位,构成n=k+r 位的码字,其中每个校验位和某几个特定的信息位构成偶校验的关系。
接收端对这r 个偶关系进行校验,即将每个校验位与它关联的信息位进行异或加,相异或的结果称为校正因子。
如果没有错的话,这r 个校正因子都为0;如果有一个错则校正因子不会全为0,根据校正因子的不同取值,可以知道错误发生在码字的哪一个位置上。
线性分组码的生成原理与Hamming 码基本一致,下面以(7,4)Hamming 码为例简单地介绍一下汉明码的构造过程。
构造一个(7,4)汉明码,就是求出它的生成矩阵,或等效地,求出它的监督矩阵(也叫校验矩阵)。
由于(7,4)汉明码的校验矩阵是矩阵,而监督矩阵的列矢量不能为全零(零与任何码元的乘积为零,失去检验功能),因此监督矩阵H 的7个列矢量正好是除全零矢量外3重矢量的全部可能组合。
将[001]T 、[010]T 、[011]T 、[100]T 、[101]T 、[110]T 、[111]T 排列起来就是监督矩阵,排列顺序不同,所得矩阵也就不同,说明H 不是唯一的。
由于交换列不会影响最小距离,所以可以通过列置换将最初的H 变换为系统形式的H(若信息组以不变的形式,在码字的任意k 位中出现,则称该码为系统码。
否则,称为非系统码),成为系统汉明码:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=101010111001101111000H 经过变换,整理为典型监督矩阵形式为[]3100101101011010011110PI H =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡= 根据校验矩阵与生成矩阵的转换关系式得到系统汉明码的生成矩阵G 为:[]⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡==1111000011010010100101100001T k P I G 这样输入信息组m=[m 3,m 2,m 1,m 0],将m 与G 相乘即得到编码后的码字A 。
当数字信号编码成汉明码形式后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
解码的时候将接收到的信息组r与H T相乘,如果rH T=0,接收码组无错;如果rH T≠0,则根据译码图样进行纠错。
Simulink通信模块中提供了Hamming码编解码器:Hamming Encoder和Hamming Decoder。
三、实验内容1、simulink仿真汉明码编译码过程汉明码编译码仿真的模型图如图5-2所示。
图5-2 汉明码编译码仿真各模块参数及说明:①Bernoulli Binary Generator(伯努利二进制随机数产生器)模块描述:产生服从伯努利分布的随机二进制序列,模块的输出可以是帧结构的矩阵,也可以是数据流形式的行或列向量或一维数组。
模块位置:Communications Blockset-Comm Sources-Random Data Sources-Bernoulli Binary Generator模块参数:参数说明:Probability of a zero:模块产生的二进制序列中出再0的概率。
Initial seed:随机数种子,不同的随机数种子通常产生不同的序列。
Sample time:抽样时间,表示输出序列中每个二进制符号的持续时间。
此处参数表示在0.02秒内产生4个比特。
Frame-based outputs:选种表示输出为帧格式,否则输出数据流。
Samples per frame:只有当Frame-based outputs选种后才可编辑此参数,它表示输出一帧中包含的抽样点数。
此处表示1帧由4个比特组成。
②Hamming Encode(汉明码编码器)模块描述:用于对输入信息进行汉明编码,汉明码是一种能够纠正一位错误的红性分组码,码长为N。
该信息位的长度为K,其中,N=2^M-1(M>=3),K=N-M。
模块位置:Communications Blockset-Error Detection and Correction-Block-Hamming Encode模块参数:③Binary Symmetric Channel(二进制对称信道)模块描述:用于对二进抽制信号的误比特率性能进行仿真,添加二进制噪声到输入信号,可以是标量、数据流向量或帧结构的行向量。
模块位置:Communications Blockset-Channels-Binary Symmetric Channel 模块参数:参数说明:Error probability:添加噪声比特的概率。
④Hamming Decode(汉明码译码器)模块描述:创建一个码长为N,信息码长为K的汉明码。
其中,N=2M-1(M>=3),K=N-M。
模块位置:Communications Blockset-Error Detection and Correction-Block-Hamming Decode模块参数:此处的两个参数要与前面的Hamming Encode参数一致。
⑤Error Rate Calculation(误码率计算)模块描述:通过比较传输数据和接收数据来计算误码率,模块的输出数据是长度为3的向量,其中每个元素的意义分别是:误码率或误比物率、总的错误个数、总的参加比较的符号或比特数。
模块位置:Communications Blockset-Comm Sinks-Error Rate Calculation模块参数:参数说明:Receive delay:指定接收方滞后发送的抽样点数,即接收的第几个值对应发送的第一个值。
Computation delay:指定开始比较时模块忽略的抽样点数。
Computation mode:指定模块是比较全部还是输入数据。
Output data:指定计算结果是输出到工作区还是端口。
⑥To Workspace(输出到工作区)模块描述:写入专门的数据到MATLAB的主工作区。
数据不可用直到仿真结束或暂停。
模块位置:Simulink -Sinks-To Workspace模块参数:参数说明:Variable name:写入工作区间的数据名称,默认为simout。
Limit data points to last:模块最多可以保留的数据个数,inf表示无穷大。
Decimation:写入数据的抽样频率,即每隔多少抽样点输入一个值。
Sample time:写入数据的抽样时间,默认值为-1,表示与上一模块抽样时间相同。
Save format:输出数据的形式。
⑦Display(显示仿真结果)模块描述:显示结果模块位置:Simulink -Sinks-Display模块参数:参数说明:Format:显示在模块对话框上的数据形式,short显示小数据点后5位数字。
2、利用matlab语句进行汉明码编译码MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。
将用到的程序函数说明如下:①encode函数功能:编码函数语法:code=encode(msg,N,K,’hamming’)说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。
msg是一个任意行K列的矩阵。
比如:>> code=encode([1 0 0 0;1 1 0 1],7,4,'hamming')运行结果为:code =1 1 0 1 0 0 00 0 0 1 1 0 1②decode函数功能:译码函数语法:rcvcode=decode(code,N,K,’hamming’)说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。
比如,在①结果的基础上:>> rcvcode=decode(code,7,4,'hamming')运行结果为:rcvcode =1 0 0 01 1 0 1③randint函数功能:产生一个均匀分布的n*m维的整数矩阵,矩阵的元素是随机的。
语法:randint(m,n)说明:randint(m,n),矩阵中的元素或者是0或者是1,0或者1的出现是随机的。
比如:>> randint(3,2)运行结果为:ans =0 00 10 1语法:randint(m,n,range)说明:产生一个m*n的随机矩阵,矩阵元素值的范围由range确定。
比如range设定为一个区间:randint(2,3,[1 6]),就是产生一个2*3随机矩阵,这个矩阵的元素是区间[1 6]的随机整数。