所谓合法代码集就是当代码由于未知因素导致出错后,计算机可是识别到错误的代码。不合法代码集:{(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:xxx1
x
Group3:xx1
xx
Group4:x1
xxx
…
从右向左,如果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
最近在学习Python语言,字面意思的语言,因为平常会接触一些Python的程序,经常想改却无从下手,半吊子的感觉真的很难受…所以决定用一段时间夯实一下语言基础,培养一下Python语感.昨天看到了Python多态及抽象的这部分,看到一个新词 "鸭子类型 ".可能是我书选的不好,感觉不是特别理解,所以今天找了点时间查了一些资料大概明白了.概念首先要明白鸭子类型(duck typing)的含义...
想要拉远端强制覆盖本地,试过git pull --force ,还是会提示需要commit下面的方法可以强制覆盖,留着以免忘记git fetch --allgit reset --hard origin/mastergit pull...
1.介绍GD32L233C采用的是一款M23的内核。这个芯片据说功耗非常的低,低到什么程度呢?等后面我们再进行测试,今天我们主要来测试GD32L233C-START的DAC,既然要测试DAC,示波器是不可少的,这个实验在家做,然而LZ家里并没有示波器,不过最近看到一款好东西,LOTO虚拟示波器,看过这款示波器的参数,还不错。所以入手了一款,测量芯片输出的DAC应该没什么问题,接下来开始测试吧。2.设计首先需要输出让芯片输出DAC,而且还需要输出波形,这个稍微费点功夫,之前在GD32L233C-STAR
宏定义判断平台: //Android平台#if UNITY_ANDROID debug.log("Android");#endif //苹果平台#if UNITY_IPHONE debug.log("IOS");#endif //Windows平台#if UNITY_STANDALONE_WIN ...
通常传感器节点的通信覆盖范围只有几十米到几百米,人们要考虑如何在有限的通信能力条件下,完成探测数据的传输。无线通信是传感器网络的关键技术之一。所以我们下面介绍WSN在物理层技术、MAC协议、路由协议、传输控制四个方面的要求与特点。这里介绍路由协议与传输控制。目录路由协议路由协议概述目的:功能:WSN路由与传统路由的比较:分类:从应用角度出发的四类路由协议:典型路由协...
#导入相关的库文件import osfrom surprise import Datasetfrom surprise import Readerfrom surprise import SVDfrom surprise import accuracyfrom surprise.model_selection import train_test_splitfrom surprise ...
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')...
ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_end_clean() 清除ob缓存中的内容,并关闭缓存ob_flush 清空缓存,输出内容,但不关闭缓存ob_end_flush 清空缓存,输出内容,并关闭缓存flush强制刷新输出缓存中的内容按照http协议的规定,回应内容不能在回应头之前输出,...
前言美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.步骤准备美术提供的数字图片BMFont 字体制作软件开始1、使用BmFont先导出一张只有数字的图片字,会得到两个文件2、将得到的fnt文件改后缀为txt3、使用notepad++或Sublime Text打开(或使用其它带有列编辑功能的文本编辑器)info face="微软雅黑" size=32 bold=0 italic=0 c...
JVM配置参数分为三类参数:1、跟踪参数2、堆分配参数3、栈分配参数这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存。跟踪参数跟踪参数用于跟踪监控JVM,往往被开发人员用于JVM调优以及故障排查。1、当发生GC时,打印GC简要信息使用-XX:+PrintGC或-verbose:gc参数这两个配置参数效果是一样的,都是在发生GC时打印出简要...
系列文章目录 1.元件基础2.电路设计 3.PCB设计4.元件焊接默认情况下,Windows 7、Windows 8、Windows 8.1、Windows 10桌面上的快捷方式图标的左下角都带有一个小箭头,看起来很不爽,那么Win10怎么去除桌面快捷方式图标左下角的小箭头?下面小编就为大家详细介绍一下,不会的朋友快快来学习吧!方法/步骤在桌面空白处点击鼠标右键,然后选择“新建”>“文本文档”。打开新建的文本文档,然后输入下面的内容:reg add “HKEY_LOCAL_MACH
Express为:4.13.1 multyparty: 4.1.2代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为C:\fakepath\"+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览。前端采用通过ajax方式上传文件,使用For...