史上最通俗的海明码编码计算、检错和纠错原理解析_许少年的读书笔记的博客-程序员资料

技术标签: 编码原理  数据校验  计算机通信  汉明码  

合法代码集

所谓合法代码集就是当代码由于未知因素导致出错后,计算机可是识别到错误的代码。不合法代码集:{(001), (010), (101), (111)}。如果(101)出错,可能是(111),那么无法判断是错误代码还是本来就是(111),因此不合法。下面给出合法代码集:{(001),(100), (111)},当有一位发生变化时并不会和代码集中的其他代码发生冲突,因此合法。

编码的最小距离

合法代码集中任意两组合法代码之间二进制位数的最少差异。编码的检错、纠错能力与编码最小距离直接相关,公式描述为:L-1 = D+C(D>=C)

L: 编码的最小距离
D: 检错的位数
C:纠错的位数

汉明码

具有一位纠错能力的编码方案,实质上是使用特殊分组方式的奇偶校验。

奇偶校验

假定需要传输的数据是“00100011”,那么在原数据加上一个校验位,使得“1”的个数是偶数个:“100100011”。当传输到另一端的时候,检查“1”的个数是否是偶数个,如果还是偶数,那么表示没有错误,否则就是失效的数据。

带分组的奇偶校验

为了更加精确的定位出错的二进制位,那么可是将二进制位分组,将“00100011”分成“0010”和“0011”,分别在两个分组前加上一个校验位:“10010”和“00011”,这就构成了“1001000011”,发送到对方的时候,将每个分组的“1”查找一遍,然后考察是否是偶数个,即可更加精确的定位到是哪个分组出错。

汉明码的编码

上边说的都是基于划分的分组方式,汉明码是基于非划分的分组方式。假定存在如下数据位:

在这里插入图片描述

我们将这个长度的代码分成3组,每组包含1个校验位,总共包含4个数据位,如下图所示:

在这里插入图片描述

将3个组分别命名为Group1、Group2、Group3,那么将会产生三个校验位结果:

Group3 Group2 Group1 Result
0 0 0 没有错误
0 0 1 Group1中有错误,1的位置出错.
1 0 1 Group1和Group3公共区域出错,5位置出错.

既然有了校验位,那么这些校验位应该放到哪里呢?我们上面将数据按位划分了组:

Group1: {1, 3, 5, 7};
Group2: {2, 3, 6, 7};
Group3: {4, 6, 6, 7}.

实际上,我们的分组方式就是按照汉明码的编码规则划分的,因此要考察每个分组的特征:

Group1: { 1, 3, 5, 7};
Group2: { 2, 3, 6, 7};
Group3: { 4, 6, 6, 7}.

显然,应该放到2n-1位。

如果是二进制代码的话产生的校验值会有如下特征:

Group1:xxxx1
Group2:xxx1x
Group3:xx1xx
Group4:x1xxx

从右向左,如果Group1的第一位是1,表示Group1独有的比特位出错。如果是Group1的第一位和Group4的第四位同时是1,表示Group1和Group4共有且其他组没有的比特位出错。综上所述,汉明码总共有三个要素:

  • 汉明码的组成需要添加多少位校验位

    因为每个组都有一个校验位,所以多少个校验位就是多少个组,设校验位包含k位,原始数据比特位有n位,在加上一种没有错误的情况,因此是2^k >= n+k+1(和画图一样的道理)。

  • 校验位在整个编码中的位置

    2^(n-1)

  • 校验位的取值

    根据采用的是奇校验还是偶校验有关。

汉明码使用交替跳跃的方式选择每个组中应该包含的比特位,比如:
Group1:选取1位,跳跃1位;
Group2:选取2位,跳跃2位…
汉明码的校验:
Group1 = 1⊕3⊕5⊕7
Group2 = 2⊕3⊕6⊕7

测试题:求“0101”按照偶校验配置的汉明码
原始数据长度n = 4; 分组个数:k = 3; 汉明码排序:

比特位序列 1 2 3 4 5 6 7
汉明码 C1 C2 0 C4 1 0 1

下面是每个分组的情况:
C1分组情况:

1 3 5 7
C1 0 1 1

C1分组已经有偶数个“1”,因此C1 = 0;同理,C2 = 1; C4 = 0。
因此,汉明码为:“0100101”。

本文来自我的51CTO博客:http://blog.51cto.com/xvjunjie/2339014

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/deepking18254382067/article/details/85802821

智能推荐

关于Python中鸭子类型的理解_opp鸭子类型的含义_KimiKudo的博客-程序员资料

最近在学习Python语言,字面意思的语言,因为平常会接触一些Python的程序,经常想改却无从下手,半吊子的感觉真的很难受…所以决定用一段时间夯实一下语言基础,培养一下Python语感.昨天看到了Python多态及抽象的这部分,看到一个新词 "鸭子类型 ".可能是我书选的不好,感觉不是特别理解,所以今天找了点时间查了一些资料大概明白了.概念首先要明白鸭子类型(duck typing)的含义...

git 拉取项目覆盖本地_旧识君的博客-程序员资料

想要拉远端强制覆盖本地,试过git pull --force ,还是会提示需要commit下面的方法可以强制覆盖,留着以免忘记git fetch --allgit reset --hard origin/mastergit pull...

【GD32L233C-START】DAC输出(正弦波、锯齿波、方波)_汇编如何用da输出方波_? Miss?? ?的博客-程序员资料

1.介绍GD32L233C采用的是一款M23的内核。这个芯片据说功耗非常的低,低到什么程度呢?等后面我们再进行测试,今天我们主要来测试GD32L233C-START的DAC,既然要测试DAC,示波器是不可少的,这个实验在家做,然而LZ家里并没有示波器,不过最近看到一款好东西,LOTO虚拟示波器,看过这款示波器的参数,还不错。所以入手了一款,测量芯片输出的DAC应该没什么问题,接下来开始测试吧。2.设计首先需要输出让芯片输出DAC,而且还需要输出波形,这个稍微费点功夫,之前在GD32L233C-STAR

Unity宏定义判断运行平台和Application.platform_苦逼的程序员!!!的博客-程序员资料

宏定义判断平台: //Android平台#if UNITY_ANDROID debug.log("Android");#endif //苹果平台#if UNITY_IPHONE debug.log("IOS");#endif //Windows平台#if UNITY_STANDALONE_WIN ...

WSN(3)(2):第三章 无线传感网络的通信与组网_wsn组网技术_kuizhao8951的博客-程序员资料

通常传感器节点的通信覆盖范围只有几十米到几百米,人们要考虑如何在有限的通信能力条件下,完成探测数据的传输。无线通信是传感器网络的关键技术之一。所以我们下面介绍WSN在物理层技术、MAC协议、路由协议、传输控制四个方面的要求与特点。这里介绍路由协议与传输控制。目录路由协议路由协议概述目的:功能:WSN路由与传统路由的比较:分类:从应用角度出发的四类路由协议:典型路由协...

使用surprise框架为Movieslen数据集中的每个user推荐Top-N个item_surprise movie-len_baimao869311的博客-程序员资料

#导入相关的库文件import osfrom surprise import Datasetfrom surprise import Readerfrom surprise import SVDfrom surprise import accuracyfrom surprise.model_selection import train_test_splitfrom surprise ...

随便推点

python+selenium怎么获取ul下面最后一个li或ul中有多少个li_selenium ul li_梦想家的梦的博客-程序员资料

from selenium import webdriverchrome = webdriver.Chrome()chrome.get('https://www.bilibili.com')ul = chrome.find_element_by_xpath('//*[@id="primary_menu"]/ul')lis = ul.find_elements_by_xpath('li')...

php 全页面静态化缓存,php利用ob缓存机制实现页面静态化方法全解_十八岁的老女人的博客-程序员资料

ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_end_clean() 清除ob缓存中的内容,并关闭缓存ob_flush 清空缓存,输出内容,但不关闭缓存ob_end_flush 清空缓存,输出内容,并关闭缓存flush强制刷新输出缓存中的内容按照http协议的规定,回应内容不能在回应头之前输出,...

unity传图片php,Unity中实现Bitmap图片转文字 - Unity3d技术 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unre..._大雪菜的博客-程序员资料

前言美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.步骤准备美术提供的数字图片BMFont 字体制作软件开始1、使用BmFont先导出一张只有数字的图片字,会得到两个文件2、将得到的fnt文件改后缀为txt3、使用notepad++或Sublime Text打开(或使用其它带有列编辑功能的文本编辑器)info face="微软雅黑" size=32 bold=0 italic=0 c...

深入理解JVM(三)——配置参数_dianxu0804的博客-程序员资料

JVM配置参数分为三类参数:1、跟踪参数2、堆分配参数3、栈分配参数这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存。跟踪参数跟踪参数用于跟踪监控JVM,往往被开发人员用于JVM调优以及故障排查。1、当发生GC时,打印GC简要信息使用-XX:+PrintGC或-verbose:gc参数这两个配置参数效果是一样的,都是在发生GC时打印出简要...

Win10怎么去除桌面快捷方式图标左下角的小箭头_【云轩】的博客-程序员资料

系列文章目录 1.元件基础2.电路设计 3.PCB设计4.元件焊接默认情况下,Windows 7、Windows 8、Windows 8.1、Windows 10桌面上的快捷方式图标的左下角都带有一个小箭头,看起来很不爽,那么Win10怎么去除桌面快捷方式图标左下角的小箭头?下面小编就为大家详细介绍一下,不会的朋友快快来学习吧!方法/步骤在桌面空白处点击鼠标右键,然后选择“新建”>“文本文档”。打开新建的文本文档,然后输入下面的内容:reg add “HKEY_LOCAL_MACH

nodejs实现本地上传图片并预览功能(express4.0+)_weixin_30778805的博客-程序员资料

Express为:4.13.1 multyparty: 4.1.2代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为C:\fakepath\"+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览。前端采用通过ajax方式上传文件,使用For...

推荐文章

热门文章

相关标签