当前位置: 首页 > news >正文

软考-软件设计师--校验码


一、奇偶校验码:基础错误检测

原理:通过在数据尾部(或者头部)添加奇偶校验位,使数据中"1"的数量为奇数个(奇校验)或偶数个(偶校验)。
公式
设数据位为 d 1 d 2 . . . d n d_1d_2...d_n d1d2...dn,校验位 p p p 满足:
p = d 1 ⊕ d 2 ⊕ ⋯ ⊕ d n ( 奇校验 ) p = d_1 \oplus d_2 \oplus \cdots \oplus d_n \quad (\text{奇校验}) p=d1d2dn(奇校验)
p = ¬ ( d 1 ⊕ d 2 ⊕ ⋯ ⊕ d n ) ( 偶校验 ) p = \neg (d_1 \oplus d_2 \oplus \cdots \oplus d_n) \quad (\text{偶校验}) p=¬(d1d2dn)(偶校验)

示例
假设要传输的数据为 1011,采用偶校验的方式计算流程如下:

  • 计算校验位: 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1 1 \oplus 0 \oplus 1 \oplus 1 = 1 1011=1 p = 0 p=0 p=0(使"1"总数为偶数)
  • 发送帧:1011 0
  • 若接收端检测到 1011 1("1"总数为奇数),则判定错误。

能力与局限

  • ✅ 检测单比特错误
  • ❌ 无法检测偶数个错误位
  • ❌ 无纠错能力

二、海明码:单比特纠错技术

原理:利用多个校验位覆盖数据位的不同组合,通过校验子定位错误位置。
关键公式
首先确定要使用检验位的位数 r r r ,需满足:
2 r ≥ k + r + 1 2^r \geq k + r + 1 2rk+r+1
其中 k k k 为数据位数。

示例 假设需要传送4位数据 1101,则代入上公式,r=3,既需要3位校验位。

  1. 数据位 D 1 D 2 D 3 D 4 = 1101 D_1D_2D_3D_4 = 1101 D1D2D3D4=1101
  2. 校验位位置:检验位的位置为2的i次方,既 P 1 P_1 P1=1, P 2 P_2 P2=2, P 3 P_3 P3=4, P 4 P_4 P4=8, 其中 P i P_i Pi表示第i个校验位的位置。
  3. 计算校验位:第i个检验码的计算方式为找出数据所有位置的二进制对的倒数第i位为1的位置。
    对于 P 1 P_1 P1,需要找出末尾带1的所有位置,对于 P 2 P_2 P2,要找出倒数第二位带1的所有位置,对于 P 3 P_3 P3,要找出倒数第三位带1的所有位置,对于 P 4 P_4 P4,要找出倒数第四位带1的所有位置,以此类推。将这些位置上的数进行异或操作。即可计算出对应位置的校验码。
    • P 1 = D 1 ⊕ D 2 ⊕ D 4 = 1 ⊕ 1 ⊕ 1 = 1 P_1 = D_1 \oplus D_2 \oplus D_4 = 1 \oplus 1 \oplus 1 = 1 P1=D1D2D4=111=1
    • P 2 = D 1 ⊕ D 3 ⊕ D 4 = 1 ⊕ 0 ⊕ 1 = 0 P_2 = D_1 \oplus D_3 \oplus D_4 = 1 \oplus 0 \oplus 1 = 0 P2=D1D3D4=101=0
    • P 3 = D 2 ⊕ D 3 ⊕ D 4 = 1 ⊕ 0 ⊕ 1 = 0 P_3 = D_2 \oplus D_3 \oplus D_4 = 1 \oplus 0 \oplus 1 = 0 P3=D2D3D4=101=0
  4. 完整码字 P 1 P 2 D 1 P 3 D 2 D 3 D 4 = 1 0 1 0 1 0 1 P_1P_2D_1P_3D_2D_3D_4 = 1\ 0\ 1\ 0\ 1\ 0\ 1 P1P2D1P3D2D3D4=1 0 1 0 1 0 1

纠错过程
若接收端检测校验子 S = ( S 3 S 2 S 1 ) = 101 S = (S_3S_2S_1) = 101 S=(S3S2S1)=101(二进制5),则第5位( D 2 D_2 D2)出错。

校验位覆盖关系图

位位置: 1(P1) 2(P2) 3(D1) 4(P3) 5(D2) 6(D3) 7(D4)
覆盖组: P1 → [1,3,5,7]P2 → [2,3,6,7]P3 → [4,5,6,7]

三、循环冗余校验码(CRC):高效批量检测

原理:将数据视为多项式,通过模2除法生成校验码。
关键公式
数据多项式 D ( x ) D(x) D(x) 与生成多项式 G ( x ) G(x) G(x) 运算:
校验码 = D ( x ) ⋅ x r mod  G ( x ) \text{校验码} = D(x) \cdot x^r \ \text{mod} \ G(x) 校验码=D(x)xr mod G(x)

示例(数据 110101,生成多项式 x 3 + x + 1 x^3 + x + 1 x3+x+1):

  1. D ( x ) = x 5 + x 4 + x 2 + 1 D(x) = x^5 + x^4 + x^2 + 1 D(x)=x5+x4+x2+1
  2. G ( x ) = x 3 + x + 1 G(x) = x^3 + x + 1 G(x)=x3+x+1(二进制 1011
  3. 计算步骤:
         110101000  ← 数据左移3位(r=3)1011      ← G(x)---------1101101011-----110101011-----1110   ← 余数(校验码)
    
  4. 发送帧:数据 + 余数 = 110101 110

检测能力

  • ✅ 检测所有单比特和双比特错误
  • ✅ 检测奇数个错误
  • ✅ 检测长度 ≤ r r r 的突发错误

三、三大技术对比
特性奇偶校验码海明码CRC
检测能力单比特双比特多比特突发
纠错能力单比特
校验位开销1位 log ⁡ 2 n \log_2 n log2n固定位(16/32)
典型应用内存模块ECC内存网络传输

总结:奇偶校验码适合低成本检测,海明码提供纠错能力,CRC则是高速数据传输的首选。理解其数学本质(异或运算/多项式除法)是掌握核心的关键!

http://www.lqws.cn/news/442513.html

相关文章:

  • 矩阵置零C++
  • jmeter学习
  • ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
  • HarmonyOS开发利器:ArkTS全解析
  • 深入解析connect函数:阻塞与非阻塞模式下的行为差异
  • 利用DevEco Studio对RK3588的HiHopesOS-4.1.110(OpenHarmony)进行Qt程序编写
  • Linux基本指令篇 —— mkdir指令
  • linux 非root 非sudo 如何安装软件
  • 基于Geotools的两条道路相交并根据交点形成新路线实战-以OSM数据为例
  • 微信小程序传参过来了,但是数据没有获取到
  • 编码规则设计唯一编码
  • 基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)
  • YunParking路内停车源码追缴分成机制设计与技术实现​
  • docker使用技巧之把扩展卷命名变成有意义
  • AWS Security Hub邮件告警设置
  • 计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体
  • 系统思考:结构影响行为
  • 基于 LLM 的网络钓鱼网站检测多代理框架
  • WEB安全--WAF的绕过思路
  • Singularity 安装
  • 浏览器标题闪烁功能
  • python形成性考核管理系统
  • 2023年蓝桥杯青少第十四届蓝桥杯Scratch省赛中级组真题——小狗避障
  • webpack和vite对比解析(AI)
  • OpenCV 图像直方图
  • 中泰制造企业组网新方案:中-泰企业国际组网专线破解泰国工厂访问国内 OA/ERP 卡顿难题
  • 【世纪龙科技】智能网联汽车自动驾驶虚拟实训软件
  • 【鸿蒙HarmonyOS Next App实战开发】​​​​ArkUI纯色图生成器
  • Linux中Ansible常用模块
  • 【油藏地球物理正演软件ColchisFM】为什么经常用90度相移处理代替反演使用