奇偶检验码的工作原理和具体流程
一、工作原理
奇偶校验码由n-1位信息元和1位校验元组成,可以表示成为(n,n-1)。如果是奇校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为奇数个;如果是偶校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为偶数个。
设:如果一个偶校验码的码字用A=[an-1,an-2,…,a1,a0]表示,则:(1)式中 为校验元,“+”为模二和(以后也这样表示,请注意)。
式(1)通常被称为校验方程。利用式(1),由信息元即可求出校验元。另外,如果发生单个(或奇数个)错误,就会破坏这个关系式,因此通过该式能检测码字中是否发生了单个或奇数个错误。
二、流程
1、奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)必须添0。原来有3个1已经是奇数了所以添上0之后1的个数还是奇数个。
2、偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)必须加1。原来有3个1要想1的个数为偶数就只能再添加1。
扩展资料
校验码的存在:
计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的,误码会导致储存的内容发生改变。为确保数据在传送过程正确无误,常使用检验码。
优点:简单,易于硬件实现
缺点:如上述,只能检测出奇数个错误。
因为在某些场合,发生错误的情况下,绝大多数都是出现一个错误,所以奇偶校验码有着很大的实用性。
参考资料来源:百度百科-奇偶校验码
2024-12-02 广告
奇偶检验码是一种很简单的检错方案!不要想的太复杂!说一大堆理论 不如看个例子:
假设要传输的数据为:10010
1、为了能保证数据的正确传输,我们给10010在加一个数据10010X。
X数据给什么好呢?干脆就统计有效数据位中1的个数!因为有效数据10010中1的个位为2个,那么X就表示2吧,但是二进制没有2的说法,怎么办?X最多只能表示两种状态1或者0,如何才能有效的表示出有效数据中1的个数呢?仔细想想,数可以划分为两种:奇数、偶数,正好可以对应1、0状态!
2、统计有效数据中1的个数,规定1的个数为奇数那么X=1,否则X=0。
因为10010中1的个数为2是个偶数,那么X=0!所以传递的数据为100100 ,5个有效数据+1个校验数据。
(当然也可以规定:1的个数为奇数那么X=0,否则X=1。)
3、接收端接收数据,统计有效数据中1的个数,判断奇偶在与校验位对比即可判断是否正确传输。
假设接收到的数据为100110,因为前5个有效数据中1的个数为3,是奇数,那么校验位应该是1,可接收到的校验位是0,不等于1,故判断传输过程出现错误!要求重传!
至此,奇偶检验过程结束,原理很简单!下面扩展下:
假设接收到数据为:101110,,或是100101……怎么办?
凉拌!
101110 中1的个数为4是偶数,那么检验位应该是0,按照这个上面的原理它应该是正确的,但实际它是错误的!10010 与10111相比,它发生错误的个数为2个,即错误个数有偶数个。故当发生错误的个数为偶数时,它不能检验!
再看看100101,正常办!有效数据中1的个数为偶数,故校验位应该是0,可接收到的数据校验位为1,不等于0,故判断传输出错!要求重传!可校验位又不是有效位,出错了还要重传,因而有效性可想而知!
这就是奇偶检验的缺陷!再说下什么是:奇检验与偶检验!
其实明白了奇偶检验的原理,再区分什么是奇、偶检验我觉得没多大意义!所以不多说,两句话总结:
奇校验:当要传送数据(有效数据+校验位)中1的个数为奇数时,为奇校验。
偶检验: 当要传送数据(有效数据+校验位)中1的个数为偶数时,为偶校验。
本例中的100100当然为偶检验!若为100101则为奇校验!
由上流程还可以退出:不管是奇校验还是偶检验都只能检测奇数个错误不能检测偶数个错误!
同时奇偶检验只能检测出错,而不能确定具体的出错位置,仔细想想,如果能确定是哪一位出错是不是就太秒了?因为二进制位只有0,1,如果能确定是哪一位出错,只要将该位取反,就能修正了!有没有办法?当然有!那就是使用海明码!!至于海明码,这些不在延展!有时间在写!
凡设有校验码的代码,是由本体码与校验码两部分组成(如组织机构代码),本体码是表示编码对象的号码,校验码则是附加在本体码后边,用来校验本体码在输入过程中准确性的号码。每一个本体码只能有一个校验码,校验码通过规定的数学关系得到。
校验码的校验原理是:系统内部预先设置根据校验方法所导出的校验公式编制成的校验程序,当带有校验码的代码输入系统时,系统利用校验程序对输入的本体码进行运算得出校验结果之后,再将校验结果与输入代码的校验码进行对比来检测输入的正确与否。如果两者一致,则表明代码输入正确,系统允许进入,如果不一致,则表明代码输入有误,系统拒绝进入,并要求代码重新输入。