编码和校验码
本文包含奇偶海明循环冗余校验码校验背景当两台设备在通信的时候由于许多不可控因素接收方收到的信息不一定是发送方发出的信息即传输过程中信息发生了改变。那么我们就需要添加一些校验的方法来帮助我们确定收到的信息是否正确。这便是校验发生的背景。一些基本概念码字指我们通过一系列二进制代码表示的信息通常是人为定义的如令 A为011 码距两个合法码字对应位上数字的不同位的个数如001和010的码距为2奇偶校验奇校验定义在开头添加一位数保证一段数据中出现奇数个1如010 - 0010011 - 1011偶校验定义在开头添加一位数保证数据中出现偶数个1如001 - 1001011 - 0011但是不管是奇校验还是偶校验他们都不能完全保证数据的正确性如果一次性跳变两位他们还是无法检测出数据是否正确。同时他们也不能定位跳变的位置。海明校验码海明码设计思路通过分组校验和多个校验位来标注出错位置假设我们的校验位为k位信息位为n位。我们的校验位可以表示种状态。如果要表示所有状态那么我们就需要保证以下是n和k的对应关系海明码求解方法以1010为例1.确定海明码位数由可知我们的所以海明码的位数为7位2.确定校验位的分布校验位应当放在的位置上所以三位校验位应该放在1,2,4三个位置上然后信息位按顺序放在其余位置如果你想反过来放也可以计算出来的结果也是对应下表的3.计算校验位校验位由信息位计算得出因为信息位分别放在7653几个位置上其他位置被校验位占了所以对这些数进行异或运算来计算出校验位。如下图D是信息位所以我们得到的海明码就是1010010校验过程校验就是将校验位和接受到的信息位进行异或运算假设我们接受到1010010即数据没有变化那么我们计算出来的S1 S2 S3 0即我们的数据是正确的。如果接收到1010000我们的S1 0 , S2 1 , S3 0所以第二位出错。循环冗余校验码(CRC码)一般来说求解CRC码时会提供生成多项式和信息码。CRC码的结构一般是K位信息位加上R位校验位如何根据生成多项式得到对应的二进制码当生成多项式为其对应的二进制码就为10111求解CRC码先根据生成多项式得到二进制码将信息码左移R位低位补0我们将得到的二进制码对位移后的信息码进行模2除法产生的余数即为校验码假设我们的信息码为101001二进制码为1101计算步骤如下于是我们的CRC码就为101001 001纠错接收方将收到的CRC码用二进制码生成多项式的进行模2除法如果余数为0则正确反之余数指向的位出错这个要看生成多项式给的合不合理