奇偶校验,海明码与crc码

发布时间 2023-03-28 03:10:38作者: 慢性处死

奇偶校验
检查前面的每一位的‘1’是奇数个还是偶数个 若是奇校验,在为奇数个时输出1 偶校验同理 而奇偶校验一般都会在码距中检查
例如码距为4时 就是 1111 e 1111 e 1111 e 1111 其中每个 e 都是检查在校验中的1的检验码 如果直接是例子中的进行奇校验,毫无疑问e的值都会是0

海明码
有大部分冗杂的教程..但海明码的本质很简单:
把在第i位的校验码以二进制展开 然后就着该二进制为1的位进行奇偶校验即可;

crc码(冗余运算码)
这个比海明码比起来也简单 只不过稍微复杂点而已。。
首先是需要有固定长的数据位和固定的校验多项式
其中校验多项式一般都是 x^4 + x^2 + 1 这样的 就拿这个例来说,我们可以得到一串:10011
而这个校验多项式的数据位一定是不小于它的长度的 也就是 不小于5。这里我们用这个例子:111000101

接下来就是很重要的一部分:进行模二运算 模二运算顾名思义就是对数据进行二进制方式的加,减 其中规则如下:
模加&模减
1 1 ->0 0 0 ->0 1 0 ->1 0 1 ->1

模乘
1 1->1 00=01=10=0 也就是与运算

模除
这个有点难 也是crc最常用的运算; 只不过crc取的是它的尾数
这里拿上面的例子来说吧,首先我们让10011和111000101的前5位相比-> 若大,进1 若小 进0 且前五位进行模减
->10011 011110101 此时 1
->10011 001101101 此时11
->10011 000101011 此时111
->10011 000001011 此时1111

这时候如果只是用来取校验码就不用算了 取 结果的余数 01011 即可。