汉明码译码的快速性及纠错特点与应用.docx
《汉明码译码的快速性及纠错特点与应用.docx》由会员分享,可在线阅读,更多相关《汉明码译码的快速性及纠错特点与应用.docx(57页珍藏版)》请在冰豆网上搜索。
![汉明码译码的快速性及纠错特点与应用.docx](https://file1.bdocx.com/fileroot1/2023-1/5/3432a5de-0969-487a-8343-e1622418ccd2/3432a5de-0969-487a-8343-e1622418ccd21.gif)
汉明码译码的快速性及纠错特点与应用
浙江理工大学
信息电子学院
毕业论文(设计)诚信声明
我谨在此保证:
本人所写的毕业论文(设计),凡引用他人的研究成果均已在参考文献或注释中列出。
论文(设计)主体均由本人独立完成,没有抄袭、剽窃他人已经发表或未发表的研究成果行为。
如出现以上违反知识产权的情况,本人愿意承担相应的责任。
声明人(签名):
年月日
摘要
数字信号在传输过程中,由于受到干扰的影响,码元波形可能会被变坏。
接收端收到后可能发生错误判决。
由乘性干扰引起的码间串扰,可以采用均衡的办法纠正,而加性干扰的影响可以采用差错控制的措施来解决。
应运差错控制的需要,已成为信道传输过程中抗干扰的有效手段,其中较为成熟的编码方法如汉明码、奇偶校验码、循环冗余码等编码技术,被广泛应用于计算机、电子通信、控制等各个领域。
汉明码是线性分组码,它能纠正一个错码和检测两个错码,在原编码的基础上附加一部分代码,使其满足纠错码的条件,由于线性码的编码和译码容易实现,且编码效率较高,所以至今仍是应用最广泛的一类码。
本文提出一种采用汉明码的伴随式译码方法。
在介绍原理的基础上,通过对(15,11)汉明码的设计及生成矩阵、校验矩阵的C语言编写,并使用VC++6.0软件进行仿真验证,使其在虚拟信道中输入一系列码组,实现对错误码字的纠正并显示出该码组在编译码时的伴随式、差错图案、发码和收码、及纠正后的码字等。
进而说明汉明码译码的快速性,并进而分析它的纠错特点及其在电子、通信等领域上的应用。
并实现了在proteus上绘制编码电路与译码电路,实现硬件仿真。
关键词:
汉明码,(15,11)汉明码,编码,伴随式译码,纠错应用
ABSTRACT
Intheprocessofthedigitalsignaltransmission,duetotheimpactofinterference,thesymbolwavewillbedeteriorated.Thereceivermayreceiveanerrorjudgement.Iftheintersymbolinterferenceiscausedbymultiplicative,itcanbecorrectedbythebalancemeasures,andtheimpactofadditivecrosstalkcanusetheerrorcontrolmeasurestosolve.Asthedemandoftheerrorcontrolandtherapiddevelopmentoferrorcontrolcodingtechnology,itbecameaneffectivemeansofanti-jamminginChanneltransmissionprocess.Therearemanyencodingmethods,suchasHammingcode,paritybits,cyclicalredundancycodingandsoon,whicharewidelyusedincomputers,electroniccommunications,controlandotherfields.
Hammingcodeisakindoflinearblockcode,itcancorrectonewrongcodeandfindtwowrongcode,asthebasisoftheoriginalencode,itaddssomecodestomeettheconditionsforerror-correctingcodes.Asthecodinganddecodeoflinearcodeisnotdifficulttorealise,andtheefficiencyofcodingisratherhigh,sotillnowitisstilloneofthemostcommuncode.
Inthearticle,Igetoutonemeanofsyndromedecoding,itisimplementatedonthebaseofClanguagehammingencodinganddecoding.Onthebasisoftheprinciple,bydesigning(15,11)Hammingcode,generatingmatrixandcalibrationmatrixbyClanguage,andsimulatingtheprogramonVC++6.0software,realisethepurposeofcorrectinganerrorcode.Thenexplainthefastdecoding,andillustrateitsabilityoferrorcorrection,whichisusedinseveralsystems.Andcomplaytodrawtheencodingcircuitanddecodingcircuitbyproteus,tosimulateitonhardware.
Keywords:
hammingcode,(15,11)Hammingcode,coding,syndromedecoding,ApplicationErrorCorrection
摘要
Abstract
ii
第一章绪论
差错控制编码是指在数据通信时,对所传输信息的正确性进行检测,对传输错误的码字进行处理的编码技术,又叫纠错码。
在数据通信中,产生差错的原因主要有两个:
一是外界干扰因素,二是线路或设备内部热噪声。
热噪声引起的差错称为随机错,所引起的某位码元的差错是孤立、零星的,与前后码位没有关系。
冲击噪声引起的差错称为突发错。
冲击噪声幅度可能相当大,无法靠提高信号幅度来避免冲击噪声造成的差错。
随着信息技术的发展,数据的传输或存储越来越大,与此同时,数据的出错概率也大大增加。
保持数据的正确性,仅依赖于器件和设备的可靠运算是不行的。
为了纠正数据在传输过程中出现的错误,信息应具有某种冗余形式以保护数据。
这就导致了编码理论的产生。
编码的任务就是纠正数据在数字通信系统的传输和计算机系统的存储中出现的错误,以保持数据的正确与完整性,从而保护数据。
如图1-1所示为一个传统通信系统模型的基本结构,信号从信源发出经过编码变换后开始在信道上传输。
信道是有噪声等各方面的影响下接收到的信息往往和发送的信号不同。
这里将从信源发出的信号经过编码、译码,实现受噪声影响而纠正,再由信宿所接收[1-2]。
图1-1通信系统模型基本结构
1.1发展背景及国内外研究现状
在通信编码方面,其发展的速度是非常快的,而且未来的发展空间还很巨大。
20世纪30~40年代才开始形成编码理论。
1928年美国电信工程师H.奈奎斯特提出著名的采样定理,为连续信号离散化奠定了基础。
1948年美国应用数学家C.E.香农在《通信中的数学理论》一文中提出信息熵的概念,为信源编码奠定了理论基础。
1949年香农在《有噪声时的通信》一文中提出了信道容量的概念和信道编码定理,为信道编码奠定了理论基础。
在纠错编码方面:
1948年香农就提出一位纠错码(码字长=7,信息码元数=4)。
1949年出现三位纠错的格雷码(码字长=23,信息码元数=12)。
1950年美国数学家R.W.汉明发表论文《检错码和纠错码》,提出著名的汉明码,对纠错编码产生了重要的影响。
而在数字通信系统中,基本都离不开编码,是指为了达到某种目的而对信号进行的一种变换,其逆变换称为译码或解码。
系统中的编码器分为两大类:
一类是信源编码,另一类是信道编码。
信源编码的目的是解决通信的有效性问题。
信道编码的目的是解决通信可靠性问题,是对信源编码器输出的信号进行再变换,包括区分通路、适应信道条件和提高通信可靠性而进行的编码。
采用信道编码后,在信息码后增加了监督位,这样就可以增加了码元之间的相互关联,在接收端根据相应的译码规则,就能够察觉传输中有无误码,甚至能自动纠正错误。
我们把建立在代数学基础上的编码称为代数码。
在代数码中,常见的是线性码。
在线性码中信息位和监督位是由一些线性代数方程联系着的。
增加了冗余,必然降低了传输效率,却赢得了提高可靠性的好处。
那么为了纠正一位错码,在分组码中最少要增加多少监督位才行呢?
编码效率能否提高呢?
从这种思想出发进行研究,便导致了汉明码的诞生。
汉明码是1950年由Hamming首先构造的,它是一种能够自动检测并纠正一位错的线性纠错码,即SEC(SingleErrorCorrecting)码,它不仅性能好,而且编译码电路非常简单,易于实现。
从20世纪50年代问世以来,在提高系统可靠性方面获得了广泛的应用。
它最先用于磁芯存储器,60年代初用于大型计算机,70年代在MOS存储器中得到应用,后来在中小型计算机中普遍采用,目前常用于RFID系统中错误的纠正。
随着科学信息的发展,现在国内外对汉明码的研究也越来越透彻,越来越深奥了。
现在编码理论和大规模集成电路的应用,性能优良的使用编译码方法不断出现而实现成本不断降低,其应用已不局限在话音、图像等方面上了,现在更多的是扩展到计算机存储系统、磁盘,甚至在移动通信和卫星通信中得到了应用。
而现状的研究也不光光是像以前那样单纯的基于检测两位,纠正一位的能力,界内人士希望能将汉明码的功用提高到更有用的层次,比方说主要基于如何让汉明码的标准阵列译码表能进一步改进的问题、如何提高汉明码对突发干扰的纠错能力、扩展汉明码的应用研究、“杂交编码”如汉明码与其他编码技术相结合使其能实现更多的功能等等各方面的问题。
1.2本课题研究的意义
近年来,对高效可靠的数字传输和存储系统的需求日益增长。
这种需求随着在商业、政府和军事领域面向数字信息的交换、处理和存储的大规模高速数据网的出现而变得更加迫切。
通信系统的主要质量指标是通信的有效性和可靠性。
在有噪声和损失存在的信道中,输入符号与接收符号不能一一对应,传输错误和判断错误的情况总会存在。
可靠数字传输系统的设计要求通信与计算机技术的融合,系统设计者所关心的一个主要问题就是如何控制差错以使得数据能够可靠重现?
这就需要运用编码的检错纠错能力,汉明码正是一种能够纠正一位错码且编码效率较高的线性分组码。
那么怎么实现汉明码的编码与译码呢?
针对上面这些问题,本文就将介绍基于C语言的(15,11)汉明码的编码与译码系统,实现汉明码的编码与译码,从而实现传输的差错控制。
通过本课题的研究,在运用VC++6.0软件仿真可以使我对汉明码的编码译码有更深入的了解和认识,掌握(15,11)汉明码的构造原理,了解汉明码在实际生活中的应用,掌握差错控制的基本方法,即在发送端的信息码元序列中,以某种确定的编码规则加入一些码元(称为监督码元),使信息序列与监督码元之间具有某种相关性。
在不断学习新的知识以及归纳复习老知识的同时,加强自身对通信系统设计的能力。
1.3问题的研究及解决
本设计的研究是基于C语言的汉明码的编码与译码系统。
根据汉明码的构成原理,我们需在信息位的后面加上监督位来监督码组中出现错码的位置,这样就方便在接收端对接收到的码组进行纠错以便得到正确的信息位,达到可靠的通信。
我们采用m序列循环产生预编码信号,经过汉明码编码系统产生带监督位的线性分组码。
发送这些码组,经过信道后这些码组由于受到干扰的影响,某些码元波形会变坏,在接收端经过汉明码译码系统,采用伴随式译码方法,来检验错码及纠正错码,它能纠正一个错码或者检测两个错码。
经过译码系统的检错与纠错,接收端就可以接收到正确的码组。
另外还设计了(15,11)汉明码的标准阵列译码表,可以检验其译码效果。
其硬件电路的设计,只基于AT89C51上的,通过proteus画出电路图。
通过VC软件仿真界面,来达到(15,11)汉明码检错纠错的效果。
在分析汉明码的译码的快速性能上,通过与其他编码方式做些对比体现。
并且还着重分析它的纠错特点,以及在通信、计算机方面的应用。
1.4本文的构架描述
本文的阐述共分五章,主要是基于(15,11)汉明码上进行说明的。
第一章是绪论,主要讲述纠错编码的发展背景和国内外研究汉明码的现状;
第二章是本中的重点,主要介绍汉明码的一些基本原理和对(15,11)汉明码进行的如生成矩阵和校验矩阵、标准阵列译码表、编码电路和译码电路、编译码硬件电路等的设计,也是后续章节的前沿;
第三章主要就是对(15,11)汉明码的C语言编辑,对误码纠错仿真结果的分析,并附以一定的图示来说明;
而第四章就是分析汉明码译码的快速性及其纠错特点,并举几个例子来说明汉明码在当今通信、计算机等领域上的应用;
最后一章就是总结和对未来的展望,同时表达自己的心得体会和一些主观看法。
第二章汉明码的原理与(15,11)汉明码的设计
2.1汉明码的原理及特点介绍
2.1.1汉明码概念
在(n,k)分组码中,若监督元是按线性关系相加而得到的,则称其为线性分组码。
设原代码的码长为k比特,附加纠错编码部分为r比特,则合成后的纠错码为n=k+r比特(如下图2-1所示)。
图2-1汉明码码字组成
如果这种纠错码的纠错能力为纠正1个差错,则应满足如下基本条件:
(2-1)
当上式取等号时则称汉明码(HammingCode)。
干扰不仅使原代码的每一位(k比特)可能出错,而且附加纠错位(r比特)也可能出错,故“一个差错”的情况共有k+r种,加上“正常”状态共有k+r+l种状态,而r比特的附加纠错位要能分辨这k+r+l种状态。
。
汉明码作为第一个设计为用来纠错的线性分组码,可以检两位错,纠一位错的纠错码。
二进制汉明码n和k服从以下规律:
(2-2)
式中m=n-k,当m=3,4,5……时,有(7,4),(15,11),(31,26)……汉明码。
汉明码是完备码,它满足下式:
(2-3)
同时汉明码也是一种多重(复式)奇偶检错系统,将信息用逻辑形式编码,以便能够检错和纠错。
用在汉明码中的全部传输码字是由原来的信息和附加的奇偶监督位组成的。
每一个这种奇偶位被编在传输码字的特定比特位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加监督位中的都能把它分离出来。
在原编码的基础上附加一部分代码,使其满足纠错码的条件,受其抗干扰能力较强,所以至今仍是应用比较广泛的一类码[3-4]。
2.1.2汉明码的生成矩阵
码长为n,信息元长度为k,
个码字构成n维线性空间中的一个k维子空间,编码的实质就是要在n维空间中,找出一组长为n的k个线性无关的矢量gk-1gk-2gk-3……g0,使得每个码字C都可以表示为k个矢量的线性组合,即
(2-4)
其中ci∈{0,1},i=0,1,2,3,……,k-1这种线性组合正是线性分组码名称的来历。
其中
是1*k的信息元矩阵。
将上式2-4写成矩阵形式得:
(2-5)
由此我们可以知道
是带编码信息的信息组,G是一个n*k阶矩阵,而G称为(n,k)汉明码的生成矩阵。
因此,只有当G确定后,编码问题也就能解决了。
因为基底不是唯一的,所以生成矩阵也不是唯一的。
将k个基底排列成k行n列的G矩阵,可以得:
不过基底的线性组合等效于生成矩阵G的行运算,可以产生一组新的基底[5]。
利用这点可使生成矩阵具有如下的“系统形式”
(2-6)
信息组m乘以系统形式的生成矩阵G后所得的码字,其前k位由单位矩阵Ik决定,一定与信息组各码元相同,而其余的n-k位是k个信息位的线性组合,叫做校验位。
这种把信息组原封不动地搬到码字前k位的码叫系统码,其码字C[6]。
2.1.3汉明码的校验矩阵
与任何一个(n,k)线性分组码的码空间C相对应,一定存在一个对偶空间D。
因为基底数k只是n维n重空间全部n个基底的一部分,若能找出另外n-k个基底,也就找到了对偶空间D。
将D空间的n-k个基底排列起来可构成一个(n-k)*n矩阵,将这个矩阵就称为校验矩阵H,而它正是(n,n-k)对偶码的生成矩阵,它的每一行是对偶码的一个码字。
由C的基底和D的基底正交,空间C和空间D也正交,它们互为零空间。
因此,(n,k)线性码的任意码字c一定正交于其对偶码的任意一个码字,也必定正交于校验矩阵H的任意一个行矢量,即为C
=0或H
=0,由于生成矩阵的每个行矢量都是一个码字,因此必有G
=0。
[n,k]线性分组码的编码设计就是在满足给定条件(如码距)下,如何从已知的k个信息元中求出r=n-k个校验元。
要计算出校验元,就要先求出校验矩阵。
我们可以从线性空间的角度去分析,推出一致校验矩阵。
其编、译码实现可分别采用生成矩阵和伴随式译码方案来实现。
同时,汉明码的校验矩阵H也具有特殊的性质,这使得以相对简单的方法来构建该码。
一个(n,k)码的校验矩阵有n-k行和n列,二进制时n-k个码元所能组成的列矢量总数(全零矢量除外)是
,恰好和校验矩阵的列数
相等,只要排列所有列,通过列置换将矩阵H转换成系统形式,就可以进一步得到相应的生成矩阵G。
2.2(15,11)汉明码生成矩阵和校验矩阵的设计
现在以(15,11)汉明码为例,设其码字为A=[a15,a14,a13,a12,a11,a10,a9,a8,a7,a6,a5,a4,a3,a2,a1],其中前11位(a15,a14,a13,a12,a11,a10,a9,a8,a7,a6,a5)是信息元,后4位(a4,a3,a2,a1)是监督元,所以其编码长度为n=k+r=l1+4=15。
可用下列线性方程组来描述该分组码,产生监督元:
(2-7)
则可化得4个线性无关的方程组:
(2-8)
2.2.1(15,11)汉明码的校验矩阵H
(2-9)
并简记为:
H·AT=0T或A·HT=0,其中H即为校验矩阵。
故可得校验矩阵H为:
(2-10)
2.2.2(15,11)汉明码的生成矩阵G
由上面所求得的公式得生成矩阵:
(2-11)
又由A=[a15,a14,a13,a12,a11,a10,a9,a8,a7,a6,a5]·G 且G
=0。
故(15,11)汉明码的生成矩阵可写为:
(2-12)
其中G=[Ik Q],且Q=PT
H·AT=0T,可以用来作为判断接收码字A是否出错的依据。
2.3(15,11)汉明码标准阵列译码表的设计
2.3.1伴随式S及差错图案E的关系
码字
传输过程中,在信道由于受到各种干扰,可能会引起一定的误码,故接收端的收码
已不一定等于发码C,两者间的差异就是差错。
差错是多样化的,我们就定义差错的样式为差错图案E,即可定义E为:
E=R-C=[en-1,en-2,…,e1,e0](2-13)
对于二进制码,模2减等同模2加,所以式2-13也可写作R=C+E或R=C+E。
这样就可以看出,在收码跟发码之间的之差为0时(即ri=ci)则说明经信道后的收码是无误的;若不为0时,ri≠ci,可知有误码;
通过在接收端计算
S=R
=(C+E)
=C
+E
=0+E
=E
(2-14)
所以可以知道S=E
,S就称为接收码组R的校验子或伴随式。
2.3.2伴随式译码法
伴随式译码就是由检验矩阵H进行译码,由收码R和已知的校验矩阵H来算出S,再根据所得的伴随式S就可算出差错图案E,便可判断码字中哪一位码元发生了错误,就可纠正一位随机错误。
伴随式只与错误图样E有关,可以用S作为判别错误的参量,如果S=0(E=0),则接收到的是正确码字;若S≠0(E≠0),则说明R中存在着差错,根据S查处相应的错误形式[5-7]。
译码时为了得到E,可以通过解线性方程来得到求解,由下式(2-15)可得:
(2-15)
则通过上式展开可得伴随式s的线性方程组形式为:
(2-16)
利用伴随式译码法,在伴随式中,若S全为0时,说明无错误码;若错误图样E中含有奇数个1,则认为是产生了单位错;若错误图样E中含有偶数个1(全0除外),则认为是产生了两位错[8];
2.3.3(15,11)汉明码标准阵列译码表设计过程
伴随式译码过程就是一个找错误图样E的过程。
译码正确与否,表示找的错误图样E是否恰好与消息经过信道真正发生的错误一致。
标准阵列译码法是一种非常直观的方法,它是其他所有译码法的基础。
构成的标准阵列A,有
行,
列,包含了所有
种可能的n维二元矢量。
其中标准阵列的第一行上排列着全部
个码字,全零码字排在第一行第一列。
然后在除去码字后余下的n维二元矢量中寻找最小重量矢量,比如为e1,把e1列放在第二行第一列,再把e1与全部码字一一相加,所得的矢量列在第二行。
就这样,然后继续寻找最小重量矢量[5]。
在判断错误码的位置上,可以先订好监督位与信息位的码字位置,根据偶监督测试原理,可知道监督位D参与了哪几位码位上的测试,结合伴随式,然后再计算出错误图案E。
这样(15,11)汉明码的标准阵列译码表也可实现,不过在译码表上没有的伴随式S,则说明该收码的误码个数超过了上限。
2.3.3.1(15,11)汉明码码字占位表设计
(15,11)汉明码的码字占位表如下表2-1所示:
表2-1(15,11)汉明码码字占位
码字位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
数字型
D1
D2
m1
D3
m2
m3
m4
D4
m5
m6
m7
m8
m9
m10
m11
2.3.3.2(15,11)汉明码错位检验表设计
根据可以知道(15,11)汉明码的伴随式有
种组合,则可得出(15,11)汉明码的错位检验表如2-2所示:
表2-2(15,11)汉明码错位检验表
伴随式S
错误码位
S3
S2
S1
S0
0
0
0
0
无误
0
0
0
1
D1位错
0
0
1
0
D2位错
0
1
0
0
D3位错
1
0
0
0
D4位错
0
0
1
1
m1位错
0
1
0
1
m2位错
0
1
1
0
m3位错
0
1
1
1
m4位错
1
0
0
1
m5位错
1
0
1
0
m6位错
1
0
1
1
m7位错
1
1
0
0
m8位错
1
1
0
1
m9位错
1
1
1
0
m10位错
1
1
1
1
m11位错
根据错位校检表,监督位D1参与了1—3—5—7—9—11—13—15码位上的偶监督测试,可表示为:
,同理可得[9]:
(2-17)
根据校正子S与错误图样E之间有确定的线性变换关系。
而E=[en-1,en-2,…,e1,e0],这样就可以算出校正子S与(15,11)汉明码各位之间的关系,即
(2-18)
2.3.3.3(1