数字电子教程

数字电子 - 主页

数字电子基础

数字系统的类型 信号类型 逻辑电平和脉冲波形 数字系统组件 数字逻辑运算 数字系统优势

数字系统

数字系统 二进制数表示 二进制运算 有符号二进制运算 八进制运算 十六进制运算 补码运算

进制转换

进制转换 二进制到十进制转换 十进制到二进制转换 二进制到八进制转换 八进制到二进制转换 八进制到十进制转换 十进制到八进制的转换 十六进制到二进制的转换 二进制到十六进制的转换 十六进制到十进制的转换 十进制到十六进制的转换 八进制到十六进制的转换 十六进制到八进制的转换

二进制代码

二进制代码 8421 BCD 码 余3码 格雷码 ASCII 码 EBCDIC 码 代码转换 错误检测和纠正码

逻辑门

逻辑门 与门 或门 非门 通用门 异或门 异或门 CMOS 逻辑门 使用二极管电阻逻辑的或门 与门与或门 两级逻辑实现 阈值逻辑

布尔代数

布尔代数 布尔代数定律 布尔函数 德摩根定理 SOP 和 POS 形式 POS 转换为标准 POS 形式

最小化技术

K-Map 最小化 三变量 K-Map 四变量 K-Map 五变量 K-Map 六变量K-Map 无关条件 Quine-McCluskey 方法 最小项和最大项 规范形式和标准形式 最大项表示 使用布尔代数进行简化

组合逻辑电路

数字组合电路 数字算术电路 多路复用器 多路复用器设计程序 多路复用通用门 使用 4:1 多路复用器的 2 变量函数 使用 8:1 多路复用器的 3 变量函数 解复用器 多路复用器与解复用器 奇偶校验位生成器和检查器 比较器 编码器 键盘编码器 优先级编码器 解码器 算术逻辑单元 7 段 LED 显示屏

代码转换器

代码转换器 二进制到十进制转换器 十进制到 BCD 转换器 BCD 到十进制转换器 二进制到格雷码转换器 格雷码到二进制转换器 BCD 到 Excess-3 转换器 Excess-3 到 BCD 转换器

加法器

半加法器 全加器 串行加器 并行加器 使用半加器的全加器 半加器与全加器 全带 NAND 门的加法器 带 NAND 门的半加法器 二进制加法器-减法器

减法器

半减法器 全减法器 并行减法器 使用 2 个半减法器的全减法器 使用 NAND 的半减法器门

顺序逻辑电路

时序电路 时钟信号和触发 锁存器 移位寄存器 移位寄存器应用 二进制寄存器 双向移位寄存器 计数器 二进制计数器 非二进制计数器 同步计数器的设计 同步与异步计数器 有限状态机 算法状态机

触发器

触发器 触发器的转换 D 触发器 JK 触发器 T 触发器 SR 触发器 时钟控制 SR 触发器 非时钟控制 SR 触发器 时钟控制 JK 触发器 JK 至 T 触发器 SR 至 JK触发器 触发器:触发方法 主从 JK 触发器 竞争条件

A/D 和 D/A 转换器

模拟数字转换器 数字模拟转换器 DAC 和 ADC IC

逻辑门的实现

使用 NAND 门实现非门 使用 NAND 门实现或门 使用 NAND 门实现 AND 门 使用 NAND 门实现 NOR 门 使用 NAND 门实现 XOR 门 使用 NAND 门实现 XNOR 门 使用 NOR 门实现 NOT 门 使用 NOR 门实现 OR 门 使用 NOR 门实现 AND 门 NAND 门和 NOR 门之间的区别 使用 NOR 门实现 XOR 门 使用 NOR 门实现 XNOR 门 使用 CMOS 的 NAND/NOR 门 使用 NAND 门的全减法器 使用 2:1 MUX 的 AND 门 使用 2:1 MUX 的 OR 门 使用 2:1 MUX 的非门

存储设备

存储设备 RAM 和 ROM 高速缓存设计

可编程逻辑设备

可编程逻辑设备 可编程逻辑阵列 可编程阵列逻辑 现场可编程门阵列

数字电子系列

数字电子系列

CPU 架构

CPU 架构

数字电子资源

数字电子 - 资源 数字电子 - 讨论


错误检测和校正代码

我们知道位 0 和 1 对应两个不同范围的模拟电压。因此,在将二进制数据从一个系统传输到另一个系统时,也可能添加噪声。因此,其他系统接收到的数据中可能会有错误。

这意味着位 0 可能会变为 1,或者位 1 可能会变为 0。我们无法避免噪声的干扰。但是,我们可以先检测是否存在任何错误,然后纠正这些错误,从而恢复原始数据。为此,我们可以使用以下代码。

  • 错误检测代码
  • 错误校正代码

错误检测代码

错误检测代码用于检测接收数据(位流)中存在的错误。这些代码包含一些位,它们被包含(附加)到原始位流中。如果在传输原始数据(位流)期间发生错误,这些代码将检测错误。

示例 − 奇偶校验码、汉明码。

错误校正码

错误校正码用于纠正接收数据(位流)中存在的错误,以便我们获得原始数据。错误校正码也使用类似的错误检测码策略。

示例 − 汉明码。

因此,为了检测和纠正错误,在传输时将额外的位附加到数据位。

奇偶校验码

很容易在原始位流的 MSB 左侧或 LSB 右侧包含(附加)一个奇偶校验位。根据所选的奇偶校验类型,奇偶校验码有两种类型,即偶校验码和奇校验码。

偶校验码

如果二进制代码中存在偶数个 1,则偶校验位的值应为零。否则,它应该是 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。因此,奇校验码中存在奇数个 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)。只需补全该位中的值并删除奇偶校验位即可获得原始二进制代码。