码距和检错纠错能力的关系、CRC和Hamming Code

前言

CRC和Hamming Code都采用了冗余编码技术,而前者是一种检错编码,而后者是一种纠错编码。冗余(CRC中的FCS帧检验序列、Hamming Code中的校验位)的作用之一就是帮助扩大码距,从而更容易找出错误甚至是纠错。那么为什么加冗余位就更容易检错纠错了呢?
码距:在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。举例如下:10101和00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3。
码距越大,反映了码集中每两个码字之间的差别程度越大。那么从一个编码传输错误变成另一个编码的可能性越小。则其检错、纠错能力也就越强。
比如我们用0代表女,1代表男,(码距为1)这时候如果0在传输的过程中变成了1,那么我们没有办法判断是否发生了错误,因为1仍然是一个正确的编码。
但比如我们用00代表女,11代表男,(码距为2)那么我们就可以检测出1位发生错误的情况,比如00变成了10或者01.因为合法的编码只有00和11.
如果继续冗余,用000代表女,111代表男,(码距为3)同理。那么这时候我们可以检测出1位和两位发生错误的情况。同时,我们可以纠正一位发生错误的情况,比如如果出现了001,我们很清楚的知道它原来传输的正确编码应该是000,因为只有一位出错,所以不可能是111变过来的。
注:码距和检错纠错能力的关系(当d≦4)
(1)若码距d为奇数,则能发现d-1位错,或能纠正(d-1)/2位错
(2)若码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错

回顾CRC(Cyclic Redundancy Code)

如果要发送的数据是 1101011011,生成多项式为10011
(1)生成多项式中,最高次为4,则添4个0,11010110110000
(2)11010110110000和10011进行模2除法(异或:同0异1)
余数1110为FCS帧检验序列,替代添的0.故要发送的数据为11010110111110
(3)接收端除以生成多项式,除尽即没有发生错误

回顾Hamming Code

以数据码1010为例

(1)确定海明码的位数

n为数据位位数,k为校验位的位数
n+k+1≦2^k

因为n=4,所以易得,k等于3。设信息位D4D3D2D1(1010),校验位P3P2P1,对应的海明码为H7H6H5H4H3H2H1

(2)确定校验位的分布

规定校验位Pi在位号为2^(i-1)上
D4D3D2P3D1P2P1对应
H7H6H5H4H3H2H1

(3)分组以形成校验关系

每个数据位用多个校验位校验,但要满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。
如D4对应的是7,转换成2进制0111,则负责校验D4的校验位为P3P2P1

(4)校验位取值

校验位Pi的值为该校验位校验的所有数据位求异或。即可得到海明码,即H7H6H5H4H3H2H1。

(5)海明码的校验原理

每个校验位和参与形成该校验位的信息位异或得到S3S2S1,值若为000则没有错误,否则有错,且这个数就是错误的位号

你可能感兴趣的:(计算机基础)