详解差错控制之码距、检错与纠错

一、什么是码距?

码距就是两个码字C1与C2之间不同的比特数。如:1100与1010的码距为2;1111与0000的码距为4。

一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。若一个编码系统有四种编码分别为:0000,0011,1100,1111,此编码系统中0000与1111的码距为4;0000与0011的码距为2,是此编码系统的最小码距。因此该编码系统的码距为2。

二、什么是检错与纠错?

有很多网友和学员不明白,为什么有些编码能检查出错误,而不能纠正错误?下面来举一个生活当中简单的例子来说明这一点。若希赛公司发出一个通知:“明天14:00~16:00开会”,但在通知过程中由于行政部工作人员疏忽,变成了“明天10:00~16:00开会”。员工收到这个错误通知后由于无法判断其正确与否,就会按这个错误时间去安排与组织。

为了使接收者能判断正误,可以在通知内容中增加“下午”两个字,即改为:“明天下午14:00~16:00开会”。这时,如果仍错为:“明天下午10:00~16:00开会,则收到此通知后,根据“下午”与“10:00”信息即可判断出通知发生了错误。但仍不能纠正其错误,因为无法判断是“下午”与“10:00”哪一信息出错,即无法判断公司原来制定开会的具体时间。这时,接收者可以告诉发送方再发一次通知(员工向行政部人员询问,行政部再次确认会议时间),这就是检错重发(这也就是我们所说的能检错,但无法纠错)。

为了实现不但能判断通知准确性(检错),同时还能正确判断会议开始的具体时间(纠错),行政部可以把通知内容再增加“两个小时”四个字,即改为:“明天下午14:00~16:00开会两个小时”。这样,如果其中“14:00”错为“10:00”,不但能判断出错误,同时还能纠正错误,因为其中增加的“两个小时”这个标识可以判断出正确的时间为“14:00~16:00”。当然,这显然也增加了信息的冗余,降低了数据处理的效率。但随着带宽的不断提高,数据执行与处理的能力日益增强,可靠性与效率的均衡,这是值得的。

三、码距和检错纠错有何关联?

首先大家要了解以下两个概念:

1.在一个码组内为了检测e个误码,要求最小码距应该满足: d>=e+1

2.在一个码组内为了纠正t个误码,要求最小码距应该满足: d>=2t+1

现在举个例子来说明这个问题:

假如我们现在要对A,B两个字母进行编码。我们可以选用不同长度的编码,以产生不同码距的编码,分析它们的检错纠错能力。

l 若用1位长度的二进制编码。若A=1,B=0。这样A,B之间的最小码距为1。

合法码:{0,1};      非法码:{0,1};

根据上面的规则可知此编码的检错纠错能力均为0,即无检错纠错能力。其实道理很简单,这种编码无论由1错为0,或由0错为1,接收端都无法判断是否有错,因为1,0都是合法的编码。

l 若用2位长度的二进制编码,可选用11,00作为合法编码,也可以选用01,10作为合法编码。若以A=11,B=00为例,A、B之间的最小码距为2。

合法码:{11,00};     非法码:{01,10};

根据上面的规则可知此编码的检错位数为1位,无法纠错。因为无论A(11)或B(00),如果发生一位错码,必将变成01或10,这都禁用码组(非法码),故接收端可以判断为误码,却不能纠正其错误。因为无法判断误码(01或10)是A(00)错误还是B(11)错误造成,即无法判断原信息是A或B,或说A与B形成误码(01或10)的可能性(概率)是相同的。如果产生二位错码,即00错为11,或11错为00,结果将从一个合法编变成另一个合法编码,接收端就无法判断其是否有错。所以此种编码的检错能力为1位,纠错能力为0位。

l 若用3位长度的二进制编码,可选用111,000作为合法编码。A,B之间的最小码距为3。

合法码:{111,000};     非法码:{001,010,011,100,101,110};

根据上面的规则可知此编码的检错位数为2位,纠错位数为1位。例如:当信息A(000)产生1位错误时,将有3种误码形式,即001或010或100,这些都是禁用码组,可确定是误码。而有这3个误码与合法编码000的距离最近,与合编码111的距离较远,根据误码少的概率大于误码多的概率的规律,可以判定原来的正确码组为000,只要把误码中的1改为0即可得到纠正。同理,如果信息B(111)产生1位错误时,则有另三种误码可能产生,即110,101,011,根据同样道理可以判定原来的正确码组是111,并能纠正错误。

但是,如果信息A(000)或信息B(111)产生两位错误时,虽然能根据禁用码组识别其错误,但纠错时去会做出错误的纠正而造成“误纠错”。

如果信息A(000)或信息B(111)产生三位错误时,将从一个合法编码A(或B)变成了另一个合法编码B(或A),这时既检不出错,更不会纠错了,因为误码已成为合法编码,译码后必然产生错误。所以检错位数为2位,纠错位数为1位。

四、小结

编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。下表概括了最小距离为1至7的码的纠错和检错能力。

增大编码信息的码距的一个基本缺点是,在任何给定的系统中,都会因而降低数据传输效率。显然, 这是由于增加的码位(为增大最小距离所需的)减小了有用的信息时间。这就给每个信息增加了所谓多余度。所以,选择最小距离要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。

证明最小码距与纠检错图像_详解差错控制之码距、检错与纠错相关推荐

  1. acdsee扫描没有图像_详解CT图像常见伪影成因及解决方法

    CT 图像伪影 (artifact) 是指重建图像上与实际解剖结构不相符的密度异常变化.CT 图像比传统平扫X线更容易出现伪影,这是因为 CT 图像是由成千上万独立的原始测量数据重建而得,而计算机重建 ...

  2. vue 代理设置 访问图片_详解Vue源码之数据的代理访问

    概念解析: 1) 数据代理: 通过一个对象代理对另一个对象(在前一个对象内部)中属性的操作(读/写) 2) vue 数据代理: 通过 vm 对象(即this)来代理 data 对象中所有属性的操作 3 ...

  3. python怎么画参数函数图像_详解pandas.DataFrame.plot() 画图函数

    首先看官网的DataFrame.plot( )函数 DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, share ...

  4. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

  5. spark 调度模块详解及源码分析

    spark 调度模块详解及源码分析 @(SPARK)[spark] spark 调度模块详解及源码分析 一概述 一三个主要的类 1class DAGScheduler 2trait TaskSched ...

  6. python怎么安装myqr_python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

  7. JPEG图像压缩算法详解

    转载自 http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我就不在这里画蛇添足了(主要是我懒..) ...

  8. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  9. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

  10. 详解LAMP源码编译安装

    实战:LAMP源码编译安装 家住海边喜欢浪:zhang789.blog.51cto.com 目录 详解LAMP源码编译安装 LAMP简介 一.准备工作 二.编译安装 Apache 三.编译安装 MyS ...

最新文章

  1. 【spring】初识aop(面向切面编程) 使用jdk动态代理
  2. 预测性智能的力量:AI 和机器学习将如何改变美国政府决策?
  3. 六面 Google,失败经验分享…
  4. Accoridion折叠面板
  5. 【ArcGIS微课1000例】0017:ArcGIS测量距离和面积工具的巧妙使用
  6. python xposed_Xposed及类Xposed框架收集
  7. Java LinkedHashMap forEach()方法与示例
  8. python如何更改entry属性_如何在Python3中更改Gtk3 Entry文本颜色?
  9. hadoop合并日志_Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
  10. Linux 串口、usb转串口驱动分析(2-1) 【转】
  11. Zend_Db_Table-insert ()和zend_db_adapter::insert方法返回值不同
  12. HTML在手机上能编写吗,手机版使用开发
  13. 车辆vin信息(含发动机号)
  14. ucdavis计算机科学专业,加州大学戴维斯分校有哪些专业处于世界顶尖水平?
  15. 使用 Amazon Personalize 快速搭建推荐服务
  16. 教你制作启动U盘,用U盘装系统(转载)
  17. gmail 邮箱附件大小 突破10M
  18. Mac-Brew介绍
  19. 第四章 进程同步与互斥
  20. 拿下人脸识别“世界杯”冠军!松下-NUS 和美国东北大学实战分享

热门文章

  1. HTML的弹性布局用法
  2. feature map理解
  3. 赵小楼《天道》《遥远的救世主》深度解析(109)天下乌鸦一般黑,不要幻想
  4. Makefile 自动化变量及其说明
  5. webstorm自定义文件模板
  6. 【windows屏幕扩展】把你多余屏幕利用起来,spacedesk屏幕扩展超低延迟解决方案
  7. Java 获取文件的真实类型,修改后缀名也能识别出来
  8. MySQL练习题及答案
  9. 基于二维码的室内定位技术(二)——实现
  10. 蚂蚁金服在云原生架构下的可观察性的探索和实践