海明码和奇偶校验码

海明码

能够纠正一位比特的错误。一个长度为m的数据中增

加k位冗余位,构成一个 n=m+k 位的码字,然后用 k 个监督关系式产生的 k 个校正因子来检测和纠正错误。为了能够纠正一个比特的错误,数据长度和冗余位的数目必需满足公式\ref{eq:hamming1},海明码的编码效率效为: R=m/(m+k) 。

2k≥m+k+1 (1)

公式(1)中, m 是数据的长度, k 是海明码校验位的个数。

海明码利用监督公式对数据进行交叉校验,利用监督公式的特性可以直接定位出错数据的位置。因为二进制数据中数据的取值只有两种状态0和1,因此只要知道出错的位置,修改就变得非常的容易,只要对出错位置的数据取反就可以达到纠正的目的。例如接收端收了一串二进制数据101011,经过海明码计算后得到的数字是3,说明数据中的第3位的数据出现了错误,纠正时只需要把第三位的1取反变成0即可,纠正后的二进制串是100011。

公式(1)中海明码虽然可以实现数据的纠错,但是只能实现一个比特数据的纠错。如果数据中有多个比特同时出现错误,就必须使用更加复杂的海明公式。海明码的纠错能力和最小码距有关。

码距是编码系统中两个编码之间不同的二进制的位数,例如数据1010和数据1111的码距就是2,因为它们的第2和第3位数据不同,数据不同的位数是2,因此码距是2。最小码距(用 D 表示)是编码系统中码距的最小值。码距和纠错的能力如下:

  1. 如果要检测 e 个错误,最小码距应该满足: D>=e+1
  2. 如果要纠正 t 个错误,最小码距应满足: D>=2t+1
  3. 如果要检测 e 个错误同时纠正 t 个错误,最小码距应该满足: D>=e+t+1 , (e>=t)

本节主要讨论检测一位错误且纠正一位错误的情况,因此最小码距码距$D>=3$,需添加的冗余位的数目需满足公式(1)

校验位计算示例

已知原始数据为1001011,采用Hamming Code编码后,求实际发送的数据?

求解过程如下:

  1. 计算需要的校验位数目。从题目中可知数据为的长度为7,即 m=7 ,带入公式 m+k+1≤2k
  2. 后得到 k>=4 ,为了减少冗余$k$取最小值4。最后实际发送的数据长度为 7+4=11 位。
  3. 重新排列数据。定义4个校验位分别是 a1,a2,a3,a4 。根据海明码原则组合排列7为数据和4位校验码。校验码的位置分别是 1=20,2=21,4=22,8=23 。排列后的顺序如表1.4所示。

4. 计算每个校验位的值。根据图1.12所示,位置1( 20 ),2( 21 ),4( 22 ),8( 23 )存放校验数据。在图1.12中的最后一列,列名称是1,数字3,5,7,9,11的二进制数在该列的数据为1,因此位置1对这些位置进行监督,同理,列名为2,4,8的位置对二进制数在该列为1的位置进行校验。公式1.7是海明码计算的具体公式,公式中的 X3 为表1.4中序号/下标为3的数据, X5 为表1.4中序号/下标为5的数据,其它以此类推。符号 ⊕ 表示异或运算。把表1.4中的数据带入公式(1.7)中可以得到:

a1=X3⊕X5⊕X7⊕X9⊕X11=1⊕0⊕1⊕0⊕1=1a2=X3⊕X6⊕X7⊕X10⊕X11=1⊕0⊕1⊕1⊕1=0a3=X5⊕X6⊕X7=0⊕0⊕1=1a4=X9⊕X10⊕X11=0⊕1⊕1=0 (1.7)

5. 带入校验数据得到发送数据。把 a1,a2,a3,a4 分别带入表1.4中,得到一个新的数据序列 10110010011,这个新序列就是发送端发送出去的数据,也是线路上传输的数据。如果数据没有发生冲突,这也将是接收方收到的数据。

海明码纠错

如果接收端收到的数据10110110011,接收方需要先计算校验位 a1,a2,a3,a4 的值,计算的值再和数据中的校验位进行异或比较,公式(1.8)为接收端的计算公式:

h1=X3⊕X5⊕X7⊕X9⊕X11⊕a1h2=X6⊕X7⊕X10⊕X11⊕a2h3=X5⊕X6⊕X7⊕a3h4=X9⊕X10⊕X11⊕a4 (1.8)

公式(1.8)中的监督公式都分为两个部分,前面的使用 Xi 表示的部分是和发送端一模一样的计算公式,后面的 ai 是发送端计算不需要的,是数据中的校验位。这个计算的本意是接收端重新计算一次校验码,然后和数据中校验码进行比较。如果自己计算的校验码和数据中的校验码相同,记为0,不同则记为1。

因为在新的数据串中a1和$X_1$是同一个数据位,a2和 X2 是同一个数据位,a3和 X4 是同一个数据位,a4和 X8 是同一个数据位.因此公式(1.8)也可以表示为(1.9).

h1=X3⊕X5⊕X7⊕X9⊕X11⊕X1h2=X3⊕X6⊕X7⊕X10⊕X11⊕X2h3=X5⊕X6⊕X7⊕X4h4=X9⊕X10⊕X11⊕X8 (1.9)

计算结果按照 h4h3h2h1 的顺序进行排列,如果结果等于0说明数据没有出错;如果结果不等于0,说明数据出错。把该数据转 化为10进制数,就是出错数据的位置。因为二进制数中每一位置只有2种状态,0或者1。因此知道错误的位置后,改正错误就非常简单,把对应的数据取反即可。

把接收到的数据 10110110011 代入公式(1.8)中得到:

h1=1⊕0⊕1⊕0⊕1⊕1=0h2=1⊕0⊕1⊕1⊕1⊕0=1h3=0⊕1⊕1⊕1=1h4=0⊕1⊕1⊕0=0

新的数据 h4h3h2h1=0110 ,转换为十进制数值为6,因此说明接收到的数据中第6位出错,将第六位数据取反就可以得到正确的原始数据,原始数据为 10110010011 。

在这个例子中,数据的第6位出错,接收方在收到数据后按照规则对数据进行重新计算时,发现第2位和第4位存放的校验结果不正确,将这两个校验位的序号相加 2+4=6 ,正好就是发生错位的位置。

奇偶校验码

是 [1]  一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。

1. 奇偶校验码
奇偶校验码是一种最为简单的校验码,它用来检测数据传输过程中是否发生错误。

它有两种校验方法:奇校验和偶校验

奇校验:原始码流+校验位 总共有奇数个1

偶校验:原始码流+校验位 总共有偶数个1

它的校验位只有一位,要么是0,要么是1,并且它的校验码还可以放在码流的前面。

2.举例:

原始数据:0010 1100

奇校验:0010 11000  //校验位为0,3个1  奇数个1

偶校验:0010 11001  //校验位为1,4个1 偶数个1

3.错误检测能力

只能检测出奇数个错误。

奇校验 正确码流 11000001

错1位 11000011 变成了偶数个1,能检测出错误

错2位 11000010 变成了奇数个1,检测不出错误

错3位 11001010 变成了偶数个1,能检测出错误

偶校验 正确码流 01000001

错1位 01000011 变成了奇数个1,能检测出错误

错2位 01000010 变成了偶数个1,检测不出错误

错3位 01001010 变成了奇数个1,能检测出错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值