汉明码生成

  • 步骤一、确定校验位个数
  • 步骤二、确定校验位位置
  • 步骤三、分组
    • 1、十进制式下标
    • 2、对应位
    • 3、数值位
    • 4、二进制式下标
    • 5、确认分组
  • 步骤四、校验位数值的确定
  • 总结
  • 例题分析

2020-9-11修正说明:
原文将确定校验位个数的公式:2^k - 1 >= n + k写成了:2^k - 1 <= n + k,感谢weixin_43802386的指正,目前已改成正确的公式,在实例使用的地方也进行了修正,同时对原文一些用词不太准确或冗杂的地方做了修改并对分组这一步骤进行了新的排版。希望原文的失误没有给小伙伴带来困扰。


步骤一、确定校验位个数

确定校验位的个数是比较简单的一步,主要就是利用公式:2^k - 1 >= n + k

其中n为要发送的这个数据的二进制位位数,也就是原始的待发送数据有几个数字;k为检验位需要的位数。考试中常见的检验位并不会很大,一般也就是2到4位,很容易就算出来。

步骤二、确定校验位位置

校验位所处的位置也是有规定的,校验位必须放在位置下标为2^(i - 1)的位置,从理解上来说就是必须放在位置标号为2的整数次方的位置,这里用i - 1是因为i从1开始,而我们需要从0次方算。

步骤三、分组

进行分组的原因是我们要知道哪些校验位应该由哪些数据位决定。分组基于我们前两步的基础上,具体操作如下:

1、十进制式下标

根据第一步确定了一共要发送n + k位数据,位置下标从1 到(n + k)写在第一行上;

2、对应位

第二行做对应位,根据第二步算出的校验位位置先安排校验位,再将数据位按照原来的顺序依次填到剩下的位置上,这里需要注意数据的顺序是不变的;

3、数值位

第三行为数值位,将待发送数据数值写到对应位置(这里只是为了方便,不写也不影响)。

4、二进制式下标

将第一行位置标号用二进制表示,比如:1 --> 001(这里的位数以k的为准,此处以3为例),位置的标号要竖着写,也就是说位置标号的每一个二进制位对应一行。这里要注意的是,在写列的编号的时候,你可以反着写,即从下到上把1写成100;也可以顺着写,即从上到下,比如1写成001。两种都不会改变结果,只是第二种感觉更顺一点,因为我们的习惯就是上到下,所以第一次看到另一种写法的时候就不太理解,他怎么想到的这个,但是这种也是有优点的,就是你写出来的分组,校验位正好是排好序的,也就是第一组正好对应第一位检验位,其他也是一 一对应,而从上到下正好相反,所以根据自己的习惯就行。

5、确认分组

在第4步之后,在二进制化的位置标号那里从行去看,同一行中二进制位为1的同属一个组,这样就能够分好组了。

步骤四、校验位数值的确定

分好组之后,这一步就很简单了,只需要让检验位 = 同一组里的数据位的异或就可以了。这里关于异或的计算,看到一篇博文上说可以直接看1的个数,奇数个结果为1,偶数个结果为0,这是自己之前没注意到,这样的计算确实能在计算的时候帮我们节省一些时间。

总结

从篇幅就可以看出,汉明码的关键步骤在于如何确定分组, 其他步骤都是很固定的套路,基本就是利用公式。

例题分析

发送数据为0101,采用汉明码编码,发送端的发出去的数据是?
1)确定发送数据的位数
数据位n: 4 ; 检验位k:代求
把已知的数据带进2^k - 1 >= n + k --> 2^k - 1 <= 4+ k;具体的算法我也不知道怎么算,我自己的的话就用带入法,就是你大概看下K可以去多少,然后试一下,一般涉及的难度也不会太大,我们直接就能看出来的那种。

2) 确定校验位的位置
根据的我们的原则,就只需要从2的0次方开始, k个2的整数次方就可以了,比如这里k是3,那么就计算2的0到2次方,也就是:1,2,4

3)确定分组
我们就简单粗暴的用标号直接代表位置好了,因为看到有的教材还用了字母加下标的。为了方便描述把数据对应d1到d4,检验位对应c1到c3。

  • 先安排校验位,结果如下
  • 将数据位按原顺序放入剩下的位置
  • 填写数据位
    * 位置下标变成二进制
    根据我们前面的描述,这里就需要三行,将提到两个不同的安排方式作对比

从上到下安排
分组:c3d2d3d4、c2d1d3d4、c1d1d2d4

从下到上排
分组:c1d1d2d4、c2d1d3d4、c3d2d3d4

  • 从行去看确定分组
    从表格就可以很清晰的看出每个分组,标红的数字为1的对应位就是我们分组中的具体值。由表可知三个分组分别为:c1d1d2d4、c2d1d3d4、c3d2d3d4。从两个表格的对比我们就可以明确看出各自的优缺点。

4)校验位数值计算
根据公式或计算技巧直接算就可以了。
c1 = 0;c2 = 1; c3 = 0

注:这一步虽然简单,但还是比较容易出错的(也可能只有我会这么干吧),我容易出错的点呢就是我计算的时候想的是用数据值去计算,但是我总是会用位置标号的数值去计算,比如算c1的时候我们应该是用d1d2d4也就是011算,然后我会直接看到“位置标号二进制化”那里去,也就是会看成是用111来算,这样的话出来的每个检验位都一样了。虽然有点蠢的犯错方式,但是不知道有没有人会掉进同样的坑里。

  • 确定发送数据
    把计算好的校验位放到自己的位置上就可以了。

汉明码生成过程图文详解相关推荐

  1. 用Wex5平台打包生成App图文详解(Android)

    用Wex5平台打包生成App图文详解(Android) 第一步:到起步官网下载并解压好Wex5开发工具:http://www.wex5.com/downloads/ 第二步:在解压的目录下打开开发工具 ...

  2. 广联达2018模板算量步骤_老师傅带你学造价,广联达GTJ2018图文详解,小白也能学会的软件...

    在GTJ2018问世之前,土建造价人员有三个软件是必会的,一个是GGJ主打钢筋算量,一个是GCL主打土建算量,还有一个是GBQ主要是套定额用来计价的软件. 那时候如果计算一个工程的工程量,首先要用GG ...

  3. 计算机刷新的作用,图文详解Win8重置和刷新功能:超强自我治愈

    直接自愈,Windows8出故障之后,伴随着重置和刷新两大新功能,世上无难事了啊.微软Windows8团队今日在官方博客详细向用户解释Win8的重置和刷新PC功能,将可一键复位系统到最佳状态.视频演示 ...

  4. 计算机网络管理的常用命令,网络管理常用命令图文详解.pdf

    网络工程师必备 – 网络管理常用命令图文详解 网络工程师必备 网络管理常用命令 图文详解 V1.0 V1.0 包含 ping.ipconfig.netstat.nbtstat.tracert. pat ...

  5. 全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...

    不多说,直接上干货! 缘由: (1)最近看到情侣零点送祝福,感觉还是很浪漫的事情,相信有很多人熬夜为了给爱的人送上零点祝福,但是有时等着等着就睡着了或者时间并不是卡的那么准就有点强迫症了,这是也许程序 ...

  6. SSL之CA证书颁发机构安装图文详解

    上一节我们说到,在验证公钥安全性时,是在CA机构颁发的包含用户的公钥及其身份信息的数字证书,数字证书由权威机构--CA签发.这个CA权威机构可以是自己的服务器也可以是国际公认的CA权威机构.下面我就来 ...

  7. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  8. x264代码剖析(一):图文详解x264在Windows平台上的搭建

    x264代码剖析(一):图文详解x264在Windows平台上的搭建 X264源码下载地址:http://ftp.videolan.org/pub/videolan/x264/ 平台:win7 PC. ...

  9. 电脑连接电视方法详解_查看电脑配置的几种方法(图文详解)

    很多朋友想要了解自己电脑详细的配置的时候,一般都是通过第三方的工具检测的.那么有没有其他更好的方法可以在win系统下查看电脑配置呢?今天我就给大家分享一下如何查看电脑配置. 查看电脑配置的几种方法图文 ...

最新文章

  1. Sublime Text保存文件时自动去掉行末空格
  2. namenode需要多大内存
  3. 七种与輻射和平相處的妙法 - 生活至上,美容至尚!
  4. html获取文本框中的文字,JavaScript实现input输入框点击获取文字内容
  5. 商女不知亡国恨,一天到晚敲代码
  6. P2414-[NOI2011]阿狸的打字机【AC自动机,树状数组】
  7. LOJ dfs序1234
  8. wdcp mysql远程_CentOS下WDCP下的MYSQL开启远程连接
  9. 软件测试项目计划书总结,软件测试项目计划书.doc
  10. 数据结构_二叉树非递归遍历
  11. 云计算之路-试用Azure:搭建自己的内网DNS服务器
  12. jQuery - 添加元素
  13. 知乎:1.03亿月活用户,获得感战略下的内容质量和商业化布局难平衡
  14. 随机效应估算与固定效应估算_面板数据固定效应 vs. 随机效应
  15. mysql 查看 脏页_MySQL:刷脏页
  16. 密钥配送问题解决方法
  17. 解决QQ远程控制,调用系统应用卡死问题的解决方法的
  18. 爬取飞卢小说网的小说
  19. matlab学习增强学习,使用 MATLAB 和 Simulink 进行强化学习
  20. 企业级网络架构—云平台高可用网络的修炼之道

热门文章

  1. 电脑关闭休眠模式清理 C盘内存
  2. 高精地图语义分割标注
  3. 迈克尔·杰克逊Michael Jackson,仅此记念
  4. WebSocket的那些事(4-Spring中的STOMP支持详解)
  5. PTA实验3-1 求一元二次方程的根 (20 分)
  6. windows下安装启动rocketmq可视化界面
  7. 上海大学数字媒体创意工程875多媒体技术基础考研经验分享
  8. AVFoundation开发秘籍笔记-03资源和元数据
  9. 【Java】Swing入门
  10. JAVAswing编写界面