校验码及其计算

本文详细解释了编码系统中的码距概念,以及它在检错和纠错中的作用。通过比较不同码距下的通信效果,展示了如何通过增加码距进行误码检测和错误修复。还介绍了循环校验码CRC和海明校验码的特点及计算方法,以实例说明如何利用这些技术进行数据校验。
摘要由CSDN通过智能技术生成

码距:

        一个编码系统的码距是整个编码系统中任意两个码字的最小距离,(可以理解为传输形式是几位码距就是几)

例:若我想要传输两个二进制数A=1,B=0;

当码距是1时的传输形式为A=1;B=0;

当码距是2时的传输形式为A=11;B=00;

当码距是3时的传输形式为A=111;B=000;

由上可见,(通讯链路相对靠谱一般只会错一位不会错多位)

        当码距为1时,则会用一位数1直接传输,即用1,0来传输若A,B,若通讯链路出现故障将1传输成0输出,此时根本无法判断最初传输的是A还是B,甚至根本无法判断传输是否出错。

检错:

        当码距为2时,则会用两位数传递,即用A=11来传输A=1,用B=00来传输B=0,若通讯链路出现故障将11传输成10输出,此时可以判断通讯链路出现故障,即可以检错,但是仍无法判断是将A=11中的11传输成了10,还是将B中的00传输成了10,此时可以判断传输出错但是无法判断哪里出错无法纠正。

纠错:

        当码距为3时,则会用三位数传递,即用A=111来传输A=1,用B=000来传输B=0,若通讯链路出现故障将111传输成110输出,此时可以判断通讯链路出现故障,即可以检错,且可以明确判断是将111传输成了110,进而可以将110纠正为111保持结果正确,即纠错。

码距与检错、纠错的关系:

检错:

        在一个码组内为了可以将a位二进制的误码检错,要求最小的码距应该是 d>=a+1

        即若需将1位二进制误码检错则需要码距为d=1+1=2

纠错:

        在一个码组内为了可以将b位二进制误码纠错要求最小码距应该是 d>=2b+1

        即若需将1位二进制误码纠错则需要码距为d=2*1+1=3

循环校验码CRC

特点:

        只能进行检错不能进行纠错的编码

模2除法:

例题:

CRC编码编译过程:

首先看多项式,将多项式对应的二进制数求得,并明确其位数,设其位数位a位;

在原始报文后面缀上(多项式对应的二进制位数-1)个0,即(a-1)个0;

然后用原始报文后缀(a-1)个0做被除数,多项式对应二进制数做除数进行模2除法;

将模2除法所得的余数自右向左取(a-1)位,取代原来的(a-1)个0后缀到原始报文,得CRC编码;

校验:

将得到的CRC编码做被除数,将多项式对应的二进制数做除数进行模2除法,若余数为0则说明传输正确,若不为0则说明传输出错。

 海明校验码

特点:

        可以检错也可以纠错,海明校验码是奇偶校验码的一种扩充。

公式:

2^{r}>=x+r+1 ,x表示所求信息的二进制位数,r表示校验码位数(r 是满足公式的最小正数)

例子:

求信息1011的海明码

二进制位数4位,即x=4,已知需满足2^{r}>=x+r+1即当 r=3 时有 8>=8,所以有3个校验位。

校验位位置:

校验位的位置是固定的,2^{0}2^{1}2^{2}2^{3}......2^{n}

如果有2位校验位那么就分别放在第 2^{0}2^{1};位上

如果有3位校验位那么就分别放在 第2^{0}2^{1}2^{2};位上

校验位数值计算:

        由上可知,信息1011有4位,则有3个校验码,校验码分别在第1,2,4位上,所以信息只能放在第3,5,6,7位上如图所示:

第7位第6位第5位第4位第3位第2位第1位位数
1011信息位
r2r1r0校验位

        首先用 2^{n} 相加表示出信息位所在的位置,然后根据校验码所在的位置,对应找到各信息位,用信息位上的二进制数进行异或运算

        信息位分别是3,5,6,7位:

        第3位的位置可以表示为:3=2^{0}+2^{1}

        第5位的位置可以表示为:5=2^{0}+2^{2}

        第6位的位置可以表示为:6=2^{1}+2^{2}

        第7位的位置可以表示为:7=2^{2}+2^{1}+2^{0}

已知3个校验码分别在第1,2,4位上,也就是第2^{0}2^{1}2^{2};位上

        r0 对应在 2^{0} 位上,则上面有 2^{0} 的是第 7,5,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r0 = 1\bigoplus1\bigoplus1=1

        r1 对应在 2^{1} 位上,则上面有 2^{1} 的是第 7,6,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r1= 1\bigoplus0\bigoplus1=0

        r2 对应在 2^{2} 位上,则上面有 2^{2} 的是第 7,6,5位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r2= 1\bigoplus0\bigoplus1=0

所以三位校验位的值是001

第7位第6位第5位第4位第3位第2位第1位位数
1011信息位
001校验位

正确的海明校验码是1010 101

若传输过程中出错,假定只有一位出错;

错误示例1

例如:

接收到为1110 101

        7位海明码根据公式 2^{r}>=x+r+1 可知有3位校验位,且位置固定,则很容易知道校验码是001

        那么剩余的就是信息位,信息位是1111

根据上述求校验码的方式重求校验码:

        r0 对应在 2^{0} 位上,则上面有 2^{0} 的是第 7,5,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r0 = 1\bigoplus1\bigoplus1=1

        r1 对应在 2^{1} 位上,则上面有 2^{1} 的是第 7,6,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r1= 1\bigoplus1\bigoplus1=1

        r2 对应在 2^{2} 位上,则上面有 2^{2} 的是第 7,6,5位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r2= 1\bigoplus1\bigoplus1=1

得此时得校验码是111

将新得到的校验码各位分别于原校验码取异或

r2r1r0位置
001原校验码
\bigoplus\bigoplus\bigoplus取异或运算
111新校验码
110结果110对应的十进制是6则表示第6位出错,将第6位取反就能得到原来正确的信息

        接收到为1110 101第6位取反1010 101即正确的海明码

错误示例2

例如:

接收到的

接收到为1010 100

        7位海明码根据公式 2^{r}>=x+r+1 可知有3位校验位,且位置固定,则很容易知道校验码是000

        那么剩余的就是信息位,信息位是1011

根据上述求校验码的方式重求校验码:

        r0 对应在 2^{0} 位上,则上面有 2^{0} 的是第 7,5,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r0 = 1\bigoplus1\bigoplus1=1

        r1 对应在 2^{1} 位上,则上面有 2^{1} 的是第 7,6,3位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r1= 1\bigoplus0\bigoplus1=0

        r2 对应在 2^{2} 位上,则上面有 2^{2} 的是第 7,6,5位,将这3位上的数值自左向右取异或运算(相同同取0不同取1)

r2= 1\bigoplus0\bigoplus1=0

        得此时得校验码是100

将新得到的校验码各位分别与原校验码取异或

r2r1r0位置
000原校验码
\bigoplus\bigoplus\bigoplus取异或运算
001新校验码
001结果001对应的十进制是1则表示第1位出错,将第1位取反就能得到原来正确的信息

        接收到为1010 100第1位取反1010 101即正确的海明码。

  • 43
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值