纠错和检测代码

在本教程中,我们将学习一些常用的纠错和检测代码。我们会讲到数字通信中的错误,有哪些不同类型的错误,一些纠错和检测码比如奇偶校验,CRC,汉明码等等。

Introdcution

在数字系统中,模拟信号将转换为数字序列(以比特的形式)。这个比特序列被称为“数据流”。单个比特位置的变化也会导致数据输出中的灾难性(重大)错误。几乎在所有的电子设备中,我们发现误差,并使用误差检测和校正技术来获得精确或近似的输出。

什么是错误

数据在传输(从源到接收方)过程中可能被损坏。它可能会受到外部噪声或其他一些物理缺陷的影响。在这种情况下,输入数据与接收到的输出数据不相同。这种不匹配的数据称为“错误”。

数据错误将导致重要/安全数据的丢失。即使是数据的一个变化也可能会影响整个系统的性能。通常,数字系统中的数据传输将以“比特转移”的形式。在这种情况下,数据错误可能在0和1的位置更改。

e1

回到顶部

类型的错误

在一个数据序列中,如果1变为0或0变为1,这称为“位错误”。

在从发射机到接收器,数据传输中通常存在3种类型的错误。他们是

•单位错误

•多比特错误

•突发错误

单比特数据错误

整个数据序列中一个比特的变化称为“单比特错误”。在串行通信系统中,单比特错误的发生是非常罕见的。这种类型的错误只发生在并行通信系统中,由于数据以单线方式传输,单线有可能有噪声。

e2

多比特数据错误

如果发送端到接收端的数据序列发生了两比特或多比特的变化,称为“多比特错误”。这种类型的错误发生在串行类型和并行类型的数据通信网络。

e3

突发错误

数据序列中位集的改变称为“突发错误”。从第一个比特变化到最后一个比特变化计算突发错误。

e4

这里我们从第4位到第6位确定误差。第4位和第6位之间的数字也被认为是错误。这些比特被称为“突发错误”。这些突发比特从发射机到接收机的变化,可能会导致数据序列的重大错误。这种类型的错误发生在串行通信中,很难解决。

回到顶部

错误检测码

在数字通信系统中,错误从一个通信系统传送到另一个通信系统以及数据。如果未检测到和更正这些错误,则数据将丢失。为了有效沟通,数据应高精度地转移。这可以通过首先检测错误来实现,然后纠正它们。

错误检测是在通信系统中检测从发射机发送到接收机的数据中存在的错误的过程。我们使用一些冗余码来检测这些错误,当数据从源(发射机)传输时,通过添加数据来检测这些错误。这些代码被称为“错误检测代码”。

错误检测类型

  1. 奇偶校验检查
  2. 循环冗余校验(CRC)
  3. 纵向冗余校验
  4. 校验和

奇偶校验检查

奇偶校验位只是在传输数据之前在发射机数据上添加的一个额外的位。在添加奇偶校验位之前,数据中需要计算1或0的个数。基于这个数据的计算,一个额外的位被添加到实际的信息/数据。对数据添加奇偶校验位将导致数据字符串大小的变化。

这意味着如果我们有8位数据,那么在向数据二进制字符串添加奇偶校验位后,它将成为9位二进制数据串。

奇偶校验也称为“垂直冗余校验”。

在错误检测中有两种奇偶校验位,它们是

  • 甚至是奇偶校验
  • 奇校验
偶同位
  • 如果数据甚至具有1的数量,则奇偶校验位为0.例如:数据是10000001 - >奇偶校验位0
  • 奇数个1,奇偶位为1。例如:数据是10010001 ->校验位1
奇数
  • 如果数据中有奇数个1,则奇偶位为0。数据是10011101 ->奇偶位0
  • 偶数个1,奇偶位为1。数据是10010101 ->校验位1

请注意:数据位的计数也包括奇偶校验位。

在发送端给数据加一个奇偶校验位的电路称为“奇偶校验发生器”。奇偶校验位被传送并在接收器上被检查。如果发送端发送的奇偶校验位和接收端接收的奇偶校验位不相等,则检测到错误。在接收机上检查奇偶校验的电路称为“奇偶校验器”。

具有偶校验和奇校验的消息

5

回到顶部

循环冗余校验(CRC)

循环码是一种线性(n, k)分组码,其性质是一个码字的每次循环移位都会产生另一个码字。这里k表示消息在发送端的长度(信息位的个数)。n为添加检查位后消息的总长度。(实际数据和校验位)。n, k为校验位数。
用于错误检测的循环冗余校验码称为CRC码(循环冗余校验码)。循环冗余校验码是一种缩短的循环码。这些类型的代码用于错误检测和编码。它们很容易使用带有反馈连接的移位寄存器实现。这就是为什么它们被广泛用于数字通信中的错误检测。CRC码将提供有效和高水平的保护。

CRC代码生成

根据所需的位检查次数,我们将在实际数据中添加一些0。这个新的二进制数据序列除以一个长度为n + 1的新字,其中n是要添加的校验位数。通过模2除法得到的提示符被添加到被除数位序列中形成循环码。生成的码字可以被生成代码时使用的除数整除。这是通过发射机传送的。

例子

前任

在接收端,我们用相同的除数对接收到的码字进行除数,以得到实际的码字。对于无错误接收数据,提示为0。如果提示是一个非零,这意味着在接收到的代码/数据序列中有一个错误。错误检测的概率取决于用于构造循环代码的检查位的数量(n)。对于单位和两位错误,概率为100%。

对于长度为n - 1的突发错误,错误检测的概率为100%。

长度为n + 1的突发误差,检测到错误的概率降低为1 - (1/2)N-1

长度大于n - 1的突发误差,错误检测的概率为1 - (1/2)n

回到顶部

纵向冗余检查

在纵向冗余法中,一个比特块以表的形式排列(行和列),我们将分别计算每一列的奇偶位。这些奇偶校验位的集合也与原始数据位一起发送。

纵向冗余校验是逐位奇偶校验计算,因为我们分别计算每一列的奇偶校验。

该方法可以容易地检测突发错误和单个比特错误,并且无法检测到相同垂直片中发生的2位错误。

6

回到顶部

校验和

校验和与奇偶校验位类似,除外,总和中的位数大于奇偶校验,结果始终约束为零。这意味着如果校验和为零,则会检测到错误。消息的校验和是一定长度的代码字的算术和。总和通过1的恭维表示,并作为实际代码字的代码扩展,存储或转移。在接收器处,通过从发射机接收位序列来计算新的校验和。

校验和方法包括校验位、校验位和纵向冗余校验。例如,如果我们必须传输和检测长数据序列(也称为数据字符串)的错误,那么我们将其分成更短的单词,我们可以用相同宽度的单词存储数据。对于另一个传入的位,我们将把它们添加到已经存储的数据中。在每个实例中,新添加的单词被称为“Checksum”。

在接收端,接收位校验和与发送端相同,没有发现错误。

我们也可以通过添加所有数据位来找到校验和。例如,如果我们有4个字节的数据25h, 62h, 3fh, 52h。

然后,将所有字节相加,得到118H

下降圈啃,我们得到18h

找出蚕食的2的补码,即E8H

这是传输的4位数据的校验和。

在接收器方面,检查是否收到数据而没有错误,只需将校验和添加到实际数据位(我们将获得200h)。通过放下携带蚕食我们得到00h。这意味着校验和被限制为零。因此数据中没有错误。

一般来说,有5种校验和方法,例如

  • 整数加法校验和
  • 补充的校验和
  • 弗莱彻校验和
  • 阿德勒校验和
  • ATN校验和(一个/ 466)

例子

exx

到目前为止,我们讨论了错误检测代码。但是,仅仅检测数据中发生的错误是不够的,不能获得准确、完美的数据序列。但我们也需要通过消除错误(如果有的话)来纠正数据。为了做到这一点,我们使用了一些其他的代码。

回到顶部

错误校正码

同时用于错误检测和错误纠正的代码称为“错误纠正码”。纠错技术有两种类型。他们是谁,

  • 单位误差校正
  • 破裂纠错

校正单个比特错误的过程或方法称为“单位误差校正”。在数据序列中检测和校正突发误差的方法称为“突发误差校正”。

汉明码或汉明距离代码是我们在大多数通信网络和数字系统中使用的最佳错误纠正码。

回到顶部

汉明码

这种错误检测和纠错编码技术是由r.w.h aming开发的。这段代码不仅能识别整个数据序列中的错误位,而且还能纠正错误位。该代码使用若干位于码字中特定位置的奇偶校验位。奇偶校验位的数量取决于信息位的数量。汉明码利用冗余位和数据位之间的关系,可以应用于任意数量的数据位。

什么是冗余位?

冗余是指“实际数据序列的位数与传输的位数之间的差值”。这些冗余位在通信系统中被用来检测和纠正错误,如果有错误的话。

汉明码实际上是如何纠正错误的?

在汉明码中,为了消除错误,冗余位被放置在特定的计算位置上。两个冗余位之间的距离称为“汉明距离”。

为了了解汉明码的工作原理和数据纠错检测机制,我们来看以下几个阶段。

奇偶位数

正如我们之前学过的,要添加到数据串的奇偶校验位的数量取决于要传输的数据串的信息位的数量。奇偶校验位的数目将通过使用数据位来计算。这个关系如下所示。

2P>= n + P +1

这里,n表示数据字符串中的比特数。

P表示奇偶校验位数。

例如,如果我们有一个4位的数据串,即n = 4,那么可以通过试错法找到要添加的奇偶校验位的个数。让P = 2

2P= 22= 4和n + p + 1 = 4 + 2 + 1 = 7

这违背了实际的表达式。

那么我们试试P = 3

2P= 23.= 8和n + p + 1 = 4 + 3 + 1 = 8

所以我们可以说需要3个奇偶校验位来传输4位数据和单位错误校正。

奇偶校验位放在哪里?

在计算出所需的奇偶校验位数后,我们应该知道在信息串中放置它们的适当位置,以提供单位错误纠正。

在上面考虑的例子中,我们有4个数据位和3个奇偶校验位。所以要传输的总码字为7位(4 + 3)。我们一般从右到左表示数据序列,如下图所示。

位7,位6,位5,位4,比特3,位2,位1,位0

奇偶校验位必须位于2的幂的位置。也就是1 2 4 8 16等等。因此,包含奇偶校验位后的码字将是这样的

D7,D6,D5,P4,D3,P2,P1

这里P1,P2和P3是奇偶校验位。D1-D7是数据位。

构造位位置表

在汉明码中,每个奇偶校验位检查并帮助发现整个码字中的错误。所以我们必须找到奇偶校验位的值来给它们赋一个位值。

7

通过计算并将奇偶校验位插入到数据位中,可以通过汉明码实现纠错。

让我们通过一个示例来清楚地理解这一点。

例:

通过使用汉明代码,在偶数均匀编码数据1101。

步骤1

计算所需的奇偶校验位数。

让p = 2,然后

2P= 22= 4和n + p + 1 = 4 + 2 + 1 = 7。

2奇偶校验位不足以容纳4位数据。

那么我们试试P = 3

2P= 23.= 8和n + p + 1 = 4 + 3 + 1 = 8

因此,对于4位数据,3个奇偶校验位足够了。

代码字中的总位为4 + 3 = 7

步骤2

构造位位表

8

步骤3

确定奇偶校验位。

对于P1: 3,5和7位有三个1对于偶校验,P1 = 1。

对于P2:3,6和7位具有两个1,因此偶数均匀,P2 = 0。
对于P3: 5,6,7位都有两个1,所以对于偶校验,P3 = 0。

通过在它们各自的位置输入/插入奇偶位,就可以形成码字并进行传输。它是1100101。

注意:如果码字具有所有零(例如:0000000),则汉明代码没有错误。

为了用字母和数字表示二进制数据,我们使用字母数字码。

回到顶部

alpha数字代码

字母数字码基本上是二进制码,用来表示字母数字数据。由于这些代码用字符来表示数据,字母数字代码也被称为“字符代码”。

这些代码可以代表所有类型的数据,包括通过计算机可接受表单中的字母表,数字,标点符号和数学符号。这些代码在I / O设备中实现,如关键板,监视器,打印机等。
在早期的日子中,打卡用于表示字母数字代码。

他们是

  • 摩尔斯电码
  • 博多码
  • 霍尔瑞斯代码
  • ASCII代码
  • EBCDI代码
  • UNICODE

摩尔斯电码

在计算机和数字电子时代的起步阶段,莫尔斯电码是非常流行和使用最多的电码。这是塞缪尔·f·b·莫尔斯在1837年发明的。这是第一个用于电信的电码。主要用于电报信道、无线电信道和空中交通管制单位。

BOUDOT代码

这个代码是由法国工程师埃米尔·波多在1870年发明的。它是一个5单元代码,意思是它用5个元素来代表一个字母表。它也用于电报网络传送罗马数字。

霍尔瑞斯代码

这个代码是由赫尔曼·霍尔瑞斯在1896年创立的一家公司开发的。根据传输的信息用来打孔卡片的12位码被称为“霍尔瑞斯码”。

ASCII代码

ASCII是指信息交换的美国标准代码。它是世界上最流行和最广泛使用的字母数字代码。该代码是在1967年开发并首次发布的。ASCII码是一个7位码,这意味着这个代码使用27 = 128个字符。这包括

26小写字母(a - z),26个大写字母(a - z),33个特殊字符和符号(如!@#$等),33个控制字符(* - + /和%等)和10位数(0 - 9)。

在这个7位的代码中,我们有两个部分,最左边的3位和右边的4位。最左边的三位称为“区域位”,右边的四位称为“数字位”。

Ascii表

8位ASCII代码可以表示256(28)个字符。它被称为USACC - II或ASCII - 8个代码。

例子:

如果我们想打印名字LONDAN, ASCII码是?

ASCII-7等同L = 100 1100

ASCII-7等价于O = 100 1111

等于N = 100 1110的ASCII-7

相当于D = 1000100的ASCII-7

ASCII-7相当于A = 1000001

等于N = 100 1110的ASCII-7

LONDAN的ASCII码输出为1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0。

UNICODE

ASCII代码和EBCDI代码中的绘制返回是它们与所有语言不兼容,并且它们没有足够的字符来表示所有类型的数据。为了克服这些缺点,开发了这个Unicode。
UNICODE是所有数字编码技术的新概念。在这种情况下,我们用不同的字符来表示每个数字。它是最先进和复杂的语言,能够表示任何类型的数据。这就是所谓的“通用代码”。它是一个16位的代码,我们可以用它来表示216 = 65536个不同的字符。
统一码是由统一码联盟和ISO(国际标准化组织)共同努力开发的。

EBCDI代码

EBCDI代表扩展二进制编码十进制交换代码。此代码由IBM Inc公司开发。它是一个8位代码,所以我们可以使用EBCDI代码代表28 = 256个字符。这包括所有字母和符号,如26个小写字母(a - z),26个大写字母(a - z),33个特殊字符和符号(如!@#$等),33个控制字符(* - + /%等)和10位数(0 - 9)。

在EBCDI代码中,数字的8位代码由8421个BCD代码表示,前面为1111。

ebcdic代码- 24 - 1 - 4 - 638
ebdic代码

回到顶部

3反应

留下一个回复

您的电子邮件地址将不会被公布。必填字段被标记*