常用检错算法分析及实现.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常用检错算法分析及实现

几种常用检错算法分析及实现简介:在进行通信的过程中,信道中的各种干扰有可能使通信的内容发生差错;在进行信息的长期存储时.由于时变效应,所存储的信.态有可能因为存储介质的性质退化而发生一些改变。为提高信息在通信或存储过程中的准确性,一般要在通信或存储前进行一次编码.使出现的绝大多数差错都能及时发现,这种编码就是“校验码”,有了校验码就不会把错误的信息当作正确的信息加以利用,造成不良后果。在发现错误后可以要求重发,直到接收到正确的信息为止。常见的几种校验方式有:奇偶校验,求和校验,LRC校验,CRC校验。奇偶校验最常见的校验码是奇偶校验码,它在原编码的基础上增加了一位奇偶校验位,使得整个编码1的个数固定为奇数(奇校验)或偶数(偶校验),如表1所列。在信息的传输过程中,如果有奇数位代码发生改变,校验码的奇偶性(1的个数)就会发生变化.从而检查出差错。如果有偶数位代码发生改变.则码的奇偶性(1的个数)不变,这时就检查不出筹错。通过概率分析可以得知,如果发生一个位差错的概率为p,则发生两个位差错的概率大约为p2/2.因为p是一个很小的值(例如p=0.001),发生更多差错的概率就更小。因此,绝大多数都是一个位差错的情况,而奇偶校验可以发现一个位差错,故具有很高的实用性。它是由n-1位信息元和1位校验元组成,可以表示成为(n,n-1)。如果是奇校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为奇数个;如果是偶校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为偶数个。设:如果一个偶校验码的码字用A=[an-1,an-2,…,a1,a0]表示,则:[an-1,an-2,…,a1,a0]=0。这个式子通常被称为校验方程。由信息元即可求出校验元。另外,如果发生单个(或奇数个)错误,就会破坏这个关系式,因此通过该式能检测码字中是否发生了单个或奇数个错误。因为奇校验不能产生全0的代码一般很少使用,常用的奇偶校验码是“偶校验码”。和校验当干扰持续时间很短(如常见的尖峰干扰)时,差错一般是单个出现.这时采用奇偶校验可以有效地达到检错的目的.们也有一些突发性干扰的持续时间较长(如雷电、电源波动等),会引起连续几个位差错.在进行信息存储时.存储介质的缺陷也会引起连续几个位差错。如果差错数是2、4、6个,简单的奇偶校验就不能发现差错,这时可以采用“和校验”。如果一串信息有n字节,对这,字节进行“加”运算,然后将结果附在n字节信息后面一起传送(或存储),这附加的字节就是“校验和”。接收方按相同的算法对这n字节信息进行运算,将运算结果与附加的校验字节进行比较.从而判断有无差错。这种检错方式就是“和校验”。在这里所谓的“加”运算有两种,一种是模2加(按位加),采用按位“异或”操作指令来完成;另一种是算术加(按字节加),采用加法指令来完成。两种算法的检错效果相同。纵向冗余校验(LRC)纵向冗余校验(LRC,Longitudinal Redundancy Check)是通信中常用的一种校验形式。纵向冗余校验(LRC)是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。在行列格式中(例如,在磁带中),LRC经常是与VRC一起使用,这样就会为每个字符校验码。LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。??LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。计算方法1:取反后加1B:把数据转换为二进制,每位取反后再加1B。例如:0AH,按位取反后得+1B=F6H,0AH的二次反补就是F6H。取反后加1H:把数据转换为二进制,每位取反后再加1H。例如:0AH,按位取反后得=F5H,F5H+1H=F6H,0AH的二次反补就是F6H。计算方法2:有个简单算法就是:这个十六进制值有几位数,就把高于这个位数的最小值减去这个值。如果16进制数有2位,那么高于2位的最小值就是100H,用100H 减去这个数就是其二次反补。实际上,该方法的原理和方法1相同:以2位16进制数为例,FFH减去那个数就是把那个数取反(FFH的数据为全1,减去那个数的结果就是原来1的位数变为0,原来0的位数变为1),而FFH+1H=100H。所以取反然后加一就等于100H减去这个数。0AH的二次反补就是:100H-0AH=F6H循环冗余检验(CRC)应用最广泛、功能最强大的校验码是循环冗余校验码CRC(Cyclical Redundancy Check)。CRC的基本原理是将一段信

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档