汉明码(Hamming Code)学习笔记
<p data-pid="e5qkPQB8"><b>汉明码是一种带有校验与纠错的编码格式</b><sup data-text="【官方双语】汉明码Pa■t1,如何克服噪■" data-url="https://www.bilibili.com/video/BV1WK411N7kz" data-draft-node="inline" data-draft-type="reference" data-numero="1">[1]</sup></p><h2>作用范围</h2><p data-pid="_sDE90fQ">错误数小于等于1时有效。</p><h2><b>有效数据与校验数据数量关系</b></h2><p data-pid="tKQrESGL">k个校验码可以校验<img eeimg="1" src="https://www.zhihu.com/equation?tex=2%5Ek-1" alt="2^k-1"/> 个数据,其中还包括校验码自身</p><p data-pid="3Ee8MX9L">即有效数据 <img eeimg="1" src="https://www.zhihu.com/equation?tex=n%5Cleq+2%5Ek-k-1" alt="n\leq 2^k-k-1"/> </p><h2><b>实现思想</b></h2><p data-pid="XESIzEut">利用k个校验码,对包含校验码在内的 <img eeimg="1" src="https://www.zhihu.com/equation?tex=2%5Ek-1" alt="2^k-1"/> 个数据进行校验并定位错误。</p><p data-pid="-JWua85B"><img eeimg="1" src="https://www.zhihu.com/equation?tex=2%5Ek-1" alt="2^k-1"/>个数据,在错误数小于等于1时一共有 <img eeimg="1" src="https://www.zhihu.com/equation?tex=2%5Ek" alt="2^k"/> 种情况,恰好可以被k个校验码定位。</p><p data-pid="9uWYdAQ9">校验码分布在第 <img eeimg="1" src="https://www.zhihu.com/equation?tex=2%5Ei" alt="2^i"/> 的位置上, <img eeimg="1" src="https://www.zhihu.com/equation?tex=i%5Cin%5B0%2Ck-1%5D" alt="i\in[0,k-1]"/> 且i是整数,如k=4时,校验码分布在1、2、4、8,其在二进制角度下为0001、0010、0100、1000。</p><figure data-size="normal"><img src="https://picx.zhimg.com/v2-ec5d8569614278c842cbbf89157cd1ed_1440w.jpg" data-size="normal" data-rawwidth="946" data-rawheight="1227" data-original-token="v2-ec5d8569614278c842cbbf89157cd1ed" class="origin_image zh-lightbox-thumb" width="946" data-original="https://picx.zhimg.com/v2-ec5d8569614278c842cbbf89157cd1ed_r.jpg"/><figcaption>绿色标注处为校验位</figcaption></figure><p data-pid="7EjJmiV6">第i个校验码通过偶校验,验证所有二进制第i位为1的数据。</p><p data-pid="Ev4nz7k3">如k=4,i=2时,第i个校验位在2,其校验2、3、6、7、10、11、14、15位数据</p><p data-pid="XUFBSYK0">在二进制视角下,0010位的校验码,其校验0010、0011、0110、0111、1010、1011、1110、1111:(XX1X)位数据。</p><p data-pid="_zFJVR_c">所以如果第i个的校验码没有通过偶校验,也就意味着,在二进制视角下,错误数据应该属于位置标签第i位为1的集合,即其位置标签第i位为1。</p><figure data-size="normal"><img src="https://picx.zhimg.com/v2-111953ae7c91d124e44d79544c79dea7_1440w.jpg" data-size="normal" data-rawwidth="889" data-rawheight="319" data-original-token="v2-111953ae7c91d124e44d79544c79dea7" class="origin_image zh-lightbox-thumb" width="889" data-original="https://picx.zhimg.com/v2-111953ae7c91d124e44d79544c79dea7_r.jpg"/><figcaption>二进制只有两种情况,1范围内没有出错的话,那就是在0范围出错了</figcaption></figure><p data-pid="YzKDVOu2">通过逐个验证,就可以得到错误数据的二进制坐标了。</p><p data-pid="rXDARvn8">汉明码忽略0位,所以二进制坐标全为0时(此时错误指向0位),认为是正确的。</p>