北京交通大学-通信原理实验-汉明编码实验报告

合集下载

汉明码编码译码实验报告(信息论与编码)及源程序

汉明码编码译码实验报告(信息论与编码)及源程序
2
一个二元(7,4)汉明码的系统码形式的矩阵和校验矩阵分别为
1 0 0 0 1 0 1 1 1 1 0 1 0 0
G=0 1 0 0 1 1 1 H= 0 1 1 1 0 1 0
0 0 1 0 1 1 0 1 1 0 1 0 0 1
0 0 0 1 0 1 1
等价的编码方程为
Ci=mi, i=0,1,2,3
到现在为止,我已经学了C语言程序设计、数据结构等课程,这次的信息论与编码实验让我感觉到以前学习的东西有了用武之地,把知识和理论付诸实践才能有所提高。在编程的过程中,我发现自己的编程能力还非常有待提高,以前C语言课程里的很多知识掌握还不牢,时常需要翻书查阅。对信息论与编码这门课的学习还要加深,只有深刻理解了要做的事情,才能把事情做好。以后我要更加努力,逐步解决这些问题。
int f[3];
int ww[10000/4*7];
printf("汉明(7,4)码的编码与译码程序:\n");
printf("请输入你想产生的二进制个数:");
scanf("%d",&N); //输入想产生的信源的个数
while(N<4)
{
printf("输入无效,请重新输入");
printf("请输入你想产生的二进制个数:");
汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。
汉明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在汉明码中的全部传输码字是由原来的信息和附加的奇偶监督位组成的。每一个这种奇偶位被编在传输码字的特定比特位置上。
推导并使用长度为m位的码字的汉明码,所需步骤如下:

汉明码编码实验报告详细解释

汉明码编码实验报告详细解释

汉明码的实现详细实验报告一、实验目的1、掌握线性分组码的编码原理2、掌握汉明码编码方法3、了解编码对误码性能的改善二、实验内容1、自行设置汉明码的参数,生成矩阵,计算所设计出的汉明码;写出产生(3,1)汉明码的生成矩阵,给出生成码的源程序,并给出运行结果。

2、利用encode库函数实现汉明编码;3、搭建一个通信仿真模块,并给出运行结果,分析汉明码对通信性能的影响;4、整理好所有的程序清单或设计模块,并作注释。

三、实验原理(一)、汉明码的介绍汉明码是1951年由汉明(R.W.Hamming)提出的能纠正单个错误的线性分组码。

它性能良好,既具有较高的可靠性,又具有较高的传输效率,而且编译码电路较为简单,易于工程实现,因此汉明码在发现后不久,就得到了广泛的应用。

我们的目的是要寻找一个能纠正单个错误,且信息传输率(即码率r=k/n )最大的线性分组码。

我们已经知道,具有纠正单个错误能力的线性分组码的最小距离应为 3,即要求其H 矩阵中至少任意两列 线性无关。

要做到这一点,只要H 矩阵满足“两无”一一无相同的列, 无全零列就可以了。

(n,k )线性分组码的H 矩阵是一个⑴-"n 訂n 阶矩阵,这里 r =n —k 是校验元的数目。

显然,r 个校验元能组成2r 列互不相同的r 重 矢量,其中非全零矢量有2r -1个。

如果用这2r -1个非全零矢量作为H 矩阵的全部列,即令H 矩阵的列数n =2「一1,则此H 矩阵的各列均不 相同,且无全零列,由此可构造一个纠正单个错误的(n ,k )线性分 组码同时,2r -1是n 所能取的最大值,因为如果n 2r -1,那么H 矩 阵的n 列中必会出现相同的两列,这样就不能满足对 H 矩阵的要求。

而由于n =2 -1是门所能取的最大值,也就意味着码率 R 取得了最大 值,即这样设计出来的码是符合我们的要求的,这样的码就是汉明码 定义 若H 矩阵的列是由非全零且互不相同的所有二进制r 重矢量组成,则由此得到的线性分组码,称为 GF (2)上的(2r -1, 2r -1-r )汉 明码。

hamming实验报告

hamming实验报告

hamming实验报告Hamming实验报告引言:Hamming实验是一项重要的计算机科学实验,旨在研究和验证Hamming码的纠错能力。

Hamming码是一种用于纠正单一比特错误的错误检测和纠正编码方式,被广泛应用于数据传输和存储中。

本实验将通过模拟数据传输过程,并使用Hamming码进行纠错,来验证其在实际应用中的有效性。

实验目的:本实验的目的是通过模拟数据传输过程,验证Hamming码的纠错能力。

具体而言,我们将通过引入人为制造的错误,检测和纠正这些错误,以验证Hamming码的可靠性和有效性。

实验步骤:1. 设计Hamming码生成矩阵和校验矩阵。

2. 生成待发送的数据,并使用Hamming码进行编码。

3. 引入人为制造的错误,模拟数据传输过程中的错误。

4. 使用Hamming码进行错误检测和纠正。

5. 比较纠错前后的数据,验证Hamming码的纠错能力。

实验结果:在本次实验中,我们成功设计并实现了Hamming码的纠错过程。

通过引入人为制造的错误,我们模拟了数据传输过程中的错误情况。

使用Hamming码进行错误检测和纠正后,我们成功恢复了原始数据,并验证了Hamming码的纠错能力。

讨论:Hamming码作为一种常用的纠错编码方式,具有较高的纠错能力和可靠性。

通过本次实验,我们进一步验证了Hamming码的有效性。

然而,Hamming码并不能纠正所有错误,它只能纠正单一比特错误。

对于多比特错误或连续错误,Hamming码的纠错能力将受到限制。

因此,在实际应用中,我们需要综合考虑数据传输的可靠性需求,并选择适当的纠错编码方式。

结论:通过本次实验,我们验证了Hamming码的纠错能力。

Hamming码作为一种常用的纠错编码方式,在数据传输和存储中具有重要的应用价值。

然而,我们也需要认识到Hamming码的局限性,它只能纠正单一比特错误。

在实际应用中,我们需要根据具体需求选择适当的纠错编码方式,以确保数据的可靠性和完整性。

Hamming码实验报告(孙鹏跃)

Hamming码实验报告(孙鹏跃)

信息论与编码基础实验报告学院:电子科学与工程学院队别:四院二队专业: 2006级通信工程专业姓名:孙鹏跃学号: 200604015002国防科学技术大学电子科学与工程学院实验三 汉明码编译码一、【设计思想】1948年,Bell 实验室的C.E.Shannon 发表的《通信的数学理论》,是关于现代信息理论的奠基性论文,它的发表标志着信息与编码理论这一学科的创立。

Shannon 在该文中指出,任何一个通信信道都有确定的信道容量C,如果通信系统所要求的传输速率R 小于C,则存在一种编码方法,当码长n 充分大并应用最大似然译码(MLD ,MaximumLikelihoodDecdoding)时,信息的错误概率可以达到任意小。

从Shannon 信道编码定理可知,随着分组码的码长n 或卷积码的约束长度N 的增加,系统可以取得更好的性能(即更大的保护能力或编码增益),而译码的最优算法是MLD,MLD 算法的复杂性随n 或N 的增加呈指数增加,因此当n 或N 较大时,MLD 在物理上是不可实现的。

因此,构造物理可实现编码方案及寻找有效译码算法一直是,信道编码理论与技术研究的中心任务。

信息传输的可靠性是所有通信系统努力追求的首要目标。

要实现高可靠性的传输,可采用诸如增大发射功率、增加信道带宽、提高天线增益等传统方法,但这些方法往往难度比较大,有些场合甚至无法实现。

而香农信息论指出:对信息序列进行适当的编码后可以提高信道传输的可靠性,这种编码即是信道编码。

信道编码是在著名的信道编码定理指导下发展起来的,几十年来已取得了丰硕的成果。

现将信道编码定理简述如下:每一个信道都具有确定的信道容量C,对于任何小于C 的信息传输速率R,总存在一个码长为n,码率等于R 的分组码,若采用最大似然译码,则其译码错误概率Pe 满足: )(R nE E Ae P −≤其中A 为常数,E(R )为误差函数。

香农编码定理仅仅是一个存在性定理,他只是告诉我们确实存在这样的好码,但并没有说明如何构造这样的码,但定理却为寻找这种码指明了方向。

通信原理实验报告汉明编译码系统自行设计实验附加同步位实验

通信原理实验报告汉明编译码系统自行设计实验附加同步位实验

汉明编译码系统自行设计实验一、 实验原理差错控制编码的基本作法是:在发送端被传输的信息序列上附加一些监督码元,这些多余的码元与信息之间以某种确定的规则建立校验关系。

汉明码(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)汉明编码输入数据与监督码元生成表。

通信原理实验 汉明编码和译码实验 实验报告

通信原理实验 汉明编码和译码实验 实验报告

姓名:学号:班级:
第周星期第大节
实验名称:汉明编码和译码实验
一、实验目的
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时,输出数据经过汉明编码。

北京交通大学-通信原理实验-汉明编码实验报告

北京交通大学-通信原理实验-汉明编码实验报告

通信原理实验电子信息工程学院实验十五汉明编码和译码实验实验前的准备(1) 预习本实验的相关内容。

(2) 熟悉实验指导书附录B和附录C中实验箱面板分布及测试孔位置相关模块的跳线状态。

(3) 实验前重点熟悉的内容:汉明码的编码规则、汉明码的纠错能力。

⑷思考题。

2)本实验中汉明编码器的输入数据速率为32kbps,输出数据速率为多少?为汉明编码器的输入信号选择m序列信号时,跳线开关SWCO1KCO1如何汉明编码器的输入信号选择来自ADPC模块的实验目的(1) 掌握汉明码编译码原理。

(2) 掌握汉明码纠错检错原理。

(3) 通过纠错编解码实验,加深对纠错编解码理论的理解。

三、实验仪器(1) ZH5001A通信原理综合实验系统⑵20MHz双踪示波器四、基本原理差错控制编码的基本原理是:由发送端的信道编码器在信息码元序列中增加一些监督码元。

这冗余的码元与信息之间以某种确定的规则建立校验关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。

不同的编码方法有不同的检错或纠错能力。

为了纠正位错码,在分组码1中最少要加入多少监督位才可行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致了汉明码的诞生。

汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。

下面介绍汉明码的编码原理。

一般来说,若码长为n,信息位数为k,记作(n, k)码,则监督位数r n k,如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求2r 1 n 或2r k r 1通信原理综合实验系统中的纠错码系统采用(7, 4)汉明码。

用a6a5…a。

表示这7个码元,用3、S?、$表小3个监督关系式中的校正子,则S&2S3的值与码元间构成偶数监督关系:a6a5a4a2S2a4a4a3a i S3a6a5a3a。

在发送端编码时,信息位玄6、85、a4和a3的值决定于输入信号,因此它们是随机的。

监督位a“印和a。

实验五 汉明码的编译码

实验五 汉明码的编译码

《数据通信原理》实验报告实验题目:汉明码的编译码专业班级:信息工程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(指汉明距离)。

实验报告书汉明码设计与实现

实验报告书汉明码设计与实现

实验报告书------汉明码设计与实现汉明码编译码器系统班级: 姓名: 学号:一.实验原理描述1.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可得监督关系式: S 1=a 6⊕a 5⊕a 4⊕a 2 (2)S 2=a 6⊕a 5⊕a 3⊕a 1(3)S 3=a 6⊕a 4⊕a 3⊕a 0(4) 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s 、2s 、3s的值为0(表示编成的码组中应无错码){a 6⊕a 5⊕a 4⊕a 2=0a 6⊕a 5⊕a 3⊕a 1=0a 6⊕a 4⊕a 3⊕a 0=0(5)式(5)经过移项运算,接触监督位{a 2=a 6⊕a 5⊕a 4a 1=a 6⊕a 5⊕a 3a 0=a 6⊕a 4⊕a 3(6)式(5)其等价形式为: [1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1][ a 6a 5a 4a 3a 2a 1a 0]=[000](7)式(6)还可以简记为H ∙A T =0T 或A ∙H T =0 (8)其中H =[1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1]A =[a 6a 5a 4a 3a 2a 1a 0]P =[1 1 1 01 1 0 11 0 1 1]I r =[1 0 00 1 00 0 1]0=[0 0 0]所以有H =[PI r ](9)式(6)等价于[a 2a 1a a ]=[a 6 a 5 a 4 a 3][1 1 11 1 01 0 10 1 1]=[a 6 a 5 a 4a 3]Q (10)其中Q 为P 的转置,即T Q P (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。

通信报告-汉明码编译码

通信报告-汉明码编译码

自主设计实验二.汉明码编译码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、继续判断三、源代码#include<iostream>using namespace std;void input(int *a){cout<<"请输入7位要查错的码字(输入一个数(0或1)就空格):"<<endl;for(int i=0;i<7;i++)cin>>a[i];}void analyze(int *a,int ht[7][3]){ //二维数组ht[7][3]调用之前一定要明确定义int p[3]={0};int q=0; //数据要初始化int h[3][7];int out[7];for(int k=0;k<3;k++){for(int i=0, j=0;j<7;i++,j++){p[k]=p[k]+a[i]*ht[j][k];p[k]=p[k]%2; //使数值小于2}if(p[k]==1){q++;}}cout<<"伴随式为:"<<p[0]<<p[1]<<p[2]<<endl;if(q==2||q==3){cout<<"一共有"<<q<<"位错误,超越了纠错范围"<<endl; }if(q==0){cout<<"码字没有错误!!"<<endl;cout<<"输出的码字为:";for(int i=0;i<7;i++){out[i]=a[i];cout<<out[i];}cout<<endl;}if(q==1){for(int i=0;i<3;i++){for(int j=0;j<7;j++){if((h[i][j]==p[0])&&(h[i+1][j]==p[1])&&(h[i+2][j]==p[2])){cout<<"要查错的码字的第"<<j+1<<"位出错"<<endl;a[j]=(a[j]+1)%2;cout<<"输出的码字应为";for(i=0;i<7;i++){out[i]=a[i];cout<<a[i];}cout<<endl;}}}}}void main(){int H[4][7]={{1,0,0,0,0,1,1}, //生成矩阵{0,1,0,0,1,0,1},{0,0,1,0,1,1,0},{0,0,0,1,1,1,1}};int h[3][7]={{0,0,0,1,1,1,1}, // 校验矩阵{0,1,1,0,0,1,1},{1,0,1,0,1,0,1}};int ht[7][3]={{0,0,1}, //ht (h的转置矩阵) {0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};int in[7];int c;while(c){cout<<"是否需要查错(是请输入1不是输入0): ";cin>>c;switch(c){case 1: input(in);analyze(in,ht);break;case 0: break; }}}四、运行结果。

通信原理实验18 汉明码的编解码实验

通信原理实验18 汉明码的编解码实验

实验十七汉明码的编解码实验实验十八汉明码的编解码实验实验内容1. 熟悉汉明码码型变换编码实验2.熟悉汉明码码型变换译码实验一、实验目的1.了解汉明码的编解码原理2.掌握汉明码的编解码过程3. 学习通过CPLD编程实现汉明码编译码实验二、实验电路工作原理汉明码是1949年提出的一种能纠正单个错误的线性分组码。

它是在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。

它在CDMA多载波系统中得到了广泛应用。

1.线性分组码的编码原理分组码中信息码元和监督码元是用线性方程联系起来的。

设分组系统码(n,k)中k=4,为能纠正一位误码,取r=3,则n=k+r=7。

我们用a0a1a2a3a4a5a6表示这7个码元,用S1,S2,S3表示由三个监督方程式计算得到的校正子,并假设S1S2S3三位校正子组码与误码位置的对应关系如表1-1所示。

由表可知: S1=6542(1-1)94实验十七 汉明码的编解码实验95S2=6531a a a a ⊕⊕⊕ (1-2) S3=6430a a a a ⊕⊕⊕ (1-3)在编码时,a6,a5,a4,a3为信息码元,取决于被传输的信息。

由式(1-1),(1-2),(1-3)可知,监督码元a2,a1和a0应根据以下的监督方程确定:a2=654a a a ⊕⊕(1-4); a1=653a a a ⊕⊕(1-5); a0=643a a a ⊕⊕(1-6)不难看出,上述(7.4)码的最小码距dmin=3,它能纠正一个误码或检测两个误码。

如超出纠错能力,则反而会因“乱纠”而增加新的误码。

2.线性分组码的实现方法 dataout(7)<='0';dataout(6 downto 3 ) <=datain(3 downto 0); dataout(2)<=datain(3)xor datain(2) xor datain(1); dataout(1)<=datain(2) xor datain(1) xor datain(0); dataout(0)<=datain(3) xor datain(2) xor datain(0); 3.线性分组码的解码原理接收端收到的每个码组后,计算出S1,S2和S3,如不全为0,则可按表1-1确定误码的位置,然后给以纠正。

通信原理设计报告(7-4)汉明码的编解码设计

通信原理设计报告(7-4)汉明码的编解码设计
4.2 (7,4)汉明码编码程序旳设计......................................10
4.3 (7,4)汉明码编码程序旳编译及仿真................................11
第5章 (பைடு நூலகம்,4)汉明码译码器旳设计.............................12
QuartusⅡ设计软件提供完整旳多平台设计环境,可以很轻松地满足特定设计旳需要。它是可编程片上系统(SOPC)设计旳综合性环境,拥有FPGA和CPLD设计旳所有阶段旳解决方案。与其他EDA软件相比较,QuartusⅡ软件旳重要特点涉及:
可运用原理图、构造框图、VerilogHDL、AHDL和VHDL完毕电路描述,并将其保存为设计实体文献。
般旳计算机高级语言。VHDL旳程序构造特点是将一项工程设计,或称设计实体(可以是一种元件,一种电路模块或一种系统)提成外部(或称可视部分)和内部(或称不可视部分),既波及实体旳内部功能和算法完毕部分。在对一种设计实体定义了外部界面后,一旦其内部开发完毕后,其他旳设计就可以直接调用这个实体。这种将设计实体提成内外部分旳概念是VHDL系统设计旳基本点。应用VHDL进行工程设计旳长处如下几点:
(1)与其他旳硬件描述语言相比,VHDL具有更强旳行为描述能力,从而决定了他成为系统设计领域最佳旳硬件描述语言。强大旳行为描述能力是避开具体旳器件构造,从逻辑行为上描述和设计大规模电子系统旳重要保证。
(2)VHDL丰富旳仿真语句和库函数,使得在任何大系统旳设计初期就能查验设计系统旳功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句旳行为描述能力和程序构造决定了他具有支持大规模设计旳分解和已有设计旳再运用功能。符合市场需求旳大规模系统高效,高速旳完毕必须有多人甚至多种代发组共同并行工作才干实现。

汉明码实验报告

汉明码实验报告

一、实验目的1. 理解汉明码的基本原理及其在数据传输中的作用。

2. 掌握汉明码的编码和译码方法。

3. 通过实验验证汉明码在纠正单个错误和检测多个错误方面的能力。

4. 增强对编码理论在实际应用中的理解和应用能力。

二、实验原理汉明码是一种线性分组码,由理查德·汉明于1950年提出。

它通过在原始数据中插入额外的校验位来检测和纠正错误。

汉明码的特点是,它可以纠正单个错误,同时也能检测出两个或更多的错误。

在汉明码中,校验位的位置是按照2的幂次来安排的,即第1位、第2位、第4位、第8位等。

信息位则填充在这些校验位之间。

在编码过程中,校验位通过计算特定信息位的逻辑和来确定。

三、实验内容1. 设置汉明码参数:选择要编码的信息位长度和校验位长度。

例如,选择7位信息位和4位校验位,总共编码为11位。

2. 生成生成矩阵:根据校验位的数量,生成对应的生成矩阵。

例如,对于7位信息位和4位校验位,生成矩阵为:```G = [1 0 0 0 1 0 10 1 0 0 1 1 00 0 1 0 1 1 10 0 0 1 1 1 1]```3. 编码:将信息位与生成矩阵相乘,得到编码后的数据。

例如,信息位为`1101010`,编码后的数据为`1111000110`。

4. 译码:在接收端,首先计算每个校验位的值。

如果所有校验位的值都为0,则认为没有错误。

否则,通过计算错误位置,纠正错误。

5. 纠错:如果检测到错误,根据错误位置进行纠正。

例如,如果检测到第3位(校验位)错误,则将其反转。

四、实验步骤1. 编码过程:- 初始化信息位和校验位。

- 使用生成矩阵对信息位进行编码。

- 输出编码后的数据。

2. 译码过程:- 初始化校验位。

- 计算每个校验位的值。

- 根据校验位的值判断是否有错误。

- 如果有错误,纠正错误。

3. 纠错过程:- 根据错误位置,反转对应的位。

五、实验结果与分析1. 正确性验证:通过实验验证,编码后的数据在传输过程中发生单个错误时,能够被正确纠正。

汉明码编译码实验报告

汉明码编译码实验报告

汉明码编译码实验报告引言:汉明码是一种检错纠错编码方法,常用于数字通信和计算机存储中。

它通过在数据中插入冗余位,以检测和纠正错误,提高数据传输的可靠性。

本实验旨在通过编写汉明码的编码和解码程序,对汉明码的编译码原理进行实际验证,并分析其性能。

一、实验目的:1. 了解汉明码的编码和解码原理;2. 掌握汉明码编码和解码的具体实现方法;3. 验证汉明码在检测和纠正错误方面的有效性;4. 分析汉明码的性能及其应用范围。

二、实验原理:1. 汉明码编码原理:汉明码的编码过程主要包括以下几个步骤:(1)确定数据位数和冗余位数:根据要传输的数据确定数据位数n,并计算冗余位数m。

(2)确定冗余位的位置:将数据位和冗余位按照特定规则排列,确定冗余位的位置。

(3)计算冗余位的值:根据冗余位的位置和数据位的值,计算每个冗余位的值。

(4)生成汉明码:将数据位和冗余位按照一定顺序排列,得到最终的汉明码。

2. 汉明码解码原理:汉明码的解码过程主要包括以下几个步骤:(1)接收数据:接收到经过传输的汉明码数据。

(2)计算冗余位的值:根据接收到的数据,计算每个冗余位的值。

(3)检测错误位置:根据冗余位的值,检测是否存在错误,并确定错误位的位置。

(4)纠正错误:根据错误位的位置,纠正错误的数据位。

(5)输出正确数据:输出经过纠正后的正确数据。

三、实验过程:1. 编码程序设计:根据汉明码编码原理,编写编码程序,实现将输入的数据进行编码的功能。

2. 解码程序设计:根据汉明码解码原理,编写解码程序,实现将输入的汉明码进行解码的功能。

3. 实验数据准备:准备一组数据,包括数据位和冗余位,用于进行编码和解码的实验。

4. 编码实验:将准备好的数据输入编码程序,得到编码后的汉明码。

5. 传输和接收实验:将编码后的汉明码进行传输,模拟数据传输过程,并接收传输后的数据。

6. 解码实验:将接收到的数据输入解码程序,进行解码,检测和纠正错误。

7. 实验结果分析:分析编码和解码的正确性,检测和纠正错误的能力,并对汉明码的性能进行评估。

hamming实验报告

hamming实验报告

hamming实验报告Hamming实验报告引言:Hamming实验是一种用于错误检测和纠正的编码技术。

它由美国科学家理查德·哈明(Richard Hamming)于20世纪50年代提出,并被广泛应用于计算机科学和通信领域。

本文将介绍Hamming实验的背景、原理、实验过程和结果,并探讨其在现代技术中的应用。

一、背景:在信息传输和存储过程中,出现错误是不可避免的。

特别是在电信和计算机网络中,数据传输的准确性至关重要。

传统的奇偶校验方法只能检测错误,而无法纠正。

为了解决这个问题,Hamming提出了一种能够检测和纠正错误的编码技术。

二、原理:Hamming编码是一种基于二进制的线性块编码。

它通过在数据中插入冗余位来实现错误检测和纠正。

冗余位的数量取决于数据位的数量,并且通过一系列算法计算得出。

Hamming编码的关键思想是将数据位与冗余位进行异或运算,以便在接收端进行错误检测和纠正。

三、实验过程:1. 准备数据:选择一组二进制数据作为实验对象,例如1011。

2. 计算冗余位:根据数据位的数量,计算所需的冗余位数量。

在本例中,需要添加两个冗余位。

3. 插入冗余位:将冗余位插入数据中,形成编码后的数据。

例如,将冗余位插入1011变为1101011。

4. 传输数据:将编码后的数据传输到接收端。

5. 接收数据:接收端接收到编码后的数据。

6. 检测错误:接收端使用Hamming编码的算法检测错误位。

7. 纠正错误:如果检测到错误位,接收端可以使用Hamming编码的算法进行错误纠正。

四、实验结果:在本次实验中,我们选择了1011作为实验数据。

根据Hamming编码的原理,我们计算出了两个冗余位,并将其插入到数据中,形成了1101011的编码数据。

在传输过程中,我们模拟了一个错误位,并将其插入到编码数据中。

接收端成功检测到错误位,并进行了错误纠正。

最终,接收端得到了正确的数据1011。

五、应用:Hamming编码在现代技术中有着广泛的应用。

实验三 汉明码编译码实验

实验三 汉明码编译码实验

实验三汉明码编译码实验
汉明码编译码实验
一、实验目的
1、了解信道编码在通信系统中的重要性。

2、掌握汉明码编译码的原理。

3、掌握汉明码检错纠错原理。

4、理解编码码距的意义。

二、实验原理
1、实验原理框图汉明码编译码实验框图汉明码编码过程:数字终端的信号经过串并变换后,进行分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。

三、实验器材
1、主控&信号源、6号、2号模块各一块
2、双踪示波器一台
3、连接线若干
四、实验步骤汉明码编码规则验证连线汉明码1、2号模块的拨码开关S12#拨为 S22#、S32#、S42#均拨为;2、6号模块的拨码开关S16#拨为0001, S36#拨为0000按下6号模块S2系统复位键。

3、此时2号模块提供32K编码输入数据,6号模块进行汉明编译码,无差错插入模式。

4、用示波器观测6号模块TH5处编码输出波形。

汉明码检纠错性能检验1、6号模块S3拨成0001
按下6号模块S2系统复位。

2、对比观测译码结果与输入信号,验证汉明码的纠错能力。

3、对比观测插错指示与误码指示,验证汉明码的检错能力。

4、、6号模块S3按照插错控制表中的拨码方式,逐一插入不同错误,按下6号模块S2系统复位。

重复步骤2,验证汉明码的检纠错能力。

5、将示波器触发源通道接TP2帧同步信号,示波器另外一个通道接TP1插错指示,可以观测插错的位置。

五、实验数据错2位码时错码检测指示输出波形汉明译码纠错性能检验六、实验分析开头数字序号1。

汉明码实验报告

汉明码实验报告

实验名称:汉明码十三、实验环境软件环境:Windows 2000, Microsoft Visual C++6.0硬件环境:P4,2.4GHz,256内存,IBM-PC及兼容机十四、实验目的了解汉明码的编码原理,纠错原理,译码原理;给定汉明码的监督矩阵,能够写出生成矩阵,能够通过监督矩阵或生成矩阵进行编码,能够通过监督矩阵进行校码与译码,会计算汉明码的错误概率以及导出增余汉明码等相关知识。

十五、实验内容在Microsoft Visual c++ 6.0软件环境下,编写一个程序,使之实现汉明码以及增余汉明码的编码、检码、译码过程。

1、通过对书本的学习,以及对课堂知识的掌握,了解汉明码的纠错原理,编写出汉明码的纠错程序。

2、基于汉明码的编写,进一步完成对检码译码及增余汉明码的实现。

3、实验验证程序的合理性,结果的正确性,和结构的完善性。

十六、实验过程与实验结果源程序:#in clude<iostream>#in cludevstri ng>using n amespace std;#define Pe 0.0001class HMCodi ng{private:int n ,k,r;〃汉明码参数int i,j;〃用于指示循环次数int **H,*X,**G ,**check_code;stri ng *H_Colu mn ,*H_Colu mn _Z,code_str;int code_ nu m,code_ num_z;public:void In itializi ng(i nt,i nt);void Show_H(i nt,i nt);void Get_G();void Show_G(i nt,i nt);void HM_Efficiency_Analysing();/*对汉明码进行编码效率分析*/int Bin ary_Str_Check(stri ng);void En codi ng();〃汉明码编码void En codi ng_Z();〃增余汉明码编码void Decodi ng();〃汉明码译码void Decodi ng_Z();〃增余汉明码译码void Get_H_Colum n();〃获取汉明码监督矩阵的每一列void Get_H_Colu mn _Z();//获取增余汉明码监督矩阵的每一列void Get_Judge_Result();/获取汉明码校码结果void Get_Judge_Result_Z();/获取增余汉明码校码结果初 始 化 模 块void Check in g();〃 汉明码校码 void Checki ng_Z();〃增余汉明码校码 void GOTO_HMCdi ng_Z();};HMCodi ng hmcodi ng;〃 全局变量/******************************************************************/ void HMCod in g::I nitializ in g(i nt _n ,i nt _k) { 一 一n=_n;k=_k;r=_n-_k;cout«"请给定("<<n<<" ,"<<k<<")汉明码的监督矩阵H["vvrvv"]["vv nvv"]:"v<e ndl;H=new int *[叶 1];//初始化(n,k)汉明码监督矩阵for(i=0;i< r+1;i++)H[i]=new int[n+1];for(i=0;i<r;i++)for(j=0;j <n ;j++)cin >>H[i][j];//初始化增余项for(j=0;j< n+1;j++)H[r][j]=1;for(i=0;i<r;i++)H[i][ n]=0;//为X 分配存储单元X=new int[n+1];for(j=0;j< n+1;j++)X[j]=0;Get_H_Colum n();〃获取监督矩阵的每一列Get_H_Colum n_Z();〃进一步获取增余监督矩阵的每一列}〃获取监督矩阵的每一列,用于汉明码校码void HMCodi ng::Get_H_Colum n(){ 一 一stri ng temp;H_Column=new stri ng[n+1];for(i=0;i <n ;i++){temp="";for(j=0;j<r;j++){if(!H[j][i]) temp+='0';elsetemp+='1';}H_Colu mn [i]=temp;} _H_Colu mn[n ]="000";}〃获取增余监督矩阵的每一列,用于增余汉明码校码void HMCodi ng::Get_H_Colum n_Z(){ ~ ~ ~H_Colu mn_Z=new stri ng[n+2];for(i=0;i< n+1;i++)H_Colum n_Z[i]=H_Colum n[ i]+'1'; H_Colu mn _Z[ n+1]="0000"; }void HMCodi ng::Show_H(i nt x,i nt y){ _for(i=0;i<x;i++){for(j=0;jvy;j++)cout<<H[i][j]<<"";cout«e ndl;}}void HMCod in g::Get_G(){G=new int *[k];for(i=0;i<k;i++)G[i]=new int[n];for(i=0;i<k;i++)for(j=0;j<k;j++){if(i==j)G[i][j]=1; elseG[i][j]=0;}for(i=0;i<r;i++)for(j=0;j<k;j++)G[j][i+k]=H[i][j];}void HMCodi ng::Show_G(i nt x,i nt y)"<<e ndl; 码的{Get_G();for(i=0;i<x;i++){for(j=0;j<y;j++) cout«G[i][j]vv"" cout«e ndl;}}void HMCodi ng::HM_Efficie ncy_A nalysi ng(){cout«"对("<<*<", "<<k<<")汉明码的评价如下: cout«"( "vvnvv" , "vvkvv"E=k/ n*100%="vvk*1.0/n*100<v"%"vve ndl;cout«" ( "<< n<<" , "vvkvv")P=n*(n-1)*Pe*Pe="<< n*( n-1)*Pe*Pe<<e ndl;} /******************************************************************/〃二进制序列合理性检测int HMCodi ng::Bi nary_Str_Check(stri ng temp){ 一 一int flag=1;//先假设输入的消息串不含除0、1外的字符for(int i=0;temp[i]!='\0';i++){if(!(temp[i]=='0'||temp[i]=='1')) {flag=0; break;}} retur n flag;}〃汉明码编码void HMCodi ng::E ncodi ng(){A: stri ng bin ary_str;int flag;int binary_num=0;coutvv"请输入待编码的二进制序列:"<<e ndl;cin>>bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_str[bi nary_nu m]!='\0')bin ary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=O&&flag)/*序列所含码元个数不是 k 的整数倍,无法 全部编码*/{coutvv"您输入的二进制序列存在冗余,请重新输入!\n";goto A;}if(bi nary_num%k!=O&&!flag){ _coutvv"您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n";goto A;}if(bi nary_num%k==0&&!flag){ _coutvv"您输入的二进制序列含除0、1外的字符,请重新输入!\n"; goto A;}code_str="";for(i=O;i<b inary_nu m;i=i+k){for(j=O;j<k;j++)/* 获取k 位信息元*/{if(bi nary_str[i+j]=='O')X[j]=O;elseX[j]=1;}int temp;stri ng partial_str="";for(i nt t=O;t< n;t++){/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/temp=O;for(j=O;j<k;j++)temp+=X[j]*G[j][t];if(temp%2==O)partial_str+='O';elsepartial_str+='1';}code_str+=partial_str;} 一一coutvv"进行("vv*v","vvkvv")汉明码编码后的二进制序列为:\n"< vcode_strvve ndl;计算机科学与工程系竺}〃增余汉明码编码void HMCodi ng::E ncodi ng_Z(){ _ code_str="";A_Z:stri ng bi nary_str;int flag;int binary_num=O;coutvv"请输入待编码的二进制序列:"<<e ndl;cin>>bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_str[bi nary_nu m]!='\0')bin ary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&&flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/{coutvv"您输入的二进制序列存在冗余,请重新输入!\n";goto A_Z;} _if(bi nary_num%k!=O&&!flag){ _coutvv"您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n";goto A_Z;} _if(bi nary_num%k==0&&!flag){coutvv"您输入的二进制序列含除0、1外的字符,请重新输入!\n"; gotoA_Z;}for(i=0;ivb inary_nu m;i=i+k){ _for(j=0;jvk;j++)/* 获取k 位信息元*/{if(bi nary_str[i+j]=='0')X[j]=0;elseX[j]=1;}int temp;stri ng partial_str="";for(i nt t=0;tv n;t++){/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/ temp=O; for(j=0;j<k;j++) temp+=X[j]*G[j][t]; if(temp%2==0){ partial_str+='O'; X[j+k]=O;} else{ partial_str+='1'; X[j+k]=1;}}//生成增余汉明码最后一位//监督规则:对原汉明码所有n个码元取模2和int sum=0;for(j=0;j <n ;j++)sum+=X[j];if(sum%2==0)partial_str+='0';elsepartial_str+='1';code_str+=partial_str;} 一一cout«"进行("<<n+1<<","<<k<<")增余汉明码编码后的二进制序列为:\n"< <code_str<<e ndl;}/********************************* 校*********************************/〃利用汉明码校码void HMCodi ng::Checki ng(){B: stri ng bi nary_str;int flag;int binary_num=0;coutvv"请输入待译的二进制序列:"<<e ndl;cin>>bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_str[bi nary_nu m]!='\0')bin ary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%n!=0&&flag)/*序列所含码元个数不是n的整数倍,无法全部译码*/{coutvv"您输入的二进制序列存在冗余,请重新输入!\n";goto B;}if(bi nary_num% n!=0&&!flag) { _coutvv"您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n";goto B;}if(bi nary_num% n==0&&!flag){coutvv"您输入的二进制序列含除0、1外的字符,请重新输入!\n"; goto B;}code_num=binary_num/n;/统计n 元码组的个数check_code=new in t*[code_ nu m];for(i=0;i<code_ nu m;i++)check_code[i]=new in t[ n];for(i=0;i<code_ nu m;i++){/*每次取n个码元进行校正*/for(j=0;j< n;j++){check_code[i][j]=b in ary_str[i* n+j]-'0';} 一一} Get_Judge_Result();} 一一〃利用增余汉明码校码void HMCodi ng::Checki ng_Z(){ _B_Z:stri ng bin ary_str;int flag;int binary_num=0;coutvv"请输入待译的二进制序列:"<<e ndl;cin>>bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_str[bi nary_nu m]!='\0')bin ary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%(n+1)!=0&&flag)/*序列所含码元个数不是n+1的整数倍,无法全部译码*/ -{coutvv"您输入的二进制序列存在冗余,请重新输入!\n";goto B_Z;} _if(bi nary_num%( n+1)!=0&&! flag){ _coutvv"您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n";goto B_Z;} _if(bi nary_num%( n+1)==0&&! flag){ _coutvv"您输入的二进制序列含除0、1外的字符,请重新输入!\n";goto B_Z;} _code_num_z=binary_num/(n+1);/统计n+1 元码组的个数check_code=new in t*[code_ nu m_z];for(i=0;i<code_ nu m_z;i++)check_code[i]=new int[n+2];for(i=0;i<code_ nu m_z;i++){/*每次取n+1个码元进行校正*/for(j=0;j< n+1;j++){check_code[i][j]=bi nary_str[i*( n+1)+j]-'0';} 一一}Get_Judge_Result_Z();} 一一一〃获取汉明码校码结果void HMCodi ng::Get_Judge_Result(){ 一一int temp;int flag;stri ng partial_str;coutvv" ("vv*v","vvkvv")汉明码校码结果如下:"<<endl;coutvv"码组状态校正后"vve ndl;for(i nt t=0;tvcode_ nu m;t++){ _flag=0;partial_str="";for(i=0;ivr;i++){temp=0;for(j=0;j vn ;j++)temp+=H[i][j]*check_code[t][j];if(temp%2==0)partial_str+='0';elsepartial_str+='1';//对partial_str进行判断for(i=0;i< n+1;i++){if(H_Colu mn [i]==partial_str) { 一一flag=1;break;}}if(flag&&i<n)〃表示第i个码元出错,将其改正{for(j=0;j <n ;j++)cout<<check_code[t][j];cout«" 第"<<i+1<<"位错,可纠正";check_code[t][i]=(check_code[t][i]+1)%2;//1 变0, 0 变1 for(j=0;j<n ;j++)cout<<check_code[t][j];}if(flag&&i==n)〃表示全对{for(j=0;j <n ;j++) cout<<check_code[t][j];cout«" 全对";for(j=0;j <n ;j++)cout<<check_code[t][j];} _cout«e ndl;}}〃获取增余汉明码校码结果void HMCodi ng::Get_Judge_Result_Z(){ 一一一int temp;int flag;stri ng partial_str;cout«"( "<<n+1<<","<<k<<")增余汉明码校码结果如下(注:*表示无法识别的码元):"<<endl;cout«"码组状态校正后"<<e ndl;for(i nt t=0;t<code_ nu m_z;t++){flag=0;partial_str="";for(i=0;i< r+1;i++){temp=O; for(j=0;jv n+1;j++)temp+=H[i][j]*check_code[t][j];if(temp%2==0)partial_str+='O';elsepartial_str+='1';} _//对partial_str进行判断for(i=0;i< n+2;i++){if(H_Colu mn _Z[i]==partial_str){ ~ ~ 一flag=1;break;}}if(flag&&i<n+1)〃表示第i个码元出错,将其改正{check_code[t][ n+1]=1;〃表示正确接收for(j=0;j< n+1;j++)cout<<check_code[t][j];cout«" 第"<<i+1<<"位错,可纠正check_code[t][i]=(check_code[t][i]+1)%2;//1 变0, 0 变1 for(j=0;j<n+1;j++)cout<<check_code[t][j];} _if(flag&&i==n+1)// 表示全对{check_code[t][ n+1]=1;〃表示正确接收for(j=0;j< n+1;j++)cout<<check_code[t][j];cout«" 全对";for(j=0;j< n+1;j++)cout<<check_code[t][j];} _if(!flag){check_code[t][ n+1]=0;〃表示两位出错并无法纠正for(j=0;j<n+1;j++)cout<<check_code[t][j];coutvv" 某两位出错,无法纠正";for(j=0;j< n+1;j++)coutvv'*';//*表示无法正确识别的码元表示无cout«e ndl; }}/********************************* *********************************/〃利用汉明码译码void HMCodi ng::Decodi ng() {cout<<" ( "<<n<<", "<<k<<")汉明码译码结果为:"<<endl; for(i=0;i<code_ nu m;i++) { _for(j=0;j<k;j++)cout<<check_code[i][j];} cout«e ndl; }〃利用增余汉明码译码void HMCodi ng::Decodi ng_Z() { _coutvv"( "<<n+1vv","vvkvv")增余汉明码译码结果为(注:* 法识别的码元):"<<endl;for(i=0;i<code_ nu m_z;i++){ 一 一 if(check_code[i][ n+1]==1){ _for(j=0;j<k;j++) cout<<check_code[i][j]; }else { for(j=0;j<k;j++) cout«'*'; }} cout«e ndl; }/********************************* *********************************/void HMCodi ng::GOTO_HMCd in g_Z() {char choice 仁'';cout<<"\n *************** 欢迎进入("<<n+1<<","<<k<<")增余汉明码编码/校码/译码系统****************\n";coutvv"由汉明监督矩阵导出的增余监督矩阵 H["v<叶1vv"]["vvn+1<<"]为:"<<endl;"<<e ndl;cout<v"20091883 cout<v"20091888 cout<<"20091908 cout<<"20091909 cout<<"20091911 潘柳燕"<<e ndl;李文超"<<e ndl;周发洪"<<e ndl; 吴针朋"<<endl;张丹(组长)"<<endl;hmcod in g.Show_H(r+1, n+1);Z: cout<<"\n >>>>>>>>>>>>>>>>>>>>> ("vvn+1<<","<<k<<")增余汉明码编码/校码/译码系统vvvvvvvvvvvvvvvvvvvv'n";coutvv" "vv"E.增余汉明码编码"<<" "vv"D.增余汉明码校码/译码"<<" "vv"R.返回"<<" "vv"Q.退出"<<endl;cout«"请输入您要操作的步骤:";cin> >choice1;if(choice 仁='E'||choice1=='e')/进行编码{hmcod in g.E ncod in g_Z();goto 乙}else if(choice 1=='D'||choice1=='d'){hmcod in g.Check in g_Z();hmcod in g.Decodi ng_Z();goto 乙}else if(choice1=='R'||choice1=='r')return;else if(choice1=='Q'||choice 1=='q')/退出{exit(0);}else//如果选了选项之外的就让用户重新选择{coutvv"您没有输入正确的步骤,请重新输入!"<<e ndl;goto 乙}coutvve ndl;}void mai n(){char choice='';〃用于记录初始化情况int flag=0;int n ,k;cout<v"\n09计科二班信息论第二实验小组小组成员:学号一一姓名coutvv"\n ************************* 汉明码编码/ 校码/译码系统*************************\n"・cout«"请输入汉明码的码长n=";cin>>n;cout«"请输入汉明码的信息元个数k=";cin> >k;while(choice!=Q&&choice!='q')〃当choice 的值不为q 且不为Q 时循环{C: cout<<"\n >>>>>>>>>>>>>>>>>>>>>>> ("vvn<v","vvk<v")汉明码编码/校码/译码系统vvvvvvvvvvvvvvvvvvvv\n";coutvv" "vv"l.输入建立"<<" "vv"E.汉明码编码"<<" "vv"D.汉明码校码/译码\n";cout«" "vv"Z.进入相应的增余汉明码系统"<<" "vv"Q.退出\n";coutvv"请输入您要操作的步骤:";cin> >choice;if(choice==T||choice=='i')〃初始化{if(!flag){〃初次执行初始化操作flag=1;}hmcodi ng.ln itializi ng(n, k);coutvv"您输入的监督矩阵H["<<n-k<v"]["vv*<"]为:"<<endl; hmcoding.Show_H( n-k, n);coutvv"该监督矩阵对应的生成矩阵G["v<kvv"]["vvn<<"] 为:"vve ndl;hmcodi ng.Show_G(k, n);hmcodi ng.HM_Efficie ncy_An alysi ng();} 一一else if(choice=='E'||choice=='e')/进行编码{if(!flag){coutvv"操作错误!请执行输入建立操作后再进行本操作!"vve ndl;goto C;}hmcodi ng.E ncod in g();}else if(choice=='D'||choice=='d')//校码、译码{if(!flag){coutvv"操作错误!请执行输入建立操作后再进行本操作!"<<endl;goto C;}hmcodi ng.Check in g();hmcodi ng.Decod in g();}else if(choice=='Z'||choice=='z'){if(!flag){COUtVV"操作错误!请执行输入建立操作后再进行本操作!"<<e ndl;goto C;}//进入增余汉明码系统hmcodi ng.GOTO_HMCdi ng_Z();}else if(choice==Q||choice=='q')//退出{exit(0);}else//如果选了选项之外的就让用户重新选择{coutvv"您没有输入正确的步骤,请重新输入!"<<e ndl;goto C;}cout«e ndl;}}运行结果:1首先需输入建立(n,k)汉明码3、汉明码编码注:输入的信息序列应为k 的整数倍,否则会报错>»»»»»»>>mg>» (7,4)墓明一…務谕二进制序列:曲潮请输入卡祢正确编码:码/松码/译码氢统 <<<<<<<<<<<<<<<<<<<< 祐囉严译码4、汉明码校码、译码注:待译的二进制序列应为n 的整倍数,否则报错醫统後码■X)- E”汉(7余 >増> -£n d・・等应:洌"建霧序”入入步制>>1.2.作二01制二 ”番01番 ”要译10二译码/枚码 h 译码系统 <<<<<<<<<<<<<<<<<<<< 码 嚼严译码2、给定监督矩阵,导出相应的生成矩阵,显示出错误概率及编码效率演示:全对、1位错(可纠正)5、导出相应的增余汉明码y 译码系统 <<<<<<<<<<<<<<<<<<<<I R.返回 Q ■退出很明码编码码#译码系统<<<<<<<<<<<<<<<<<<<< 汉哺码校码*臬稿乩返回Q.退岀6、增余汉明码编码注:输入的信息序列应为k 的整数倍,否则会报错»»»»»»>»»»» (8.4)很明码编码/ Ua饷 ° m舫識绷驟请重际 100001300010陡行(乳4增余汉明码编码后的二进制序列为:10000111010^101100101101»»>>»>»»»»»»(8,4)[■青输锡畫蝶會議■ D7、增余汉明码校码、译码注:待译的二进制序列应为(n+1 )的整倍数,否则报错 演示:全对、1位错(可纠正)、2位错(不可纠正)请重新输入1严译码 校正宕1000011 010010110000910100101110100101r (7.4)汉明码榜跆果如 鸭组叢态100SS91 宣&忙借, 0100101 全对^| (叫町汉明码译百唏果为 丄0观血»»»»»»»>»»»»(7,4)汉明码编码/校码/译码系统<<<<<<<<<<<<<<<<<<<< I •输入建皇”心几E-汉男独豁码---「应的壇余汉明码累统::d回瞒矍蘇D的諾卿斷余"请重新输入,1O30B11101001001oa 130001r (8( <増余汉明码璽码结果如下〔注:*表示无法识别的码 码组 o 楼正后 1000B111 全对 10000111 01001001 乏?任僭,可纠正 01 RI?lPtt BBiaaeai 集爾社出tt,无法纠正 …“… 「6 <增余汉明码译码结果为(注:共表示无法识别的码元): 1000P1 00****8退出系统>»»»»»»»»»» (s,4)増余汉明码编码/栓码#译码系统<<<<<<<<<<<<<<<<<<<< 青輸熾羈鶴輙« ^耘明码校卸詞“返回 讥出 P FES :盂 giny key to continueL」[元):I# 译码系统 <<<<<<<<<<<<<<<<<<<< I Rr 返回 4退出>»»»»»»»»»»(8,4) I10001100®AR<<出 "退■<<回<<返Vs蓉»>»»»»»>>»»» 増金很明码编码。

汉明码实验报告

汉明码实验报告

汉明码实验报告汉明码实验报告引言:汉明码是一种用于错误检测和纠正的编码技术。

在通信和存储系统中,数据传输和存储过程中常常会出现错误,而汉明码可以帮助我们检测出这些错误,并且在一定程度上还能够纠正这些错误。

本实验旨在通过实际操作,深入理解和掌握汉明码的原理和应用。

实验目的:1. 了解汉明码的基本原理和编码方式;2. 实际操作中,通过添加冗余位实现错误检测和纠正。

实验步骤:1. 汉明码的编码过程首先,我们需要选择合适的汉明码位数。

在本实验中,我们选择了4位汉明码进行编码。

接下来,将待传输的数据进行编码。

假设我们要传输的数据是1010,我们可以通过以下步骤进行编码:- 第一步,确定冗余位的位置。

在4位汉明码中,第1、2、4位是冗余位,而第3位是数据位。

- 第二步,计算冗余位的值。

冗余位的值是通过数据位和冗余位的异或运算得到的。

具体计算如下:- 第1位冗余位的值:1 xor 0 xor 1 xor 0 = 0- 第2位冗余位的值:1 xor 0 xor 1 xor 0 = 0- 第4位冗余位的值:1 xor 0 xor 1 xor 0 = 0- 第三步,将数据位和冗余位按顺序排列,得到最终的汉明码。

在本例中,最终的汉明码为0110100。

2. 汉明码的解码过程在接收端,我们需要对接收到的汉明码进行解码,以检测和纠正可能存在的错误。

解码的步骤如下:- 第一步,确定冗余位的位置。

根据汉明码的编码方式,我们可以得知冗余位的位置。

- 第二步,计算冗余位的值。

与编码过程相反,我们通过数据位和冗余位的异或运算得到冗余位的值。

- 第三步,检测错误位。

如果冗余位的值为0,则说明传输过程中没有错误;如果冗余位的值为1,则说明传输过程中存在错误。

通过对冗余位的值进行判断,我们可以确定错误位的位置。

- 第四步,纠正错误位。

根据错误位的位置,我们可以将该位的值进行翻转,从而纠正错误。

实验结果:通过实验,我们成功地进行了汉明码的编码和解码过程。

北交大通原实验实验十五汉明编码和译码实验剖析

北交大通原实验实验十五汉明编码和译码实验剖析

北交大通原实验-实验十五汉明编码和译码实验剖析————————————————————————————————作者:————————————————————————————————日期:通信原理实验电子信息工程学院学生:学号:指导教师:王根英日期: 2014年12月30日上课时间:星期二第 5 大节实验十五 汉明编码和译码实验一、 实验前的准备(1) 预习本实验的相关内容。

(2) 熟悉实验指导书附录B 和附录C 中实验箱面板分布及测试孔位置相关模块的跳线状态。

(3) 实验前重点熟悉的内容:汉明码的编码规则、汉明码的纠错能力。

二、 实验目的(1) 掌握汉明码编译码原理。

(2) 掌握汉明码纠错检错原理。

(3) 通过纠错编解码实验,加深对纠错编解码理论的理解。

三、 实验仪器(1) ZH5001A 通信原理综合实验系统(2) 20MHz 双踪示波器四、 基本原理差错控制编码的基本原理是:由发送端的信道编码器在信息码元序列中增加一些监督码元。

这冗余的码元与信息之间以某种确定的规则建立校验关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。

不同的编码方法有不同的检错或纠错能力。

为了纠正位错码,在分组码中最少要加入多少监督位才可行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致了汉明码的诞生。

汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。

下面介绍汉明码的编码原理。

一般来说,若码长为n ,信息位数为k ,记作(,)n k 码,则监督位数r n k =-,如果希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求2121r n r k r -≥≥++或通信原理综合实验系统中的纠错码系统采用(7,4)汉明码。

用650a a a … 表示这7个码元,用123S S S 、、表小3个监督关系式中的校正子,则123S S S 的值与码元间构成偶数监督关系:165422443136530S a a a a S a a a a S a a a a =⊕⊕⊕=⊕⊕⊕=⊕⊕⊕ 在发送端编码时,信息位654a a a 、、和3a 的值决定于输入信号,因此它们是随机的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十五汉明编码和译码实验一、实验前的准备(1)预习本实验的相关内容。

(2)熟悉实验指导书附录B和附录C中实验箱面板分布及测试孔位置相关模块的跳线状态。

(3)实验前重点熟悉的内容:汉明码的编码规则、汉明码的纠错能力。

(4)思考题。

1)什么是汉明码?它能纠几位错码?它有什么特点?2)本实验中汉明编码器的输入数据速率为32kbps,输出数据速率为多少?为汉明编码器的输入信号选择m序列信号时,跳线开关SWCO1、KCO1如何汉明编码器的输入信号选择来自ADPCM模块的ADPCM信号时,跳线开关如何设置?二、实验目的(1)掌握汉明码编译码原理。

(2)掌握汉明码纠错检错原理。

(3)通过纠错编解码实验,加深对纠错编解码理论的理解。

三、实验仪器(1)ZH5001A通信原理综合实验系统(2)20MHz双踪示波器四、基本原理差错控制编码的基本原理是:由发送端的信道编码器在信息码元序列中增加一些监督码元。

这冗余的码元与信息之间以某种确定的规则建立校验关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。

不同的编码方法有不同的检错或纠错能力。

为了纠正位错码,在分组码中最少要加入多少监督位才可行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致了汉明码的诞生。

汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。

下面介绍汉明码的编码原理。

一般来说,若码长为n ,信息位数为k ,记作(,)n k 码,则监督位数r n k =-,如果希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求2121r n r k r -≥≥++或通信原理综合实验系统中的纠错码系统采用(7,4)汉明码。

用650a a a … 表示这7个码元,用123S S S 、、表小3个监督关系式中的校正子,则123S S S 的值与码元间构成偶数监督关系:165422443136530S a a a a S a a a a S a a a a =⊕⊕⊕=⊕⊕⊕=⊕⊕⊕ 在发送端编码时,信息位654a a a 、、和3a 的值决定于输入信号,因此它们是随机的。

监督位21a a 、和0a 应根据信息位的取值按监督关系来确定,即监督位应使以上=式中123S S S 、、的值为零(表示变成的码组中应无错码),即654254316530000a a a a a a a a a a a a ⊕⊕⊕=⎫⎪⊕⊕⊕=⎬⎪⊕⊕⊕=⎭上式经移项运算,解出监督位265415430653a a a a a a a a a a a a =⊕⊕⎫⎪=⊕⊕⎬⎪=⊕⊕⎭给定信息位后,可直接按上式算出监督位,其结果如下表接收端收到每个码组后,先按式(12-2)~式(12-4)计算出123S S S 、、,再按上表判断错码情况。

例如,若接收码组为0000011,按式(12-2)~式(12-4)计算可得1231S S S =0、=1、。

由于123S S S 等于011,故可知在3a 位有一错码。

按上述方法构造的码称为汉明码。

(7,4)汉明码的最小码距d=3,因此,这种码能纠正一个错码或检测两个错码。

汉明码有以下特点:码长21m n =-最小码距d=3信息码位 21n k m =-- 纠错能力t=1监督码位r n k m =-=这里,m 为2≥ 的正整数,给定m 后,即可构造出具体的汉明码(n,k )。

汉明码的编码器和译码器电路如图所示。

汉明编码模块实验电路工作原理描述如下。

1.输入数据汉明编码输入数据可以来自ADPCM1模块的ADPCM 码字,或来自同步数据端口数据、异步端口数据、CVSD 编码数据、m 序列。

选择ADPCM 码字由工作方式选择开关SWCO1中的ADPCM 状态决定,当处于ADPCM 状态时(插入跳线器),汉明编码器对ADPCM 信号编码否则处于非ADPCM 状态时(拔除跳线器),输入编码数据来自开关KCO1所设置的位置,分别为同步数据端口数据、异步端口数据、CVSD 编码、m 序列。

2.m序列发生器m序列用于测试汉明编码规则,输出数据信号与开关SWCO1位置如下表。

3.编码使能开关此开关应与接收端汉明译码器使能开关同步使用,该开关处于使能状态(H-EN短路器插入),汉明码编码器工作;否则汉明码编码器不工作。

需要注意:汉明码编码器不工作时,ADPCM和CVSD话音数据无法通过调制解调信道通话,这是因为编码速率与信道速率不匹配。

4.错码产生错码产生专门设计用于测量汉明译码器的纠错和检错性能。

输出错码与开关SWCO1位置如下表所示。

错码可以用示波器从错码指示端口TPC03监测。

汉明编码模块各测试点定义如下。

(1)TPCO1:输入数据。

(2)TPC02:输入时钟。

(3)TPC03:错码指示(无加错时,该点为低电平)。

(4)TPC04:编码模块输出时钟(56kHz/BPSK/DBPSK)。

(5)TPC05:编码模块输出数据(56kbtps/BPSK/DBPSK)。

汉明编码模块电路功能组成框图见图12-2。

汉明译码模块实验电路工作原理描述如下。

1.输入信号选择开关开关KWO1、KW02用于选择输入信号和时钟是来自解调器信道或直接来自汉明编码模块。

当KWO1、KW02设置在1-2位置(CH:左端),则输入信号来自信道开关KWO1、KW02设置在2_3位置(LOOP:右端)则输入信号来自汉明编码模块。

2.汉明译码器主要由串/并变换器、校正子生成器、3/8译码器和纠错电路构成。

该电路专门由一个CPLD(EPM7128)实现。

3.汉明译码使能开关SW03中H-EN与发端编码使能开关同步使用。

汉明译码模块各测试点定义如下。

TPWO1;输入时钟(56kHz)。

TPW02:输入数据(56kbps)。

TPW03:检测错码指示。

TPW04:输出时钟。

TPW05:CVSD数据输出。

TPW06:同步数据输出。

TPW07:m序列输出。

TPW08:异步数据输出。

汉明译码模块电路功能组成框图见图12-3。

五、实验内容(一)准备工作(1)首先通过菜单将调制方式设置为BPSK或DBPSK方式;将汉明编码模块内工作方式选择开关SWCO1中:编码使能开关插入(HEN),ADPCM 数据断开(ADPCM);加错开关EMODO、EMOD1均拔出接入;将输入数据选择开关KCO1设置在m序列(DTM)位置,设置m序列方式为00(MSEL2和MSEL1拔下),此时m序列输出为1/0码。

(2)将汉明译码模块内输入信号和时钟选择开关KWO1、KW02设置在LOOP位置(右端),输入信号直接来自汉明编码模块(不通过调制、信道、解调);将译码器使能开关KW03设置在工作位置ON(左端)。

(二)编码规则验证(1)用示波器同时观测编码输入信号TPCO1波形和编码输出波形TPC05,观测时以TPCO1同步,观测是否符合汉明编码规则(参见表12-1)。

注意此时输入、输出数据速率不同,输入数据速率为32kbps,输出数据速率为56kbps。

上方为TPC01波形,下方为TPC05波形:可见上方数据为:…1100……TPC05编码波形数据为:……1100010……对比上面编码表,可以看出,是正确的。

(2)设置m序列方式为10(MSEL2插入、MSEL1拔下),此时m序列输出为1l/00码(参见表12-1)。

用示波器同时观测编码输入信号TPCO1波形和编码输出波形TPC05,观测时以TPCO1同步,观测是否符合汉明编码规则。

上方为TPC01波形,下方为TPC05波形:可见上方数据为:…1100……TPC05编码波形数据为:……1100010……对比上面编码表,可以看出,是正确的。

(三)译码数据输出量(1)设置m序列方式为11(MSEL2,MSEL1均插入用示波器同时观测汉明编码模块的编码输入信号TPCO1波形和汉明译码模块译码输出m序列波形TPW07,观测时以TPCO1同步。

测量译码输出数据与发端信号是否保持一致。

注意:输出波形与输入波形之间有时延。

记录输出波形和输入波形。

上方为TPC01波形,下方为TPW07波形:可见上方数据为:……1101011110001001101……TPW07解码输出波形数据为:……1111000100110101111……可以看出,两者之间存在6个码元的延迟。

(四)译码同步过程观测将汉明编码模块工作方式选择开关SWCO1的编码使能开关插入(H_EN);ADPCM数据有效(ADPCM)将汉明译码模块的输入信号和时钟选择开关KWO1、KW02设置在23位置(右端),输入信号直接来自汉明编码模块。

(1)用示波器检测汉明译码模块内错码检测指示输出波形TPW03。

将汉明编码模块内工作方式选择开关SWCO1的编码使能开关断开(H_EN,使汉明译码模块失步,观测TPW03变化;将编码使能开关插入(H_EN),观测汉明译码的同步过程,记录测量结果。

(五)发端加错信号和汉明译码检错能力观测用示波器同时测量汉明编码模块内加错指示TPC03和汉明译码模块内错码检测指示输出波形TPW03的波形,观测时以TPC03同步。

(1)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MOD0、E_MOD1均拔出,此时无错码,记录结果。

可见无错码时只有两个低电平输出。

(2)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MOD0接入、产生1位错码,定性观测明译码能否检测出错码,记录结果。

上方为TPC03波形,下方为TPW03波形:可见一位错码时发端和收端都有错误提示输出。

(3)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MOD1,产生2位错码,定性观测明译码能否检测出错码,记录结果。

上方为TPC03波形,下方为TPW03波形:可见两位错码时发端和收端都有错误提示输出。

但电平宽度不变。

(4)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MOD0、E_MOD1都插入产生更多错码,定性观测明译码能否检测出错码和失步,记录结果。

上方为TPC03波形,下方为TPW03波形:可见两位错码时发端和收端都有错误提示输出。

但电平宽度不变。

但是这时的错误提示实际上是错误的。

(六)汉明译码纠错性能量汉明编码的输入信号设置m序列方式为11(MSEL2,MSEL1均插入);用示波器同时观测汉明编码模块的输入信号TPCO1波形和汉明译码模块译码输出m序列波形TPW07,观测时以TPCO1同步。

(1)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MODO、E_MOD1均拔出,此时无错码,记录结果。

上方为TPC01波形,下方为TPW07波形:可见没有错码时收端可以正常工作,解码正常。

(2)将汉明编码模块工作方式选择开关SWCO1的加错开关E_MODO接入,产生1位错码,定性观测汉明编译码系统能否纠1位错码,记录结果。

相关文档
最新文档