海明校验码
奇偶检验
- 奇检验:判断序列中
1
的个数是否为偶数,是的话在序列前添加1
,否的话在序列前添加0
- 偶检验:判断序列中
1
的个数是否为奇数,是的话在序列前添加1
,否的话在序列前添加0
- 举例:
1111
的奇检验为11111
,偶检验为01111
海明检验码的检验过程
下面以序列1010
为例阐述其过程
首先通过下面的公式求得校验位的个数
2 k > = m + k + 1 2^k>=m+k+1 2k>=m+k+1
其中,m
为序列的长度,k
为校验位的个数
对于1010
,m
为4
,求得k
最小值为3
,即为放置3
个校验位
校验位的放置位置为
2
n
,
n
=
0
,
1
,
2
,
3...
2^n, n=0,1,2,3...
2n,n=0,1,2,3...
在此放置位置为1, 2, 4
,校验位+信息位共7
位,则如下表:
1 | 2 | 3 | 4 | 5 | 6 | 7 |
P1 | P2 | 1 | P3 | 0 | 1 | 0 |
为了让P1, P2, P3
与m3, m5, m6, m7
产生联系,则划分组为如下:
P1: | m3 | m5 | m7 |
P2: | m3 | m6 | m7 |
P3: | m5 | m6 | m7 |
划分依据:将1-7转成二进制编码(001,010,011,100,101,110,111),P1
的1
在第一位,m3, m5, m7
的第一位也都有1
,故将其放一组,其他组同理
上表转化为:
P1 | 1 | 0 | 0 |
P2 | 1 | 1 | 0 |
P3 | 0 | 1 | 0 |
下面就是确定P1, P2, P3
的值:
奇检验 | 偶检验 | |
100 | 0100 | 1100 |
110 | 1110 | 0110 |
010 | 0010 | 1010 |
奇检验 | 偶检验 | |
100 | 0 | 1 |
110 | 1 | 0 |
010 | 0 | 1 |
将奇检验的海明校验码与偶检验的海明校验码填入表中
1 | 2 | 3 | 4 | 5 | 6 | 7 | |
奇检验 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
偶检验 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
下面以奇检验的海明校验码为例:
假如发送方发过去的序列为0110011
标记位置:
0 | 1 | 1 | 0 | 0 | 1 | 1 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
P1 | P2 | m3 | P3 | m5 | m6 | m7 |
e1 | P1 | m3 | m5 | m7 |
e2 | P2 | m3 | m6 | m7 |
e3 | P3 | m5 | m6 | m7 |
e1 | 0 | 1 | 0 | 1 |
e2 | 1 | 1 | 1 | 1 |
e3 | 0 | 0 | 1 | 1 |
e1 | e2 | e3 |
1 | 1 | 1 |
将111
转为十进制,即为7
,对比发现,确实是第7
位出错
偶检验同理
如果无错,则e1, e2, e3
转化为十进制为0