JAVA基于纠错码的冗余技术的研究——EVENODD码的设计与实现

本文详细阐述了一款软件的设计,包括编码算法的EVENODD原理应用、译码过程、友好的用户界面以及图像处理功能。通过5张图片的编码生成冗余校验数据,确保数据的高可靠性和稳定性,同时实现用户对编码过程的理解和数据恢复。
摘要由CSDN通过智能技术生成

1 软件设计与目标

1.1 设计目标及内容

对于本软件的设计可以概述为以下三个方面:

(1)编码算法的设计是本软件要实现的核心内容,通过EVENODD编码原理利用5张原始图片的数据生成2张冗余的校验数据。

(2)译码算法是体现运用EVENODD原理能够胜任将出错的两个数据块的数据恢复的关键,也是体现了本原理在现实运用中具有的高可靠性和高稳定性。

(3)界面设计是实现友好的人机交互界面不可或缺的重要部分,EVENODD编码的实现过程和结果都要通过该界面表现和保存。

通过对上述内容的设计我们必须达到以下目标:

(1)满足用户对EVENODD编码过程的直观理解;

(2)创建友好的人机操作界面;

(3)满足用户对5张简单图片的备份;

(4)满足用户利用备份图片和尚未被破坏的原图片还原出错图片

1.2 软件总体功能结构

1.2.1 功能结构图

软件功能图如图2

添加图片注释,不超过 140 字(可选)

1.1.1 功能说明

1. 图像处理

为了方便EVENODD码的演示,本软件所选用的输入数据就是图片。在正式进行编码之前必须对图像进行一些必要的处理以符合算法的接口标准。因此,图像处理功能模块又可以分成以下几个子功能模块,如:图像载入、图像保存、图像破坏、图像分割、图像表达等。

l 图像载入:从本地计算机中读取图片文件,可以选择本地计算机中的任何文件夹。

l 图像保存:将经过处理后的图片保存在当前的文件夹中或者其他文件夹中。

l 图像破坏:将图片的数据全部破坏供译码使用。它是配合软件的仿真而单独设计的。

l 图像分割:从以图像格式显示的图片中读取像素并存储在二维数组中,供以后处理使用。

l 图像表达:像素经过处理后是存储在二维数组中的,该子功能的作用是将二维数组以图片的格式表达出来,与图像分割功能作用相反。

2. 编码

编码功能是整个软件进行的关键,通过原始图片生成2张冗余校验图片,为译码过程的顺利进行做准备。

3. 译码

该功能是在实际生活中运用最广的一部分,它通过尚未有数据损失的原始图像和通过编码形成的尚未遭到数据破坏的校验数据将已破坏的数据恢复出来(已破坏数据块的数目≤2)。

1.2 设计实现的策略及主要算法描述

在该软件的实现过程中,基于面向对象程序设计思想,在实现过程中,把每一个待处理的数据看作一个对象,那么每个对象在实际的应用中也就是一张图片(也可以叫做一个数据块)。.根据EVENODD的编码原理,处理的数组大小m必须为素数,在整个软件的实现过程中取m= 5。由于以上介绍的编码过程都是针对单个数组的,所以在算法处理过程中,必须从每个对象中抽取一列组成单个的数据,将每个4×5大小的数组看作一个基本处理单元,然后按照编码原理进行算法的设计。

1.2.1 VENODD编码算法

1. 算法描述

EVENODD编码算法是产生冗余校验数据的核心算法。在实现该算法过程中,假设接口为5个数据对象,由于在该算法中实际操作对象是一个4×5大小的数组,首先面对的问题是如何将对象中的数据读出来并且将他们组合成符合规格的数组。基于上述情况,设计能从对象数组中获取某列的方法getColumnData(pictureInComp[] obj,int i)成为必要。利用该方法可以分别在每个对象的数据中获取相应列的数据并返回,组成一个符合规格的数组。这个数组就是最小的处理单元。根据公式(1)可以得到该处理单元产生的水平校验位的值,根据公式(3)不难得出公共校验因子S ,再由公式(2)对角校验值也就很容易的得到了。将该过程置于一个循环中依次处理对象的每一列,每列产生的水平校验值和对角校验值依照相反的方式重新组合便形成了两个冗余对象即水平校验对象和对角校验对象。

2. 设计流程图

编码算法的设计流程图如图3:

添加图片注释,不超过 140 字(可选)

  1. 算法实现

编码算法的实现如程序清单3—1

程序清单3-1 EVENODD编码算法

protected void encode(){

int[][] dataCache , tempMatrix1 , tempMatrix2;

tempMatrix1=

 new int[tempMemory[0].getColumn()][tempMemory[0].getRow()]; //暂存运算过程中水平校验位的数据值的转置数据

tempMatrix2=

new int[tempMemory[0].getColumn()][tempMemory[0].getRow()];/暂存运算过程中对角校验位的数据值的转置数据

int[][] temp=

new int[tempMemory[0].getRow()][tempMemory[0].getColumn()];//充当数组转置时的临时变量

dataCache = new int[tempMemory[0].getRow()][tempMemory.length];

for(int i = 0 ; i < tempMemory.length ; i++){

dataCache = super.getColumnData(tempMemory, i);//获得对象元素中的数据中的每一列,组成一个数组

       tempMatrix1[i] = super.horiExclusive_OR(dataCache);//获取水平校验(公式1)

       tempMatrix2[i] =

super.diagExclusive_OR(dataCache, encoding.getCommonFactor(dataCache));

// 获取对角校验数据(公式2)              

       }    

       //将修复的数据存入对象

super.matrixTransposition(tempMatrix1, temp);//恢复原数据格式将数组转置

horiRedun = new pictureInComp(temp);//水平冗余校验对象实例化

super.matrixTransposition(tempMatrix2, temp);   

diagRedun = new pictureInComp(temp);//对角冗余校验对象实例化

}

      1. EVENODD 译码算法
  1. 算法描述

EVENODD译码算法是EVENODD码中的关键,是使该码能从理论运用到现实的基础。它与编码算法配合使用,使用的前提是已经由编码算法产生出了冗余校验值。EVENODD译码算法最多能使2个出错数据块恢复。它是在尚未破坏的数据块的数据的基础上运用译码原理进行操作的。由于每个数据块被破坏的几率是均等的,不同的数据块被破坏,处理的方法也相应有所不同。根据EVENODD译码原理,我们可以把该算法分为两部分来实现:

(1)根据错误数据块号找到对应的处理方法。

(2)实现每种情形的处理方法。

与encode算法思想一样,我们同样由待处理的7个不同对象(5个原数据块,2个冗余校验数据块),获得最小数据单元,然后根据译码原理对最小数据单元进行处理。最后将每一个最小数据单元恢复的结果存储到错误数据块相应的位置。

  1. 设计流程图

EVENODD译码设计流程图如图4:

链接:https://pan.baidu.com/s/1gyHrdU1iwsTBiIKyk1lLmw?pwd=3333 
提取码:3333 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值