数据校验的基本原理
- 增加冗余码即校验位
|有效信息k位|校验信息r位 |
|-|-| - 码距:同一编码中,任一两个合法编码之间不同二进制数位数相差的最小值。
- 码距与纠错能力的关系:检错个数 = 码距 - 1;纠错个数 = int(检错个数/2)
- 码距的选择:码距越大,检错纠错能力越强,抗干扰能力越强。数据冗余越大,效率越低,实现越复杂。
几种常见校验码
奇偶校验(r=1)
偶校验 | 奇校验 |
---|---|
P=数据位做异或 | 校验位P=数据位做异或后取非 |
G=P以及数据位做异或 | G=P以及数据位做异或后取非 |
G=0正确,否则发生错误 | 同偶校验 |
奇偶校验的特点:不能检测偶数位错误,无错结论不可靠,无纠错能力,是一种错误检测码。
改进的奇偶校验:双向奇偶校验
应用:在出错比较少且出错不会导致严重后果的地方用,同步传输常用奇校验,异步传输偶校验。
CRC校验(k+r<=2r-1)
校验码的产生:求对有效数据最小的r位,给有效数据后加r位0,取r+1位生成多项式,做模2除法。
常见多项式:
检错过程:传输结果对约定的多项式做模2除法。如果余数为0,表示不发生错误。余数不同,代表的错误不同。
纠错过程:根据余数做循环移位至余数为101,对第一位取非。然后循环移位至余数恢复,则纠错完成。
模2除法(也称为模2加/减法,不产生进位的计算的方法)
1.从被除数与除数位数相同的地方开始上位。
2. 首位为1,上1;首位为0,上0。
3. 减除数,即除去首位做异或
理论上可以证明循环冗余校验码的检错能力有以下特点:
(1)可检测出所有奇数位错。
(2)可检测出所有双比特的错。
(3)可检测出所有小于、等于校验位长度的突发错(成串出现的特殊差错)。
海明校验
海明编码:设k+r位海明码从左到右依次为第1,2,3……k+r位。
校验码Pi分别位于第2i-1位
Hj位的数字j等于小于j的若干个i的(Pi)的和。
分析所有Pi在Hj出现的位置取Hj做异或·。求出校验位的值:
设置指错字Gi:Pi和得到Pi的数据位做异或。都为0则正确。
例子:
海明码特点:指错字都为0不代表一定无错(同偶校验),如P1,b1,P2同时出错,仍为0
不一定能区分一位错和两位错。但可以检测所有的两位错,纠正所有一位错。