汉明码纠错

原文链接
详解汉明纠错码原理以及FPGA实现

汉明码编码原理以及步骤

  1. 第一步:确认编码后数据中信息位和冗余位的位置,根据上面冗余位的位置可知,冗余位为1,2,4,8等等,所以编码后的数据为:
编码后的位数 第7位第6位 第5位第4位第3位第2位第1位
原始数据位 d3 d2d1d0
冗余数据位 p2p1p0
  最终编码后的数据为 hanming = {d3,d2,d1,p2,d0,p1,p0}
  1. 第二步:将每个原始数据位的位置拆分成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. 第三步:根据上面的拆解结果进行分组
  • 由上可知,第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 d2d1d0
冗余数据位 p2p1p0
偶校验第0组d3 d1d0p0
偶校验第1组d3 d2d0p1
偶校验第2组d3 d2d1p2
  1. 第四步:根据各分组的偶校验确定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 101
冗余数据位 p2p1p0
偶校验第0组1 01p0
偶校验第1组1 11p1
偶校验第2组1 10p2
  • 在偶校验第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 d2d1p2d0p1p0
接受数据位 1 101110
冗余数据位 p2p1p0
偶校验第0组1 010
偶校验第1组1 111
偶校验第2组1 101

   在偶校验第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 d2d1p2d0p1p0
接受数据位 1 110110
冗余数据位 p2p1p0
偶校验第0组1 110
偶校验第1组1 111
偶校验第2组1 110

   在偶校验第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}和原始发送的信息一致,其它位以此类推。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值