奇偶效验、CRC循环冗余效验、海明码校验 您所在的位置:网站首页 奇偶校验生成器 奇偶效验、CRC循环冗余效验、海明码校验

奇偶效验、CRC循环冗余效验、海明码校验

2023-09-11 00:10| 来源: 网络整理| 查看: 265

奇偶校验

奇偶校验(Parity Check)是一种在数据传输过程中用来检测传输出错的校验方法之一。其基本原理是在每一个数据块的末尾添加一个校验位,使得所有数据块中“1”的个数(或“0”的个数)为奇数(或偶数)。在数据接收端,再次对接收到的数据计算奇偶值,并将计算结果与发送端传输的奇偶位进行比对,如果接收到的奇偶值与发送端传输的奇偶位不同,说明传输过程中发生了错误。

下面举个简单的例子:

假设我们要传输一个8位的二进制数字10101110, 其中1表示高电平(或逻辑真),0表示低电平(或逻辑假)。 为了增加数据传输的可靠性,我们需要通过奇偶校验来检测传输出错的情况。 这时,我们可以在该数字的末尾添加一个校验位,使得整个数据块中包含的“1”的个数为偶数或奇数。 这里我们选择奇数作为校验方式,因此添加的校验位应该是一个“1”,这样整个数据块中包含的“1”的个数就变成了5个,也就是奇数。

因此,经过奇偶校验处理后,该数字变成了101011101,其中末尾的“1”就是添加的校验位。在数据接收端,我们读取传输过来的8位数字以及末尾的奇偶校验位,然后计算这9个二进制数字中包含的“1”的个数是否为奇数,如果是,则说明传输正常,否则说明传输出错。

需要注意的是,奇偶校验并不能检测到所有的传输错误,例如如果在传输过程中多个二进制数字位同时发生了错误,则可能无法被检测出来。因此,在实际应用中,还需要结合其他校验方法(如CRC校验)来提高传输可靠性。

循环冗余校验(Cyclic Redundancy Check,CRC)

是一种常用的数据传输错误检测技术,它通过对数据位进行计算和附加校验码来判断数据是否出错。该方法通过对原始数据位串进行二进制多项式除法运算,生成固定长度的校验码,并将其附加到数据序列末尾一起传输。在接受端,再次进行相同的多项式除法运算和校验码计算,如果计算结果与附加的校验码匹配,则说明数据没有发生错误。

下面举个简单的例子,来说明CRC是如何工作的:

假设我们要传输一个8位的二进制数字10101110,其中1表示高电平(或逻辑真),0表示低电平(或逻辑假)。我们需要通过CRC来较准确的检测传输过程中的数据出错情况。这里使用简单的比特流模式实现CRC校验:

1.首先,需要选择一个多项式作为校验码生成器(Generator),通常在数据通信应用中采用的多项式如CRC16、CRC32等。例如,这里我们选择一个简单的4位二进制多项式:x³ + x + 1,转化为二进制表示为:0b10011。

2.然后,在原始数据位串的末尾添加比生成多项式所需的比特位数(这里是4个),并设置为比特位值全为0。这时,发送数据变成了:101011100000。

3.接下来,将生成多项式除以原始数据位串加上4个填充比特位所组成的二进制数。这里我们使用异或运算(XOR)实现除法,即在每一步中将除数和余数进行异或运算,直到最后得到余数。具体的计算步骤如下:

第一步,将生成多项式左移到最高位对准数据位串的最高位,此时异或的结果为:1010101101。 第二步,将异或的结果右移一位,再次与生成多项式进行异或运算,此时的结果为:111111010。 第三步,继续执行第二步操作,此时的结果为:111100110。 最后,将生成的余数附加在原数据位串的末尾,发送的数据就变成了:101011101100。 4.在接收端,采用与发送端相同的生成多项式进行校验码计算。如果接收到的数据没有发生错误,则计算得到的余数应该为0。否则,说明接收到的数据发生了错误。

需要注意的是,CRC校验虽然可以有效地检测大多数的通信错误,但并不能保证绝对的准确性。因此,在实际应用中,还需要结合其他校验方法(如奇偶校验)来提高传输可靠性

海明码

海明码(Hamming Code)是一种基于二进制纠错编码技术的错误检测和纠正方法。它能够检测单个比特中的差错,并且能够在校验位的帮助下对1位引起的错误进行纠正。海明码编码时通过对原数据进行特殊的位操作生成冗余信息(即校验位),并在传输过程中用这些信息进行错误检测和纠正。

下面我们举个例子,来说明海明码是如何工作的:

假设我们要传输一个4位二进制数字1001,其中1表示高电平(或逻辑真),0表示低电平(或逻辑假)。首先,我们需要确定奇偶校验位的数量,以及使用哪些比特位来表示这些校验位。在海明码中,奇偶校验位的数量等于原始数据位串中R的值,公式为:2^R >= K+R+1,其中K为原始数据位串中的比特数,R为校验位的数量。在本例中,K=4,因此我们选择3个校验位。然后,我们需要将这些校验位插入到原始数据位串的某些位置,具体规则如下:

1.确定每个校验位对应的位置:对于位置编号p(从1开始),如果p是2的幂次方,则该位置是一个校验位,否则是一个数据位。

2.计算每个校验位的值:对于编号为2i的位置,第i个校验位的值是由第p个位置到第p+2i-1个位置的比特位异或操作得到的。

例如,在本例中,我们选择以下4个位置:

位1:D1(数据位) 位2:P1(奇偶校验位) 位3:D2(数据位) 位4:P2(奇偶校验位) 位5:D3(数据位) 位6:D4(数据位) 位7:P3(奇偶校验位) 按照上述规则计算每个校验位的值,我们可以得到海明码为:0111001。注意,最后一个校验位的值和前两个不同,因为它覆盖了所有偶数位置的比特位。

在传输过程中如果发送过程中某一位变成了0,则接收端收到的数据可能是:0101001。这时,我们需要对接收到的数据进行校验和纠错。首先,计算每个校验位的值,并与接收到的数据进行比较。如果校验位的值与接收到的数据不相等,则说明该校验位存在差错。然后,通过差错位所代表的位置确定受影响的比特位,并将其取反。例如,在本例中我们可以通过校验位P3的值不匹配,确定第7个比特位是错误的,并将其由1改为0,得到正确的原始数据位串1001。

综上所述,海明码通过构建冗余信息实现了单错位纠错和多错位检测的功能,具有比奇偶校验更强的纠错能力。但在实际应用中,海明码的计算复杂度较高,且需要传输更多的比特位,因此并不是所有场景都适合使用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有