原文链接
详解汉明纠错码原理以及FPGA实现
汉明码编码原理以及步骤
- 第一步:确认编码后数据中信息位和冗余位的位置,根据上面冗余位的位置可知,冗余位为1,2,4,8等等,所以编码后的数据为:
| 编码后的位数 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
| 原始数据位 | d3 | d2 | d1 | d0 | |||
| 冗余数据位 | p2 | p1 | p0 |
- 第二步:将每个原始数据位的位置拆分成n个冗余位数据位的位置之和
- 由上面表格可知:原始数据位的位置为7,6,5,3;冗余数据位的位置为4,2,1。
- 数据位7 = 4 + 2 + 1,表示编码后的数据第7位由第4位p2,第2位p1和第1位p0冗余数据来校验;
- 数据位6 = 4 + 2,表示编码后的数据第6位由第4位p2和第2位p1冗余数据来校验;
- 数据位5 = 4 + 1,表示编码后的数据第5位由第4位p2和第1位p0冗余数据来校验;
- 数据位3 = 2 + 1,表示编码后的数据第3位由第2位p1和第1位p0冗余数据来校验;
- 第三步:根据上面的拆解结果进行分组
- 由上可知,第1位冗余位p0需要校验数据第7位,数据第5位,数据第3位;因此把(p0,d3,d1,d0)分成偶校验第一组;
- 第2位冗余位p1需要校验数据第7位,数据第6位,数据第3位,因此把(p1,d3,d2,d0)分成偶校验第二组;
- 第3位冗余位p2需要校验数据第7位,数据第6位,数据第5位,因此把(p2,d3,d2,d1)分成偶校验第三组;
分组后的结果如下所示:
| 编码后的位数 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
| 原始数据位 | d3 | d2 | d1 | d0 | |||
| 冗余数据位 | p2 | p1 | p0 | ||||
| 偶校验第0组 | d3 | d1 | d0 | p0 | |||
| 偶校验第1组 | d3 | d2 | d0 | p1 | |||
| 偶校验第2组 | d3 | d2 | d1 | p2 |
- 第四步:根据各分组的偶校验确定p0,p1,p2的值
- 在偶校验第0组中,如果(d3,d1,d0)中1的个数为偶数个,则p0=0,否则p0=1;
- 在偶校验第1组中,如果(d3,d2,d0)中1的个数为偶数个,则p1=0,否则p1=1;
- 在偶校验第2组中,如果(d3,d2,d1)中1的个数为偶数个,则p2=0,否则p2=1;
举个例子:如果待发送的信息数据为{d3,d2,d1,d0}={1,1,0,1},填入表格中则为:
| 编码后的位数 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
| 原始数据位 | 1 | 1 | 0 | 1 | |||
| 冗余数据位 | p2 | p1 | p0 | ||||
| 偶校验第0组 | 1 | 0 | 1 | p0 | |||
| 偶校验第1组 | 1 | 1 | 1 | p1 | |||
| 偶校验第2组 | 1 | 1 | 0 | p2 |
- 在偶校验第0组中,(d3,d1,d0)中1的个数为偶数个,所以p0=0;
- 在偶校验第1组中,(d3,d2,d0)中1的个数为奇数个,所以p1=1;
- 在偶校验第2组中,(d3,d2,d1)中1的个数为偶数个,所以p2=0;
- 最终编码后的数据为{1,1,0,0,1,1,0}
汉明码纠错原理以及步骤
由于偶校验分组中都可以发现这一组中奇数个错误,所以在汉明分组中的交集出就能指出错误的位置,如下图所示:

例如上面的例子中,原始信息为{d3,d2,d1,d0}={1,1,0,1},经过汉明编码后变成为{1,1,0,0,1,1,0};如果传输过程中某一位发生了错误,如第4位被打反数据变成{1,1,0,1,1,1,0},接收方将收到数据后继续分组:
| 接受数据的位数 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
| 接受数据位 | d3 | d2 | d1 | p2 | d0 | p1 | p0 |
| 接受数据位 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
| 冗余数据位 | p2 | p1 | p0 | ||||
| 偶校验第0组 | 1 | 0 | 1 | 0 | |||
| 偶校验第1组 | 1 | 1 | 1 | 1 | |||
| 偶校验第2组 | 1 | 1 | 0 | 1 |
在偶校验第0组中,(d3,d1,d0)中1的个数为偶数个,接受到的p0=0,正确;
在偶校验第1组中,(d3,d2,d0)中1的个数为奇数个,接受到的p1=1,正确;
在偶校验第2组中,(d3,d2,d1)中1的个数为偶数个,接受到的p2=1,错误;

如上所示,三个分组中只有偶校验第2组发生了错误,其它两组都是正确的,因此三个分组没有交集,错误的只有冗余位p2,原始数据位没有发生错误,因此恢复出来的原始数据就是{1,1,0,1},和发送的原始数据与一致。
再用相同的例子:原始信息为{d3,d2,d1,d0}={1,1,0,1},经过汉明编码后变成为{1,1,0,0,1,1,0};如果传输过程中第5位发生了错误,接收到的信号为{1,1,1,0,1,1,0},接收方依然对其分组检验如下所示:
| 接受数据的位数 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
| 接受数据位 | d3 | d2 | d1 | p2 | d0 | p1 | p0 |
| 接受数据位 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
| 冗余数据位 | p2 | p1 | p0 | ||||
| 偶校验第0组 | 1 | 1 | 1 | 0 | |||
| 偶校验第1组 | 1 | 1 | 1 | 1 | |||
| 偶校验第2组 | 1 | 1 | 1 | 0 |
在偶校验第0组中,(d3,d1,d0)中1的个数为奇数个,接受到的p0=0,错误;
在偶校验第1组中,(d3,d2,d0)中1的个数为奇数个,接受到的p1=1,正确;
在偶校验第2组中,(d3,d2,d1)中1的个数为奇数个,接受到的p2=0,错误;

如上分析所示,错误的是第0组和第2组,第一组正确;所以错误的位置为第0组和第2组的交集处 d1,然后接收方对其位置信号打反处理恢复为正确的信号{1,1,0,1}和原始发送的信息一致,其它位以此类推。
668

被折叠的 条评论
为什么被折叠?



