错误检测(3)校验和_数据

 

 

this type of error where you have multiple bit errors in a row is called burst error

 

除了为每一行添加一个奇偶校验位,还可以为每一列添加

错误检测(3)校验和_十进制_02

 

 

 

parity bits per row

parity bits per column

 

in most communication systems burst errors are actually pretty common

and something like a parity bit per column here might be a better choice

 

但是这样的话,如果一个列中有多个flips错误 你也是抓不到的

 

 

 

下面我来看另外一种错误检测方法- checksum

错误检测(3)校验和_数据_03

 

 

 

这些ascii码加在一起是1161(10进制)

 

 

看一下对应的二进制的

错误检测(3)校验和_git_04

 

第一列是 5个1 相加

 

(结果应该是101)

 错误检测(3)校验和_网络_05

 

但是对这一位来说相当于是对1的一个奇偶校验

5个1,所以是奇数个1,parity的列校验也是1

 

错误检测(3)校验和_ide_06

 

 

 

继续相加,

错误检测(3)校验和_git_07

 

 

 

加到第三位的时候,这个位就不是奇偶校验位了,而是进位得到的值

 

想表达的是什么。。

 

如果是单纯的奇偶校验,一列中两个1变成了两个0,那么这一列是不会被校验出错误的, 但是如果是加和,就能校验出来了,因为到后面会有进位的问题

 

 

 

这就是校验和相比列奇偶校验的一个优势

 

 

接着看,这一坨相加完后大于8位了,一般我们就留8位,

错误检测(3)校验和_网络_08

 

 

要把多余的chop off掉。

 

 

that as essentially being equivalent to sending the remainder of a division problem here

错误检测(3)校验和_数据_09

 

 

 

 

用1161/256

 

 

余的137 就是右边的8位

 

 

chop off掉的位数也会引起不准确的问题,因为进位的一些信息丢失掉了,

所以通常的做法是把chop off掉的位数再加回去,得到结果

错误检测(3)校验和_十进制_10

 

 

 

 

this technique of doing this end around carry like this when you are doing addition is referred to as one’s complement addition

 

 

 

 

接下来我们不除以256,我们除以255

错误检测(3)校验和_数据_11

 

 

 

我们会得到 141, 比137 多4,

 

这正是我们 one’s complement addition 得到的结果

错误检测(3)校验和_网络_12

 

 

 

 

(用8位加上100 (十进制的4))

 

 

最后的10001101就是checksum的结果,

我们一般传的是取反的结果

错误检测(3)校验和_git_13

 

 

 

(这个值是十进制的114 也就是上面除式中的255-141)

 

 

 

我们继续刚才的加法,将这个取反的checksum结果带到信息中,

 

然后相加计算:

错误检测(3)校验和_git_14

 

 

 

 

左边多余的100 放到下面相加,

 

得到1111 1111

然后都取反 ,会 得到 0000 0000

 

 

到此我们的checksum就结束了,

 

 

 

 

 

limitation of this type of checksum:

1.

错误检测(3)校验和_git_15

 

 

 

2.

传输过程中被插入了很多0000 0000  也是检测不出来的

 

3.

传输的信息中有 0000 0000,但是0000 0000没有按照正确顺序传输

 

在我们的实验中,我们用导线连接并传输信息,所以并不会出现乱序的问题,

但是在实际的网络中

 

错误检测(3)校验和_网络_16

 

 

 

 

 

在A和B点之间,有些数据会通过一条路传播,另一些数据通过另一条路传播

 

checksum不能检测序列的问题

 

下面介绍一个 用checksum来检测乱序的实例——ISBN,

 

错误检测(3)校验和_网络_17

 

在书籍的ISBN-10编码中, 最后一个是6

 

错误检测(3)校验和_网络_18

 

 

 

错误检测(3)校验和_ide_19

 

 

 

 

 

 

写出

 

  0 – 4 6 5 – 0 4 6 7 4

 

10    9  8 7   6 5 4 3 2

 

相乘相加得到192,

 

错误检测(3)校验和_ide_20

 

 

 

然后用192/11 …. 余5

 

 

之所以用11 是因为 11 不是 0~10之间(上面所有数)的任何的公因数

 

所以他们计算之后除以11,一定是有一个余数的,

 

如果上面任何一个数字变化了,那么余数一定也变化

 

所以我们可以根据余数是否变化来判断这组数是否有变化了

 

接下来,

 

用 11 - 5 = 6

即最后一个数是6,也就是check digit 是6 ,其实也就是书上的最后一位6

错误检测(3)校验和_数据_21

 

 

 

 

所以这种计算方法,也可以加上6来计算,

错误检测(3)校验和_十进制_22

 

 

 

这样得到198,

然后用198除以11 余0

错误检测(3)校验和_git_23

 

 

 

 

有时候你会看到书的结尾是x ,也就是说里面的数字是0~9 而不是0~10

 

 

 

 

 

 

And we talked about out of order errors and burst errors as potential problems,

 

 

Hamming Distance

 

错误检测(3)校验和_ide_24

 

 

 

hamming distance between this two is 2

 

 

The hamming distance between validate code words is two bits

that means that you have to change at least two bits in your message

in order to fool the parity detection scheme

 

错误检测(3)校验和_网络_25

 

 

 

在这个情况下 checksum 和 parity 都不太行

 

in this dimension or this in this measurement of hamming distance, both of them are susceptible

 

 

 

well, there are error detection schemes that have a higher hamming distance

 

错误检测(3)校验和_ide_26

 

 

hamming distance for parity it seems in all of these cases is gonna be two

 

checkout what happened when we combine all of this:

 

错误检测(3)校验和_ide_27

(对行和列都增加了 parity 校验)

 

错误检测(3)校验和_十进制_28

 

 

 

假设有一个错误了, one bit error easy to detect just like any other parity scenario

 

行和列都能检测出来

 

 

如果有两个错误了:

错误检测(3)校验和_数据_29

 

 

 

行能检测出来

 

错误检测(3)校验和_git_30

 

 

 

列能检测出来

 

 

如果是三个呢

错误检测(3)校验和_网络_31

 

 

 

列能检测出来

 

错误检测(3)校验和_ide_32

 

 

 

这样也能检测出来

 

如果是4个呢?

错误检测(3)校验和_十进制_33

 

 

 

四个的话就检测不出来了

 

the minimum is four bits and so we would say that this scheme has a hamming distance of

 

 

 

drawback(缺点):我们添加了一些额外的比特位

 

 

checksum虽然很好,但是实现起来可能稍稍有一点复杂, 需要一些软件上的算法,

后面我们会介绍CRC校验,通过纯硬件的方式实现的一种非常robust的校验

and that’s another consideration is how easy it is to implement some of these different algorithms. we’ve been talking about purely in hardware , and so that’s why I’m going to talk about one more algorithm in the next video that turns out to be a really powerful algorithm and that’s the CRC the cyclical redundancy check

and it turns out you’re able to device CRC checks that are able to detect random bit errors in fact have a very hide Hamming distance and they’re also able to detect out of order data and very good at detecting burst errors.

In fact, not much more than we have here and we’ll be able to do an incredibly robust error detection completely in hardware