校验码之海明码

最近准备参加计算机软件与理论考试,做题时遇到了海明码,着实让人头痛,接下来分享一下自己的学习心得!

海明码

      海明码又称汉明码,是1950年 贝尔实验室的Richard Hamming设计而成的,属于奇偶检验一类,其构成方法为:在数据位之前插入K个校检位,通过扩大码距来实现检错和纠错!

在开始学习之前,我们先了解一下几个概念:

1.码距:指在一个编码系统当中,任意两个合法编码至少有多少个二进制位不同。

2.异或:异或是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b),简单来说,就是两个值相同为0,不同为1.

继续我们的学习。上面说到n位校验码,那么n值如何确定呢?

假设我们的数据位为k,校检位为n,那么N和K应当满足以下关系:

                   2ⁿ-1≥n+k

n值通常取满足上式的最小值。

知道了n值的取法,我们接着说海明码的编码规则

    设有n个校检位P₁,P₂,...,Pn,有K个数据位为D0,D1,D2,...,Dn-2,Dn-1,那么对应的海明码应该为H1,H2,...,Hn+k,有:

    1.校验码在海明码中的位置:校验码Pj与海明码Hi应当满足Pj在海明码的第2^i个位置,即有Pj=Hi,则有 j=2^i,其余位置由数据位按照从高到低占据海明码中的剩余位置。例如当数据位K=8时,要使 2ⁿ-1≥n+k,则n≥4,取最小值4,按照上述规则,可以确定校验码在海明码中的位置:

H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12

P1 P2 D0 P3 D1 D2 D3 P4 D4 D5  D6  D7

   2.确定校验关系:被校验的海明位的下标等于所有参与该位的校验码的下标之和,校验码则自校。如下表:

确定位置及其校验方式之后,则到了最关键的一步,检测错误。检测方法:

S1=P1⊕D0⊕D3⊕D4⊕D6

S2=P2⊕D0⊕D2⊕D3⊕D5⊕D6

S3=P3⊕D1⊕D2⊕D3⊕D7

S4=P4⊕D4⊕D5⊕D6⊕D7

      根据以上式子,若采用偶校验,当S1S2S3S4全为0时则表示接收到的数据无误(奇校验时为1),且S1S2S3S4的十进制数表示了错误发生的位置。

以上就是我学习海明码的心得,我是个菜鸟,很多地方不足,希望大家指教!!!

猜你喜欢

转载自blog.csdn.net/lxm13542038069/article/details/89301557