一文读懂数字信号处理中的汉明编码Hamming Coding

2023-10-10 11:30

本文主要是介绍一文读懂数字信号处理中的汉明编码Hamming Coding,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是汉明编码?

       汉明编码(Hamming Coding)属于前向纠错编码(Forword Error Correction Coding)的一种,除汉明编码外,前向纠错编码通常还包括BCH码,Reed-solomon(RS)码,卷积编码等。前向纠错编码技术通常分为两部分,一是在发射端,对信源进行编码,二是在接收端,对接收数据进行解码、检错、纠错。

二、汉明编码是如何纠错的?

      汉明编码也可归类为一种线性分组码,例如最常用的汉明码(7,4),指的就是把原始信息比特每4个比特为一个小的分组,在汉明编码时,对每个分组进行编码,而不是对每个比特进行编码,编码后,每个小组的比特数从4变成7,亦即增加了3bit的数据,用于检错和纠错。

     现在将原始4bit信息表示为(a_3,a_2,a_1,a_0),而汉明编码产生的3bit监督位表示为(b_2,b_1,b_0),原始的4bit信息,是分组而来,也就是在汉明编码前,需要将数据每4bit分为一组。而3bit的监督位,则是根据以下规则产生的:

b_2 \oplus a_3 \oplus a_2 \oplus a_1 = 0       规则R1

b_1 \oplus a_3 \oplus a_2 \oplus a_0 = 0       规则R2

b_0 \oplus a_3 \oplus a_1 \oplus a_0 = 0       规则R3

其中,\oplus表示异或运算。根据以上三个规则,可以算得全部的原始信息位所对应的监督位的值,如表1所示。

       在编码的时候,即可以根据上述的3个规则来产生监督位,Hamming编码的过程,其实可以分为两步,一是将待编码数据按要求先分组,二是根据规则利用原始信息产生监督信息。在解码的时候,需要同样根据这3个规则,来判断到底是是否有错,到底是哪个比特出了错。表2中R1R2R3分别表示规则1、规则2、规则3,满足对应的规则,则值为0,不满足则值为1。通过计算接收的7bit的数据之间是否满足规则R1R2R3,就可以知道是哪个bit在传输的时候出错。换种说法就是,编码后的7bit数据,每个bit和其它几个bit是有关联的,这个关联就是上面所述的规则R1R2R3,从是否满足规则R1R2R3推导出出错的bit。知道了哪个bit出错了之后,直接将出错的bit取反即可实现纠错。从这也可以看出,(7,4)hamming码只能实现1bit的纠错。

      接下来,举一个简单的例子来再次说明一下(7,4)Hamming 编码的原理。例如,分组后,得到的4bit原始数据为(a_3,a_2,a_1,a_0)=[1 0 1 1],然后根据规则R1R2R3(懒得计算可参考表1),计算得到监督位为(b_2,b_1,b_0)=[0 0 1]。从而编码后,得到7bit的数据为[1011 001]。假设在数据传输过程中,有1个bit传输出错,数据从[1011 001]变成了[1010 001],这时候,在解码的时候,根据接收的数据[1010 001],代入规则R1R2R3中计算,

b_2 \oplus a_3 \oplus a_2 \oplus a_1 = 0       规则R1

b_1 \oplus a_3 \oplus a_2 \oplus a_0 = 1       规则R2

b_0 \oplus a_3 \oplus a_1 \oplus a_0 = 1       规则R3

       从上面的计算可以发现,数据bit之间的关系满足规则R1,但不满足规则R2、R3。满足规则R1,说明b2,a3,a2,a1是对的,从而在假设错1bit的情况下,如果同时不满足规则R2和R3,就可以知道是bit a0出错了,对比表2中R1R2R3=001时,也可推断是bit a0出错了。知道是bit a0出错,将bit a0取反,可以得到[1011 001],从而实现数据的纠错。

       以上即为个人在学习Hamming(7,4)编码时的一些总结,分享到这里,如有理解错误,还望指正,虚心接收大神们的指导。

 

这篇关于一文读懂数字信号处理中的汉明编码Hamming Coding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180134

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u