汉明码(Hamming)编码与纠错原理
一 汉明码的编解码说明
(一)编码
Hamming(12,8)
N=12,表示编码后的比特长度
K=8,待编码数据的比特长度
R=N-K=4,校验位的比特长度
D=3 汉明距离:相邻行之间不同比特数据的最小值
(D-1)/2=1 纠错能力
表格1:
----------------------------------------------------------------------------------------------------
单位矩阵(I) 生成校验位的矩阵(P)
----------------------------------------------------------------------------------------------------
标号 11 10 9 8 7 6 5 4 3 2 1 0
编号 x^7 x^6 x^5 x^4 x^3 x^2 x^1 1 c3 c2 c1 c0
7 1 0 0 0 0 0 0 0 1 1 1 0
6 0 1 0 0 0 0 0 0 0 1 1 1
5 0 0 1 0 0 0 0 0 1 0 1 0
4 0 0 0 1 0 0 0 0 0 1 0 1
3 0 0 0 0 1 0 0 0 1 0 1 1
2 0 0 0 0 0 1 0 0 1 1 0 0
1 0 0 0 0 0 0 1 0 0 1 1 0
0 0 0 0 0 0 0 0 1 0 0 1 1
---------------------------------------------------------------------------------------------------
G是生成矩阵见表格1
A[7:0]
CODE=G x A
CODE[11]=A[7]
CODE[10]=A[6]
...
CODE[4]=A[0]
CODE[3]=A[7]^A[5]^A[3]^A[2] (^为异或)
CODE[2]=A[7]^A[6]^A[4]^A[2]^A[1]
CODE[1]=A[7]^A[6]^A[5]^A[3]^A[1]^A[0]
CODE[0]=A[6]^A[4]^A[3]^A[0]
(二)解码
1.求校验矩阵H
H = {P^T,I(N-K)} (^T表示转置; I(N-K)=I(4)表示4x4单位矩阵)
H为4x11矩阵
表2:
----------------------------------------------------------------------------------------------------------
11 10 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------------------------------------------------------------------
p7 p6 p5 p4 p3 p2 p1 P0 I3 I2 I1 I0
-----------------------------------------------------------------------------------------------------------
3 1 0 1 0 1 1 0 0 1 0 0 0
2 1 1 0 1 0 1 1 0 0 1 0 0
1 1 1 1 0 1 0 1 1 0 0 1 0
0 0 1 0 1 1 0 0 1 0 0 0 1
----------------------------------------------------------------------------------------------------------
2.求校正子S
S = H^T * U (U为待解码的数据)
S[3] = U[11]^U[9]^U[7]^U[6]^U[3]
S[2] = U[11]^U[10]^U[8]^U[6]^U[5]^U[2]
S[1] = U[11]^U[10]^U[9]^U[7]^U[5]^U[4]^U[1]
S[0] = U[10]^U[8]^U[7]^U[4]^U[0]
3.根据假设错误模式定位错误比特
通过错误模式推导校正子Si,i是index指的是错误模式的种类,因为我们汉明码解码数据有12bit,
所以错误模式有12种,还包括一种全部正确的模式。
Si = H^T * Ei
表3:
-----------------------------------------------------------------------------
Ei H^T Si 编号
----------------------------------------------------------------------------
12'b0000_0000_0000 1110 0000
12'b0000_0000_0001 0111 0001 0
12'b0000_0000_0010 1010 0010 1
12'b0000_0000_0100 0101 0100 2
12'b0000_0000_1000 1011 1000 3
12'b0000_0001_0000 1100 0011 4
12'b0000_0010_0000 0110 0110 5
12'b0000_0100_0000 0011 1100 6
12'b0000_1000_0000 1000 1011 7
12'b0001_0000_0000 0100 0101 8
12'b0010_0000_0000 0010 1010 9
12'b0100_0000_0000 0001 0111 10
12'b1000_0000_0000 1110 11
----------------------------------------------------------------------------
4.优化数据修正方法
C[11] = U[11]^(S[3]&S[2]&S[1]&(~S[0]))
C[10] = U[10]^(~S[3]&S[2]&S[1]&S[0])
C[9] = U[9]^(S[3]&(~S[2])&S[1]&(~S[0]))
C[8] = U[8]^(S[3]&(~S[2])&S[1]&S[0])
C[7] = U[7]^(S[3]&(~S[2])&S[1]&S[0])
C[6] = U[6]^(S[3]&S[2]&(~S[1])&(~S[0]))
C[5] = U[5]^((~S[3])&S[2]&S[1]&(~S[0]))
C[4] = U[4]^((~S[3])&(~S[2])&S[1]&S[0])
C[3] = U[3]^(S[3]&(~S[2])&(~S[1])&(~S[0]))
C[2] = U[2]^((~S[3])&S[2]&(~S[1])&(~S[0]))
C[1] = U[1]^((~S[3])&(~S[2])&S[1]&(~S[0]))
C[0] = U[0]^((~S[3])&(~S[2])&(~S[1])&S[0])
例如:
待编码数据:8'b0011_0101
编码后数据:CODE[11:4] = 0011_0101
CODE[3:0] = 0000
CODE[11:0] = 12'b0011_0101_0000
经过信道,假设接收到的数据:
U[11:0] = 12'b0011_0101_0001
校正子:
S[3] = 0
S[2] = 0
S[1] = 0
S[0] = 1
S[3:0] = 4'b0001
根据表3,可知是在接收数据的最低位发生错误
汉明码(Hamming)编码与纠错原理的更多相关文章
- Atitit 视频编码与动画原理attilax总结
Atitit 视频编码与动画原理attilax总结 1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. ...
- 【转】Unicode utf8等编码类型的原理
原文地址http://www.cnblogs.com/daxiong2014/p/4768681.html Unicode utf8等编码类型的原理 1.ASCII码 我们知道,在计算机内部,所有的 ...
- Java-IO流之转换流的使用和编码与解码原理
一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...
- Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象 手工装配依赖对象,在这种方式中又有两种编 ...
- 汉明码(hamming code)
hamming code用于磁盘RAID 2中, 关于汉明码的讲解可以看这篇博文,介绍的很详细.最重要是最后的结论: 汉明码属于分组奇偶校验,P4P2P1=000,说明接收方生成的校验位和收到的校验位 ...
- Base64编码与解码原理
Base64编码是使用64个可打印ASCII字符(A-Z.a-z.0-9.+./)将任意字节序列数据编码成ASCII字符串,另有“=”符号用作后缀用途. base64索引表 base64编码与解码的基 ...
- [转]Unicode utf8等编码类型的原理
FROM:http://www.cnblogs.com/daxiong2014/p/4768681.html 1.ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进 ...
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...
- Unicode utf8等编码类型的原理
1.ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
随机推荐
- async/await 的使用
async : 使用 async 修饰符可将方法.lambda 表达式或匿名方法指定为异步. 如果对方法或表达式使用此修饰符,则其称为异步方法 await: await 运算符应用于异步方法中的任务, ...
- krpano生成全景图
1.下载krpano工具 第一次我下载的有水印,但是第二次下载的便没了,原因我也不清楚.下载好后不要急着打开.exe程序 2.生成全景图 将全景图拖入MAKE VTUOR (NORMAL) DROPL ...
- 用户端访问centos7上面的tomcat,访问页面出现的非常的慢?
原因:因为客户端访问centos7上面的tomcat会先 建立session连接,这个连接会用到random的随机数,在linux系统中有一个熵池的概念(熵池是一个内核参数), 他要 用熵池里面的随机 ...
- UI组件--element-ui合计行在横向滚动条下面的解决方法
使用element-ui合计功能, 因列数较多, 产生横向滚动条: 但是合计行却在滚动条下面, 拖动滚动条合计行不会跟着横向滚动. 在当前页面添加以下样式: <style lang='less' ...
- java笔记 -- java字符串
概念: Java字符串就是Unicode字符序列, Java没有内置的字符串类型, 而是在标准Java类库中提供了一个预定义类. 每个用双引号括起来的字符串都是String类的一个实例.String ...
- [经验]怎么删除“通过QQ/TIM发送到”右键菜单
首先打开QQ主面板上的系统设置 选择[基本设置]-[文件管理]菜单,并将如图所示的选项去掉勾选即可
- java网络编程小白教程
1 网络编程 1.1 网络 把多台终端(计算机)通过物理线路连接起来,形成网络.便于交换数据.共享信息.组成更强大的逻辑体. 1.1.1 网络通信三要素 [1]IP地址:唯一标识网络上的每一台计算机 ...
- JavaScrpt常用的封装方法
1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ...
- laravel框架安装Curl扩展
然后进入根目录执行命令 composer update 完毕.
- mac常用操作
Command+Shift+. 可以显示隐藏文件.文件夹 touch a.txt 新建txt文件