【软考知识】奇偶校验码,循环冗余码,海明码介绍

news2025/2/23 6:57:56

文章目录

      • **1. 奇偶校验码 (Parity Check Code)**
        • **基本原理**
        • **算法流程**
        • **优点与缺点**
        • **应用场景**
      • **2. 循环冗余码 (Cyclic Redundancy Check, CRC)**
        • **基本原理**
        • **算法流程**
        • **例子**
        • **优点与缺点**
        • **应用场景**
      • **3. 海明码 (Hamming Code)**
        • **基本原理**
        • **算法流程**
        • **例子**
        • **优点与缺点**
        • **应用场景**
      • **总结对比**

以下是奇偶校验码、循环冗余码(CRC)和海明码的详细介绍,包括它们的基本原理、算法流程以及应用场景。


1. 奇偶校验码 (Parity Check Code)

基本原理

奇偶校验码是一种简单的错误检测方法,通过在数据中添加一个额外的比特位(称为“校验位”),使整个数据块中的“1”的总数为偶数或奇数。根据校验方式的不同,分为偶校验奇校验

  • 偶校验:确保数据中“1”的总数为偶数。
  • 奇校验:确保数据中“1”的总数为奇数。
算法流程
  1. 生成校验位
    • 统计原始数据中“1”的个数。
    • 如果使用偶校验:
      • 若“1”的个数为偶数,则校验位为0;
      • 若“1”的个数为奇数,则校验位为1。
    • 如果使用奇校验:
      • 若“1”的个数为偶数,则校验位为1;
      • 若“1”的个数为奇数,则校验位为0。
  2. 传输数据:将原始数据与校验位一起发送。
  3. 接收端校验
    • 接收方统计接收到的数据中“1”的个数。
    • 根据校验规则判断是否符合要求(偶数或奇数)。如果不符合,则认为数据可能出错。
优点与缺点
  • 优点:实现简单,计算速度快。
  • 缺点:只能检测单比特错误,无法检测双比特错误或多比特错误。
应用场景
  • 早期计算机内存的错误检测。
  • 简单通信系统中的数据完整性检查。

2. 循环冗余码 (Cyclic Redundancy Check, CRC)

基本原理

循环冗余码是一种更强大的错误检测方法,基于多项式除法。它通过在数据后面附加一组冗余位(称为CRC校验码),使得接收方可以通过相同的多项式计算验证数据的完整性。

算法流程
  1. 生成多项式
    • 定义一个生成多项式 ( G(x) ),例如 ( G(x) = x^4 + x + 1 ) 对应二进制表示为 10011
  2. 数据编码
    • 将原始数据 ( M(x) ) 表示为二进制序列,并在其后附加 ( n ) 个零(( n ) 是生成多项式的阶数减1)。
    • 用生成多项式 ( G(x) ) 对扩展后的数据进行模2除法运算,得到余数 ( R(x) )。
    • 将余数 ( R(x) ) 替换附加的零,形成最终的发送数据。
  3. 传输数据:发送带有CRC校验码的数据。
  4. 接收端校验
    • 接收方用同样的生成多项式 ( G(x) ) 对接收到的数据进行模2除法运算。
    • 如果余数为0,则认为数据无误;否则,认为数据可能出错。
例子

假设原始数据为 110101,生成多项式为 1001(对应 ( G(x) = x^3 + x + 1 )):

  1. 扩展数据为 110101000(附加3个零)。
  2. 用生成多项式 1001 对其进行模2除法,得到余数 011
  3. 最终发送数据为 110101011(将余数替换附加的零)。
优点与缺点
  • 优点:能检测大多数单比特、双比特和突发错误,可靠性高。
  • 缺点:计算复杂度较高,需要硬件支持以提高效率。
应用场景
  • 数据通信中的错误检测(如以太网、Wi-Fi等)。
  • 文件传输协议(如FTP、HTTP)中的数据完整性验证。

3. 海明码 (Hamming Code)

基本原理

海明码是一种能够检测并纠正单比特错误的编码方法。它通过在数据中插入多个校验位,形成一种冗余编码结构。每个校验位负责检查特定的数据位组合。

算法流程
  1. 确定校验位位置
    • 校验位的位置为 ( 2^k ) 的幂次位置(如第1位、第2位、第4位、第8位等)。
  2. 分配数据位
    • 将数据位插入非校验位位置。
  3. 计算校验位
    • 每个校验位负责检查与其相关的数据位组合。具体关系由二进制位的逻辑决定。
    • 校验位值通过计算相关数据位的异或结果得出。
  4. 传输数据:发送包含校验位和数据位的完整编码。
  5. 接收端校验与纠错
    • 接收方重新计算所有校验位。
    • 如果计算结果与接收到的校验位不一致,则通过异或操作定位错误位置并纠正。
例子

假设原始数据为 1011,需要构造一个海明码:

  1. 确定校验位位置:第1位、第2位、第4位。

  2. 分配数据位:P1 P2 1 P3 0 1 1

  3. 计算校验位:
    海明码

  4. 最终编码为 0110011

优点与缺点
  • 优点:不仅能检测错误,还能自动纠正单比特错误。
  • 缺点:需要较多的冗余位,增加了数据传输的开销。
应用场景
  • 存储系统中的错误检测与纠正(如硬盘、闪存)。
  • 通信系统中的可靠数据传输。

总结对比

特性/算法奇偶校验码循环冗余码海明码
错误检测能力单比特错误多种错误类型单比特错误
错误纠正能力
复杂度简单中等较复杂
应用场景内存、简单通信数据通信、文件传输存储系统、可靠通信

希望以上内容对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试-网络协议篇

1.http网络协议中post和get有什么区别 在HTTP网络协议中,POST和GET主要有以下区别: 参数传递方式: GET:参数附加在URL后面,如example.com?key1value1&key2value2 。POST:参数放在HTTP请求体中。 数据…

1.1 go环境搭建及基本使用

golang下载地址: Download and install - The Go Programming Language (google.cn) 验证安装是否成功: go version 查看go环境 go env 注意:Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要把项目放到GO…

Gemini 2.0助力科学突破,AI联合科学家系统登场

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

京东外卖骑手全部缴纳五险一金

刘强东这步棋,直击700万骑手软肋? 今天,京东突然甩出一张底牌:自2025年3月1日起,外卖全职骑手全员缴纳五险一金,兼职骑手配套意外医疗双保险。 消息一出,直接炸了外卖江湖。要知道&#xff0c…

百度云DeepSeek一体机:百舸、千帆和一见介绍及区别对比

百度智能云DeepSeek一体机百舸、千帆和一见,搭载昆仑芯等国产自研算力芯片,可支持在单机环境下一键部署DeepSeek R1/V3全系列模型。百度云服务器网bdyfwq.com分享百度智能云官方发布的百舸DeepSeek一体机、千帆DeepSeek一体机和一见DeepSeek一体机配置介…

【算法】直接插入排序、折半插入排序、希尔排序

1 直接插入排序 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定 元素集合越接近有序,直接插入排序算法的时间效率越高 1.1直接插入排序思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff…

使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

【排版教程】如何在Word/WPS中优雅的插入参考文献

材料展示 随便选取一段综述内容,以及对应的参考文献,如下图所示: 1 参考文献编辑 首先对参考文献部分进行编辑,将其设置自动编号 在段落中,选择悬挂缩进 在编号中,设置自定义编号,然后按照…

神经形态视觉的实时动态避障系统:突破传统SLAM的响应延迟瓶颈

引言:机器人感知的实时性挑战 斯坦福机器人实验室采用异步脉冲神经网络处理DVS事件相机数据后,动态障碍物响应延迟从34ms降至0.9ms。在20m复杂场景避障测试中,基于神经形态芯片的路径规划系统将SLAM更新频率提升至10kHz,较传统GP…

Linux操作系统4-进程间通信5(共享内存实现两个进程通信)

上篇文章:Linux操作系统4-进程间通信4(共享内存原理,创建,查看,命令)-CSDN博客 本篇Gitee仓库:myLerningCode/l24 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重…

RFID测温技术:电力设备安全监测的新利器

在当今高度依赖电力的现代化社会中,稳定且可靠的电力供应是社会运转的基石。电力设备作为电力系统的关键核心,其运行状态直接关乎电力供应的品质。然而,电力设备长期运行过程中,受到诸如过载、接触不良以及环境因素等多重影响&…

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式?二、为什么要用单例模式?三、单例模式怎么实现?1. 饿汉式:先下手为强! 😈2. 懒汉式:用的时候再创建! 😴3. 枚举:最简单最安全的单例&a…

自动化办公|xlwings生成图表

在日常的数据分析和报告生成中,Excel图表是一个非常重要的工具。它能够帮助我们直观地展示数据,发现数据中的规律和趋势。然而,手动创建和调整图表往往耗时且容易出错。幸运的是,借助Python的xlwings库,我们可以自动化…

Docker基于Ollama本地部署大语言模型

一、Ollama介绍 Ollama 是一个开源的大型语言模型(LLM)平台,旨在简化大型语言模型在本地环境中的运行、管理和交互。通过Ollama,用户可以轻松加载和使用各种预训练的语言模型,执行诸如文本生成、翻译、代码编写、问答…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

pytest下allure

import pytestdef test_case01():用例01~print(用例01)class Test_mokuai01:def test_case02(self):用例02~print(用例02)if __name____main__:#pytest.main([-vs,test_sample-2.py])pytest.main([-vs,test_sample-2.py,--allure-dir,./result2])#生成allure报告,参…

JVM预热

阿里电商平台每年的各种大促活动,对于Java技术来说,其中重要一个操作环节就是预热操作。 目录 预热是什么?为什么要预热? java 程序不预热和预热的调用对比 预热是什么? 预热是指,在 JVM 启动后&#xff0…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 🌍一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 🌍二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…

网页制作06-html,css,javascript初认识のhtml如何建立超链接

超链接有外部链接、电子邮件链接、锚点链接、空链接、脚本链接 一、内部链接 与自身网站页面有关的链接被称为内部链接 1、创建内部链接 1&#xff09;语法&#xff1a; <a href"链接地址"> …… </a> 2&#xff09;举例应用&#xff1a; 3&#xf…

代码讲解系列-CV(七)——前沿论文复现

文章目录 一、论文速览1.1 确定baseline1.2 DepthMaster: Taming Diffusion Models for Monocular Depth Estimation 二、数据环境搭建2.1 环境搭建2.2 数据权重 三、推理debug3.1 单图推理3.2 数据集验证 四、模型训练4.1 数据读取4.2 训练流程 五、作业 一、论文速览 1.1 确…