软考-校验码

本文介绍了数据校验的基础知识,包括码距的概念,以及不同类型的校验方法。奇偶校验能检测单位错误但无法纠错;CRC校验能检测错误但不能定位;海明码则能既检测又定位错误。海明码通过增加校验位,确保了码距,提高了错误检测和纠正的效率。

校验码

校验码基础知识

码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据校验码的码距

例如:用4位二进制表示16种状态,则有16个不同的码字,此时码距为1.如0000与0001

奇偶校验

奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数
偶校验:整个校验码(有效信息为和校验位)中“1”的个数为偶数

奇偶校验,可检查1位(奇数位)的错误,不可纠错

CRC循环冗余校验码

CRC校验,可检错,不可纠错

编码方法:在k位信息码后拼接r位校验码。
把接受到的CRC码用约定的生成多项式G(X)去除(模二除法,如果正确,则余数为0;如果某一位出错,则余数不为0

海明校验码

在有效信息位中加入几个校验位形成海明码,使码距比较均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据
2^r >= m+r+1
在这里插入图片描述

### 校验码的作用与生成方式 #### 1. 校验码的作用 校验码的主要作用是对数据传输过程中的错误进行检测。通过增加额外的校验位,能够判断接收的数据是否存在单比特错误或其他特定类型的错误。具体来说: - **奇偶校验码**用于检测单一比特错误,无法纠正错误[^1]。 - 如果一个编码系统的原始码距为1,则通过添加一位奇偶校验码可以使码距变为2,从而提高其检错能力[^2]。 #### 2. 奇偶校验码的生成方式 奇偶校验码分为两种形式:奇校验和偶校验。以下是它们的具体生成规则: - **奇校验**:计算有效信息位中“1”的总个数。如果总数已经是奇数,则校验位设为0;如果是偶数,则校验位设为1,使得整个校验码中“1”的数量保持为奇数[^1]。 - **偶校验**:同样统计有效信息位中“1”的总个数。如果总数是偶数,则校验位设为0;若是奇数,则校验位设为1,从而使整个校验码中“1”的数量成为偶数[^2]。 下面是一个简单的 Python 实现示例来生成奇偶校验码: ```python def generate_parity(data, parity_type='odd'): ones_count = sum([int(bit) for bit in data]) if parity_type.lower() == 'odd': return '1' if ones_count % 2 == 0 else '0' elif parity_type.lower() == 'even': return '0' if ones_count % 2 == 0 else '1' # 示例 data_bits = "1011" parity_bit_odd = generate_parity(data_bits, 'odd') # 输出 '0' parity_bit_even = generate_parity(data_bits, 'even') # 输出 '1' print(f"Odd Parity Bit: {parity_bit_odd}, Even Parity Bit: {parity_bit_even}") ``` #### 3. 海明校验码的特点及其生成方式 海明校验码是一种更高级别的校验机制,不仅能够检测多位错误,还具备一定的纠错功能。它通过对多个奇偶校验组的设计实现这一目标。具体的生成流程如下: - 首先,在有效信息位之间插入一定数量的校验位,这些校验位的位置通常是 $2^n$ (n=0,1,2,...)的形式[^3]。 - 将每一位分配至不同的奇偶校验组中,并分别计算各组的奇偶性。 - 若某一位置发生错误,会引起对应校验组的变化,进而定位并修正该错误。 由于涉及复杂的分组逻辑,这里提供一段伪代码描述如何构建海明码: ```plaintext function hamming_encode(data): n = length of data r = calculate number of redundant bits (r >= log(n+r+1)) total_length = n + r initialize encoded_data with zeros of size total_length place data bits into positions not powers of two compute each redundancy bit using appropriate parity check groups return encoded_data ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值