文档库 最新最全的文档下载
当前位置:文档库 › 二元(7,4)汉明码的编译码分析与实验研究

二元(7,4)汉明码的编译码分析与实验研究

二元(7,4)汉明码的编译码分析与实验研究
二元(7,4)汉明码的编译码分析与实验研究

设计(论文)题目:二元(7,4)汉明码的编译码分析与实验研究

摘要

汉明码(Hamming Code)在电信领域内属于线性分组码,或者可以称为线性调试码。它是以发明者理查德·卫斯里·汉明的名字命名的。汉明码在传输信息序列时插入校验码,当计算机存储或传输数据时,或者在信道传输的过程中,可能会产生误码,即信息错位,以检测并纠正一个比特错误。由于汉明编码简单,它们被广泛应用于实际传输中。

本文主要涉及二元(7,4)汉明码的编码、译码及实现,以及信息论与编码的相关知识。对于二元(7,4)汉明码C,其校验矩阵为H,汉明距离d(C)=3的充要条件是校验矩阵H的任意2个列矢量线性无关,且任意3个列向量是线性相关。监督矩阵H生成的码是(7,4,3)码。所以接下来问题是构建监督矩阵H和生成矩阵G,找出编码器和译码器输入和输出对应的逻辑关系,画出汉明码的编码电路图和译码电路图,通过VHDL语言实现汉明码的编码过程和译码过程,观察仿真波形,来观察实验结果。

关键字:二元(7,4)汉明码;生成矩阵;监督矩阵;编码;译码;

Abstract

Hamming code field belongs to the linear block codes in the telecommunications, or you could be called linear debugging code. It is the inventor, Richard Wesley Hamming named after. Hamming code inserted into the check code in information transmission sequence, when the computer refers for data storage,or in the process of channel transmission. it may produce error, namely the informational burst-error, and Hamming Code could detect and correct errors one bit. Due to its simple hamming coding, they are widely used in the actual transmission.

This paper mainly relates to binary (7, 4) hamming code about coding, decoding and realization, as well as the related knowledge of Information Theory and Coding. For binary (7, 4) hamming code called C, its supervision matrix of the H, hamming distance d (C) = 3 of any two of the sufficient and necessary condition is checking matrix H column vector linearly independent, and arbitrary three column vector is linearly dependent. Supervision of matrix H generated code is (7, 3) code. So the next problem is to build the generator matrix G and supervision matrix H, generate the encoder and decoder ,inputs and outputs corresponding logical relationship, as well as,draw the circuit diagram of hamming code encoding and decoding circuit diagram, using VHDL language realization of hamming code encoding and decoding process, observing the simulation waveform and the result of the experiment.

Keywords:binary (7, 4) hamming code ;generator matrix;supervision matrix;encoding ;decoding ;

引言

汉明码是最早提出来的用于纠错的编码,它是一类可以纠正一位错误的高效的线性分组码。二元汉明码是一类高效的(7,4,3)线性码,由于最小汉明距离d=3,故可以纠正一位错误。由于汉明码有良好的性能,比如它是完备码,译码方法简单高效等,从而广泛应用。

汉明码的设计思路是找出一个完备的汉明码,是它满足汉明权限。找出汉明码的生成矩阵G和监督矩阵H,设计编码电路和译码电路,通过使用VHDL语言对设计的电路仿真,检验设计是否可以实施。

第一章汉明码概述

1.1 汉明码的提出

由于数字信号在信道传输中收到干扰,在传输过程中必定会产生误码,接收端在接收码元时会产生误判,因此在设计数字通信系统或者在数字信号传输的过程中,就必须考虑到差错控制编码,即考虑码元在信道传输过程中误码产生的原因,这就延伸到另一领域,对信道特性的研究上来。对于不同的信道,存在各种不同的噪声和干扰,对于这些随机干扰和随机噪声,会有另外的研究文献加以说明。本文在考虑信道传输问题是暂且认为是恒参信道,误码产生的过程假设为平稳随机过程[1]。理想化后,我们考虑汉明码在实际中应用,汉明码的特性,汉明码的编码与译码,汉明码的实现方式,汉明码的传输效率等角度,来研究汉明码在实际中的运用。

汉明码最早是汉明在贝尔实验室(Bell Labs)中提出来的,由于使用贝尔模型V(Bell Model V)电脑,这台电脑是一个机电继电器,输入端是依靠打孔卡(Punched Card)来读取数据,我们可以假设打孔卡为信源,信源读取数据会经常出现错误。在平日,某些信息代码发现错误将闪灯(flash lights),操作者能够发现错误并且纠正错误。如果在周末和下班期间,由于没有操作者,机器只会简单地停止当前操作并转移到下一个工作,这样会影响日常工作的进行,增添不必要的麻烦。对于不可靠的读卡机发生错误后,汉明必须重新开始项目,这样重复的出错问题让汉明的实验变得愈来愈沮丧。那么他为了解决出错和调试的问题,开发了功能日益强大的调试算法。提出如果一条信息中包含更多用于纠错的信息位,根据纠错位找出出错位,这是他在设计整个汉明码的主要思想。在我们今天看来,其实就是根据监督码找出信息码的错误位置。7位的信息码元的汉明码中,只有一位错误的情况有7种,因此只要求错误控制位有3个就足以确定是否出错及哪一位出错了。1950年,汉明介绍了(7,4)代码。其编码由4位比特到7位比特,增加三个奇偶校验码。二元(7,4)汉明码的3位监督位的特点,可以纠正单个比特错误,这3个奇偶校验码也可以检测双比特错误。

由于汉明码是一种特殊的线性分组码,所以我们需要对线性分组码的特性加以了解,比如汉明码是差错控制码,有线性分组码的相同的性质,还要介绍(7,4)汉明

码的实现工具等。

1.2 差错系统模型

图 1 差错控制系统模型

如图1所示模型,突出了以控制差错为目的的纠错码编、译码器,因此也称为差错控制系统。按其纠错能力的不同可分为两种:检错码和纠错码。检错码能发现错误但不能纠正错误,纠错码能发现错误而且还能纠正错误。按差错控制系统类型,可分为前向纠错、重传反馈和混合纠错等三种方式。

前向纠错(FEC)方式,指的是纠错编码器发送有纠错能力的码字(纠错码),纠错码译码器收到这些码字后,通过纠错译码器自动地纠正传输中的错误[17]。前向纠错的优点一是不需要反馈信道,二是能进行一个用户对多个用户的同时通信,三是译码实时性较好,控制电路也比较简单,其中第二个优点在实际应用中比较多见。前向纠错缺点则是译码设备较复杂,编码效率较低,所以这个问题也是在设计编码器时需要考虑的事。

重传反馈(ARQ)方式,指纠错编码器发出能够发现错误的码字(检错码),收端译码器收到后进行判断在传输中有无错误产生,并通过反馈信道把捡测结果告诉发端,发端把收端认为有错的消息再次传送,直到收端认为正确接收为止。ARQ的译码器简单,码字的检错能力高于纠错能力,因而整个系统的误码率很低。缺点则是应用ARQ方式必须有一条从收端至发端的反馈信道用来控制信源产生信息的速率,编码器译码器两端必须在时间上严格同步,在实际中难以做到其复杂的控制电路,也就是重传反馈传输信息的连贯性和实时性比较差[2]。

混合纠错(HEC)方式,结合了前向纠错方式和重传反馈方式的优点,避免了这两者的缺点。发端纠错编码器发送的码既能检错、又有一定的纠错能力。收端译码时若发现错误个数在码的纠错能力以内,则自动进行纠错;若错误个数超过了码的纠错能力,但能检测出来,则通过反馈信道告知发方重发。这种方式避免了前向纠错译码设备复杂和重传反馈方式信息连贯性差的缺点。

再设计差错控制系统时需要考虑到尽可能高的信息传输速率,还有尽可能简单的编译码算法且易于实现,如果这两者都做不到,设计的差错控制系统就有问题了。此外,还需考虑用户对误码率的要求和设计成本等实际实施问题。

1.3 纠错码的分类

常用的纠错码按其码字结构形式和对信息序列处理方式的不同可分成两大类:分

组码和卷积码[2]。

分组码是指把信息序列以每k个码元分组,编码器将每个信息组按一定规律产生r个多余的码元(称为校验元),形成一个长为n = k + r 的码字[9]。对于k个码元分组,共有2k个不同的信息组,编码器输出长n的2k个码字,这2k个长为n的码字构成的集合称为一个(n,k)分组码[10]。其中,n表示码长;k表示信息位的数目;R = k / n表示分组码码率。

1.4差错类型

讨论码字序列通过离散信道时发生的情况,信道分为无记忆信道和有记忆信道。

在无记忆信道中,噪声对传输码元的影响是相互独立的,即每一个差错的出现与其前后是否有错无关,如图2所示。在无记忆信道中,错误是随机产生的,因此被称作随机错误,无记忆信道也被称为随机信道(random channel)[2]。

图 2 随机信道模型

有记忆信道中,各种干扰所造成的错误往往不是单个地,而是成群、成串地出现,表现出错误之间有相关性,称为突发错误[2]。下图3就是这种信道的一个模型。就实际信道而言,由于其干扰的复杂性,往往是两种错误并存。随机错误与突发错误并存的信道,称为组合信道或复合信道[2]。

图 2 记忆信道模型

1.5 线性分组码

定义若码C是V(n,q)的n重k维子空间V(k,q),则称码C为q元(n,k)线性分组码,简称分组码。当(n,k)线性分组码的最小距离为d时,就记为(n,k,d)线性码[2]。

对应着n为码字,长为n的二元序列,F2 。当e i=1时,表明码字中第i位c i 发生错误。当e i=0时,表明码字中第i位c i没有错误。称为错误图样。

设和是集合V(n,q)(n维向量空间)中的任意两个向量,令=,=,令表示和对应的各码元之间不相同的个数,则称为、之间的汉明距离[2]。通过比较接收到的码字与设计的码字对应码距较少的判断为正确接收,使用汉明距离来译码,符合极大似然译码规则。当汉明距离越小,说明两个码字越像,那么输入的码字将是译码器输出的码字。

设,,,是(n,k)线性分组码中k个线性无关的非零码字,,,,,GF(2),其中GF(2)称为二元伽罗华域,则(n,k)线性分组码2 k个码字中的任一码字可表示为

???????? ??--------1,2,1,0,1,22,21,20,21,12,11,10,11,02,01,00,0...........................n k n k n k n k n n n n h h h h h h h h h h h h h h h h ???????? ??-1210...n c c c c =+++.....+,用矩阵表示如下:

=G=(..)

生成矩阵可以表示成如下所示:

G==

表示长为k 的序列,构成2 k 个不同的消息。生成矩阵的性质有:

(1)如果G 是一个生成矩阵,那么与G 行等价的任一矩阵也是生成矩阵。

(2)初等行变换:任意两行交换;将任一行加到另一行;将任一行同乘一个数。

(3)每个线性分组码都有唯一的生成矩阵,通过初等行变换,可以变为等价的 标准形式G=[],其中表示单位方阵,它的行和列与输入信息序

列相等,表示k 行(n-k )列的矩阵。

(4)一个矢量空间的基底不止一个,G 不唯一,各个G 编出的码相同,但各消息对应的码字不同。

一般的(n ,k )线性分组码C 总可以从该码的编码规则中选出(n-k )个独立校验位方程,如将它们写成齐次线性方程的形式,则它们可以用矩阵表示为:

= 0 T 简记·T = 0 T 即,我们称为监督矩阵。监督矩阵有如下性质:

(1)矩阵H 的n-k 个行矢量是线性独立的,它们组成了V(n,q)上的一个n-k 维的子空间,由

H ·(·G)T =0H ·G T T =0H ·G T =0 T

即,H 的行空间与G 的行空间是相互正交的(对偶的)。

(2)每个线性分组码都有唯一的监督矩阵,通过初等行变换,可以变为等价的标准形式H=[],其中表示单位方阵,它的行和列与输入信息序列相等,表示(n-k )行k 列的矩阵。

(3)可以将生成矩阵G=[I,Q]和监督矩阵H = [P,I] 写成H ·G T =0 T ,即[I,Q]·[P,I]T =0 T ,可以得出Q+P T =0,所以只有当P T =Q 或者Q T =P 时上式才成立,这时生成矩阵和监督矩阵可以相互转化的。

1.6 汉明码

汉明码指一类能纠单个错误的纠错码,由于汉明码属于线性分组码,那么根据上面线性分组码的一些特点同样可以推导出汉明码也应具备线性分组码的性质和特点。汉明码的相关参数的如下所示:

码长:n=2 m - 1

信息位:k=2 m - 1- m = n - m

监督位:m=n-k,且m≥3

最小距离:d min=3

对于(n,k)汉明码,码长和信息位都受到监督位的控制,试图用m个监督位构造m个监督关系式来指示1位错码的n种可能位置,则要求

2 m-1 ≥ n 或2 m- 1 ≥ m+k+1

设计汉明码是将信息码元和监督码元通过线性方程将二者关联起来,每一个监督位被编在信息码元的后面,从对应关系可以看出,当输入为4位比特时,监督位必须为3位,这样由001,010,...,111刚好对应可以纠正1位错码,检测2位错码。汉明码的监督矩阵H必须具备以下条件:

(1)H中列为非全零元素。

(2)H中任意的三个列的子集相加等于0,即监督矩阵H中任意三个列向量线性相关,任意四个列向量线性相关。

(3)H中线性相关的最小列数为3,故H中没有元素全为0的列矢量,H中任意两个列矢量都不相同。

1.7 汉明码的校验子

对于译码器,已知接收码字y,未知e和,如果译码器可以推测出错误图样,那么译码结果为=y+。为实现译码结果,译码器接收到y后,计算一个向量s=y=(+e)=e,其中=0,所以最后结果为s=e,监督矩阵的转置已知。其中,我们称向量s为校验子或伴随式[2],而伴随式的取值只取决于错误图样,与发送码字无关,所以我们可以从伴随式入手,推测出错误图样。对于非齐次线性方程s=e,方程组的解e=(e 6 e 5 e 4 e 3 e 2 e 1 e 0)的个数与矩阵的秩有关,通过将矩阵进行初等行变换,可以得出R()=2,方程有无数解,关于线性方程组解的分布可以参考《线性代数》一书,其中解e=(e 6 e 5 e 4 e 3 e 2 e 1 e 0)的个数为=16种,最佳译码应选择码重最小,即错误个数最少的那个错误图样来纠正错误,那么纠正后的结果就是编码器的编码结果=()。对于(7,4)汉明码的伴随式s=(s 2 s1 s 0)=000时,表示没有误码的存在。当伴随式从001取到111,表示7位汉明码元会有一位错误码元,每一个伴随式对应一个错误码元,从而实现纠正单个错误。

1.8 汉明码的相关知识

除了汉明码外,还需补充《信息论与编码》相关知识,比如码重、码距、汉明距离、最小码距,汉明码码率等。

码重指传输二进制码元时“1”的数量称为码组的重量,码距指两个信息码组对应位上数字不同的位数称为码距,又称汉明距离(Hamming Distance)[8]。最小码距是一组编码中各个码组间最小的那一对码组距离,一般记d 0为最小码距,记e为检错位数,记t纠错位数,它们三者的关系如下所示:

(1)e +1≤ d 0 ,即码的检错能力e比最小码距d 0 小1位;

(2)2t+1≤ d 0 ,即码的纠错能力t的2倍比最小码距d 0 小1位;

(3)e +t+1 ≤ d 0 ,即若码同时纠t个错并检出e个错误,则e +t比最小码距d 0 小1位。

汉明码的码率指一个信息序列通过编码器时,若输入为k,输出为n,那么定义汉明码的码率R=k/n=(n-m)/n=1-m/n。当n趋于无穷大时,汉明码码率为1,这就是汉明码的优点所在。

第二章EDA技术与应用

2.1 EDA简介

EDA(Electronic Design Automation )即电子设计自动化,现代电子设计和计算机软件技术总成,最终形成集成电子系统或专用集成电路芯片ASIC(Application Specific Integrated Circuit)为目的的一门新兴技术[3]。从现在主流设计来看,现代电子设计技术的核心是EDA技术,EDA技术就是依靠功能强大的电子计算机设计,在EDA工具软件平台上,对以硬件描述语言(如VHDL)为系统逻辑描述手段拉力完成的设计文件,自动地完成逻辑编译、化简、分割、综合、优化和仿真,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC芯片中,实现既定的电子电路设计功能[3]。

EDA技术是以计算机为工作平台、以EDA软件工具为开发环境、以硬件描述语言为设计语言、以ASIC(专用集成电路)为实现载体的电子产品自动化设计过程[11]。

2.2 EDA基本特征和优势

EDA工具主要进行三项辅助设计工作:集成电路(IC)设计、电子电路设计及印刷电路板(PCB)设计[14]。

EDA技术的基本特征:采用高级语言描述;具有系统级仿真和综合能力;具有开放式设计环境;具有丰富的元器件模型库。

EDA技术的优势:(1)采用硬件描述语言,便于复杂系统设计(2)强大的系统建模和电路仿真功能(3)具有自主知识产权(4)开发技术的标准化和规范化(5)全方位地利用计算机的自动设计、仿真和测试技术(6)对设计者的硬件知识和硬件经验要求低[3]。

EDA设计就是将设计者在EDA平台上编辑输入的VHDL文本、电路原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行连接、编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件,或者是底层元件[15]。所以,进行综合器工作前,必须给定最后实现的硬件结构参数,设计者会更清楚它的功能,即软件描述与给定的硬件结构用网表文件的方式对应起来,成为相映射关系[7]。

2.3 QuartusⅡ简介

QuartusⅡ是Altera公司最早设计开发出的FPGA/CPLD集成开发软件,Altera 是世界上最大的可编程逻辑器件供应商之一,并在业界内占有很大的市场,并且形成了统一的使用标准。QuartusⅡ是不久前推出来的一款电子设计编译软件,是Altera 全一代FPGA/CPLD集成开发软件MAX+plus II的更新换代产品,尤其是在广大电子设计人员来说,其良好的界面,使得现在广泛使用,得到业界一致认可[3]。在Quartus Ⅱ上可以完成设计输入、HDL综合、布新布局(适配)、仿真和选择以及硬件测试等从操作流程,可以给设计人员更加便捷的操作,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、开始处理和器件编程的工具[3]。

QuartusⅡ提供了完整的多平台设计环境,能满足各种特定设计的需求,也是单片机可编程系统(SoPC)设计的综合环境和SoPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了集成综合环境[12]。QuartusⅡ其内部VHDL、Verilog逻辑综合器,支持VHDL、Verilog语言的设计流程,所以使用VHDL、Verilog 编写电路逻辑关系,就可以实现电子元器件的封装操作,而设计人员不用担心具体实施的细节。QuartusⅡ与可用利用第三方的综合工具(如Leonardo Spectrum、Synplify Pro、FPGA ComplierⅡ),并能直接调用这些工具[16]。同样QuartusⅡ具备仿真功能,同时支持第三方的仿真工具(如ModelSin),对编辑的VHDL程序进行波形仿真,也是我们在设计汉明码后需要验证的。

2.4 VHDL语言简介

随着集成电路系统化和高度集成化发展,在设计时不可避免的涉及到对电路集成化的要求,VHDL语言就是实现电路集成化的工具,设计者采用一种封装模型,将各种数字电路逻辑器件封装,编程者只需考虑设计实现问题,不考虑每个元器件的连接问题,从而实现大规模集成电路的实现。VHDL语言用于描述数字系统的设计和测试的硬件的工具,实际需求对集成电路提出了高度集成、系统化、微尺寸、低功耗等要求,因此,高密度可编程逻辑器件和VHDL便用来解决这些问题。

VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE)两大部分。除实体和结构体外,多数程序还要包含库(LIBRARY)、程序包(PACKAGE)和配置语句(CONFIGURATION)说明部分,他们分别单独构成,作为底层文件,然后组成高集成度的器件。对于VHDL语言设计的基本流程,有以下6个步骤:(1)按照硬件电路系统设计的要求,首先抽象出硬件设计的总体模块,并根据硬件系统的内外连接关系即输入和输出端口,对其定义[13]。这部分主要是抽象出各级模块,并用实体对它们的连线接口进行描述。

(2)分析硬件电路系统的具体功能,按照功能要求编写能实现硬件电路系统功能的VHDL语言程序,这部分主要就是抽象出不同的结构体进行描述。

(3)完成硬件电路系统设计和编写硬件电路系统功能的VHDL程序,将上述两步所设计的VHDL程序进行功能仿真,并根据功能的实现情况,对程序做修改和优

化,设置时间参数等,这就是通常所说的仿真前准备。

(4)观察仿真波形,验证所编VHDL程序能否实现预期设计电路功能之后,检查执行效率,这就是通常我们在设计程序时所说的VHDL程序的综合、优化和布局布线。

(5)在进行综合、优化和逻辑布局布线过程中,由于开发软件的一些不可预见性,或是系统连接时序的不一致性,或是缺少必要的人为的约束,容易导致设计功能的异常性。所以再一次的系统级仿真是必要的,这就是通常所说的后仿真。

(6)完成程序的固化,将设计好的VHDL程序下载到目标器件中[3]。

2.5 VHDL语言

一个VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE),实体的格式如下所示:

ENTITY <实体名> IS

[参数说明部分];

[端口说明部分];

END [ENTITY] <实体名> ;

参数说明主要为设计实体指定参数,如端口宽度、器件延迟时间等。端口说明描述的是设计实体和外部的接口,具体说就是对端口名称、端口模式和端口数据类型进行说明。端口名称指输入输出信号的名称,在实体中必须是唯一的。端口模式指说明信号的方向,有以下几种模式:

IN 输入信号;

OUT 输出信号;

INOUT 双向信号;

BUFFER 输出信号,但可在内部反馈使用(缓冲);

BUFFER是INOUT的子集,具有读功能的输出。作输入用时,信号不是由外部驱动,而是从输出反馈得到。在计数器设计时,一般需要用到BUFFER输出端口结构体(Architecture )描述的是实体内部的逻辑功能,是器件的内部电路逻辑。结构体(ARCHITECTURE)的格式:

ARCHITECTURE <结构体名> OF <实体名> IS

[结构体说明部分]

BEGIN

<功能描述语句>

END [ARCHITECTURE] <结构体名> ;

要注意的地方有,OF后的实体名应与实体说明中的实体名一致;功能描述语句是结构体中的主要部分;用于描述所实现实体的功能四种不同类型的并行语句:进程

语句、信号赋值语句、子程序调用语句、元件例化语句;结构体说明语句是对结构体的功能描述语句中将要用到的信号、数据类型、常数、元件、函数和过程等加以说明,比如进程(PROCESS),一般出现在结构体的说明部分,敏感信号是该进程的激活条件。

进程中的语句是顺序语句,它们之间不是并行关系,执行时是按书写的先后次序顺序执行的。行为描述方式描述的是与硬件电路结构无关的算法关系,所以应该按算法的流程顺序执行,这就大大简化实际设计的困难。

当一个设计着要使用库(LIBRARY)中的单元时,必须在VHDL源代码的开头说明要引用的库的类别,然后使用USE子句指明要使用库中的哪一个设计单元。VHDL库的格式如下:

LIBRARY<库名>;

USE<库名>.<程序包名>.ALL;

比如:LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

在VHDL中,设计的实体说明和结构体中定义的数据类型、子程序说明、属性说明和元件说明等部分只能在该设计实体中使用。VHDL提出了程序包的概念,用来存放能够共享的数据类型、子程序说明、属性说明和元件说明等。程序包的定义格式如下所示:

程序包说明部分主要对数据类型、子程序、常量和元件等进行说明,格式如下:PACKAGE 程序包名IS -- 程序包首

程序包说明语句

END 程序包名;

程序包体部分用来规定程序包的实际功能,格式如下:

PACKAGE BODY 程序包名IS

-- 程序包体程序包体说明语句以及包体内容

END 程序包名;

至于VHDL的配置(CONFIGURATION)在本文中使用的不多,在这里不多加解释。VHDL文字主要包括数字和标识符。任何标识符必须以英文字母开头,下划线“_”的前后必须有英文字母或数字,标识符中的英语字母不分大小写,标识符的命名不能与保留字相同。

VHDL是一种硬件描述语言,描述对象是信号,为了便于描述,还定义了另外三类数据对象:常量、变量和信号。常量是指在设计实体中不会发生变化的值,定义格式如下所示:

CONSTANT 常量名:数据类型:= 表达式;

变量主要用于对暂时数据进行存储,它不能将信息带出对它作出定义的当前单

元,变量的定义格式如下:

V ARIABLE 变量名:数据类型[:= 初始值];

信号定义语句格式如下:

SIGNAL 信号名:数据类型[:= 初始值] ;

VHDL中共有四类操作符:逻辑操作符、关系操作符、算术操作符和连接操作符[3]。常用的赋值语句格式有:

<= 表达式和赋值目标:= 初始值

条件赋值语句第一句具有最高优先级,定义格式如下:

赋值目标<= 表达式1 WHEN 赋值条件1 ELSE

表达式2 WHEN 赋值条件2 ELSE

......

表达式n ;

选择信号赋值语句的格式如下:

WITH 选择表达式SELECT

赋值目标信号<= 表达式1 WHEN 选择值1,

表达式2 WHEN 选择值2,

.....

表达式n WHEN 选择值n;

IF语句是一种条件语句,其基本结构有四种,本文使用的主要是下面一种:IF 条件句THEN 顺序语句1;

ELSIF 条件句THEN 顺序语句2;

ELSE 顺序语句n;

END IF;

CASE语句结构定义格式:

CASE 表达式IS

WHEN 选择值1 => 顺序语句1;

WHEN 选择值2 => 顺序语句2;

END CASE ;

FOR循环定义格式:

FOR 循环变量IN 离散范围LOOP

顺序语句

END LOOP [标号];

WHILE条件循环的定义格式:

WHILE 循环控制条件 LOOP

顺序处理语句

END LOOP [标号];

由于文章篇幅有限,那么在介绍VHDL 语言的语法规则时,有些部分没有用到的就省略,暂不介绍。通过我们的介绍,对VHDL 语言有了大体的了解和熟悉,对于二元(7,4)汉明码的编码器和译码器接下来设计和仿真有了一定的基础,在此之上,通过查阅相关文献,可以达到设计的语气效果。

第三章 汉明码的设计过程

3.1 设计结构

设计二元(7,4)汉明码的流程如下所示:

首先产生4位信息码,4位信息码可以是随机产生的,通过汉明编码器编码,生成7位信息序列,然后经过信道传输,加入误码信息,然后通过汉明译码器译码,输出信息序列,通过比较输入和输出信息序列,从而判断设计是否正确。系统模块图如 下所示:

图4 二元(7,4)汉明码编译码流程

3.2编码原理

(7,4)汉明编码器的编码规则如下表1所示,前4位为信息序列,后3位为监督序列,表1可以直观的表示出来。 信息序列 监督序列

码元序号

7 6 5 4 3 2 1 码元标识

表1 (7,4)汉明码码字安排表 监督序列由信息序列通过逻辑运算所得,这种逻辑运算是在伽罗华域GF (2),其运算规则如下:

设{0,1}为一个二元集合,在其中规定如下的加法""和乘法"·"运算: =

监督矩阵G 和生成矩阵H满足如下关系: 若生成矩阵G 能分成以下两个子块的分块矩阵,即G =,其中I为4阶单位方阵,Q 为4×3阶矩阵,此时G 可称为典型生成矩阵[1]。若监督矩阵H 也可以写成H · 0 1 0 1 0 0 0 1

=,其中P 为3×4阶矩阵,I 为3阶方阵。G 和H 的逻辑关系为G ·=0或H ·=,即G ·==Q +=0,所以由信息序列和监督序列的GF (2)运算可得监督矩阵为: G =

H =

输入的4位信息序列(u 3 u 2 u 1 u 0)通过汉明译码器,输出为7位信息序列(),即(u 3 u 2 u 1 u 0)·G =()。二元(7,4)汉明码的所有信息序列、监督序列和

生成序列如下表2所示:

信息序列

监督序列 生成序列 0000

000 0000000 0001

011 0001011 0010

111 0010111 0011

100 0011100 0100

101 0100101 0101

110 0101110 0110

010 0110010 0111

001 0111001 1000

110 1000110 1001

101 1001101 1010

001 1010001 1011

010 1011010 1100

011 1100011 1101

000 1101000 1110

100 1110100 1111 111 1111111

表2 二元(7,4)汉明码的编码器的输入和输出序列

由编码电路组成编码器,那么编码电路如图5所示,输入的4位信息序列(u 3 u 2 u 1 u 0)通过汉明编码器,编码器的输出端为(),并且它们的逻辑关系满足:

从图5也可以比较清楚的观察出来。

0 1

0 1 1 1

1 0

图5 二元(7,4)汉明码的编码电路

3.3译码原理

输入的4位信息序列(u 3 u 2 u 1 u 0)通过汉明编码器,输出为7位信息序列(),即(u 3 u 2 u 1 u 0)G=(),构成了编码电路的逻辑规则,而译码电路先必须校验输入码字是否存在错误,以及产生误码应该如何纠错。纠错过程如下图6所示,其为二元信道模型。

编码器发送的所有信息序列()都满足监督矩阵H,监督矩阵在译码电路起到了重要作用。图6所示为二元信道模型,假设译码器接收到的信息序列,那么这个二元信道的作用可以理解为在译码器发送码字的基础上叠加一个向量e,即译码器接收信息序列为y=e+,向量e=(e6e5e4e3e2e1e0),其中e i = 1,表示

第i个比特出错,e i = 0,表示无错。

图6 二元信道模型

对于译码器,已知接收码字y,未知e和,如果译码器可以推测出错误图样,那么译码结果为=y+。为实现译码结果,译码器接收到y后,计算一个向量s=y=(+e)=e,其中=0,所以最后结果为s=e,监督矩阵的转置已知。其中,我们称向量s为校验子或伴随式[3],而伴随式的取值只取决于错误图样,与发送码字无关,所以我们可以从伴随式入手,根据已设计的监督矩阵的转置,推测出错误图样。对于非齐次线性方程s=e,方程组的解e=(e6 e5 e4 e3 e2 e1 e0)的个数与矩阵的秩有关,通过将矩阵进行初等行变换,可以得出R()=2,方程有无数解,其中解e=(e6 e5 e4 e3 e2 e1 e0)的个数为=16种,最佳译码应选择码重最小,即错误个数最少的那个错误图样来纠正错误,那么纠正后的结果就是编码器的编码结果=()。比如校验子s=(s 2 s 1 s 0)为(001)时,已知监督矩阵,如下所示:

(e 6 e 5 e 4 e 3 e 2 e 1 e 0)

结果如下所示,

增广矩阵B如下所示:

~

~

可得

由此可以写出通解为

=C+ D+ E + F +

其中C D E F{1,0},要使码重最小,C、D、E取值为0,F取值为1,所以可纠正的错误图样为=(0 0 0 0 0 0 1),错码位置为。同理可推,当伴随式的取值s=(s 2 s1 s 0)为(010)、(011)、(100)、(101)、(110)、(111)时,对应可纠正的错

误图样分别为(0000010)、(0001000)、(0000100)、(0100000)、(1000000)、(0010000)。二元(7,4)汉明码的校验子与可纠正错误图样对应关系表3如下所示:

伴随式可纠正的错误图样(e6e5e4e3e2e1e0)错码位置

000 0000000 无

001 0000001

010 *******

100 0000100

011 0001000

111 0010000

101 0100000

110 1000000

表3 (7,4)汉明码的校验子与可纠正错误图样关系表

接下来就是如何实现纠错功能,就是将译码器接收到的信息序列,由于经过信道传输,会产生误码,那么校验子和错误图样,就可以解决误码,译码电路解决方法有很多,本文只介绍其中一种较常用的方法。

由s=y=(y 6 y 5 y 4 y 3 y 2 y 1 y 0 )

= =

伴随式s=(s 2 s1 s 0)有8种不同的结果,每种结果所对应的可纠正错误图样可以从表2看出,每一种可能的伴随式,都可以唯一的纠正一位错误的码字,值就是(7,4)汉明码的优点,当汉明码的输入信息序列k的长度趋于无穷,汉明码码率R=k/n=(n-m)/n就趋于1,其中k为汉明码的输入序列,n为汉明码的输出序列,m为汉明码的监督位,这三者满足:n=m+k。由此可见,汉明码是一类高效率的纠错码。

那么,译码器输出的7位信息序列,只有后4列为传输的有用信息,所以在接收到的信息序列时,先接收到的4位用来传输,后来3位则不需要传输,这样就解决了汉明码的译码问题了。译码电路的最基本元器件为模二加,即异或和三输入与非门[5],这是数字电路基本元器件,VHDL程序通过语言实现逻辑功能。二元(7,4)汉明码的译码电路设计如图7所示,译码器接收端为7位,输出端为7位,通过设计好的错误图样记忆纠正,就可以得到正确传输的信息码元。输出的7位信息码元高4位就是二元(7,4)汉明码编码器输入端的信息码元了。

图7二元(7,4)汉明码译码电路

理论上解决汉明码的编译码问题,那么接下来,我就需要考虑实现问题,败在最前面的问题就是对设计电路进行仿真,从而观察是否可以达到预期目标。那么我们可

以使用EDA进行仿真。

3.4 汉明码编码器的设计和仿真

关于EDA仿真软件,我们可以从上面的介绍得到了解,实现二元(7,4)汉明码编译码电路的语言有VHDL、AHDL、Verilog HDL等对二元(7,4)汉明码的编译码电路进行模拟仿真。下面是二元(7,4)汉明码的编码电路的程序,使用VHDL语言,得到如下结果:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY HAMMINGENCODE IS

PORT(CODEIN :BIT_VECTOR(3 DOWNTO 0);

--U3 U2 U1 U0

EN: IN BIT;

HAMOUT : OUT BIT_VECTOR(6 DOWNTO 0));

--A6 A5 A4 A3 A2 A1 A0

END HAMMINGENCODE;

ARCHITECTURE FIRST OF HAMMINGENCODE IS

SIGNAL A2, A1, A0 : BIT;

BEGIN

IF EN THEN

A2 <=(CODEIN(3) XOR CODEIN(2))XOR CODEIN(1);

A1 <=(CODEIN(3) XOR CODEIN(1))XOR CODEIN(0);

A0 <=(CODEIN(2) XOR CODEIN(1))XOR CODEIN(0);

ELSE

A2 <='0';

A1 <='0';

A0 <='0';

END IF;

HAMOUT(6 DOWNTO 3) <=CODEIN(0 DOWNTO 3);

HAMOUT(2 DOWNTO 0) <=(A2&A1&A0);

END FIRST;

用VHDL语言完成二元(7,4)汉明码的编码电路,如图8所示为二元(7,4)汉明码的编码电路符号,在设计时,VHDL语言严格按照电路逻辑来设计的,其中,CODEIN(3..0)表示编码器输入的4位信息码元,EN为编码器使能端,当EN=’1’时,编码器打开,可以开始编码。当EN=’0’时,译码器关闭,停止编码。HAMOUT(6..0)为编码器输出的6位信息序列,其中前4位为信息码,后3位为监督码[6]。

图8 汉明码的编码器

二元(7,4)汉明码的编码电路波形仿真如图9所示,从图上的显示可以看出,当输入4位信息序列一次增加时,编码器输出7位编码序列满足编码规则,通过比较发现,当输入为CODEIN(3..0)为0011时,对应的输出序列为HAMOUT(6..0)为0011100。当输入为CODEIN(3..0)为0100时,对应的输出序列为HAMOUT(6..0)为0100101,以此类推可以得出,仿真结果和表1一致,说明实验结果达到预期目的[7]。

此外,在图9中我们还可以观察到,使能端EN始终为高电平,其目的是就是打开编码器,使编码器在整个工作周期内都处于工作状态[6]。在菜单栏设置Edit/End Times:将时间区域设置为50.0 us,CODEIN和HAMOUT的Overwrite Clock时间设置为1.0 us,其中EN设为高电平,在真个仿真试验中,保持了时间的一致性,从而达到在同一时刻,即电平跳变达到一致,避免和出现毛刺,使得波形图更加符合实际情况。

图9 编码器的仿真波形

3.5汉明码译码器的设计和仿真

关于二元(7,4)汉明码的译码电路,可以从图7看出,设计VHDL逻辑程序也是按照图7电路图而来,其中包括三输入与非门,模二加算法器,以及校验子、错误图样,都是从设计图而来,译码器输入端信号为HAMMIN,输出端为DATAOUT,EN1表示使能端,NE为判断译码器死否有误码,使用VHDL语言得到如下结果:LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY HAMMINGDEC IS

PORT(

HAMMIN: IN BIT_VECTOR(6 DOWNTO 0);

EN1: IN BIT;

DATAOUT:OUT BIT_VECTOR(3 DOWNTO 0);

NE:OUT BIT;

ERR: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));

END HAMMINGDEC;

ARCHITECTURE SECOND OF HAMMINGDEC IS

BEGIN

PROCESS(HAMMIN)

V ARIABLE SYNDROME : BIT_VECTOR(2 DOWNTO 0);

BEGIN

IF EN='1' THEN

SYNDROME(2):=((HAMMIN(6) XOR HAMMIN(5))XOR HAMMIN(4))XOR HAMMIN(2);

SYNDROME(1):=((HAMMIN(6) XOR HAMMIN(4))XOR HAMMIN(3))XOR HAMMIN(1);

SYNDROME(0):=((HAMMIN(5) XOR HAMMIN(4))XOR HAMMIN(3))XOR HAMMIN(0);

IF (SYNDROWN="000") THEN

NE <='0';

ERR <="000";

DATAOUT(3 DOWNTO 0) <=HAMMIN(6 DOWNTO 3);

CASE SYNDROME IS

WHEN "001" =>

DATAOUT(3 DOWNTO 0)<=HAMMIN(6 DOWNTO 3);

WHEN "010" =>

DATAOUT(3 DOWNTO 0)<=HAMMIN(6 DOWNTO 3);

WHEN "100" =>

DATAOUT(3 DOWNTO 0)<=HAMMIN(6 DOWNTO 3);

WHEN "011" =>

DATAOUT(3 DOWNTO 1)<=HAMMIN(6 DOWNTO 4);

DATAOUT(0)<= NOT HAMMIN(3);

WHEN "111" =>

DATAOUT(3 DOWNTO 2)<=HAMMIN(6 DOWNTO 5);

DATAOUT(0)<=HAMMIN(3);DATAOUT(1)<= NOT HAMMIN(4);

WHEN "101" =>

DATAOUT(1 DOWNTO 0)<=HAMMIN(4 DOWNTO 3);

DATAOUT(3)<=HAMMIN(6);DATAOUT(2)<= NOT HAMMIN(5);

WHEN "110" =>

DATAOUT(2 DOWNTO 0)<=HAMMIN(5 DOWNTO 3);

DATAOUT(3)<= NOT HAMMIN(6);

WHEN OTHERS =>ERR <= "000";

基于MATLAB的(7_4)汉明码编译码设计与仿真结果分析

通信原理课程设计报告书 课题名称 基于MATLAB 的(7,4)汉明码编 译码设计与仿真结果分析 姓 名 学 号 学 院 通信与电子工程学院 专 业 通信工程 指导教师 ※※※※※※※※※ ※ ※ ※※ ※ ※ 2009级通信工程专业 通信原理课程设计

2011年 12月 23日 一、设计任务及要求: 设计任务: 利用MATLAB编程,实现汉明码编译码设计。理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。并对其性能进行分析。要求: 通过MATLAB编程,设计出(7,4)汉明码的编码程序,编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图,然后对其结果进行分析 指导教师签名: 2011年12月23日 二、指导教师评语: 指导教师签名: 年月日 三、成绩 验收盖章 年月日

基于MATLAB 的(7,4)汉明码编译码设计 与仿真结果分析 1 设计目的 (1)熟悉掌握汉明码的重要公式和基本概念。 (2)利用MATLAB 编程,实现汉明码编译码设计。 (3)理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。 (4)对其仿真结果进行分析。 2 设计要求 (1)通过MATLAB 编程,设计出(7,4)汉明码的编码程序。 (2)编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图。 (3)然后对其结果进行分析。 3 设计步骤 3.1 线性分组码的一般原理 线性分组码的构造 3.1.1 H 矩阵 根据(7, 4)汉明码可知一般有 现在将上面它改写为 上式中已经将“⊕”简写成“+”。 上式可以表示成如下矩阵形式: ??? ??=⊕⊕⊕=⊕⊕⊕=⊕⊕⊕0 000346 13562456a a a a a a a a a a a a ?? ? ?? =?+?+?+?+?+?+?=?+?+?+?+?+?+?=?+?+?+?+?+?+?010011010010101100010111012345601234560123456a a a a a a a a a a a a a a a a a a a a a (1) (2)

汉明码编译码

汉明码编译码 一设计思想 汉明码是一种常用的纠错码,具有纠一位错误的能力。本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。 二实现流程 1.汉明码编译码 图 1 汉明码编译码框图 1)根据生成多项式,产生指定的生成矩阵G 2)产生随机的信息序列M 得到码字 3)由C MG 4)进入信道传输 S RH得到伴随式 5)计算=T 6)得到解码码流 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 和信息位数k 100101101011100010111H ????=?????? 1 10100001101001 1100101 010001G ????? ?=?? ?? ?? 2) 产生随机的信息序列M 输入信息序列 Huffman 编码 Hamming 编码 信道Hamming 译码 Huffman 译码输出信息序列噪声

汉明码编码实验报告

重庆工程学院 电子信息学院 实验报告 课程名称:_ 数据通信原理开课学期:__ 2015-2016/02_ 院(部): 电子信息学院开课实验室:实训楼512 学生姓名: 舒清清梁小凤专业班级: 1491003 学号: 149100308 149100305

重庆工程学院学生实验报告 课程名 称 数据通信原理实验项目名称汉明码编译实验 开课院系电子信息学院实验日期 2016年5月7 日 学生姓名舒清清 梁小凤 学号 149100308 149100305 专业班级网络工程三班 指导教 师 余方能实验成绩 教师评语: 教师签字:批改时间:

一、实验目的和要求 1、了解信道编码在通信系统中的重要性。 2、掌握汉明码编译码的原理。 3、掌握汉明码检错纠错原理。 4、理解编码码距的意义。 二、实验内容和原理 汉明码编码过程:数字终端的信号经过串并变换后,进行分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。 三、主要仪器设备 1、主控&信号源、6号、2号模块各一块 2、双踪示波器一台 3连接线若干

四、实验操作方法和步骤 1、关电,按表格所示进行连线 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【汉明码】。 (1)将2号模块的拨码开关S12#拨为10100000,拨码开关S22#、S32#、S42#均拨为00000000;(2)将6号模块的拨码开关S16#拨为0001,即编码方式为汉明码。开关S36#拨为0000,即无错模式。按下6号模块S2系统复位键。 3、此时系统初始状态为:2号模块提供32K编码输入数据,6号模块进行汉明编译码,无差错插入模式。 4、实验操作及波形观测。 (1)用示波器观测6号模块TH5处编码输出波形。 (2)设置2号模块拨码开关S1前四位,观测编码输出并填入下表中: 五、实验记录与处理(数据、图表、计算等) 校对输入0000,编码0000000 输入0001,编码0001011 输入0010,编码0010101 输入0011,编码0011110 输入0100,编码0100110 输入0101,编码0101101 输入0110,编码0110011输入0111,编码0111000

汉明码的编译码设计与仿真

****************** 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年春季学期 通信系统仿真训练 题目:汉明码的编译码设计与仿真 专业班级: 姓名: 学号: 指导教师: 成绩:

摘要 与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。在接收端通过纠错译码自动纠正传输中的差错来实现码纠错功能,成为前向纠错FEC。在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。通过传输码列中假如冗余位(也称纠错位)。可以实现前向纠错。但这种方法比简单重传协议的成本要高。汉明码利用奇偶块机制降低了前向纠错的成本。利用汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。本文主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制编译码图。在此基础上,对汉明码的性能进行分析,得出结论。 关键词:MATLAB 汉明码性能

目录 1.前言 (1) 2.汉明码的构造原理 (2) 2.1 汉明码的构造原理 (2) 2.2 监督矩阵H和生成矩阵G (3) 2.3 校正子(伴随式)S (4) 3.汉明码编码器的设计 (6) 3.1 汉明码编码方法 (6) 3.2 汉明码编码程序设计 (6) 3.3 汉明码编码程序的编译及仿真 (7) 4.汉明码的译码器的设计 (10) 4.1 汉明码译码方法 (10) 4.2 汉明码译码程序的设计 (11) 4.3 汉明码译码程序的编译及仿真 (13) 5.总结 (17) 6.参考文献 (18) 7.附录 (19)

基于matlab的汉明码4FSK通信仿真实验报告

河海大学计算机及信息工程学院(常 州) 课程设计报告 题目不同信道下汉明码4FSK系统仿真 专业通信工程 学号 0962310312 学生姓名程海粟 指导教师高远

目录 一、实验目的 (3) 二、实验器材 (3) 三、实验内容及原理 (3) (一)汉明码编解码原理 (3) (二)4FSK调制解调原理 (6) (三)三种信道模型简介 (9) (四)程序调用函数介绍……………………………………… 10 四、实验仿真效果图 (12) 五、心得体会 (15) 六、附录 (15) 七、参考文献 (18)

不同信道下汉明码的4FSK 系统仿真 一、实验目的 1、了解熟悉Matlab 仿真软件使用; 2、掌握4进制频移键控(4FSK )的调制与解调基本原理; 3、掌握Matlab 仿真软件仿真4FSK 的系统设计; 4、熟悉无线通信仿真过程及物理层仿真。 二、实验器材 Matlab 仿真软件。 三、实验内容及原理 (一)汉明码编解码原理 1、编码原理 一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求 21r n -≥或211r k r -≥++ (1) 下面以(7,4)汉明码为例说明原理: 设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。若取r=3,则n=k+r=7。我们用 6543210 a a a a a a a 来表示这7个码元,用 123 s s s 的值表示3个监督关系式中的校正子,则123 s s s 的值与错误码元位置的对应关系 可以规定如表1所列。 表1 校正子和错码位置的关系

汉明码编译码实验

汉明码编译码实验 一、实验目的 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

实验四 汉明码系统

实验四汉明码系统 一、实验原理和电路说明 差错控制编码的基本作法是:在发送端被传输的信息序列上附加一些监督码元,这些多余的码元与信息之间以某种确定的规则建立校验关系。接收端按照既定的规则检验信息码元与监督码元之间的关系,一旦传输过程中发生差错,则信息码元与监督码元之间的校验关系将受到破坏,从而可以发现错误,乃至纠正错误。 通信原理综合实验系统中的纠错码系统采用汉明码(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位码组构成,每个码组只在某列中出现一次。系统中的监督矩阵如下图所示: 1110100 H=0111010 1101001 其相应的生成矩阵为: 1000101 0100111 G= 0010110 0001011 汉明译码的方法,可以采用计算校正子,然后确定错误图样并加以纠正的方法。 图2.4.1和图2.42给出汉明编码器和译码器电原理图。

a6 a5 a4 a3 a2 a1 a0 a a a a 图2.4.1汉明编码器电原理图 a a a a a a a3 图2.4.2汉明译码器电原理图 表2.4.1 (7,4)汉明编码输入数据与监督码元生成表 a6bit,其次是a5、a4……,最后输出a0位。 汉明编译码模块实验电路功能组成框图见图2.4.4和图2.3.5所示。 汉明编码模块实验电路工作原理描述如下: 1、输入数据:汉明编码输入数据可以来自ADPCM1模块的ADPCM码字,或来自同

汉明码编译码教程文件

汉明码编译码

汉明码编译码 一设计思想 汉明码是一种常用的纠错码,具有纠一位错误的能力。本实验使用Matlab 平台,分别用程序语言和simulink来实现汉明码的编译码。用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。 二实现流程 1.汉明码编译码 图 1 汉明码编译码框图 1)根据生成多项式,产生指定的生成矩阵G 2)产生随机的信息序列M 3)由C MG 得到码字 4)进入信道传输 S RH得到伴随式 5)计算=T 6)得到解码码流

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 和信息位数k 100101101011100010111H ????=?????? 1 1010000 1101001 1100101010001G ??????=?? ?? ?? 2) 产生随机的信息序列M 0010=01000111M ?? ???? ???? 3) 由C MG =得到码字 010001101101000010111C ?? ??=?? ???? 4) 进入信道传输 假设是BSC 信道,错误转移概率设定为0.1

基于VHDL的(7,4)汉明码编解码器的设计

(7,4)汉明码编解码器的设计 序言 VHDL语言具有功能强大的语言结构,可用明确的代码描述复杂的控制逻辑设计,并且具有多层次的设计描述功能,支持设计库和可重复使用的元件的生成。近几十年来,EDA技术获得了飞速发展。它以计算机为平台,根据硬件描述语言VHDL,自动地完成逻辑编译、化简分割、综合及优化,布局布线,仿真直至对特定目标芯片的适配编译,逻辑映射和编程下载等工作。以自顶向下的设计方法,使硬件设计软件化,摆脱了传统手工设计的众多缺点。随着EDA技术的深入发展基于硬件描述语言的方法将有取代传统手工设计方法的趋势。 EDA ( Elect ronics Design Automation) 技术是随着集成电路和计算机技术飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。目前,VHDL语言已经成为EDA的关键技术之一,VHDL 是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。 汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。 本文用VHDL语言实现了(7,4)汉明码的编码和译码,并通过实例来说明利用VHDL语言实现数字系统的过程。在介绍(7,4)汉明码编码和译码原理的基础上,设计出了(7,4)汉明码的编码器和译码器,写出了基于VHDL实现的源程序,并通过QUARTUSⅡ软件进行仿真验证。 第1章QuartusⅡ与VHDL简介 1.1 QuartusⅡ软件简介 QuartusⅡ是Altera公司推出的CPLD/FPGA的开发工具,QuartusⅡ提供了完全集成且与电路结构无关的开发环境,具有数字逻辑设计的全部特性。 ?/P> Quartus Ⅱ设计软件提供完整的多平台设计环境,可以很轻松地满足特定设计的需要。

MATLAB实现汉明码编码译码

MATLAB实现汉明码编码译码 汉明码的编码就是如何根据信息位数k,求出纠正一个错误的监督矩阵H,然后根据H求出信息位所对应的码字。 1、根据已知的信息位数k,从汉明不等式中求出校验位数m=n-k; 2、在每个码字C: 3)用二进制数字表示2m-1列,得到2m-1列和m行监督矩阵H;4)用3步的H形成HCT =0,从而得出m个监督方程; 5)将已知的信息代入方程组,然后求出满足上述方程组的监督位c (i=0,1,?,m一1)。 例如,用以上方法,很容易求出[7,4,3]汉明码的监督矩阵: 11100 H 11010 clear 及编码所对应的码字为C=011001。 m=3; %给定m=3的汉明码 [h,g,n,k]=hammgen(m); msg=[0 0 0 1;0 0 0 1;0 0 0 1;0 0 1 1;0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1];code=encode(msg,n,k,'hamming/binary') %编码 C=mod(code*h',2) %对伴随式除2取余数 newmsg=decode(code,n,k,'hamming/binary') %解码 d_min=min(sum((code(2:2^k,:

))')) %最小码距运行结果: >> hangming code = 10001 10001 10001 11001 00111 11000 00110 10011 01110 1111 C = newmsg =111100 00 00 00 00 00

卷积码实验报告

苏州科技大学天平学院电子与信息工程学院 信道编码课程设计报告 课设名称卷积码编译及译码仿真 学生姓名圣鑫 学号 32 同组人周妍智 专业班级通信1422 指导教师潘欣欲

一、实验名称 基于MAATLAB的卷积码编码及译码仿真 二、实验目的 卷积码是一种性能优越的信道编码。它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。本实验简明地介绍了卷积码的编码原理和Viterbi译码原理。并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。经过仿真和实测,并对测试结果作了分析。 三、实验原理 1、卷积码编码原理 卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。卷积码一般表示为(n,k,K)的形式,即将 k个信息比特编码为 n 个比特的码组,K 为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的 n 各码元不经与当前组的 k 个信息比特有关,还与前 K-1 个输入组的信息比特有关。编码过程中相互关联的码元有 K*n 个。R=k/n 是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选 n,k 较小,K 值可取较大(>10),但以获得简单而高性能的卷积码。

卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。 2、卷积码Viterbi译码原理 卷积码概率译码的基本思路是:以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正是最大似然的准则。卷积码的最大似然译码与分组码的最大似然译码在原理上是一样的,但实现方法上略有不同。主要区别在于:分组码是孤立地求解单个码组的相似度,而卷积码是求码字序列之间的相似度。基于网格图搜索的译码是实现最大似然判决的重要方法和途径。用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。这样一直进行到最后第 L 级(L 为发送序列的长度)。由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi 译码正是基于这种想法。对于(n, k, K )卷积码,其网格图中共 2kL 种状态。由网格图的前 K-1 条连续支路构成的路径互不相交,即最初 2k_1 条路径各不相同,当接收到第 K 条支路时,每条路径都有 2 条支路延伸到第 K 级上,而第 K 级上的每两条支路又都汇聚在一个节点上。在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第 K 级只留下2K条幸存路径。选出的路径同它们的对数似然函数的累加值将一起被存储起来。由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较它们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。由此可见,上述译码过程中的基本操作是,“加-比-选”,即每级求出对数似然函数的累加值,然后两两比较后作出选择。有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作

(7,4)汉明码编译码系统设计.doc

南华大学电气工程学院 《通信原理课程设计》任务书 设计题目:(7, 4)汉明码编译码系统设计 专业:通信工程 学生姓名: 马勇学号:20114400236 起迄日期:2013 年12月20日~2014年1月3日指导教师:宁志刚副教授 系主任:王彦教授

《通信原理课程设计》任务书

《通信原理课程设计》设计说明书格式 一、纸张和页面要求 A4纸打印;页边距要求如下:页边距上下各为2.5 厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 二、说明书装订页码顺序 (1)任务书 (2)论文正文 (3)参考文献,(4)附录 三、课程设计说明书撰写格式 见范例 引言(黑体四号) ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆(首行缩进两个字,宋体小四号) 1☆☆☆☆(黑体四号) 正文……(首行缩进两个字,宋体小四号) 1.1(空一格)☆☆☆☆☆☆(黑体小四号) 正文……(首行缩进两个字,宋体小四号) 1.2 ☆☆☆☆☆☆、☆☆☆ 正文……(首行缩进两个字,宋体小四号) 2 ☆☆☆☆☆☆ (黑体四号) 正文……(首行缩进两个字,宋体小四号) 2.1 ☆☆☆☆、☆☆☆☆☆☆,☆☆☆(黑体小四号) 正文……(首行缩进两个字,宋体小四号) 2.1.1☆☆☆,☆☆☆☆☆,☆☆☆☆(楷体小四号) 正文……(首行缩进两个字,宋体小四号) (1)……

图1. 工作波形示意图(图题,居中,宋体五号) ………… 5结论(黑体四号) ☆☆☆☆☆☆(首行缩进两个字,宋体小四号) 参考文献(黑体四号、顶格) 参考文献要另起一页,一律放在正文后,不得放在各章之后。只列出作者直接阅读过或在正文中被引用过的文献资料,作者只写到第三位,余者写“等”,英文作者超过3人写“et al”。 几种主要参考文献著录表的格式为: ⑴专(译)著:[序号]著者.书名(译者)[M].出版地:出版者,出版年:起~止页码. ⑵期刊:[序号]著者.篇名[J].刊名,年,卷号(期号):起~止页码. ⑶论文集:[序号]著者.篇名[A]编者.论文集名[C] .出版地:出版者,出版者. 出版年:起~止页码. ⑷学位论文:[序号]著者.题名[D] .保存地:保存单位,授予年. ⑸专利文献:专利所有者.专利题名[P] .专利国别:专利号,出版日期. ⑹标准文献:[序号]标准代号标准顺序号—发布年,标准名称[S] . ⑺报纸:责任者.文献题名[N].报纸名,年—月—日(版次). 附录(居中,黑体四号)

海明编码实验报告

海明编码实验报告 学科专业:计算机科学与技术 姓名: 学号: 指导教师: 天津工业大学计算机科学与技术学院 二零一零年十二月

一.海明编码原理 海明码是一种可以纠正一位差错发现两位差错的编码。它是利用在信息位为k 位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式: 2r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r) 式中 k为信息位位数 r为增加冗余位位数 2.海明码的生成与接收 二.海明编码方法 1)海明码的生成(顺序生成法)。 例3.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8) 求:海明码码字。 解:1)把冗余码A、B、C、…,顺序插入信息码中,得海明码 码字:" A B 1 C 1 0 0 D 1 1 0 0 " 码位: 1 2 3 4 5 6 7 8 9 10 11 12 其中A,B,C,D分别插于2k位(k=0,1,2,3)。码位分别为1,2,4,8。 2)冗余码A,B,C,D的线性码位是:(相当于监督关系式) A->1,3,5,7,9,11; B->2,3,6,7,10,11; C->4,5,6,7,12;(注 5=4+1;6=4+2;7=4+2+1;12=8+4) D->8,9,10,11,12。 3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0): A=∑(0,1,1,0,1,0)=1 B=∑(0,1,0,0,1,0)=0 C=∑(0,1,0,0,0)=1 D=∑(0,1,1,0,0)=0

汉明码仿真

摘要 汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,对汉明码的性能进行分析。 关键词:MATLAB 汉明码 SIMULINK 性能 I

目录 1 课程设计目的 (1) 2 课程设计要求 (1) 3 相关知识 (1) 4 课程设计分析 (8) 5 仿真 (11) 6结果分析 (13) 7 参考文献 (13) II

汉明码仿真程序设计 1.课程设计目的 (1)加深汉明码(Hamming Code)基本理论知识的理解。 (2)培养独立开展科研的能力和编程能力。 (3)掌握用MATLAB实现信号的PM调制。 (4)掌握MATLAB软件的使用。 2.课程设计要求 (1)掌握汉明码(Hamming Code)的相关知识、概念清晰。 (2)掌握MATLAB使用方法,利用软件绘制图像。 (3)程序设计合理、能够正确运行。 3.相关知识 3.1 MATLAB简介 MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。 MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、 1

信道编码实验报告

无线通信基础课程设计报告 (信道编码) 小组成员: 指导老师: 完成时间:

无线通信系统课程设计报告 实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从 而使接收端产生图象跳跃、不连续等现象。信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。提高数据传输可靠性,降低误码率是信道编码的任务。 实验名称:信道编码 实验目标:本实验的目标是领会信道编码的基本思想。并通过比较有无信道编码模块的 不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。 实验原理:打开“Channel_Coding_74.vi”前面板如图1所示,打开程序框图并理解参与 信道编码的整个数据流。程序包含上下两个独立的部分如图2所示,下面部分是生成误码率曲线如图1(b),其结构和上面部分类似,你只需要关注上面部分程序即可;上面部分代码大致可由做7个模块组成,每一模块完成一项功能。你负责的是这个实验的“编码和解码”功能。这些模块为: 1、读取图片 LabVIEW提供了一个能够读取JPEG格式的图像并输出图像数据的模块。提供的还原像素图.vi完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。 (a)实验操作部分(b)误码率曲线 图1 前面板 2、信道编码 我们的下一个目标是对信源比特流进行信道编码。信道编码方案很多,线性分组码、卷积码、LDPC码等等;这里我们采用简单的(7,4)线性分组码。

图2 程序框图 线性分组码是一类重要的纠错码。在(n ,k )线性分组码中,常用到能纠正一位错误的汉明码。其主要参数如下: 码长: 21m n =-; 信息位:21m k m =--; 校验位:m n k =-; 最小距离: d = 3; 纠错能力: t = 1; 本次实验需要用到的是(7,4)分组码,属系统码,前四位为信息位,后三位为冗余位。 3、BPSK 调制 上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特 映射成适合信道传输的符号。这里我们采用最简单的BPSK 调制:将信息0映射为幅值为1的信号,信息1映射为幅值为-1的信号,如图3所示。 (1,0)=0 图3 BPSK 映射图

74循环汉明码编码及译码

clear all; close all; %-------------(7,4)循环汉明码的编码----------------- n=7; k=4; p=cyclpoly(n,k,'all'); [H,G]=cyclgen(n,p(1,:)); Msg=[0 0 0 0;0 0 0 1;0 0 1 0;0 1 0 0;0 1 0 1]; C=rem(Msg*G,2) M=input('M='); disp( '输入信源序列:'); Msg=input('Msg='); C=rem(Msg*G,2) %编码结果 R=7/4*log2(2) %计算码元信息率 %----------- (7,4)循环码的译码------------------- M=input('M='); disp( '输入接收序列:'); Msg=input('Msg='); S=mod(Msg*H',2) for i=1:M if S(i)==[0 0 0] disp('接收码元无错'); Rsg=Msg elseif S(i)==[1 0 0] disp('监督元a0位错'); if Msg(0)==0 Msg(0)=1; elseif Msg(0)==1 Msg(0)=0; end Rsg=Msg elseif S(i)==[0 1 0] disp('监督元a1位错'); if Msg(1)==0 Msg(1)=1; elseif Msg(1)==1 Msg(1)=0; end Rsg=Msg elseif S(i)==[0 0 1] disp('监督元a2位错'); if Msg(2)==0

海明编码实验报告

海明编码实验报告 一.实验目的: 深刻理解海明编码,解码的原理,通过用代码将其实现掌握其中的技术。增强动手解决实际问题的能力以及编程,调试程序的能力。 二.实验原理: 主要思想: 码字位的编号从左到右,最左边的比特是第一位; 数据比特和监督比特融合在一起; 监督位处于2的幂数位位置,其它的位置放置数据比特; 编码后的码串为行向量,用它乘以生成矩阵后,采用奇偶校验方式,得出矩阵方 程并求解该矩阵方程得到对应监督位的比特数值; 待发送的数据比特和比特一起构成了发送编码码字 海明纠错码的格式 码字的编号从左到右,最左边是第一位,其中2的幂数位是检验位,其余是k 个数据位(信息元)。 *---信息元 P---校验位 海明码的编码与译码的方法 用矩阵乘法求检验位,并且找出错误位。 设编码长度为 n = 2r – 1,其中r 为校验码的位数。 数据位长度 k = n – r 。 校验位插入到编码序列的2j-1 (j=1,2,..,r)的位置上; 由r(样本)建立一个(2r -1)行 * r 列的矩阵。 将编码字写成串形式的一维向量 其中,lr =1或0(l=0为偶校验,l=1为奇校验),bij = 1 或 0 例: 对数据1100进行编码 ************54433 2211022222p p p p p )()******(43211211211214321l l l l b b b b b b b b b b b b p p p p r r r r r r =??????????????Λ???ΛΛ???---

)101(111011101001110010100)0111000(=?????????????????????? 解: 数据信息为4位,取校验位数量为r=3。 (1)编码长度 n = 2r – 1 = 7 数据位 k = n – r = 4 校验位 r = 3 由矩阵乘法得,p1 = 0 ,p2 = 1, p3 = 1 解得海明码为 0111100(+表示异或运算) 译码过程: 收到海明码串以后,接收方把海明码串作为行向量,乘以相同的样本矩阵,检查约定的奇偶校验方式是否成立。 类似编码过程,进行矩阵方程运算;如果方程运算以后右边的结果与约定的奇偶校验行向量一致,则结果正确; 如果方程运算以后右边的结果与约定的奇偶校验行向量不一致,则表明传输的数据有错,且该结果行向量对应的二进制比特转换为十进制数所对应编号的比特出错,把该比特取反后可得正确的数据。 对例题所得到的海明编码结果0111100进行传输,如果接收到的也是0111100,那么结果无错。 假如接收到的编码系列为0111000,接收方的判断过程为: 首先进行矩阵运算,并检查结果。 矩阵运算的结果行向量为(101) ,不是 ( (000),接收到的码字有错误,错误比特的 位置为5,因此,把0111000码串的第5 个比特取反为 “1”,则结果变为“0111100”, 为正确的码字。 三.实验过程: 根据实验原理即可确定编程思路:令编码长度为7位,其中校验位为3位。?? ???=++++++=++++++=++++++000101000000100001000123p p p ) 000(111011101001110010100)1001(321=??????????????????????p p p

基于MATLAB的(7_4)汉明码编译码设计与仿真结果分析

- -- 通信原理课程设计报告书 课题名称 基于MATLAB 的(7,4)汉明码编译 码设计与仿真结果分析 姓 名 学 号 学 院 通信与电子工程学院 专 业 通信工程 指导教师 2011年 12月 23日 ※※ ※ ※ ※ ※ ※ ※ ※ ※※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ 2009级通信工程专业 通信原理课程设计

基于MATLAB的(7,4)汉明码编译码设计 与仿真结果分析 1 设计目的 (1)熟悉掌握汉明码的重要公式和基本概念。 (2)利用MATLAB编程,实现汉明码编译码设计。 (3)理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。 (4)对其仿真结果进行分析。 2 设计要求 (1)通过MATLAB编程,设计出(7,4)汉明码的编码程序。 (2)编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图。 (3)然后对其结果进行分析。 3设计步骤

3.1 线性分组码的一般原理 线性分组码的构造 3.1.1 H 矩阵 根据(7, 4)汉明码可知一般有 现在将上面它改写为 上式中已经将“⊕”简写成“+”。 上式可以表示成如下矩阵形式: 上式还可以简记为 H ? A T = 0T 或 A ? H T = 0 式中 A = [a 6 a 5 a 4 a 3 a 2 a 1 a 0] ??? ??=⊕⊕⊕=⊕⊕⊕=⊕⊕⊕0 000346 13562456a a a a a a a a a a a a ?? ? ?? =?+?+?+?+?+?+?=?+?+?+?+?+?+?=?+?+?+?+?+?+?010011010010101100010111012345601234560123456a a a a a a a a a a a a a a a a a a a a a )(模20001011001110101011101000123456??????????=???????? ?? ? ??????????????? ? ?????a a a a a a a ?? ?? ? ?????=101100111010101110100 H

信息论与编码实验报告

信息论与编码基础实验报告
学院: 队别: 专业: 姓名: 学号:
电子科学与工程学院 二队 06 级 通信工程专业 曹务绅 200604015014
国防科学技术大学电子科学与工程学院
1

汉明码编译码
一、 实验目的
通过本次实验的练习, 进一步巩固了信道编码的基本原理, 掌握了Hamming 码编译码方法,提高了软硬件操作能力,培养了实验人员理论结合实践的能力。
二、 实验原理
(一)汉明码: 汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属 于线性分组码, 由于汉明码的抗干扰能力较强, 至今仍是应用比较广泛的一类码。 它具有以下特征: 码 长: n = 2m ? 1
信息位数: k = 2 m ? m ? 1 监督码位: r = n ? k = m 最小码距: d = 3 纠错能力: t = 1 (二)汉明码的编码: 在(n,k)汉明码中, (n-k)个附加的监督码元是由信息码元的线性运算产生 的。码长为 n,信息码元长度为 k,2k 个码组构成 n 维线性空间中的一个 k 维子 空间,编码的实质就是要在 n 维空间中,找出一组长为 n 的 k 个线性无关的矢 量 g0 g1 g k ?1 ,使得每个码组 c 都可以表示为 k 个矢量的线性组合,即 c0 ] = mk ?1 g 0 + mk ? 2 g1 + m0 g k ?1 其中, m i∈{0,1}, i=0,
c = [cn ?1 cn ? 2
1,……,k-1。将上式写成矩阵形式得
2

基于Quartus II的(7,4)汉明码的编解码器的设计

JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 通信原理课程设计报告 课程设计题目:基于Quartus II的(7,4)汉明码的编解码器的设计班级: 学号: 姓名: 指导教师姓名:钱志文任艳玲 设计地点:

目录 序言 (2) 第一章软件简介 (3) 第二章工作原理 (4) 第三章基于Quartus II的(7,4)汉明码的编解码器的设计的仿真实现3.1 仿真方案原理 (5) 3.2 仿真的功能程序 (6) 3.3 仿真的结果与分析 (7) 参考文件 (10) 体会与建议 (10) 附录 (10)

序言 汉明(Hamming)码是一种一种能够纠正一位错码或检测两位错码的一种效率较高的线性分组码。本次课程设计的任务就是利用EDA技术在Quartus II软件下用VHDL语言实现(7,4)汉明码的编译码的设计和仿真。从而进一步加深对汉明码编译码原理的理解。 EDA(Electronic Design Automation技术是随着集成电路和计算机技术飞速发展应运而生的一种高级、快速、有效的电子设计电动化工具。目前,VHDL语言已经成为EDA的关键技术之一,VHDL 是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。 VHDL语言具有功能强大的语言结构,可用明确的代码描述复杂的控制逻辑设计,并且具有多层次的设计描述功能,支持设计库和可重复使用的原件的生成,近几十年来,EDA技术获得了飞速的发展,它以计算机为平台,根据硬件描述语言VHDL,自动地完成逻辑编译,化简为割、综合及优化,布局布线,仿真直至对特定目标芯片的适配编译,逻辑映射和编程下载等工作,以自顶向下的设计方法,使硬件设计软件化,拜托了传统手工设计的众多缺点,随着EDA技术的深入发展,基于硬件描述语言的方法将由取代传统手工设计方法的趋势。

相关文档