基于纠错码的冗余技术的研究—EVENODD码的设计与实现-毕业设计论文-JAVA毕业设计论文_第1页
基于纠错码的冗余技术的研究—EVENODD码的设计与实现-毕业设计论文-JAVA毕业设计论文_第2页
基于纠错码的冗余技术的研究—EVENODD码的设计与实现-毕业设计论文-JAVA毕业设计论文_第3页
基于纠错码的冗余技术的研究—EVENODD码的设计与实现-毕业设计论文-JAVA毕业设计论文_第4页
基于纠错码的冗余技术的研究—EVENODD码的设计与实现-毕业设计论文-JAVA毕业设计论文_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 学位论文基于纠错码的容错技术的研究EVENODD码的设计与实现论文作者姓名:XXX 申请学位专业: 申请学位类别: 论文提交日期:XXXX年XX月XX日 基于纠错码的容错技术的研究EVENODD码的设计与实现摘 要由于网络技术的迅猛发展,存储系统的规模变得越来越庞大。因此它对系统的可靠性提出了严峻的挑战。而采用EVENODD编码算法的布局策略可以同时容许两个数据块同时出错,可以很好的保证系统的稳定性。它已经被广泛应用在RAID(Redundant Arrays of Independent Disks)等技术中。本论文从EVENODD编码原理出发,详细介绍了EVENODD的编码和译码过程,以

2、及从理论上对该译码的算法进行了分析证明,同时使用java编译技术实现了该编码过程的仿真。在本论文中还对该仿真软件的设计思路、开发过程、以及主要功能模块的实现都进行了详细的介绍。EVENODD码仿真软件的实现是理论运用于实际的又一典范。通过对其编码和译码核心算法的调用,可以实现图片、二进制文件等格式的备份和恢复。关键词: EVENODD编码 ;容错技术 ;系统稳定性; java编译技术Research of Fault Tolerance Technology based on Error Correcting CodeThe Design and Implementation of EVENO

3、DD CodesAbstractWith the fast development of network technique, the scale of storage system becomes bigger and bigger. So, it is an austere challenge to the system. But the data placement strategy of EVENODD which has the ability to simultaneously correct two error data blocks can ensure the stabili

4、ty of the system. It has been extensively used in the RAID( Redundant Arrays of Independent Disks) technology. In the thesis encoding and decoding algorithms of EVENODD codes are introduced. Moreover decoding algorithms are analyzed and proven. At the same time, the software of EVENODD emulator is d

5、eveloped by java technology .The idea of design, the process of development and the design of main function blocks are proposed. It is an apotheosis which uses theory in the real world. Pictures and binary files can be backed up and recovered by EVENODD codes.Key words: EVENODD; Fault-tolerant; Stab

6、ility of system; Java technology目 录论文总页数: 31 页1引言11.1选题背景及意义11.2相近课题研究11.2.12D奇偶校验编码方案11.2.2纠双错RS码21.3本课题要达到的设计目标22EVENODD码22.1预先定义22.2编码原理32.3EVENODD码译码算法42.4译码原理证明63软件设计与目标83.1设计目标及内容83.2软件总体功能结构83.2.1功能结构图83.2.2功能说明83.3设计实现的策略及主要算法描述93.3.1VENODD编码算法93.3.2EVENODD 译码算法113.4算法接口实现223.4.1编码功能接口设计223.

7、4.2编码功能接口流程图223.4.3译码功能接口设计223.4.4译码功能接口设计流程图224软件操作说明254.1打开254.2编码264.3数据破坏274.4译码274.5其余功能28结 论28参考文献28致 谢30声 明311 引言1.1 选题背景及意义随着企业信息系统的普及和整个社会电子商务的发展,现代企业的运作越来越依赖于信息技术。越来越多的关键数据被存储在计算机系统中,这些数据的丢失和损坏将对企业造成难以估量的损失。同时企业对于数据可用性的要求也大为提高,因为即使是短时间的系统停机也将造成业务停顿和经济损失。一旦IT系统和数据遭到灾难性打击,企业将面临破产的威胁,因此数据资料的完

8、好保存是企业在灾难后能够继续生存的保证。容错技术是保证系统稳定性的重要手段。容错是指一个系统在发生故障时仍能正确完成指定任务的能力。在硬件失效或软件错误的情况下,仍能够继续完成指定任务的系统称为容错系统。容错技术是指系统对故障的容忍技术,也就是指处于工作状态的系统中一个或多个关键部分发生故障或差错时,能自动检测与诊断,并能采取相应措施保证系统维持其规定功能或保持其功能在可接受的范围内的技术。所有的容错手段都必须依赖于“保护性冗余”,即依赖于系统中冗余的部件和算法。所谓“冗余”指的是如果系统是无缺陷的,那么这些部件和算法是不需要的。然而,EVENODD码理论的提出为容错技术的发展做出了重要的贡献

9、。它以一种简单的方式越来越受到人们的青睐,并在各种系统中广泛使用,尤其是磁盘阵列布局方案中。其核心运算就是依据一定的规则将数据简单相异或。因此对EVENODD编码的研究及其实现具有很强的现实意义。1.2 相近课题研究容错技术在存储系统中有着广泛的应用。目前,已有的适用于存储系统的容错技术主要有三种:2D奇偶校验编码方案(二维奇偶校验),RS(Reed-Solomon)码以及EVENODD码。1.2.1 2D奇偶校验编码方案2D奇偶编码的码字结构为nn的二维阵列,总共有N2个信息位,其中校验信息位为2N个,即水平校验和垂直校验,对矩阵的行和列分别进行校验计算。例如,假定信息位X是两个不同的组C1

10、和C2两个组的成员,在C1组超过k个信息位出错,但是C2中少于k个信息位出错,那么X可以通过C2来恢复。每个码字不是一个组的成员,而是多个组的成员,进行容错计算。图1显示的是一个二维编码的策略和二维奇偶校验码。单个的奇偶校验能够容忍单个码字出错,二维校验可以容忍任意的两个码字出错,而且如果增加一个full parity sever,可以容忍达到三个码字出错。二维编码策略是通过增加冗余,增加服务器的容错能力。冗余数据的增加,必定会导致编row parity full parity paritycolumn parity图 1 二维奇偶校验编码码和译码计算量的增加,及数据信息位和校验信息位之间的比

11、之变化。1.2.2 纠双错RS码Reed Solomon(RS)是一类有很强纠错能力的多进制BCH码,也是一类典型的几何码。它首先是由里德(Reed)和索洛蒙(Solomon)应用MS多相式于1960年构造出来的。它不仅可以纠正突发错误, 还可以纠正随机错误, 特别适用于纠正信号的突发错误。Reed Solomon code 适合传送信息符号,而不是比特。RS虽然在六十年代就提出来了,但是实际得到应用差不多在八十年代。在1994年,在RAID-6层,也称为(P+Q redundancy):数据以块为单位分割,然后采用编码技术为纠双错RS. 设每列信息位分别为,其两列校验信息位,两个校验列的编码

12、方程为:1.3 本课题要达到的设计目标本论文采用EVENODD码实现存储系统的容错仿真。利用随意的5张图片模拟存储系统中存储的数据,然后利用EVENODD编码技术,生成2个校验数据存于另外存储设备中(即两张校验图片)。随机破坏其中的一张或者两张数据,利用EVENODD的译码算法将这2张图片的数据恢复出来。整个仿真过程将在一个界面友好的应用软件中实现。2 EVENODD码2.1 预先定义为了方便本文后面的叙述,先定义本文一些符号记法:m = j 表示 j n(mod m) (0 j m+1)。例如:5 = 2,5 = 3。另外我们还对本原理做一些必要的假设:1) 设存在m+2列数据块,其中前m个

13、数据块依次存有信息,校验信息将存储在最后两列数据块。这样将在所有的数据块中形成冗余以避免在重复写操作时形成瓶颈。2) 设m列数据块中每一个数据块只有m-1行。对于任意容量的数据块,可以预先分割成m-1行的块分别进行处理。为简单起见,在本文中假设每一个标识位大小为1bit(不过在一些应用程序当中,一个标识位可能大到512字节)。3) EVENODD码中,m必须是素数,否则EVENODD码不是MDS码。因此若m不是素数,可使用如下方法将它构成素数:若存储任意数量的数据块而非必要的素数,通过增加不带任何信息的数据块达到m列的数据块,其中m为素数,那些多余的数据块所有信息位都为0。4) 为了译码描述方

14、便,EVENODD码增加一行信息位,数据全为0。例如:am-1,j = 0(0 j m+1,根据这个假设,数组大小现在是m(m+2))。2.2 编码原理EVENODD码的码字放在一个(m-1)*(m+2)的阵列中,m是素数,其中信息放在(m1)m的阵列中,最后两列为奇偶校验信息符。两列奇偶校验位是分别通过同一行的信息位或者给定斜率对角线的信息位异或而构成的。EVENODD code 的编码,设aij表示位为第i行第j列上的信息符,则奇偶校验符按下列规则进行构造:从几何上看,S是由第m列开始沿斜率为1的信息位的异或构成的。第一列的各奇偶校验位正好是这一行m个信息位的异或运算,第二列的各奇偶校验位

15、是各自沿斜率为1的信息位的异或,再和S异或共同构成的。例1 下面以m5为例显示一个(7,5)EVENODD的编码,如表1表1 EVENODD编码a1a2a3a4a5a1+a2+a3+a4+a5S+a1+b5+c4+d3b1b2b3b4b5b1+b2+b3+b4+b5S+a2+b1+c3+d4c1c2c3c4c5c1+c2+c3+c4+c5S+a3+b2+c1+d5d1d2d3d4d5d1+d2+d3+d4+d5S+a4+b3+c2+d1其中 S=a5+b4+c3+d2(1) 从EVENODD编码的结构可以看出,2个奇偶校验列是独立得到的,当m是素数时,满足Singleton bound,是一类

16、MDS,如m不是素数时,不能保证EVENODD具有MDS的性质,例如下面的这种情况(6,4)的情况,表2,码字之间的最小距离是2,若1,3列丢失,不能恢复原信息符。表2 (6,4)数组abab00bbbb00abab00(2) 在两列冗余校验中,其中有一列的冗余校验和参数S进行以后,参数S(m-1,1),(m-3,2),(0,m-1)可能是奇或偶,也是由于这个原因,M.Blaum称这类阵列码为EVENODD code。如果参数S忽略,则不能保证EVENODD code的MDS性质。例如下面的(7,5)情况表3,码字之间的最小距离就是2,若第2,6列出错,是不能恢复的。表3 (7,5)数组bbb

17、bbbbbbbbbbbbbbbbbbbabbbab2.3 EVENODD码译码算法在这一节将介绍EVENODD码纠双列删错的译码方法。这两译码算法没有有限域的计算操作,只需要简单异或操作,软硬件实现简单。下面简单介绍一下EVENODD的译码算法,EVENODD code译码算法(Two Erasure Decoding Algorithm)假定数据块i和j损坏,0ijm+1,有下面四种情况:(1) i=m,j=m+1,两个校验数据块遭到损坏,要恢复校验数据块,这和编码方式一样,只需要重新构造一次就行。(2) im,j=m,一个冗余校数据块和一个信息盘遭到损坏,为了能够重新恢复i数据块,首先恢复

18、出参数S, 假定然后通过下面的公式,i数据块的信息符就可以重建(3) im,j=m+1,这种情况,i信息符数据块可以根据平行校验数据块进行异或,得到恢复(4) im,jm,遭到损坏的是两个信息符的数据块,不像前面三种情况那么简单首先将最后两列校验数据块的信息符异或,恢复参数S然后计算,其中 然后按照下面的顺序恢复i,j数据块的各个信息符例:假设拥有下列初始数组,如表4。我们现在将利用译码算法恢复第0和2个错误数据块的数据。表 4 初始数据?0?1011?1?0001?1?0011?1?1100第一步要做的就是找到公共因子S,即将这个数组最后两列相异或。我们可以很容易地得到S = 1 。这意味着

19、,对角校验是奇校验。根据数组和公式(8)、(9),我们可以得到校验数组:= 0 1 0 1 0, = 0 1 0 1 0现在我们开始一个递归来恢复丢失的数据和,0 3。我们让,这时计算过程如表5。表5 恢复数据过程因为s = 4 = m-1,所以算法停止。通过以上的运行过程我们可以发觉在整个算法运行当中m必须是素数。如果m不是素数,将会出现递归在两列数据未恢复完全之前停止。我们将在后面的证明中很好地利用m是素数的这个条件。例如:如果m = 4(不是素数),接下来的数组如表6,它的权值为2(the following array is in the code and it has weight

20、2):表6 m不为素数时的数组101000000000101000这表明如果m不是素数,代码的最小距离为2 (the code has minimum distance 2)2.4 译码原理证明下面我们将对EVENODD译码算法可以恢复两个数据块的数据进行证明。 定理一:EVENODD译码算法可以恢复任意2个数据块出错的数据。证明:如果只有一列出错,我们可以利用剩余的正确校验位数据相异或进行恢复。根据异或的性质我们可以很容易知道这是完全可行的。因此,假设第i和j列出错,。我们假设译码算法的四种情况:(1) i = m , j = m+1,这种情形和编码过程完全一样,很显然此算法可行;(2) i

21、 m , j = m,注意公共因子S的校验值是由公式(4)得到的,它由对角线位(m,0),(m,1),(i,m-1)上的数值相异或得到。这是一条唯一不与第i列相交的对角线(此时第i列无效)。因此所有的对角线都有相同的公共因子S。经过分析公式(2)得到的过程,我们可以推出能够找到恢复第i列数值的公式(5),一旦第i列的值被恢复,这个算法就可以利用公式(1)得到第m列的值。(3) i m , j = m+1,这种情形和编码的过程相似,在这里不再赘述。(4) i j m ,第一步通过公式(7)计算出共同因子S,也就是公式(2)和公式(7)是等价的,但是公式(2)中存在未知的变量i,j的值,因此不能使

22、用公式(2)直接得到共同因子S,因此根据公式(1)和(3)可以得到下面的式子(也就是公式(7):因为m1为偶数,所以(m - 1)S 0 mod 2,又因为最后一个虚拟的m-1行所有的值都为0,即0,因此可以得到:所有水平校验列的值异或,也就是所有的0到m-1列的数据(每列是m-1行),所有数据位异或。所有的垂直校验列的值异或(除掉共同因子S),从0到m-1(每列m行,但最后一行的值为0),因此也就是所有的0到m1列所有数据位异或。因此:所以我们可以获得:公式(11)证明了公式(3) 、(7)都能给出公共因子S的值。下面我们必须证明这个算法只能唯一恢复第i列和第j列的数据。假设水平校验组和对角

23、校验组已经分别由公式(8)、(9)获得。第一步给s赋初值s = m 得到s。第二步计算:该公式是正确的,通过公式(2)和公式(9)可以得出。一旦我们首先计算出,我们可以通过公式(13)计算出公式(13)的正确性,根据公式(1)和公式(8)可以得到。第三步,参数s的值设置为,返回到第2步,根据算法可以得到:3 软件设计与目标3.1 设计目标及内容对于本软件的设计可以概述为以下三个方面:(1)编码算法的设计是本软件要实现的核心内容,通过EVENODD编码原理利用5张原始图片的数据生成2张冗余的校验数据。(2)译码算法是体现运用EVENODD原理能够胜任将出错的两个数据块的数据恢复的关键,也是体现了

24、本原理在现实运用中具有的高可靠性和高稳定性。(3)界面设计是实现友好的人机交互界面不可或缺的重要部分,EVENODD编码的实现过程和结果都要通过该界面表现和保存。通过对上述内容的设计我们必须达到以下目标:(1)满足用户对EVENODD编码过程的直观理解;(2)创建友好的人机操作界面;(3)满足用户对5张简单图片的备份;(4)满足用户利用备份图片和尚未被破坏的原图片还原出错图片3.2 软件总体功能结构3.2.1 功能结构图EVENODD编码的实现图像处理编码译码图2 功能结构图软件功能图如图2:3.2.2 功能说明1. 图像处理为了方便EVENODD码的演示,本软件所选用的输入数据就是图片。在正

25、式进行编码之前必须对图像进行一些必要的处理以符合算法的接口标准。因此,图像处理功能模块又可以分成以下几个子功能模块,如:图像载入、图像保存、图像破坏、图像分割、图像表达等。l 图像载入:从本地计算机中读取图片文件,可以选择本地计算机中的任何文件夹。l 图像保存:将经过处理后的图片保存在当前的文件夹中或者其他文件夹中。l 图像破坏:将图片的数据全部破坏供译码使用。它是配合软件的仿真而单独设计的。l 图像分割:从以图像格式显示的图片中读取像素并存储在二维数组中,供以后处理使用。l 图像表达:像素经过处理后是存储在二维数组中的,该子功能的作用是将二维数组以图片的格式表达出来,与图像分割功能作用相反。

26、2. 编码编码功能是整个软件进行的关键,通过原始图片生成2张冗余校验图片,为译码过程的顺利进行做准备。3. 译码该功能是在实际生活中运用最广的一部分,它通过尚未有数据损失的原始图像和通过编码形成的尚未遭到数据破坏的校验数据将已破坏的数据恢复出来(已破坏数据块的数目2)。3.3 设计实现的策略及主要算法描述在该软件的实现过程中,基于面向对象程序设计思想,在实现过程中,把每一个待处理的数据看作一个对象,那么每个对象在实际的应用中也就是一张图片(也可以叫做一个数据块)。.根据EVENODD的编码原理,处理的数组大小m必须为素数,在整个软件的实现过程中取m= 5。由于以上介绍的编码过程都是针对单个数组

27、的,所以在算法处理过程中,必须从每个对象中抽取一列组成单个的数据,将每个45大小的数组看作一个基本处理单元,然后按照编码原理进行算法的设计。3.3.1 VENODD编码算法1. 算法描述EVENODD编码算法是产生冗余校验数据的核心算法。在实现该算法过程中,假设接口为5个数据对象,由于在该算法中实际操作对象是一个45大小的数组,首先面对的问题是如何将对象中的数据读出来并且将他们组合成符合规格的数组。基于上述情况,设计能从对象数组中获取某列的方法getColumnData(pictureInComp obj,int i)成为必要。利用该方法可以分别在每个对象的数据中获取相应列的数据并返回,组成一

28、个符合规格的数组。这个数组就是最小的处理单元。根据公式(1)可以得到该处理单元产生的水平校验位的值,根据公式(3)不难得出公共校验因子S ,再由公式(2)对角校验值也就很容易的得到了。将该过程置于一个循环中依次处理对象的每一列,每列产生的水平校验值和对角校验值依照相反的方式重新组合便形成了两个冗余对象即水平校验对象和对角校验对象。2. 设计流程图编码算法的设计流程图如图3:图 3 编码设计流程图3. 算法实现编码算法的实现如程序清单31程序清单3-1 EVENODD编码算法protected void encode()int dataCache , tempMatrix1 , tempMatr

29、ix2;tempMatrix1= new inttempMemory0.getColumn()tempMemory0.getRow(); /暂存运算过程中水平校验位的数据值的转置数据tempMatrix2=new inttempMemory0.getColumn()tempMemory0.getRow();/暂存运算过程中对角校验位的数据值的转置数据int temp=new inttempMemory0.getRow()tempMemory0.getColumn();/充当数组转置时的临时变量dataCache = new inttempMemory0.getRow()tempMemory.l

30、ength;for(int i = 0 ; i tempMemory.length ; i+)dataCache = super.getColumnData(tempMemory, i);/获得对象元素中的数据中的每一列,组成一个数组tempMatrix1i = super.horiExclusive_OR(dataCache);/获取水平校验(公式1)tempMatrix2i =super.diagExclusive_OR(dataCache, encoding.getCommonFactor(dataCache);/ 获取对角校验数据(公式2)/将修复的数据存入对象super.matrix

31、Transposition(tempMatrix1, temp);/恢复原数据格式将数组转置horiRedun = new pictureInComp(temp);/水平冗余校验对象实例化super.matrixTransposition(tempMatrix2, temp); diagRedun = new pictureInComp(temp);/对角冗余校验对象实例化3.3.2 EVENODD 译码算法1. 算法描述EVENODD译码算法是EVENODD码中的关键,是使该码能从理论运用到现实的基础。它与编码算法配合使用,使用的前提是已经由编码算法产生出了冗余校验值。EVENODD译码算法

32、最多能使2个出错数据块恢复。它是在尚未破坏的数据块的数据的基础上运用译码原理进行操作的。由于每个数据块被破坏的几率是均等的,不同的数据块被破坏,处理的方法也相应有所不同。根据EVENODD译码原理,我们可以把该算法分为两部分来实现:(1)根据错误数据块号找到对应的处理方法。(2)实现每种情形的处理方法。与encode算法思想一样,我们同样由待处理的7个不同对象(5个原数据块,2个冗余校验数据块),获得最小数据单元,然后根据译码原理对最小数据单元进行处理。最后将每一个最小数据单元恢复的结果存储到错误数据块相应的位置。2. 设计流程图EVENODD译码设计流程图如图4:图 4(a) EVENODD

33、译码流程图图 4(b) EVENODD译码流程图 图 4(c) EVENODD译码流程图图 4(d) EVENODD译码流程图 图4(e)EVENODD译码流程图图4(f)EVENODD译码流程图图 4(g) EVENODD译码流程图3. 算法实现译码算法的实现如程序清单32程序清单 3-2 EVENODD译码算法protected void decode()if(error1 != -1 & error2 != -1)/有两个数据块出错int dataCache , tempMatrix1 , tempMatrix2; pictureInComp corectObj;/暂存正确数据块的数据

34、tempMatrix1 = new inttempMemory0.getColumn()tempMemory0.getRow(); tempMatrix2 = new inttempMemory0.getColumn()tempMemory0.getRow(); int temp = new inttempMemory0.getRow()tempMemory0.getColumn();/充当数组转置时的临时变量 if(error1 = tempMemory.length - 2 & error2 = tempMemory.length -1)/两个校验数据块出错 corectObj = new

35、 pictureInComptempMemory.length - 2; System.arraycopy(tempMemory,0,corectObj,0,tempMemory.length-2);/将正确的对象数组拷贝到correctObj中dataCache = new inttempMemory0.getRow()corectObj.length;for(int i = 0 ; i = 0 & error1 tempMemory.length - 2) & error2 = tempMemory.length - 2 )/原数据块和水平校验数据块的数据出错 int s = 0; int

36、 m = tempMemory.length - 2; tempMatrix1 = new inttempMemory0.getRow()tempMemory0.getColumn(); int tempCache = new inttempMemory0.getRow()tempMemory.length; dataCache = new inttempMemory0.getRow() + 1tempMemory.length;/存储增加一行的数据for(int i = 0 ; i tempMemory0.getColumn(); i+) tempCache = super.getColum

37、nData(tempMemory, i);/获取对象数组中每一个元素对应列的数据 dataCache = super.addRow(tempCache);/增加一行/*-计算公共因子-*/ s = dataCache(error1 - 1 + m)%mm + 1; for(int l = 0 ; l m ; l+) s = s dataCache(error1 - l - 1 + m)%ml; /*-恢复第error1 个数据块数据-*/ for(int k = 0 ; k m - 1 ; k+)tempMatrix1ki = s dataCache(k + error1 + m)%mm +

38、1 ; for(int l = 0 ; l m; l+)if(l != error1) tempMatrix1ki = tempMatrix1ki dataCache(k + error1 -l + m)%ml; tempMemoryerror1.read(tempMatrix1);/修复数据/*-恢复第error2 个数据块的数据-*/corectObj = new pictureInCompm;System.arraycopy(tempMemory, 0, corectObj, 0, m);dataCache = new inttempMemory0.getRow()m;for(int i

39、 = 0 ; i = 0 & error1 tempMemory.length - 2) & error2 = tempMemory.length - 1)/原数据块和对角校验数据块出错int m = tempMemory.length - 2;/*-修复数据块error1-*/corectObj = new pictureInCompm;dataCache = new inttempMemory0.getRow()m;for(int i = 0 , j = 0; i tempMemory.length - 1; i+ )/获取前m+1行的正确数据 if(i != error1)corectO

40、bjj+ = (pictureInComp)tempMemoryi.clone();for(int i = 0 ; i m ; i+) dataCache = super.getColumnData(corectObj, i); tempMatrix1i = super.horiExclusive_OR(dataCache); super.matrixTransposition(tempMatrix1, temp); tempMemoryerror1.read(temp);/*-修复数据块error2-*/ System.arraycopy(tempMemory, 0, corectObj,

41、0, m); for(int i = 0 ; i = 0 & error1 = 0 & error2 tempMemory.length - 2)/两个原数据块出错int m = tempMemory.length - 2;dataCache = new inttempMemory0.getRow() + 1m + 2;int tempCache = new inttempMemory0.getRow()m + 2;tempMatrix1 = new inttempMemory0.getRow()tempMemory0.getColumn();tempMatrix2 = new inttemp

42、Memory0.getRow()tempMemory0.getColumn();for(int i = 0 ; i tempMemory0.getColumn() ; i+) int s = 0 ; int sh = new intm; int sd = new intm; int k = 0; tempCache = super.getColumnData(tempMemory, i); for(int j = 0 ; j tempCache.length ; j+)s = s tempCachejm tempCachejm + 1;/求公因子 s :将所有校验位相异或dataCache =

43、 super.addRow(tempCache);/*-求sh、sd(公式 3-7、3-8)-*/ for(int u = 0 ; u m ; u+) for(int l = 0 ; l = m ; l+)/求sh if(l != error1 & l != error2)shu = shu dataCacheul; sdu = s dataCacheum + 1; for(int l = 0 ; l m ; l+)if(l != error1 & l != error2)sdu = sdu dataCache(u - l + m)%ml; /*-修复数据-*/k = (m - (error2

44、 - error1) - 1) % m;while(k != m - 1) dataCachekerror2 = sd(error2 + k + m)%m dataCache(k + error2 - error1 + m)%merror1; dataCachekerror1 = shk dataCachekerror2; k = (k - (error2 - error1) + m) % m; for(int j = 0 ; j tempMatrix1.length ; j +)/数据转移tempMatrix1ji = dataCachejerror1;tempMatrix2ji = dat

45、aCachejerror2; tempMemoryerror1.read(tempMatrix1);tempMemoryerror2.read(tempMatrix2);else System.out.println(error : fail to find the error disk !); System.exit(0);else if(error2 = -1 & error1 != -1)/只有一个数据块出错int m = tempMemory.length - 2;int dataCache = new inttempMemory0.getRow()m;int tempMatrix =

46、 new inttempMemory0.getColumn()tempMemory0.getRow();pictureInComp corectObj = new pictureInCompm;int temp = new inttempMemory0.getRow()tempMemory0.getColumn();/充当数组转置时的临时变量 if(error1 =0)/出错数据块是水平校验位或者原数据 for(int i = 0 ,j = 0; i m + 1 ; i+) if(i != error1)corectObjj+=(pictureInComp)tempMemoryi.clone(

47、); for(int i = 0 ; i corectObj.length ; i+) dataCache = super.getColumnData(corectObj, i); tempMatrixi = super.horiExclusive_OR(dataCache); super.matrixTransposition(tempMatrix, temp); tempMemoryerror1.read(temp);else if(error1 = tempMemory.length - 1)/出错数据块是对角校验位数据块 System.arraycopy(tempMemory, 0,

48、corectObj, 0, m); for(int i = 0 ; i corectObj.length ; i+) dataCache = super.getColumnData(corectObj, i); tempMatrixi = super.diagExclusive_OR(dataCache,encoding.getCommonFactor(dataCache); super.matrixTransposition(tempMatrix, temp); tempMemoryerror1.read(temp); else System.out.println( error : fai

49、l to find the error disk !); System.exit(0); else/错误数据块不能找到System.out.println( error : fail to find the error disk !);System.exit(0);3.4 算法接口实现本软件的编码和译码功能是通过分别调用编码和译码算法实现的。因此在实现该功能时必须实现该算法的接口。3.4.1 编码功能接口设计通过对“3.3.1 EVENODD编码算法”的介绍我们可以知道,编码算法的接口是一个pictureInComp对象数组。在编码功能的实现过程中,我们必须把输入的图片处理成为适合该接口的数据。因此后面的过程显得相当的必要。由于输入数据是图像的格式,首先我们必须利用图像分割功能将该处理图像的像素读出来并创建一个pictureInComp对象存入其

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论