在数据末尾加1位比特,让整个数据中1的总个数是奇数或偶数
目标:总1的个数为偶数
步骤 | 操作 |
---|---|
1 | 统计原始数据中1的个数 |
2 | 如果是偶数 → 补0;如果是奇数 → 补1 |
例子:传输字符 ‘E’(ASCII码 01000101)
01000101 0
目标:总1的个数为奇数
步骤 | 操作 |
---|---|
1 | 统计原始数据中1的个数 |
2 | 如果是奇数 → 补0;如果是偶数 → 补1 |
例子:传输字符 ‘A’(ASCII码 01000001)
01000001 1
接收方收到数据后:
收到数据:11010110 1
统计总共有:1+1+0+1+0+1+1+0 = 5个1 + 校验位1 → 总共6个1(偶数)
→ 符合偶校验 → 认为无错误
奇偶校验码的本质是通过统计1的总数来判断是否发生错误。当传输过程中出现奇数个比特翻转时,1的总数的奇偶性会改变,从而被检测到;而偶数个比特翻转时,1的总数的奇偶性可能保持不变,导致错误未被发现。
错误类型 | 翻转位数 | 1的总数变化 | 奇偶性变化 | 是否能检测 |
---|---|---|---|---|
无错误 | 0 | N N N | 不变 | ❌(无错误) |
单比特错误 | 1 | N ± 1 N \pm 1 N±1 | 改变 | ✅ |
双比特错误 | 2 | N ± 2 N \pm 2 N±2 | 不变 | ❌ |
三比特错误 | 3 | N ± 3 N \pm 3 N±3 | 改变 | ✅ |
设原始1的个数为 N N N,错误导致翻转的1→0数量为 a a a,翻转的0→1数量为 b b b,则:
结论:只有当翻转的比特数( a + b a + b a+b)为奇数时,奇偶性才会变化,从而被检测到。
1011
(3个1)1001
1011
(3个1)0001
1011
(3个1)0011
当翻转的比特数为偶数时:
想象一个天平:
错误类型 | 奇偶性变化 | 是否能检测 | 举例 |
---|---|---|---|
奇数个错误 | ✅ 改变 | ✅ 能检测 | 1位、3位、5位错误 |
偶数个错误 | ❌ 可能不变 | ❌ 无法检测 | 2位、4位错误(部分情况) |
关键点:奇偶校验码只能检测破坏1的总数奇偶性的错误,而偶数个错误可能恰好抵消奇偶性变化,导致漏检。
通过插入多个校验位,不仅能发现还能定位并纠正单比特错误
使用公式:2r ≥ n + r + 1
(n=数据位数,r=校验位数)
例子:n=7
尝试 r=3 → 2³=8 < 7+3+1=11 ❌
尝试 r=4 → 2⁴=16 ≥ 7+4+1=12 ✅
→ 需要 4个校验位
校验位放在位置为2的幂的位置(1,2,4,8…)
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
类型 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 |
假设数据:1011011
(D1~D7)
每个校验位负责一组特定位置(看位置编号的二进制):
校验位 | 负责的位置(二进制说明) | 实际位置 |
---|---|---|
P1 | 所有第1位为1的位置 | 1,3,5,7,9,11 |
P2 | 所有第2位为1的位置 | 2,3,6,7,10,11 |
P3 | 所有第3位为1的位置 | 4,5,6,7 |
P4 | 所有第4位为1的位置 | 8,9,10,11 |
计算规则:对每组数据位做偶校验
原始数据:D1=1, D2=0, D3=1, D4=1, D5=0, D6=1, D7=1
P1组:3(1),5(0),7(1),9(0),11(1) → 有3个1 → 需补1 → P1=1
P2组:3(1),6(1),7(1),10(1),11(1) → 有5个1 → 需补1 → P2=1
P3组:5(0),6(1),7(1) → 有2个1 → 需补0 → P3=0
P4组:9(0),10(1),11(1) → 有2个1 → 需补0 → P4=0
最终编码:P4 P3 P2 P1 D5 D6 D7
→ 0 0 1 1 0 1 1
接收方重新计算各校验位,若结果不一致则标记为1:
假设第5位出错(D2=0变成1)
校验位 | 实际值 | 接收方计算值 | 差异 |
---|---|---|---|
P1 | 1 | 0 | 1 |
P2 | 1 | 1 | 0 |
P3 | 0 | 1 | 1 |
P4 | 0 | 0 | 0 |
错误位置 = P4’ P3’ P2’ P1’ = 0 1 0 1 = 5 → 第5位错误!
用多项式除法生成冗余码,检测数据传输中的突发错误
CRC-4:G(x) = x^5 + x^2 + x + 1 → 二进制 100111
(6位)
原始数据:101111001010
添加4个0 → 1011110010100000
用数据除以生成多项式:
余数 = 00000
→ 发送完整数据:1011110010100000
对接收到的数据用相同多项式做模2除法:
类型 | 校验能力 | 纠错能力 | 传输效率 | 典型应用场景 |
---|---|---|---|---|
奇偶校验 | 单比特错误 | 无 | 高 | 内存校验、ASCII字符传输 |
海明码 | 单比特错误 | 单比特纠错 | 中 | 航天通信、内存ECC |
CRC | 多比特/突发错误 | 无 | 低 | 网络传输(WiFi/以太网) |
奇偶校验像开关,1多补0少补1;
海明校验插空位,2的幂位放校验;
CRC就像长除法,模2运算不用借;
数据传输要可靠,校验码来把关牢!
标准 | 生成多项式(二进制) | 应用场景 |
---|---|---|
CRC-16 | 11000000000000101 |
数据链路层(PPP协议) |
CRC-32 | 100000100110000010001110110110111 |
以太网、ZIP文件 |
CRC-CCITT | 10001000000100001 |
X.25协议 |