- 数字电子教程
- 数字电子 - 首页
- 数字电子基础
- 数字系统类型
- 信号类型
- 逻辑电平和脉冲波形
- 数字系统组件
- 数字逻辑运算
- 数字系统优点
- 数制
- 数制
- 二进制数表示
- 二进制运算
- 带符号二进制运算
- 八进制运算
- 十六进制运算
- 补码运算
- 进制转换
- 进制转换
- 二进制转十进制
- 十进制转二进制
- 二进制转八进制
- 八进制转二进制
- 八进制转十进制
- 十进制转八进制
- 十六进制转二进制
- 二进制转十六进制
- 十六进制转十进制
- 十进制转十六进制
- 八进制转十六进制
- 十六进制转八进制
- 二进制码
- 二进制码
- 8421 BCD码
- 余3码
- 格雷码
- ASCII码
- EBCDIC码
- 码制转换
- 错误检测与纠正码
- 逻辑门
- 逻辑门
- 与门
- 或门
- 非门
- 通用门
- 异或门
- 异或非门
- CMOS逻辑门
- 使用二极管电阻逻辑的或门
- 与门与或门
- 双电平逻辑实现
- 阈值逻辑
- 布尔代数
- 布尔代数
- 布尔代数定律
- 布尔函数
- 德摩根定理
- SOP和POS形式
- POS到标准POS形式
- 最小化技术
- 卡诺图化简
- 三变量卡诺图
- 四变量卡诺图
- 五变量卡诺图
- 六变量卡诺图
- 无关项条件
- 奎因-麦克拉斯基方法
- 最小项和最大项
- 规范式和标准式
- 最大项表示
- 使用布尔代数化简
- 组合逻辑电路
- 数字组合电路
- 数字运算电路
- 多路复用器
- 多路复用器设计过程
- 多路复用器通用门
- 使用4:1多路复用器的2变量函数
- 使用8:1多路复用器的3变量函数
- 多路分解器
- 多路复用器与多路分解器
- 奇偶校验位生成器和校验器
- 比较器
- 编码器
- 键盘编码器
- 优先编码器
- 译码器
- 算术逻辑单元
- 7段LED显示器
- 码制转换器
- 码制转换器
- 二进制转十进制转换器
- 十进制转BCD转换器
- BCD转十进制转换器
- 二进制转格雷码转换器
- 格雷码转二进制转换器
- BCD转余3码转换器
- 余3码转BCD转换器
- 加法器
- 半加器
- 全加器
- 串行加法器
- 并行加法器
- 使用半加器的全加器
- 半加器与全加器
- 使用与非门的全加器
- 使用与非门的半加器
- 二进制加法/减法器
- 减法器
- 半减器
- 全减器
- 并行减法器
- 使用两个半减器的全减器
- 使用与非门的半减器
- 时序逻辑电路
- 数字时序电路
- 时钟信号和触发
- 锁存器
- 移位寄存器
- 移位寄存器应用
- 二进制寄存器
- 双向移位寄存器
- 计数器
- 二进制计数器
- 非二进制计数器
- 同步计数器设计
- 同步计数器与异步计数器
- 有限状态机
- 算法状态机
- 触发器
- 触发器
- 触发器转换
- D触发器
- JK触发器
- T触发器
- SR触发器
- 带时钟的SR触发器
- 无时钟的SR触发器
- 带时钟的JK触发器
- JK到T触发器
- SR到JK触发器
- 触发方式:触发器
- 边沿触发触发器
- 主从JK触发器
- 竞争冒险现象
- A/D和D/A转换器
- 模数转换器
- 数模转换器
- DAC和ADC集成电路
- 逻辑门的实现
- 用与非门实现非门
- 用与非门实现或门
- 用与非门实现与门
- 用与非门实现或非门
- 用与非门实现异或门
- 用与非门实现异或非门
- 用或非门实现非门
- 用或非门实现或门
- 用或非门实现与门
- 用或非门实现与非门
- 用或非门实现异或门
- 用或非门实现异或非门
- 使用CMOS的与非/或非门
- 使用与非门的全减器
- 使用2:1多路复用器的与门
- 使用2:1多路复用器的或门
- 使用2:1多路复用器的非门
- 存储器件
- 存储器件
- RAM和ROM
- 高速缓存存储器设计
- 可编程逻辑器件
- 可编程逻辑器件
- 可编程逻辑阵列
- 可编程阵列逻辑
- 现场可编程门阵列
- 数字电子系列
- 数字电子系列
- CPU架构
- CPU架构
- 数字电子资源
- 数字电子 - 快速指南
- 数字电子 - 资源
- 数字电子 - 讨论
错误检测与纠正码
我们知道,对应于两个不同范围的模拟电压,比特0和1。因此,在从一个系统到另一个系统的二进制数据传输过程中,也可能会添加噪声。因此,在另一个系统接收到的数据中可能会出现错误。
这意味着比特0可能会变为1,或者比特1可能会变为0。我们无法避免噪声的干扰。但是,我们可以首先通过检测是否存在任何错误并纠正这些错误来恢复原始数据。为此,我们可以使用以下代码。
- 错误检测码
- 错误纠正码
错误检测码
错误检测码用于检测接收到的数据(比特流)中存在的错误。这些代码包含一些比特,这些比特被包含(附加)到原始比特流中。如果在原始数据(比特流)传输过程中发生错误,这些代码会检测到该错误。
示例 - 奇偶校验码,汉明码。
错误纠正码
错误纠正码用于纠正接收到的数据(比特流)中存在的错误,以便我们获得原始数据。错误纠正码也使用类似于错误检测码的策略。
示例 - 汉明码。
因此,为了检测和纠正错误,在传输时会在数据位后面附加额外的位。
奇偶校验码
很容易将一个奇偶校验位包含(附加)到原始比特流的MSB左侧或LSB右侧。根据所选奇偶校验的类型,奇偶校验码有两种类型,即偶校验码和奇校验码。
偶校验码
如果二进制码中存在偶数个1,则偶校验位的取值为零。否则,它应该为一。这样,偶校验码中存在偶数个1。偶校验码包含数据位和偶校验位。
下表显示了每个3位二进制码对应的偶校验码。这里,偶校验位包含在二进制码的LSB右侧。
二进制码 | 偶校验位 | 偶校验码 |
---|---|---|
000 | 0 | 0000 |
001 | 1 | 0011 |
010 | 1 | 0101 |
011 | 0 | 0110 |
100 | 1 | 1001 |
101 | 0 | 1010 |
110 | 0 | 1100 |
111 | 1 | 1111 |
这里,偶校验码中存在的比特数为4。因此,这些偶校验码中可能的偶数个1为0、2和4。
- 如果另一个系统接收了这些偶校验码之一,则接收到的数据中没有错误。除偶校验位之外的位与二进制码的位相同。
- 如果另一个系统接收到的不是偶校验码,则接收到的数据中存在错误。在这种情况下,我们无法预测原始二进制码,因为我们不知道错误的位位置。
因此,偶校验位仅用于检测接收到的奇偶校验码中的错误。但它不足以纠正错误。
奇校验码
如果二进制码中存在奇数个1,则奇校验位的取值为零。否则,它应该为一。这样,奇校验码中存在奇数个1。奇校验码包含数据位和奇校验位。
下表显示了每个3位二进制码对应的奇校验码。这里,奇校验位包含在二进制码的LSB右侧。
二进制码 | 奇校验位 | 奇校验码 |
---|---|---|
000 | 1 | 0001 |
001 | 0 | 0010 |
010 | 0 | 0100 |
011 | 1 | 0111 |
100 | 0 | 1000 |
101 | 1 | 1011 |
110 | 1 | 1101 |
111 | 0 | 1110 |
这里,奇校验码中存在的比特数为4。因此,这些奇校验码中可能的奇数个1为1和3。
- 如果另一个系统接收了这些奇校验码之一,则接收到的数据中没有错误。除奇校验位之外的位与二进制码的位相同。
- 如果另一个系统接收到的不是奇校验码,则接收到的数据中存在错误。在这种情况下,我们无法预测原始二进制码,因为我们不知道错误的位位置。
因此,奇校验位仅用于检测接收到的奇偶校验码中的错误。但它不足以纠正错误。
汉明码
汉明码可用于检测和纠正接收到的数据中存在的错误。此代码使用多个奇偶校验位,我们必须将这些奇偶校验位放置在2的幂次方位置。
使以下关系成立(有效)的最小'k'值就是所需的奇偶校验位数。
$$\mathrm{2^{k} \: \geq \: n \: + \: k \: + \: 1}$$
其中,
'n'是二进制码(信息)中的比特数
'k'是奇偶校验位的数量
因此,汉明码中的比特数等于n + k。
设汉明码为$\mathrm{b_{n+k}b_{n+k-1} \: ..... \: b_{3}b_{2}b_{1}}$和奇偶校验位$\mathrm{p_{k}, \: p_{k-1}, \: .... \: p_{1}}$。我们只能将'k'个奇偶校验位放在2的幂次方位置。在其余的比特位置,我们可以放置二进制码的'n'个比特。
根据需要,我们可以在形成汉明码时使用偶校验或奇校验。但是,为了找出接收到的数据中是否存在任何错误,应使用相同的奇偶校验技术。
请按照此过程查找奇偶校验位。
- 根据比特位置b3、b5、b7等中存在的1的数量,找到p1的值。所有这些比特位置(后缀)在其等效的二进制表示中,在20的位值处都有'1'。
- 根据比特位置b3、b6、b7等中存在的1的数量,找到p2的值。所有这些比特位置(后缀)在其等效的二进制表示中,在21的位值处都有'1'。
- 根据比特位置b5、b6、b7等中存在的1的数量,找到p3的值。所有这些比特位置(后缀)在其等效的二进制表示中,在22的位值处都有'1'。
- 类似地,找到奇偶校验位的其他值。
按照以下步骤查找**校验位**。
- 根据位位置 b1、b3、b5、b7 等中存在的 1 的数量,找到 c1 的值。所有这些位位置(后缀)在其等效的二进制表示中,在 20 的位值处都为 '1'。
- 根据位位置 b2、b3、b6、b7 等中存在的 1 的数量,找到 c2 的值。所有这些位位置(后缀)在其等效的二进制表示中,在 21 的位值处都为 '1'。
- 根据位位置 b4、b5、b6、b7 等中存在的 1 的数量,找到 c3 的值。所有这些位位置(后缀)在其等效的二进制表示中,在 22 的位值处都为 '1'。
- 类似地,找到校验位的其他值。
接收到的数据中校验位的十进制等效值给出错误所在的位位置的值。只需对该位位置中存在的值取反即可。因此,在移除奇偶校验位后,我们将获得原始的二进制代码。
示例 1
让我们找到二进制代码 d4d3d2d1 = 1000 的汉明码。考虑偶校验位。
给定二进制代码中的位数为 n=4。
我们可以使用以下数学关系找到所需的奇偶校验位数。
$$\mathrm{2^{k} \: \geq \: n \: + \: k \: + \: 1}$$
在上述数学关系中代入 n=4。
$$\mathrm{\Rightarrow \: 2^{k} \: \geq \: 4+k+1}$$
$$\mathrm{\Rightarrow \: 2^{k} \: \geq \: 5+k}$$
满足上述关系的 k 的最小值为 3。因此,我们需要 3 个奇偶校验位 p1、p2 和 p3。因此,汉明码中的位数将为 7,因为二进制代码中有 4 位,奇偶校验位有 3 位。我们必须将奇偶校验位和二进制代码的位放置在汉明码中,如下所示。
**7 位汉明码**为 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: d_{4}d_{3}d_{2}p_{3}d_{1}p_{2}bp_{1}}$$
通过代入二进制代码的位,汉明码将为
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: 100p_{3}Op_{2}p_{1}}$$
现在,让我们找到奇偶校验位。
$$\mathrm{p_{1} \: = \: b_{7} \: \oplus \: b_{5} \: \oplus \: b_{3} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
$$\mathrm{p_{2} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{3} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
$$\mathrm{p_{3} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{5} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
通过代入这些奇偶校验位,**汉明码**将为 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: 1001011}$$
示例 2
在上面的示例中,我们得到的汉明码为 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1}= 1001011}$$.
现在,让我们找到接收到的代码为 - 时的错误位置。
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1}= 1001111}$$
现在,让我们找到校验位。
$$\mathrm{c_{1} \: = \: b_{7} \: \oplus \: b_{5} \: \oplus \: b_{3} \: \oplus \: b_{1} \: = \: 1 \: \oplus \: 0 \: \oplus \: 1 \: \oplus1 \: = \: 1}$$
$$\mathrm{c_{2} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{3} \: \oplus \: b_{2} \: = \: 1 \: \oplus \: 0 \: \oplus \: 1 \: \oplus \: 1 \: = \: 1}$$
$$\mathrm{c_{3} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{5} \: \oplus \: b_{4} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: \oplus \: 1 \: = \: 0}$$
校验位的十进制值给出接收到的汉明码中错误的位置。
$$\mathrm{c_{3}c_{2}c_{1} \: = \: \left ( 011 \right )_{2} \: = \: \left ( 3 \right )_{10}}$$
因此,错误出现在汉明码的第三位 (b3) 中。只需对该位中存在的值取反,并删除奇偶校验位以获得原始的二进制代码。