目录
校验码
校验数字原理
奇偶校验码
哼唱检查码
循环冗馀校验码
校验码
计算机系统在运行中需要进行信息的交换。 为了确保信息在传输中没有错误,通常使用有效校验码对接收的数据进行有效校验。 常见的有效检查代码有三个。 是奇偶校验、汉明、循环冗馀的有效校验码。
校验码的原理是针对以下代码表:
信息ABCD代码00011011A电脑要将' c'(10 )传送到B电脑。 传输中发生事故,传输信息发生错误,10变为11时,B电脑会取得11的代码。 11是合法的代码,所以解码后接收信息d。
但是,对于以下代码表:
信息A B
光盘代码100001010111A电脑要将' c'(010 )传送到B电脑。 传输中发生事故,传输信息发生错误,010变为011时,B计算机会取得011的代码。 由于011不是合法代码,B电脑判断出信息发生了错误,让A电脑重新发送。 010为111 )时,111(d ) )为合法代码,B电脑接收该错误的信息。
引入以下概念。
码字:由多个代码组成的单词,如代码1中的11、10和代码2中的101。
33558www.Sina.com/:2:将两个码字逐一比较,将不同的位数称为两个码字之间的距离。
两个码字之间的距离各合法码字之间的最小距离。 (代码1的导线间距离为1,代码2的导线间距离为2 )
代码2的代码间隔为2,因此必须至少更改2位才能成为另一个合法的代码。 这意味着,如果发生1位错误,它一定是非法代码。
在代码间隔为k的编码表中,如果错误位数大于或等于k,则编码可能是另一种合法编码,接收方将接收到错误消息。 如果错误位数小于k,则为非法代码,接收方判定为错误代码。
校验码码距:所有校验码(有效信息位和奇偶校验位)的“1”的个数为奇数
奇校验码:所有校验码(有效信息位和奇偶校验位)中的“1”的个数为偶数
对于最高有效比特为http://www.Sina.com/1101010的7个有效信息比特的编码,其奇偶校验为11101010(5 (五个之一); 校验码为01101010(4个1 )
假设使用了偶检的符号。 符号为11001010,发生错误时为1100101 偶校验码:。 该符号有奇数个“‘1'(5个),不满足偶检,因此确认该符号发生了错误,并请求重发。 发生错误11http://www.Sina.com/0http://www.Sina.com/010 (变了2位)时,有偶数个“1”,属于偶数检查,被认定为有效代码。
奇偶校验位,
对奇偶校验的计算机实现(以奇偶校验为例,对各位进行异或运算,如果得到的结果为0,则符合奇偶校验规则,如果为1,则不符合。
对于10001码,他的偶校验码就是偶校验码010001;
针对11001码,他的偶校验码就是偶校验码111001。
所以可以通过异或运算的以上性质来实现。
汉明码汉明码最多只能检测出2位错误。 纠正1位错误的汉明码默认进行偶检(除非另有说明使用奇检)。 海明代码是由0和1组成的一系列序列
检查只能发现1位的错误,但无法确定是哪个位引起了错误。 另一方面,高明校验码可以确定是哪个位引起了错误。
1将信息位分组进行偶校验-具有多个奇偶校验位-能量
标注出错位置如何确定有多少个校验位呢?假设我们现在有n位的信息位和k位的校验位,那么k个校验位总共可以表示种状态。由于一个位置出错(纠正1位错)都需要有一种状态来表示,就要求(+1的1表示正确的状态)
对于信息位1010
确定海明码的位数:设信息位(1010),共4位,检验位,共3位,对应的海明码为 确定校验位的分布校验位放在海明位号为的位置上,信息位按顺序放到其余位置上 1010
分组
我们需要确定是负责校验哪些位置的,我们将1,2,4的二进制码写出来,保持位数相同
1:001 2:010 4:100 ,若将0写成'*'表示通配符,如下表: 001010100**1*1*1** 将1-7根据统配规则填入表中 124**1*1*1**001(1)010(2)100(4)011(3)011(3)101(5)101(5)110(6)110(6)111(7)111(7)111(7)
可以看出
**1可以管理1,3,5,7
*1*可以管理2,3,6,7
1**可以管理4,5,6,7
求校验位
则可以让负责的校验,负责的校验,负责的校验。
,,
由此则.....
由此得出海明码:
0
查错
或者或者中的一组不满足偶校验,则出错
纠错
首先理解一下为什么海明码能纠错
若蓝色区域偶校验错误,则(1,3,5,7位中有一个发生了错误)
1.黄色和红色区域的偶校验均正确,则说明(2,3,6,7)和(4,5,6,7)均正确,则1位置发生错误
2.黄色区域正确,红色区域错误,则说明(2,3,6,7)正确,(4,5,6,7)中有一个错误,则5位置发生错误
3.红色区域正确,黄色区域错误,则说明(2,3,6,7)中有一个错误,(4,5,6,7)正确,则3位置发生错误
4.黄色和红色区域都错误,则说明(2,3,6,7)中一个错误,(4,5,6,7)中一个错误,则7位置发生错误
同理可得其他各种情况。
由于(1,3,5,7)是由**1负责的,所以若(1,3,5,7)发生错误,则错误位置的二进制的第3位置必然为1,若(2,3,6,7)发生错误,则错误位置的二进制的第2位置必然为1,若(4,5,6,7)发生错误,则错误位置的二进制的第1位置必然为1。
若发生错误,设错误位置对应的二进制为
则(若偶检验成功则为0,失败则为1),同理可得,最终就能确定发生错误的位置
奇偶校验会在每一个字符信息的首部或尾部添加一个奇偶校验码,对于大量传输的数据进行校验时,会增加大量的额外开销,尤其在网络通信中,传输的数据信息都是二进制比特流,因而没有必要将数据再分解成一个个字符,这样也就无法采用奇偶校验码,因此,通常采用CRC码进行校验。
CRC校验的基本原理
设生成多项式,信息码为101001
增加冗余码 (校验码)生成多项式G(x)
双方约定的一个(r+1)位二进制数,发送方利用G(x)对信息多项式做模2除运算,生成校验码。接收方利用G(x)对收到的编码多项式做模2除运算检测差错及错误定位。
G(x)应满足的条件
1.最高位和最低位必须为1
2.当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0
3.不同位发生错误时,模2除运算后余数不同
4.对不为0余数继续进行模2除运算应使余数循环
除2模运算
除2模运算对于每一位,若不够则不用借位,即0-1=1,0-0=0,1-1=0,1-0=1,即异或运算操作。
1.部分余数首位为1时,商为1,减除数
2.部分余数首位为0时,商为0,减0
3.当部分余数的位数小于除数的位数时,该余数即为最后余数
将信息码左移r位,低位补0,对移位后的信息码,用生成多项式进行模2除运算,产生除数,CRC码为信息码+余数
假设信息码为101001,生成多项式为1101,则余数为001,最终确定CRC码为101001 001检验与纠错
接收方用接收到的信息与约定好的生成多项式进行模2除运算,若余数为0,则正确,不为0则发生错误。
若接收方收到的信息为:101001 001与生成多项式(1101)进行运算得到的余数为0,则正确
若接收方收到的信息为:101001 011与生成多项式(1101)进行运算得到的余数为010,则发生错误,错误位置为2,恰好为010的十进制数。但在这里并不能说所得余数就代表出错位置,如下表 接受余数出错位101001000001110100101101021010011010113101000001100410101100110151011010011106100001001111711100100100180010010010109
由上表可以看出出错位并不等于余数,但是有一定的联系。余数在001-111中循环出现,因为冗余码只有3位,只能表示8种情况,但是CRC码共有3+6=9位,无法表示完全。由于有r位校验位,即余数有r位,因此余数能表示种状态,为纠错范围能覆盖所有CRC码,则要求(1为正确的情况)。
因此当时,CRC码可以纠错一位,但是由于CRC码通常用于计算机网络,都是几千bit+几个校验位,因此主要为了检错,而非纠错。
黄大牙牙yyds