循环冗余校验( CRC)和海明码的编码和校验方法

学习记录,有版权问题可私聊

循环冗余校验( CRC)

原理: 利用CRC码检错的过程,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

运算:这里的除是指“模2除法”

过程:到达接收端后,把接收到的新帧除以选定的除数

因为在发送端发送数据帧之前加了一个数,做了“去余”处理,所以结果应该没有余数;如果有余数,代表出现错误

模2除法:在求余数时用模2减
例子:

CRC码的编码步骤
1.先求这个式子的r的最大值
在这里插入图片描述
2.然后找到G(X) [这个好像是直接查就行了]

多项式除数转换:

3.然后在有效信息后面补r个0
4.案例如图
在这里插入图片描述
这个时候把之前的3个0替换成010就好了
这时候,1100010就是crc编码

注意:余数的位数只能比除数得位数少一位,否则前面补零;FSC规定最高位最低位必须为1

计算题:

1.(搜狗百科例题) 被校验的数据M(x)=1000,选择生成多项式为G(x)=x3+x+1,问,循环冗余校验码时多少?
答:G(x)=x3+x+1对应二进制数为1011;四位
得余数:1000000 B 除 1011B–>余数得101B,即校验码为101B;
(B代表二进制)
所以循环冗余校验码为:1000101B
(验证:1000101B 除 1011B–> 余数 = 0)

  1. 假设CRC生成多项式为G(X)=X4+X3+1,求二进制序列10110011得CRC校验码?
    答:G(X)=X4+X3+1对应二进制数为11001
    101100110000B 除 11001B 得余数 0100B
    所以:101100110100B
  2. (牛客网)要发送的数据为11001001,采用CRC的生成多项式是P(X)=X3+X+1,则应添加在数据后面的余数为?
    答:1011;11001001000B除1011B余数得001B

海明码的编码和校验方法

海明码简介
海明码是由Richard Hanming于1950年提出的,能发现两位错误,纠正一位错误

海明码的码组长度需要符合:**2^r – 1 (**r代表校验位个数)

为什么是这个公式呢?因为:只有这样才能保证校验位足够覆盖整个需要校验的码组。需要符合**:2^r – 1** (r代表校验位个数)

海明码的计算
设欲检测的二进制代码为n位,为使其具有纠错能力,需要添加k位检测位,组成n+k位的代码。为了能准确对错误定位以及指出代码没错,新添加的检测位数k应满足:2k ≥ n+k+1
由此关系可求得不同代码长度n所需要检测位的位数k。

海明码的编码规则如下:
设k个校验位为Pk,Pk-1,·····,P1, n个数据位为 Dn-1,Dn-2,·····,D1,D0,对应的海明码为Hn+k,Hn+k-1,······,H1,那么
(1)Pi在海明码的第2i-1位置,比如P1,21-1=1,所以在H1的位置。
(2)海明码中的任何一位都是由若干个校验位来校验的。其对应关系如下:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和,而校验位由自身校验。比如H12,下标为12,等于8+4,所以是海明码的第8、第4位校验位来检测的。

举例
对于8位的数据位,进行海明校验需要4个校验位(2k ≥ n+k+1,24 ≥ 8+4+1)。令数据位为D7,D6,D5,D4,D3,D2,D1,D0,校验位为P4,P3,P2,P1,形成的海明码为H12,H11,····,H1,则编码过程如下:
(1)确定D与P在海明码中的位置

(2)计算校验位
这里主要讲一种简易的计算校验位的方法:
第一个校验位P1是位于H1的位置,它检验的位置是H1,H3,H5,H7,H9,H11,也就是读一位,隔一位,···
第二个校验位P2是位于H2的位置,它检验的位置是H2,H3,H6,H7,H10,H11,也就是读两位,隔两位,···
第三个校验位P3是位于H4的位置,它检验的位置是H4,H5,H6,H7,H12,也就是读四位,隔四位,···
第四个校验位P4是位于H8的位置,它检验的位置是H8,H9,H10,H11,H12,也就是读八位,隔八位,···
以此类推,就可以轻易得知,第n位校验位校验的海明位是,从自身开始,读2n-1位,隔2n-1位,·····,直到读到尽头。

知道校验位后 ,对校验位对应的数据进行异或运算(默认是偶校验),即
P1=D0⊕D1⊕D3⊕D4⊕D6
P2=D0⊕D2⊕D3⊕D5⊕D6
P3=D1⊕D2⊕D3⊕D7
P4=D4⊕D5⊕D6⊕D7

若采用奇校验,则将各校验位的偶校验值取反即可。

(3)检验错误。对使用海明码的数据进行校验差错检测很简单,根据上面的方法,我们可以很轻易得知每个校验位负责检测的海明位,只要对其进行异或运算即可。
G4=P4⊕D4⊕D5⊕D6⊕D7
G3=P3=D1⊕D2⊕D3⊕D7
G2=D2⊕D2⊕D3⊕D5⊕D6
G1=D1⊕D1⊕D3⊕D4⊕D6

若采用偶校验,则G4G3G2G1全为0是表示数据没有错误,奇校验应全为1,否则即出现了错误。当发生错误时,将G4G3G2G1的值转化为十进制即可知道发生错误的位置,如G4G3G2G1=0110,即表示H6这个位置的数据发生了错误,只要将其取反即可纠正。

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CRC12计算器是一种用于计算循环冗余校验码(CRC)的工具。CRC是一种数据校验方法,通过计算数据的校验位,可以检测数据传输过程中是否出现错误。 CRC12计算器可以接收任意长度的输入数据,并自动计算其CRC12校验码。它通常用于数据通信领域中,能够帮助检测数据传输中的位错误,确保数据的准确性和完整性。 使用CRC12计算器非常简单。首先,将待计算的数据输入到计算器中。这可以通过手动输入数据,或者通过复制粘贴的方式导入数据。接下来,点击“计算”按钮,计算器将自动进行CRC12计算,生成相应的校验码。 计算完成后,CRC12计算器会显示计算结果。可以将这个结果与接收方预期的校验码进行比较。如果二者一致,表示数据传输过程中没有错误;如果二者不一致,则说明数据传输中出现了错误,需要采取相应的纠错措施。 除了计算CRC12校验码,一些CRC12计算器还提供了其他功能。例如,它们可以将计算结果以不同的编码形式输出,如二进制、十六进制等。此外,一些高级CRC12计算器还支持逆向计算功能,可以根据已知的数据和校验码计算出丢失的数据片段。 总之,CRC12计算器是一种实用的工具,可以帮助我们在数据传输过程中检测错误,从而保证数据的可靠性。无论是在通信领域还是其他领域中,使用CRC12计算器可以提高数据传输的质量和可靠性。 ### 回答2: CRC(Cyclic Redundancy Check)是一种错误检测技术,用于检测数据传输过程中可能出现的错误。CRC12是CRC技术中的一种算法,用于校验12位数据。CRC校验器是一种用于执行CRC校验的计算器。 CRC12计算器用于对12位的数据进行CRC校验。它通过对输入的数据进行一系列运算,生成一个12位的校验码,该校验码可以用来验证数据是否在传输过程中发生了错误。 CRC12计算器的工作原理如下:首先,它会将输入的数据按照指定的算法进行处理,生成一个与输入数据长度相同的除数。然后,它将输入数据与除数进行逐位的异或(XOR)运算,得到一个新的结果。接着,它将新的结果再次与除数进行异或运算,继续得到一个新的结果。这个过程会一直持续下去,直到所有的数据位都被处理完。最后,CRC12计算器将输出最终的结果,即12位的校验码。 CRC12计算器在数据传输过程中起到了重要的作用。使用CRC12校验码可以帮助识别数据传输中发生的错误,提高数据传输的可靠性。它广泛应用于网络通信、储存设备等领域。 总之,CRC12计算器是一种用于执行CRC校验的工具。它通过一系列运算来生成一个12位的校验码,用于检测数据在传输过程中的错误。它的应用可以提高数据传输的可靠性,保证数据的完整性。 ### 回答3: CRC12是一种循环冗余校验码算法,用于检测数据传输中的错误。它利用多项式除法将数据与预先设定的固定多项式进行计算,并生成一个12位的校验值。CRC12计算器是一种用于执行CRC12算法的计算器设备,可以快速、准确地计算数据的CRC12校验值。使用CRC12计算器的步骤如下: 1. 输入待校验的数据:首先,在计算器上输入需要进行校验的数据。这个数据可以是一段文字、一个文件、一串数字等等。 2. 设置CRC12参数:根据所需的计算规则,设置CRC12算法的参数。这些参数可能包括多项式的定义、初值的设定等等。 3. 进行CRC12计算:按下计算按钮,CRC12计算器会自动执行CRC12算法,将输入数据与多项式进行异或运算,并根据设定的规则生成一个12位的校验值。 4. 结果显示:CRC12计算器会将计算得到的校验值在屏幕上显示出来。用户可以查看这个校验值,用于判断数据的完整性和正确性。 CRC12计算器可以广泛应用于数据通信、网络传输、存储介质等领域。它可以有效地检测数据在传输过程中发生的错误,提高数据传输的可靠性和准确性。同时,CRC12计算器的操作简便,计算速度较快,使得用户可以快速得到有效的校验结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值