首页 > 代码库 > 校验编码的原理(奇偶校验,海明校验,CRC校验)——数学分析

校验编码的原理(奇偶校验,海明校验,CRC校验)——数学分析

                                                        数据校验

场景:

        受元器件质量、电路故障或者噪音干扰等因素的影响,计算机在对数据进行处理、传输以及存储过程中,往往会出现误差。为了发现或者纠正出现的错误,人们提出了基于编码的解决方案。基本思路就是按照某种规则编码,这样编码之后就会具有发现错误或指出错误位置的功能。

专用词:      

        码距:一组校验编码中任何两个编码之间不同代码的位数;
        正误比(笔者自己定义):就是在某一编码规则当中正确状态和错误状态的比,比如4位二进制(0000~1111)可以表示16种状态,其中8种(0000,0011,0101,0110,1001,1010,1100,1111)是正确状态,其余为错误状态,这样当正确状态0000出错变成1000的时候就会发现错误,这种编码正误比是50%因为正确状态可以转成正确状态的几率为50%,所以错误被发现的可能性也是50%;这样可能还是不够明白,接下来就用具体的校验编码来说明;
        映射规则(笔者自己定义):把需要校验的数据映射到某种校验编码规则状态集合(域)的某种规则(CRC中叫生产成 多项式);

原理图:

        

实例解析:

        定义自己的名词完全是为了更明确的阐述自己的思路,如果上面几个名词还不是很清楚,在下面的实例讲解过程中就会明白。

        简单奇偶校验:

                 映射规则:校验码中1的数量为奇数或者偶数;
比如被校验数据为:10110101,根据映射规则编码之后的校验码(奇校验)就是101101010,由于只加了一个冗余位,所以它的正误比是50%,也就是说他可以找出50%的错误;因为增加了1位,值域扩展了一倍,其中一半表示之前相同数量数据的正确状态,另一半表示错误状态。由于一半错误状态数量分别对应正确状态的数量所以简单奇偶校验不具备发现错误的能力(确切的说是具有发现一位不知位置错误的能力,见上图解释),想要具有发现错误的能力必须扩展错误状态的数量,也就是说让正误比小于50%;

       海明校验:

               映射规则:把有效信息k分成r组做奇偶校验;