一, 基本概念
实际的通信链路都不是理想的, 比特在传输过程中可能会产生差错: 1 可能变为 0,0 可能变为 1, 称为比特差错.
在一段时间内, 传输错误的比特占所传输比特总数的比率称为误码率 BER(Bit Error Rate).
提高数据代码的抗干扰能力. 这必须在原二进制代码长度的基础上增加几位二进制代码的长度, 使相应数据具有一定的冗余度.
编码有一定的检错能力, 编码必须要有一定的冗余度, 编码器的冗余性只是检错的必要条件, 而不是充分条件.
码重: 编码中 1 的个数. 如 01100010B 的码重为 3
码距: 两个编码不相同的位数. 两个编码之间的码距等于它们 "异或" 操做结果的码重. 例如: 01101100B ^10001001B=11100101B 码距为 5.
二, 奇偶校验
在原编码的基础上增加一位奇偶检验位, 使得整个编码的码重固定为奇数 (奇校验) 或偶数(偶校验)
当干扰持续时间很短(如常见的尖峰干扰), 即当差错单个出现, 奇偶检验即可以达成检错的目的.
如: 奇校验 发送: 1101101 ----------------- 接收端: 1101100 "1" 数量奇性改变, 可检错.
1101101 -----------------0111101 产生 2 位误码, 奇校验无法检错.
当连续出现几个差错时, 简单的奇偶校验不能发现, 这也是奇偶检验的缺点.
三, 和校验
如果一串信息有 "n" 个字节, 对这 n 个字节进行 "加" 运算, 然后将结果附在字节后面进行传输, 附加的字节就是校验和.
在计算机中常用两种加法 1, 逻辑异或 2, 加法指令
四, 循环冗余校验 CRC(应用最广泛)
基本原理是将一段信息看成一段二进制, 然后用一个特定的数去除它, 最后将余数作为校验附在信息后, 在接收端同样处理.
其根本思想就是先在要发送的帧后面附加一个数 (这个就是用来校验的校验码, 但要注意, 这里的数也是二进制序列的, 下同), 生成一个新帧发送给接收端. 当然, 这个附加的数不是随意的, 它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意, 这里不是直接采用二进制除法, 而是采用一种称之为 "模 2 除法"). 到达接收端后, 再把接收到的新帧除以(同样采用 "模 2 除法") 这个选定的除数. 因为在发送端发送数据帧之前就已通过附加一个数, 做了 "去余" 处理(也就已经能整除了), 所以结果应该是没有余数. 如果有余数, 则表明该帧在传输过程中出现了差错.
来源: https://www.cnblogs.com/wy9264/p/12099632.html