一、常用检错码(1) 寄偶校验码寄偶校验码是一种最简单的校验码,其编码规则:先将所要要传送的数据码元分组,并在每组的数据后面附加一位冗余位即校验位,使该组包括冗余位在内的数据码元中“1”的个数保持为奇数(奇校验)或偶数(偶校验)。
在接收端按照同样的规则检查,如发现不符,说明有错误发生;只有“1”的个数仍然符合原定的规律时,认为传输正确。
实际数据传输中所采用的寄偶校验码分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验三种。
垂直奇偶校验是一字符为单位的校验方法。
例如,传输数据信息为“1010001”,采用偶校验时,附加位为“1”,则发送信息变为“10100011”;采用奇校验时,附加位为“0”,发送信息变为“10100010”;(2) 循环冗余校验码(CRC)循环冗余校验码CRC(Cyclic Redundancy Code)采用一种多项式的编码方法。
把要发送的数据位串看成是系数只能为“1”或为“0”的多项式。
一个k位的数据块可以看成Xk-1到X0的k项多项式的系数序列。
例如,“110001”有6位,表示多项式是“X5 + X4+ 1”。
多项式的运算是模2运算。
采用CRC码时,发方和收方必须事先约定一个生成多项式G(X),并且G(X)的最高位和最低必须是1。
要计算m位数据块的M(X)的校验和,生成多项式必须比该多项式短。
其基本思想是:将校验和附加在该数据块的末尾,使这个带校验和的多项式能被G(X)除尽。
当接收方收到带校验和的数据块时,用G(X)去除它,如果有余数,则传输有错误。
二、纠错码纠错码与检错码相比其功能更强,它不但能检错还能纠错。
海明码就是一种能够纠正一位错误的检错码。
海明码是海明(H.W.Hamming)于1950年提出的一种码制。
在发送数据之前将数据按照海明码制形成海明码,然后发送海明码,到达对方后根据接收到的海明码进行解释分析、判错、纠错。
(1) 海明码的形成①海明码的组合规则海明码是由数据与校验位组合而成的。
其组合规则为:将数据与校验码(寄偶校验)自左至右进行编码,其中编号为2的幂的位均为校验位,其余为数据位。
②校验位值的确定将每一数据位的编号展开成2的幂的和(每一项不可重复),则每一项所对应的位均为该数据位的校验位。
据此,按照寄偶校验规则确定各校验位的值。
例:要传送的数据为“11001100”则相应的海明码为:AB1C100D1100 其中A、B、C、D是加入的校验位。
将每一数据位的编号展开成2的幂的和:3=2+1 9=8+15=4+1 10=8+26=4+2 11=8+2+17=4+2+1 12=8+4从而得出校验位所负责校验的数据位:第1位即A是1,3,5,7,9……(所有奇数位数据)的校验位。
第2位即B是6,7,10,11……的校验位。
第4位即C是5,6,7,12……的校验位。
第8位即D是9,10,11,12……的校验位。
最终确定A、B、C、D的值分别为:1、0、1、0(这里采用偶校验),因此其海明码为“101110001100”(2) 检错与纠错过程当对方收到海明码后应进行以下检错和纠错:①将出错计数器置为0。
②依次对每个校验位进行寄偶校验,如果有错将校验位所对应的编码值加入计数器中。
直到每个校验位检查完为止。
③如果出错计数器值为0,则数据传输无错。
反之如果计数器值不为0,则数据传输有错,且出错计数器值即为出错数据位的编码。
④将出错数据位的数据取反即可。
注意:海明码只能纠正一位错,若多位出错则无能为力。
【例】已知数据“11001100”在发送前,编码后得到的海明码是“101110001100”(这里采用偶校验),经信道传输到达接收端后,设定由于噪声干扰或其它方面的原因,数据被改为“100110001100”,即第3位出错。
分析海明码检错与纠错过程。
按照上述海明码检错、纠错原理与过程,分析可得:①在目标节点,首先将计数器置为0。
②依次对每个校验位与对所负责的数据位进行偶校验,由于第1位校验位(负责1,3,5,7,9,11位数据)负责第3位数据的校验,所以对第1位校验位进行检查时,发现1,3,5,7,9,11这6位数据之和已不是偶数了(由于第3位由“1”变为“0”的缘故),故出错,因此将该校验位的编码“1”加入到出错计数器中,即此时出错计数器的值为“1”。
同理对第2位校验位检查时,发现3,6,7,10,11这5位数据之和也不是偶数了,故出错,因此将该校验位的编码“2”加入到出错计数器中。
此时出错计数器的值为“3”。
③其余检验位由于与第3位数据无关,因此等所有的校验位检验结束后,出错计数器的值仍为“3”,故可知海明码的第3位数据出错。
将第3位数据取反即可。
一、什么是码距?码距就是两个码字C1与C2之间不同的比特数。
如:1100与1010的码距为2;1111与0000的码距为4。
一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。
若一个编码系统有四种编码分别为:0000,0011,1100,1111,此编码系统中0000与1111的码距为4;0000与0011的码距为2,是此编码系统的最小码距。
因此该编码系统的码距为2。
二、什么是检错与纠错?有很多网友和学员不明白,为什么有些编码能检查出错误,而不能纠正错误?下面来举一个生活当中简单的例子来说明这一点。
若希赛公司发出一个通知:“明天14:00~16:00开会”,但在通知过程中由于行政部工作人员疏忽,变成了“明天10:00~16:00开会”。
员工收到这个错误通知后由于无法判断其正确与否,就会按这个错误时间去安排与组织。
为了使接收者能判断正误,可以在通知内容中增加“下午”两个字,即改为:“明天下午14:00~16:00开会”。
这时,如果仍错为:“明天下午10:00~16:00开会,则收到此通知后,根据“下午”与“10:00”信息即可判断出通知发生了错误。
但仍不能纠正其错误,因为无法判断是“下午”与“10:00”哪一信息出错,即无法判断公司原来制定开会的具体时间。
这时,接收者可以告诉发送方再发一次通知(员工向行政部人员询问,行政部再次确认会议时间),这就是检错重发(这也就是我们所说的能检错,但无法纠错)。
为了实现不但能判断通知准确性(检错),同时还能正确判断会议开始的具体时间(纠错),行政部可以把通知内容再增加“两个小时”四个字,即改为:“明天下午14:00~16:00开会两个小时”。
这样,如果其中“14:00”错为“10:00”,不但能判断出错误,同时还能纠正错误,因为其中增加的“两个小时”这个标识可以判断出正确的时间为“14:00~16:00”。
当然,这显然也增加了信息的冗余,降低了数据处理的效率。
但随着带宽的不断提高,数据执行与处理的能力日益增强,可靠性与效率的均衡,这是值得的。
三、码距和检错纠错有何关联?首先大家要了解以下两个概念:1.在一个码组内为了检测e个误码,要求最小码距应该满足: d>=e+12.在一个码组内为了纠正t个误码,要求最小码距应该满足: d>=2t+1现在举个例子来说明这个问题:假如我们现在要对A,B两个字母进行编码。
我们可以选用不同长度的编码,以产生不同码距的编码,分析它们的检错纠错能力。
l 若用1位长度的二进制编码。
若A=1,B=0。
这样A,B之间的最小码距为1。
合法码:{0,1}; 非法码:{0,1};根据上面的规则可知此编码的检错纠错能力均为0,即无检错纠错能力。
其实道理很简单,这种编码无论由1错为0,或由0错为1,接收端都无法判断是否有错,因为1,0都是合法的编码。
l 若用2位长度的二进制编码,可选用11,00作为合法编码,也可以选用01,10作为合法编码。
若以A=11,B=00为例,A、B之间的最小码距为2。
合法码:{11,00}; 非法码:{01,10};根据上面的规则可知此编码的检错位数为1位,无法纠错。
因为无论A(11)或B(00),如果发生一位错码,必将变成01或10,这都禁用码组(非法码),故接收端可以判断为误码,却不能纠正其错误。
因为无法判断误码(01或10)是A(00)错误还是B(11)错误造成,即无法判断原信息是A或B,或说A与B形成误码(01或10)的可能性(概率)是相同的。
如果产生二位错码,即00错为11,或11错为00,结果将从一个合法编变成另一个合法编码,接收端就无法判断其是否有错。
所以此种编码的检错能力为1位,纠错能力为0位。
l 若用3位长度的二进制编码,可选用111,000作为合法编码。
A,B之间的最小码距为3。
合法码:{111,000}; 非法码:{001,010,011,100,101,110};根据上面的规则可知此编码的检错位数为2位,纠错位数为1位。
例如:当信息A(000)产生1位错误时,将有3种误码形式,即001或010或100,这些都是禁用码组,可确定是误码。
而有这3个误码与合法编码000的距离最近,与合编码111的距离较远,根据误码少的概率大于误码多的概率的规律,可以判定原来的正确码组为000,只要把误码中的1改为0即可得到纠正。
同理,如果信息B(111)产生1位错误时,则有另三种误码可能产生,即110,101,011,根据同样道理可以判定原来的正确码组是111,并能纠正错误。
但是,如果信息A(000)或信息B(111)产生两位错误时,虽然能根据禁用码组识别其错误,但纠错时去会做出错误的纠正而造成“误纠错”。
如果信息A(000)或信息B(111)产生三位错误时,将从一个合法编码A(或B)变成了另一个合法编码B(或A),这时既检不出错,更不会纠错了,因为误码已成为合法编码,译码后必然产生错误。
所以检错位数为2位,纠错位数为1位。
四、小结编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。
下表概括了最小距离为1至7的码的纠错和检错能力。
增大编码信息的码距的一个基本缺点是,在任何给定的系统中,都会因而降低数据传输效率。
显然,这是由于增加的码位(为增大最小距离所需的)减小了有用的信息时间。
这就给每个信息增加了所谓多余度。
所以,选择最小距离要取决于特定系统的参数。
数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素,这里不再介绍,大家也可以在辅导平台中与我进一步来讨论这些问题。