软件设计师之计算机组成原理与体系结构(6)校验码

9.校验码


  • 差错控制—CRC与海明校验码


    • 什么是检错和纠错


    • 什么是码距?


一个编码系统的码距是整个编码系统中任意(所有)两个码字的最小距离。
就是改变多少个位就可以变成另外一个码字


例:


若用1位长度的二进制编码,若A=1,B=0。这样A,B之间的最小码距位1。


      • 这个是发现不了错误的


若用2位长度的二进制编码,若A=11,B=00。这样A,B之间的最小码距位2。


      • 当接收到的是10时,是可以发现编码错误。因为我们在之前就规定了11为A,00为B。没有10,所以是可以发现错误的。但是不能进行纠错,因为发过来的可能是A也可能是B


若用3位长度的二进制编码,若A=111,B=000。这样A,B之间的最小码距位3。


      • 当接收到的是101时,发现编码时错误的。这个时候也可以进行纠错。因为我们认为通信链路时比较可靠的,不会出现错多位的情况,这个时候就可以和合法编码进行比较,通过比较可以将错误的编码更正为正确的编码。最终更正为111.
    • 码距与检错、纠错有何关系?


      • 在一个码组内为了检测e个误码,要求最小码距d应该满足:d>=e+1


      • 在一个码组内为了纠正t个误码,要求最小码距d应该满足:d>=2t+1


  • 校验码—循环校验码CRC


    • 它是一种可以做检错,但不能进行纠错的一种编码


什么时模2除法,它和普通的出发有何区别?


模2除法是指在做除法运算的过程中不计其进位的除法。


例如,1011对110进行模2除法为:


软件设计师之计算机组成原理与体系结构(6)校验码


普通除法是:101不够,所以要1011,然后相减,再把最后的1拿下来,再减


模2除法:直接取前三位,不是相减,而是按位做异或操作(同为0,异为1)。


  • 例题:


软件设计师之计算机组成原理与体系结构(6)校验码


    • x的多少次方对应的二进制位是0还是1。


    • 之后要在原始报文的基础上加若干个0,加多少位=生成多项式的位数减1个0。


    • 进行模2除法,得到的余数代替掉之前加的0


    • 最后原始报文信息补上余数部分就是完整的信息。


    • 用完整的信息与多项式转化的二进制进行模2除法。最后得到的结果为0就是正确的


  • 校验码—海明校验码


这里的校验位公式可以定为:


其中x代表有多少位,也就是信息位,而r为校验位。


软件设计师之计算机组成原理与体系结构(6)校验码


  • 求海明编码:


    • 首先确定信息位以1011为例。从而知道x的长度是4位


    • 通过校验位公式可以得到校验位为3。


    • 现在开始进行分配校验位:一般校验位都会放在2 ^ n的位置上(1,2,4…)


    • 通过上述步骤可以看到校验位加上信息位一共是7位,画张表解决


7 6 5 4 3 2 1 位置
1 0 1 1 信息位
r2 r1 r0 校验位


  • 确定每个位置的校验位:校验i位就等于校验位所在位置的加和。例如校验第3位,那么3就是1 + 2,这样就是需要第一个校验位和第二个校验位来进行校验。以此类推。得到下表:


位置 占用的校验位号 备注
1 1 1 = 1
2 2 2 = 2
3 1,2 3 = 1+ 2
4 4 4 = 4
5 1,4 5 = 1 + 4
6 2,4 6 = 2 + 4
7 1,2,4 7 = 1 + 2 + 4


  • 数据汇总


r0 1,3,5,7
r1 2, 3, 6, 7
r2 4, 5, 6, 7


  • 计算校验位的值(通过异或运算)


r0 = 3 5 7的异或
r1 = 3 6 7的异或
r2 = 5 6 7的异或


  • 根据公式得到值分别为 1 0 0。将得到的值填入下面的表格


7 6 5 4 3 2 1 位置
1 0 1 1 信息位
0 0 1 校验位


    • 至此就可以得到最后的海明码:1010101


  • 除了检错还可以纠错。如果收到的信息是101101,通过它获得一个海明码,如果得到的校验码是001。需要和我们开始得到的正确的校验码(这个不是说我之前写过的码,这里只是举个例子与之前得到的海明码无关)按位进行异或运算,也就是001与000进行异或运算。得到的结果位001就是第一位出现了问题,如果得到010就是第二位出现了问题,如果得到110就是第六位出现了问题。



上一篇:重学计算机组成原理(五)- "旋转跳跃"的指令实现


下一篇:解析智能家居通讯网络架构系统