数据校验码(奇偶,海明,循环冗余CRC)

奇偶校验码
假设源数据 B = b0b1..bn-1,送到目标部件后,B' = b'0b'1..b'n-1
为判断数据是否正确,可以向B添加校验位P,奇校验时P使得序列中1的个数为奇数;偶校验时P使得序列中1的个数为偶
步骤如下
1. 源部件端求出奇(偶)校验位P (异或)
    若奇校验,则 P = bn-1⊕bn-2..⊕b0⊕1,当B序列中1的个数为奇数时,P=0,否则 P=1
    若偶校验,则 P = 
bn-1⊕bn-2..⊕b0     ,当B序列中1的个数为偶数时,P=0,否则 P=1
2. 目标部件求
出奇(偶)校验位P' (异或),方法同上
3. 由于B与P是一同发送的,假设目标部件接收到的P为 P'' (假设P''传输正确)
    则结果 P* = P'
⊕P'',若P*=1则出现错误;P=0则(认为)正确
小结:因为只用一个校验位,传输成本低;但若出现多位错误时,计算会出错,且不能保证校验位 P'' 传输正确

海明校验码
将数据按某种规律分成若干组,各组进行相应的奇偶校验,以提供多位的校验码,从而对错误位置定位,并将其纠正。
常见纠错方式有:单纠错码(SEC),单纠错/双检错码(SEC-DED) 

循环冗余校验码(CRC)
设要发送的二进制数据为10110011,多项式是(X4+X3+1)

1. 将多项式转化成二进制 F = X4 + X3 + 1 = 11001
2. 在源信息后补多项式最高次幂个0,即X4(四个零),得 T = 10110011 0000
3. F对齐最高位T,做异或操作,直到余多项式最高次幂4位为止
101100110000
11001
--------------------
 11110110000
 11001
--------------------
   111110000
   11001
--------------------
     1100000
     11001
--------------------
        0100

4. 基本后将冗余码添加到源信息后,101100110100

猜你喜欢

转载自liang-hr.iteye.com/blog/2367489
今日推荐