基础知识
原理:通过加一冗余码,来检验或纠错编码
码距:两个二进制数比较,在同一数位的地方,数位值不同的个数有多少个,即码距
如:0100 和 1111码距是多少
1、看:有3个数位值不同,则码距:3
2、异或计算:(异或:相同为0,不同为1)
0100 1111 异或运算 = 1011
有几个1 则码距是多少;码距:3
奇偶校验
可检查1位错误,不可纠错
编码方法:由若干有效信息(如一个字节),再加上一个二进制位(校验位)组称校验码
奇校验:整个校验码(有效信息和校验位)中“1”的个数为奇数。
偶校验:整个校验码(有效信息和校验位)中“1”的个数为奇数。
例:原始编码1011 0111
原始编码中1的个数有6个
奇校验: 1 1011 0111 有奇数(7)个1
- 传输过程中奇数(3)个数据改变:
1 10001111,通过奇校验,奇校验码不是奇数(7)个1,而变成偶数(6)个1,则判断数据发现错误,检查出错误。 - 传输过程中偶数(2)个数据改变:
1 1001 1111,通过奇校验,奇校验码都是奇数(7)个1,则无法判断数据是否出错
偶校验:0 1011 0111 偶数(6)个1
- 传输过程中奇数(3)个数据改变:
0 10001111,通过偶校验,奇校验码不是偶数(6)个1,而变成奇数(5)个1,则判断数据发现错误,检查出错误。 - 传输过程中偶数(2)个数据改变:
0 1001 1111,通过奇校验,奇校验码都是偶数(6)个1,则无法判断数据是否出错
总结: 奇偶校验可以检测出奇数个错误而无法检查出偶数个错误,也无法纠正错误,无法定位错误位置。
循环校验码CRC
CRC校验,可校错,不可纠错
编码方法:在k位信息码之后拼接R位校验码。
多项式:一个二进制数码都可用一个系数为0或1的多项式与之对应。
比如:二进制数码 1101
对应的G(x) = 1 * x3 + 1 * x2 + 0 * x1 + 1 * x0 = x3 + x2 + 1
例:信息码:110 0101 0101,生成多项式: x4 + x3 + x2 + 1。CRC编码结果为:
1)多项式对应的二进制码: 11101
2)R = 多项式的最高次幂 = 4
3)拼接:k位信息码 + R位校验码(补0) 110 0101 0101 0000
4)模2除法得余数(异或运算):110 0101 0101 0000 / 11101 取模 0011即校验码
5)结果:110 0101 0101 0000 0011
海明校验码
海明校验,可检错,也可纠错。
原理:在有效信息中加入几个校验码形成海明码,使码距比较均匀地拉大。
并把海明码的每个二进制位分配到奇偶校验组中。
当某一位出错后,就会引起有关的几个校验位的值发生变化,
这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据
2p ≥ m + p + 1 m:二进制长度,r:校验位
例:
求信息1010的海明码
1)确定海明码位数:2p ≥ m + p + 1,
m = 4 ; 2p ≥ 4 + p + 1;p= 3
海明码位数: m + p = 7;
2)校验位 一般放在 2n (n = 0,1,2……)位置上
3)确定校验位
p1 (001) ----> m3(011) m5(101) m7(111) 二进制最后一位都是1
p2(010) ----> m3(011) m6(110) m7(111)
p3(100) ----> m1(100) m6(110) m7(111)
将m转化为值并根据奇偶校验确定值p的值:
奇校验值:011 0010
偶校验值:101 1010
3)发送,其中有一位错误(奇校验)
错误:011 0110
4)将接收端信息补全
5)奇校验得到e的值 101
101转化为十进制 = 5
则可知第5位出错了。
若最后结果为0,则表示无错
6)纠错:将第5位取反
错:011 0110
改:011 0010