循环冗余编码(CRC编码)与海明码
一.环冗余编码
1.循环冗余编码的形成
生成多项式:G=1011
表示成生成多项式为G(x)=
X
3
+
X
+
1
X^3+X+1
X3+X+1
示例:
假设信息字节为:F=1001010
选取生成多项式(默认)G=1011
-
将F左移l-1位,题设l为4位(l为生成多项式位数)
形成:F‘=1001010 000 -
进行运算,用数据F除生成多项式得到余数 111
-
用数据码F减去余数 1001010 000 -111(采用模2的减法)= 1001010 111
得到发送端需要的编码字M:1001010 111(其实等效于直接将余数拼接到数值位尾部)
2.循环冗余编码的校验与纠错
纠错方式,用接受到的数据去除生成多项式,如果余数仍为000,则没有错误,否则产生错误
校验错误位数的个数:
2
n
−
1
2^n-1
2n−1
n为余数的位数,
其中全000表示没有错,其他001~111表示第i-1位出错
i为XXX表示的真值,出错位置从最低位0位起始
适用范围:突发性错误,磁盘存储器,光盘存储器,网络通信等
二.海明码
1.编码设计
2.编码规则
在2的整数次幂(从0次幂开始)的位置放入奇偶校验码(位置从1起始)
将数据位按顺序依次填入除上面要填校验码位置外的位置
将每一个数据位的位置拆成2的整数次幂之和的形式,例如
11=1+2+8 ,则需要被2的0 1 3 次幂的奇偶校验码检验
示例:
奇偶校验码检验范围可以归结为:第i位的检验码从第i位开始,检验i位隔i位
3.纠错方法
假设在上述例子中第6位引入一个错误(位置从1开始)
用各位的奇偶校验码进行检验,检验正确的奇偶校验码得0,失败的得1,得到校验结果为:0110 校验结果的真值就是出错的位置,即第6位。