首页 > 其他分享 >关于海明码

关于海明码

时间:2023-05-15 11:44:06浏览次数:32  
标签:P1 明码 个数 校验 L7 关于 序列

前置知识:

海明码:

  1. 海明码一般只能纠1位错。
  2. 海明码默认进行偶校验(除非特殊说明使用奇校验)。
  3. 海明码是一串只由0和1组成的序列

奇偶校验:

  1. 奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
  2. 偶校验:一串由0和1组成的序列中1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0。

````例:

``````1111 奇校验就是 11111 偶校验就是 01111
``````1110 奇校验就是 01110 偶校验就是 11110

计算步骤

一、计算校验位的个数

计算   1011  的海明码 为例

公式:2^r >= m + r + 1

r:校验位的个数

m:信息位的个数  1011的信息位个数为:4

 如图: r最小为3,即校验位的个数为3

二、分组

确定校验位在海明码中的位置2^1\2^2\2^3

校验码只出现在第2的r次方位置上,这里用P表示

分组:对P进行按进制位分组

先从P1开始,P1位置二进制中的最后一位是1(不看0),所以将所有位置二进制中最后一位为1的分为一组

即:
L1,L3,L5,L7

以此类推

L1,L3,L5,L7 将对应位置的序列值替换 P1,1,1,1

L2,L3,L6,L7 =====================》 P2,1,0,1

L4,L5,L6,L7 P3,1,0,1

校验码计算:
偶校验:一串由0和1组成的序列中1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0。

第一组中1的个数是3,为奇数,所以P1应为1,保证1的个数为偶数,同理P2=0,P3=0

将P带回序列得到偶校验码为 1010101

奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。

第一组中1的个数是3,为奇数,所以P1应为0,保证1的个数为奇数,同理P2=1,P3=1

将P带回序列得到奇校验码为 1011110

纠错:
假如传输过程中将1011传成了 1001

按照偶校验纠错:校验位P的值刚刚已经计算出P1=1,P2=0,P3=0

按照上方的方法进行分组

根据纠错位E进行判断错误的位置

E1,L1,L3,L5,L7 将对应位置的序列值替换 E1,1,1,0,1

E2,L2,L3,L6,L7 =====================》 E2,0,1,0,1

E3,L4,L5,L6,L7 E3,0,0,0,1

根据偶校验得出E1=1,E2=0,E3=1,按照E3E2E1的顺序合并得到101,101为10进制的5,所以第5个位置出错,如表所示是正确的

标签:P1,明码,个数,校验,L7,关于,序列
From: https://www.cnblogs.com/origin-zy/p/17401399.html

相关文章

  • matlab设计,综合能源系统优化方向,关于主从博弈,多时间尺度 综合需求响应。
    matlab设计,综合能源系统优化方向,关于主从博弈,多时间尺度综合需求响应。非标价ID:44100668353371451......
  • 记录以下关于我家的网络ip部署如何将所有设备的ip部署在同一网段下
    先说下家里的网络大概是如何连接的:首先使用的是移动光纤,入户以后由猫分出4个LAN口,分别对应我家客厅,主卧,书房,次卧,其中主卧和次卧基本没有使用.主要客厅和书房在用.客厅连接的是无线路由器,新款的无线路由器可以设置'有线中继'功能,该功能保证了连接到无线路由器的所有设备......
  • 2023/5/15之前关于MongoDB的学习实践
    showdbs/collections/tables;use库创建库db.dropDatabase();删除库db.createCollections('');创建集合db.集合.drop();删除集合db.集合.insertOne/Many集合中插入数据db.集合.remove();删除文档for(leti=x;i<x;i++){}循环操作db.集合.update({条件},{$set:{更改后}})......
  • 关于 UE4 TMap 的几种遍历方式
    测试数据1TMap<int32,FString>Map1;2TMap<int32,FString>Map2;34Map1.Add(1,TEXT("AAA"));56ShowMap_1(Map1,1);7ShowMap_2(Map1,1);8ShowMap_3(Map1,1);  1. 通过Key直接查找Map1//通过Key直接查......
  • 关于 UE4 TMap
    1.前一篇关于通过Key查找Value的部分:1. 通过Key直接查找Map2. 通过Find查找Map3. 通过FindRef查找Map 2. 通过Value查找KeyFindKey(Value)1autoValFindKey=[](constTMap<int32,FString>MapType,FStringValue)->void2{3......
  • 写一篇关于时区转换的 astimezome 的使用
    Python内置的datetime模块真的很烂,默认的所有时间出来都是不带时区的,所以一般在时间的处理上面,我一般用三方的arrow但由于每次配置环境都要装arrow有时候很不方便,就想着尝试使用datetime,想不到一用就掉坑了。 在一次装换为美东时间的代码中,我尝试如下运行d=dateti......
  • 关于 UE4 TMap 的几种遍历方式
    测试数据1TMap<int32,FString>Map1;2TMap<int32,FString>Map2;34Map1.Add(1,TEXT("AAA"));56ShowMap_1(Map1,1);7ShowMap_2(Map1,1);8ShowMap_3(Map1,1);  1. 通过Key直接查找Map1//通过Key直接查......
  • 关于 UE4 TMap
    1.前一篇关于通过Key查找Value的部分:1. 通过Key直接查找Map2. 通过Find查找Map3. 通过FindRef查找Map 2. 通过Value查找KeyFindKey(Value)1autoValFindKey=[](constTMap<int32,FString>MapType,FStringValue)->void2{3......
  • 关于 UE4 的 TArray
    TArray,是UE4的可动态扩容数组容器,是UE4里最常见,也是用的最多的一种容器,类似于STL中的vector 1.遍历Array的三种方法1.1下标遍历Array(lambda写法)1//下标法遍历Array2autoForeach_1=[](TArray<int32>_arr)->void3{4for(int32i=0;i<_arr......
  • 关于 UE4 的 TSet
    TSet是一种快速容器类,(通常)用于在排序不重要的情况下存储唯一元素。TSet类似于TMap和TMultiMap,但有一个重要区别:TSet是通过对元素求值的可覆盖函数,使用数据值本身作为键,而不是将数据值与独立的键相关联。TSet可以非常快速地添加、查找和删除元素。默认情况下,TSet不支持重......