NR 物理层编码6 - slide 汉明码

前言:

       汉明码国内教材很多,但大致都是一样的,这篇主要参考

Intermation 的三篇博客,非常新颖,更加深入的了解一下汉明码的思想。

阅读之前建议先找些国内的教材或者博客看下。

  Ep 051: Introduction to Hamming Code
  Ep 052  Hamming Code and the Error Syndrome
  Ep 053: Creating Hamming Code for Eight Data Bits   

SEC: single  error correction

DEC: double error detection

GPCB: global parity check bits


  1.  Introduction to Hamming Code
  2.  Hamming Code and the Error Syndrome(错误伴随式)
  3. Creating Hamming Code 

一   Introduction to Hamming Code

     最常用的是(7,4)编码格式,也经常称为SEC(Single Error Correction)单错误纠正码 

     

       

          P_0=D_0+D_1+D_3

          P_1=D_1+D_2+D_3

          P_2=D_0+D_2+D_3

          前面讲过,一种解释是其编码是通过校验位的线性组合得到的(C_3^2+C_3^3

          \left\{\begin{matrix} D_0=P_0+P_1\\ D_1=P_0+P_2 \\ D_2=P_1+P_3 \\ D_3= P_0+P_1+P_2 \end{matrix}\right. ,

         然后把所有P_i相关项相加就得到了校验方程式

早期的磁盘,VCD 里面就用到了该技术.

汉明码的核心思想是基于错误的组合来编解码:

1.1  例子

    原始bit [1011]

  \left\{\begin{matrix} p_0=1+1+1=1\\ p_1=1+0+1=0 \\ p_2=1+0+1=0 \end{matrix}\right.

D_1  bit flipped[1001]

\left\{\begin{matrix} p_0^{'}=1+0+1=0\\ p_1^{'}=0+0+1=1 \\ p_2^{'}=1+0+1=0 \end{matrix}\right.

    汉明码的特点是一个数据bit,关联至少两个奇偶校验位,

所以当1个bit  flipped时候,会导致至少两个奇偶校验位同时发生

bit flipped.  如上p_0,p_1,再反过来找到p_0,p_1里面的交集,就会得知D_1发生了

bit flipped, 下面会用图形解释到底发生了什么

1.2   图形化解释

    

          如上D_1 发生bit flipped, 会导致P_0,P_1同时发生 flipped,

 如下图,P_0,P_1校验方程式的交集\begin{Bmatrix} {D_1,D_3} \end{Bmatrix},但是D_3相关的P_2校验方程式正确,所以认为D_1

发生了错误。80年底出现了Tanner 图,也可以进一步用其解释到底发生了什么。

         外文经常称其为不同的group

     

  1.3 奇偶校验位发生错误

   如下图P_0相关的校验方程发生了错误(一个圆内数据模二和)

P_1,P_2相关的校验方程正确,所以知道时奇偶校验位发生了错误。

通过下面我们知道奇偶校验位发生了错误,0 变成了1,如果

是VCD产品中在内存读写中,会改写该奇偶校验位。

 

 2.3  2个 bit 发生flip

   如上图,p_2校验方程式同时有两个bit 发生了flip,但是最终只有P_0相关的校验方程式

发生了错误,认为奇偶校验位发生了错误,这个时候就没有办法发现,纠正错误。

2.4 global parity check bit

     

      如上图

     增加了一个   P_G,即原数据中所有1的个数和,如果是偶数则为0,奇数为1

     如上图,按照原纠错方案把P_0 把1 flip 成0,最终再通过整体的P_G去校验

  发现1的个数和为3,但是P_G=0,纠错失败,意味着发生了Double error.

    


三  Hamming Code and the Error Syndrome

     

   

  我们在内存中存储的数据主要包括两个部分,数据部分以及奇偶校验部分

当读取数据的时候,先根据数据部分计算出奇偶校验结果:p_0^{'},p_1^{'},p_2^{'} ,再用该值

跟存储的奇偶校验位进行对比。如下图,如果没有错误 s_0=0,s_1=0,s_2=0

  

  根据 s_0,s_1,s_2  发生错误error  syndrome (错误伴随式)

   3.1 奇偶校验位发生错误(check bit error)

         只会导致对应的s_i出错

  所以其对应的错误伴随式如下

 3.2 数据位出错(data bit error)

      如D_0出错,会导致p_0^{'},p_2^{'} flip,则s_0=1,s_2=1

 设计思想主要是当前bit 出错,会影响到几个校验方程,如下图依次类推. 

3.3  编码原理

      我们通过上面的表格,每一行可以看到发生了什么错误。

    我们现在按列看,把所有为1的,即所有错误的可能相加

     s_0=p_0+p_{0}^{'}=p_0+D_1+D_0+D_3

   得到  p_0^{'}=D_1+D_0+D_3, 这也是编码原理

   其它的依次类推


三   Creating Hamming Code for Eight Data Bits

   S 的本质是拿计算出来的校验位跟存储的校验位进行对比的结果:1出错,0 正确。

   每一行,代表一个错误的case,无论是data bits  还是 check  parity bits 发生 flipped,

都会导致S出错。

 error cases:

          no error  cases: 1

          parity error cases: m

          data bits error cases: n

m+n+1\leq 2^m

我们看到的都是等于号,也可以data bits 取少一点

  每一列,所有可加起来代表 哪些数据位发生bit flip 会影响到当前的奇偶校验位计算

 \left\{\begin{matrix} p_0=D_0+D_1+D_3+D_4+D_6+D_8+D_{10}\\ p_1=D_0+D_2+D_3+D_5+D_6+D_9+D_{10} \\ p_2=D_1+D_2+D_3+D_5+D_6+D_9+D_{10} \\ p_3=D_4+D_5+D_6+D_7+D_6+D_8++D_9+D_{10} \end{matrix}\right.

 最后因为汉明码只能纠正检测出一位错误,所以要加一个GPCB,保证

两位bit 发生bit flip 时候,也能发现错误。 

  

标题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值