跳转至内容

基本卷积编码示例

来自维基教科书,开放书籍,开放世界
  • 本页以示例说明了基本卷积编码如何在纠错中工作。描述了一个基本的硬判决维特比解码器。对于熟悉该主题的人来说,它处理来自速率为 1/2,约束长度为 3 的编码器的代码。生成多项式为 111 和 110,或者更简单地说,在八进制形式中为(7,6)。格状图用于三个示例,一个显示无错误状态,另一个显示如何清除错误,以及一个解码器无法完成其任务的示例。另一个页面上提供了一个用于基本 VBA 模拟器 的代码模块,以供进一步学习.
  • 目的是逐步解释如何进行基本设计。

卷积编码

[编辑 | 编辑源代码]
图 1:速率为 1/2 的 (7,6) 卷积编码器实现,(n,k,m) = (2,1,3)。前两个寄存器为修改后的状态分组提供了基础。
  • 信道噪声引起的错误,特别是加性白噪声 (AWGN),通常通过纠错软件来避免。卷积编码广泛用于此目的的数据信道。它最适合与其他纠错方法结合使用,并且可以将错误几乎完全消除。
  • 卷积编码的一个优点是它不是为固定块大小而设计的,而是可以快速适应可变块长度。然而,它不适用于连续流,因为评估必须到达块的末尾才能进行纠正。在实践中,块大小可以从几个位到几千个位不等,每个块长度都与不同的处理延迟相关联。
  • 卷积编码方案需要匹配的编码器和解码器。虽然实现略有不同,但编码器和解码器的算法必须相同。每个都必须包含关于最有可能发生的转换的特定知识。正是这种潜在的假设允许对预期消息进行最佳估计。它们的纠错能力不同,并且已知某些设计优于其他设计。在形成编码输出时使用更多复杂性的编码方案往往更擅长纠正错误。
  • 维特比解码器用于我们的示例。它大量使用了汉明距离的概念。这是接收到的数据块与某个预期块不同的程度。例如,可以将两个数据字对齐并逐位比较。不同的位数就是汉明距离,距离越大,错误越多。解码器使用格状图进行描述,并且在网络中的各个点确定成对位的距离。在每个节点计算的距离是实际接收到的输入与可能意图的最可能可能性之间的距离。然后使用它们的累积值来找到整个格状图中的最小距离路径,以识别最可能意图的数据。修辞地说,解码器根据它对编码方式的了解来决定接收到的数据是否可能:同时,它提出一个它认为最可能原始消息的版本。这种方法是最大似然决策的一个例子。
  • 在一些关于该主题的文本中,最小汉明距离的概念已被最大接近度所取代,其中计算过程仅略有不同。在任何情况下,两种方法获得的结果都是相同的。这里,我们专注于汉明距离,因为它似乎是最常用的。打算使用 VBA 模拟器代码的用户应该知道,用于距离接近度输出的代码模块已在其自己的页面上准备好了。参见VBA 中的维特比模拟器 (接近度) 和VBA 中的维特比模拟器 2 (距离) 以了解编码详细信息。
  • 硬决策意味着在两个值之间进行狭窄的选择;在本例中是在二进制 1 或 0 之间。另一种方法也用于某些应用程序,即软决策,其中考虑了更多的分级值。软决策可以产生比使用硬决策更低的错误率,尽管对于主题的介绍来说可能过于复杂。

编码器

[编辑 | 编辑源代码]
图 2:图 1 中 (7,6) 编码器的状态图。这种 4 状态图用于准备维特比解码器格状图。通过重新分组图 3 中的状态表的数据,使前两位数字描述状态,可以生成这种 4 状态图。

卷积编码器的实现如图 1 所示。编码器的完整状态表如图 3 所示。图 2 中可以找到状态图,该图针对维特比过程进行了修改,只有四个相关状态。这里提供了关于编码器的基本说明

  • 移位寄存器级数 (m)。这里 m = 3。在每个时序间隔,输入位被逐级步进到寄存器级并穿过寄存器级。按照惯例,在数据块的末尾添加额外的零位,以确保寄存器以其内容为零结束,从而使生成的输出完整。这些额外的位称为冲洗位。
  • 有两个门控输出流。模 2 加法器从移位寄存器输出产生单独的流。然后将这两个流合并成一个流。首先,从顶部取一位,然后从底部取一位,依此类推,直到输出完成。模 2 加法器的普遍行为如下
    • 奇数个逻辑1 输入产生逻辑1 输出。
    • 偶数个逻辑1 输入产生逻辑 输出。
    • 没有逻辑1 输入(全部为零),输出为
  • 加法器组合决定行为。加法器的特定寄存器输出选择和寄存器级数都非常重要。
    • 选择的加法器输入被描述为 g(t) = (1,1,1) 用于顶部加法器,g(b) = (1,1,0) 用于底部加法器。可以注意到,逻辑1 表示加法器使用了相应的寄存器输出,逻辑表示它没有使用。这些表达式被称为生成多项式。并非所有选择都提供良好的纠错,即使对于具有相同速率的编码器也是如此。在具有相同 (n,k,m) 属性(使用不同的加法器输入)的编码器集中,被称为显示最佳距离的编码器将为该复杂性提供最佳结果。例如,在集合 (2,1,3) 中,配置 (7,6) 的纠错能力比 (7,5) 差,而 (7,5) 又比 (13,17) 差,其自由距离分别为 4、5 和 6。
    • 约束长度,L。对于此编码器,L = 3。该术语的定义多种多样,但最常被简单地定义为寄存器级的数量。如果第一个级输入本身连接到加法器,则这也将被计入;例如,如果初始输入也被使用,则一个两级寄存器可以具有三个约束。显然,行末未使用于加法器的任何寄存器级将不被计入。更大的约束长度会带来更好的纠错率。
  • 编码器速率为 1/2。也就是说,对于每个输入位,有两个输出位。它可以表示为 k/n = 1/2,其中 k 是每次时序步长从输入中取出的位数,n 是作为结果产生的输出位数。
  • 编码器配置为 (n,k,L) = (n,k,m) = (2,1,3)。请注意,当考虑特定输入的组合时,许多其他变体也可以具有 (2,1,3) 配置。
  • 编码器的输入-输出步骤如下。(请注意,第一个输入位由箭头标识)
    • 在时间为零时,在接收任何输入之前的起始状态,寄存器输出均为,并且编码器输出可以忽略不计。
    • 当第一个比特,一个逻辑1,被送入寄存器s0时,移位寄存器状态从000变为100。因此,顶部加法器的输出变为1,底部加法器的输出变为1。然后将这两个输出组合起来,形成输出对11
    • 经过一个时间间隔后,下一个输入比特,一个零,被送入s0,它之前的内容移动到s1。s1之前的内容移动到s2,s2之前的内容丢失。
    • 寄存器状态从100变为010,并根据寄存器的新的状态形成新的输出。(再次为11。)
    • 这种步进以离散的时间间隔持续进行,直到最后一个输入比特产生其输出。
    • 具体而言,就示例设置而言,输入流10110...产生输出流1111010001....
    • 如果在任何输入数据中添加三个额外的冲洗零,则输出将变长六位,并且始终以零结尾。在这种情况下,输出变为1111010001(100000)。

状态转换

[编辑 | 编辑源代码]
图 3: (7,6) 卷积编码器的完整状态表。状态转换列有助于简化集合。

状态表

[编辑 | 编辑源代码]

图 3 的表格总结了编码器可能存在的每种输入、输出和寄存器状态组合。考虑第三行数据。修辞地,这行可能读作

  • 输入状态: ‘’当寄存器的输入状态目前为001...‘’
  • 输入比特: ...‘’并且逻辑的输入比特被送入寄存器s0...‘’
  • 输出比特: ...‘’输出比特对变为00...‘’
  • 输出状态: ...‘’新的寄存器状态变为000。‘’
  • 状态转换: ‘’使用图 2 中状态上新定义的状态,转换是从状态a到自身‘’。

表中的每一行数据都可以用类似的方式解释。该表除了解释所有可能的编码器行为之外,还用于布置相应的解码器格状图。图 2 的状态图提供了相同数据的图形布局。

状态图

[编辑 | 编辑源代码]

图 2 的状态图显示了编码器可能存在的所有输入、输出和状态转换。在这个版本的狀態图中,只有四个状态。虽然从技术上讲,一个三级移位寄存器有八种可能的状态 (23),但它们已被重新定义为只有四个。

为了以这种方式修改状态,我们将八种可能的状态重新分组为四个,方法是注意到它们在它们的前两个寄存器位置中共享共同的值。发现的共同值当然是 00、01、10 和 11。为了方便起见,这些依次被标记为状态 a、b、c 和 d。通过注意到图 3 表格中三位状态在其前两位数字中的开头,可以完成第五列,以识别存在的转换类型。发现四个新状态之间只有八种不同的转换可能。这些显示在图 2 的状态图中。

  • 按如下方式阅读状态图
  • 移位寄存器状态。这由每个椭圆形内部写的数字和字母给出。在每种情况下,通过一条箭头的连接,从一种状态转换到另一种状态。
  • 导致转换的输入比特。这是由指向远离当前状态的箭头线类型给出的。如果该线是点线,则输入为逻辑,如果该线是实线,则输入为逻辑
  • 转换产生的输出。输出数字对显示在指向远离当前状态的箭头线旁边..
  • 示例。考虑图 3 表格中的第四行数据,以及图 2。这第四行数据将转换识别为从ac。在状态图上,相同的转换显示为输入为 1(点线箭头线)和输出为 11(在旁边),与表格一致。所有其他状态以类似的方式读取。

解码器

[编辑 | 编辑源代码]
图 4:这是与图 1 的编码器一起工作的 Viterbi (7,6) 解码器格状图。指标显示得很清楚,最小汉明距离路径或回溯路径以红色突出显示。在这种情况下,解码器的输入没有信道错误,并始终返回正确的数据。
图 5:在这个例子中,输入包含两个单比特错误,在数据块中它们之间间隔着个无错误比特。两个错误都被 (7,6) 解码器纠正
图 6:当再次收到两个错误时,这一次它们之间只有五个无错误比特,(7,6) 解码器无法完全纠正流

解码器的工作原理及其纠错功能在此通过使用格状图来说明。参见图 4、5 和 6。

  • 实现的目标是找到一条最小差值路径。这被称为回溯路径,并在图中以红色绘制。它连接每列中的节点,这些节点本身代表到该点的最佳估计。这些节点的最佳估计被称为它们的指标。它们是最低汉明距离累积值。
  • 预期输入的最佳估计,不一定是解码器在r中接收到的那个,可以通过注意回溯路径的某些特征来找到。这些包括沿行进路径(或)的输出值,以及组件部分是否位于分支(绿色黑色)上。
  • 一半的支路必须被丢弃作为回溯路径路线。这些可以在图中以灰色显示。回溯路径从最后一列中最低指标沿着允许的支路(幸存者路径)绘制到格状图中的零点。由于其他列中的最低点可能是模棱两可的,也许都是一样的,因此回溯路径不能单独依赖于这些值。正是正确丢弃支路将允许的回溯路径路线减少到一条。正是这种见解使安德鲁·维特比能够制定他的方法。

格状图布局

[编辑 | 编辑源代码]

从状态表准备格状图的方法如下:参考图 4。

  • 格状图中的时间转换从左侧开始,并逐步向右进行。
  • 编码器状态显示在格状图左侧的一列中。这里,这些是a、b、c 和 d,但对于四级编码器,将有八个这样的状态。
  • 感兴趣的数据流包括以下内容
    • 流 r,在图的顶部,是解码器将处理的接收数据。此流用于计算指标。由于噪声的影响,它可能包含错误,并且不一定与离开编码器的流相同。
    • 流 r*,在图的底部附近,是r的格状图修改版本。这些对与回溯路径边缘上的输出值匹配。即使消息输出已纠正,这些值也可能与r不同。
    • 流 m,是作为编码器输入的原始消息比特流。它可能在末尾有额外的冲洗零,但本质上是相同的数据。
    • 流 m*,是解码器对解码消息应是什么的版本。只有当流m在其整体上等于m*时,才能宣布解码消息无错误,尽管在实践中,一些比特错误可能会被纠正,而另一些则不会。流r*不能依赖于此目的。显然,流m*必须按面值接受,因为在测试环境之外,没有办法知道原始消息。
  • 将详细信息转移到格状图是使用图 3 的状态表和图 2 的状态图完成的。指标计算从状态“a”的最左侧位置开始,并继续进行每个节点的计算。在最初的几次转换之后,布局模式一直对称到结尾;这是一个对程序员有用的事实。
  • 分支在描述中是不同的,无论是传入还是传出。显然,传出分支从单个节点发散,而传入分支从另外两个节点汇聚到一个节点。前两次转换的指标已计算,但免于丢弃标记。
    • 传出分支进一步被识别为。这些上分支转换是由输入零引起的,而下分支转换是由逻辑一引起的。知道这一点可以使回溯产生其m*输出。
    • 传入分支是在计算指标时考虑的。计算节点的指标比较了每个传入分支找到的累积总数,然后取两个总数中的较小者。然后丢弃两个分支中较大的那个。
  • 指标的计算以及丢弃分支的标记必须在产生任何输出之前完成。

计算指标

[编辑 | 编辑源代码]

在整个格状图中,度量的计算方式相同;从最左边的零点开始,逐列向右计算每个节点的度量。发现最佳工作序列为

  • 仅考虑每个节点的传入分支,即在节点处汇合或从左侧到达的分支。
  • 将每个传入分支的边值与该转换的接收输入 (r) 进行比较,并获得它们的汉明距离。这仅仅是它们之间不同的位数。例如,0111 有一个位不同,而 0110 有两个不同,等等。可能的距离范围显然从零到二不等。
  • 将每个分支的汉明距离加到它们之前的总和中,然后比较这两个结果。
  • 选择较小的总和作为该节点的度量。这成为存活分支。如果碰巧两个分支都提供相同的总和,那么任意选择其中一个;在示例中,当这种情况发生时,总是选择传入的上部分支。
  • 标记另一个分支,即较高总和的分支为丢弃。丢弃的分支示例在图中以灰色显示。丢弃分支会阻止它成为反向路径的一部分。这也适用于分支度量相等的情况。事实上,当有两个传入分支时,其中一个必须始终被标记为丢弃。显然,在第一阶段和第二阶段,如果一个节点只有一个传入分支,那么该分支将形成结果,并且不需要考虑丢弃。
  • 当列中的每个节点都有其总和时,移至下一列并继续该过程。

度量示例

[编辑 | 编辑源代码]
图 4 摘录。

请参考相邻的图 4 摘录中的示例。该摘录中未标记的行应从上到下标记为状态“a”到“d”。现在,假设要计算第二列中第二级节点的度量(状态 b)。此转换的传入分支来自状态cd,它们之前的总和均为 2。上部分支的边值为11,下部分支的边值为01。转换的接收输入 (r) 在图的顶部显示为01

  • 对于上部分支,状态cb
    • 边值 (11) 和阶段输入 (01) 之间的距离仅为1,因为它们之间只有一个位不同。
    • 将上部分支的先前总和2 加到该距离,得到2 + 1 = 3。这是上部分支的度量。
  • 对于下部分支,状态db
    • 边值 (01) 和阶段输入 (01) 之间的距离仅为0,因为它们之间没有位不同。
    • 将下部分支的先前总和2 加到该距离,得到2 + 0 = 2。这是下部分支的度量。
  • 选择2 作为这两个度量中较小的一个,我们可以将其写入节点中(如图所示)。
  • 在本例中,选择了下部分支,因此上部分支必须标记为丢弃。它已涂成灰色。
  • 格状图中的所有节点都以相同的方式计算。

标记度量丢弃后,可以找到回溯路径。该过程如下所示

  • 移至格状图最右侧的最后一个转换列,并选择度量值最低的节点。在成功的情况下,该列中将有一个明确的最小值。如果该列中最低值重复,则可能是格状图扩展不够远,或者省略了冲洗位。这也可能意味着应该预料到错误。当存在此类重复时,任意选择其中一个。(因为必须生成某些输出。)
  • 从初始选择开始,沿着允许的分支从一个转换移至下一个转换,直到到达零点。在成功的情况下,如果不存在错误或错误已被更正,则将涉及连接每个列中的最低值。这并不意味着在最后一个转换以外的转换中,每列仅包含一个这样的低值,而是存活分支(允许的分支)将通过正确的分支引导回溯路径。
  • 考虑回溯边缘的方向。其中一些(即外向较低分支)对应于逻辑。另一些(即外向较高分支)对应于逻辑。解释回溯路径上的这些分支方向,以获得解码器输出 (m*) 的最佳估计。理想情况下,这是最初编码的原始消息 (m)。
  • 如果找不到明确的最小值作为起点,则不太可能在格状图中找到明确的路径。在这种情况下,由于缺乏更好的知识,输出仍然必须被接受为最佳估计。

解码器示例

[编辑 | 编辑源代码]
图 7:典型数据通道中编码和解码的顺序。交织用于在解码器处理之前去除突发噪声造成的错误簇。
图 8:维特比解码器在随机输入消息和随机错误(没有故意突发)下,模拟比特错误率。图形显示了两个生成多项式的结果,其他参数相同。

图 4、图 5 和图 6 给出了三个带有示例的图。

  • 当解码器输入没有错误时,例如图 4 的情况,解码后的输出流 (m*) 与最初编码的输入 (m) 相同。需要注意的是,格状图的每一列都存在一个明显的最小值,并且只有一个。这是没有错误情况的典型特征。
  • 可以纠正合理的错误,例如图 5 的情况。在本例中,解码器输入的两个输入错误已被纠正。这里的错误,一个是位位置三,另一个是位位置十,它们之间有六个无错误位。对于此特定配置,此间隔是最小间隔,可以保证始终有效。也就是说,它不仅适用于此特定输入,而且也适用于随机分配的流量。这两个错误总是会被纠正。
  • 此关键间隔对于长比特包也适用。如果在长流的整个长度内植入错误,并且错误之间至少有六个无错误位,那么所有错误都将被纠正。当然,问题在于不能依赖错误以这种方式进行间隔。在最好的情况下,错误会随机分布在整个传输过程中。因此,在现实世界中,这个六位无错误间隔会不断受到影响。
  • 因此,一些错误放置将无法纠正,如图 6 的情况所示。这里,再次存在两个错误,但它们之间只有五个无错误位,分别位于位位置三和九。也就是说,它们比前一个示例中的错误只近了一位。解码器无法纠正我们特定输入流中的所有错误。事实上,如果我们通过对随机消息进行编码来更改输入流,并在这些位置(块或流)中引入错误,那么错误纠正将在 50% 的情况下有效。在另外一半情况下,就像我们的输入示例一样,解码后的消息 m* 中将返回错误。在其他情况下,解码器的行为似乎会发生变化,当选择偶数位进行错误而不是奇数位进行错误时。只有当无错误间隔为位或更多位时,错误纠正才能始终有效,而与这些输入和放置例外无关。
  • 剩余错误的概率因此与存在重叠这些间隔的错误的可能性有关。随着信道比特错误率 (BER) 增加,这种重叠的可能性也会增加,直到达到卷积编码本身变得不太有用的点。这种错误纠正改进接收消息的程度涉及系统中的许多其他组件,但就解码器本身而言,改进可以看作其输入 BER 与输出 BER 之间的关系。输入 BER 表示来自线路的受噪声影响的数据,输出 BER 与消息本身的残余错误相关。参考图 8 查看这些示例中编码配置的模拟结果图形。
  • 软件可以模拟系统的错误纠正。这样一个程序用于模拟此页面上描述的编码。有关 VBA 代码模块,请参阅 VBA 中的维特比模拟器。总体安排包括为编码器程序生成随机输入流量。然后,不是将编码器输出连接到解码器程序的输入,而是先对比特流进行预定比例的错误处理。通过监控解码器的输入错误率和解码后的消息中的输出错误率,可以了解这种系统带来的改进。图 8 显示了两个此类测量结果的数据集;一个用于示例 (111,110) 配置,另一个用于 (111,101) 配置。这些结果是使用相对较小的样本获得的,即每个数据点有一百万比特的消息流量,但是,降低错误率时性能的改进得到了清晰地证明。集中在我们的示例 (111,110) 配置(蓝色结果)上,我们注意到
    • 当输入 BER 为 10%(科学记数法中的 1E-1)时,输出 BER 稍微降至 8E-2,降幅为 1.25。这接近系统有用性的极限,即所谓的编码阈值。事实上,对于输入 BER 为 20%(2E-1),输出错误在 BER 30%(3E-1)时超过了输入错误。错误纠正本身无法处理这种情况,需要进行其他系统更改。
    • 将输入 BER 降低十倍至 1%(1E-2)后,情况变得更好。输出 BER 降至 6E-4,或每 10,000 个消息比特中出现六个错误。这对应于约 17 倍的改进幅度。
    • 将输入 BER 再次降低十倍至 0.1%(1E-3)后,输出 BER 变成 4E-6,或每百万个消息比特中出现四个错误。这是一种好得多的性能,改进幅度为 200 倍。
    • 将输入 BER 降至 0.1% 以下(1E-3)后,可以获得实际上完美的输出,其错误率需要更长的测试才能测量。
  • 其他配置有不同的行为。 上面的这些注释当然是为了示例中使用的 (7,6) 配置而设计的。这意味着顶部生成多项式是八进制 7 或二进制 111,底部是八进制 6 或二进制 110。当底部多项式从二进制 110 更改为八进制 5 或二进制 101 时,错误校正结果会更好。 (7,5) 配置可以处理块中的任何两个错误,无论它们之间的间距如何,并且如果间距足够大,直到下一个错误,它通常可以做得更好。当输出 BER 为 0.004 (0.4%) 时,这导致输出 BER 比以前配置提高了 50 倍。请注意,在这些示例中,所有错误都是随机应用的,以最大程度地模拟信道中白噪声的影响。还存在其他类型的噪声,更现实的模拟将考虑这些噪声。请参见图 8 中两种配置的比较结果。
图 9:灾难性状态:这种配置 (6,5) 一旦进入 _d 状态_,对于逻辑 1 输入,就会有两种不同的结果,这对于程序员来说是不可能实现的。必须避免此类配置。
  • 灾难性配置也存在。它们本身会产生非常高的错误,或者像速率 1/2 配置 (6,5) 一样,根本无法实现。当给定转换可能出现两种结果时,就会出现此类问题。请参见图 9 中 (6,5) 配置的状态图。该主题在其他地方有很好的介绍,但要完全理解,需要了解多项式表达式以及识别其中的公因式。
  • 高水平的随机错误 _确实_ 会造成麻烦,但最糟糕的是噪声 _脉冲_ 引起的错误集中。为了对抗这些错误 _突发_,采用了一种称为 _交织_ 的过程。请参见图 7。此过程将大多数在紧密集群中发现的错误分开,将其分布为单个错误,这些错误更容易校正。交织功能通过逐行将数据块读入矩阵,然后逐列读出数据来实现。然后,行和列长度的设置决定了连续数据位在信道流中分布的程度;所谓的交织 _深度_。接收器中的一个补充过程将数据重新组装到其预交织状态,准备进行卷积解码。当卷积解码器 _确实_ 无法进行校正时,它们本身会在输出端 _产生_ 错误突发。里德-所罗门解码可以很好地处理突发错误,因此使其紧随维特比解码器之后。 _交织_、_卷积编码_ 和 _里德-所罗门编码_ 的组合可以产生非常低的错误率。
  • 每种配置对错误突发的容忍度不同。 我们的 (7,6) 示例根本无法处理错误突发。也就是说,它不能一致地处理紧密的一对错误;实际上,它最多只能在 _大约_ 一半的时间内校正一对错误中的两个错误。某些配置,如 (7,5),可以管理在数据流中清除一对错误,前提是错误对的间距足够远。在这种情况下,一个 _只有_ 这样的对的测试需要它们之间的间隙在 12 到 14 个比特左右,才能完全校正。即使那样,也只有在经过大约六个无错误比特的起始运行后才能做到这一点。这种合格的突发性能,就像所有错误校正一样,与每个配置的 _最小自由距离_ 有关,(7,6) 的最小自由距离为 4,(7,5) 的最小自由距离为 5。增加此值以及所用算法的复杂度共同提高了系统整体的错误校正能力。
  • BER 和开销是相关的。 错误校正的性能通常与 _开销_ 百分比一起给出。这是衡量网络提供商在将数据传输到某个规定质量级别时所用资源的量度。当链路的质量很高时,_可能是_ 因为大部分数据正在被发送两次或更多次。因此,在实际系统中,与模拟相反,会引用 _开销_ 来指示为了保持现有的质量输出需要进行多少返工。例如,非常高的开销可能表明网络供应商需要更多地关注编码增益或频率选择。

尽管这里的示例使用了 (7,6) 配置,但 (7,5) 配置通常在其他地方使用。下面下拉框中提供了该配置的一些基本讲义图。通过左键单击原始图像,可以在维基共享资源中以其完整尺寸查看它们。这位作者还发现,硬拷贝工作表对于揭露想法很有用,因此在相邻的下拉框中包含了两种配置的空白格状图。

(n,k,m) = (2,1,3), (7,5) 图像集
速率为 1/2 的 (7,5) 卷积编码器的实现,(n,k,m) = (2,1,3)。前两个寄存器为状态的修改分组提供了基础。
速率为 1/2 的 (7,5) 配置的维特比状态图,(n,k,m) = (2,1,3)
速率为 1/2 的 (7,5) 配置的维特比状态表,(n,k,m) = (2,1,3)
这是维特比 (7,5) 解码器格状图,它改进了 (7,6)。指标清晰地显示,最小汉明距离路径或 _回溯路径_ 以红色突出显示。在这种情况下,解码器的输入 _没有信道错误_,并在整个过程中返回正确的数据。
在这个维特比 (7,5) 解码器格状图中,位位置 3 和 9 中的两个错误被校正。同样,指标清晰地显示,最小汉明距离路径或 _回溯路径_ 以红色突出显示。需要超过两个错误才能产生失败。


(7,5) 和 (7,6) 配置的空白工作表
配置 (7,6) 的维特比格状图工作表
配置 (7,5) 的维特比格状图工作表
空白对数纸;四十年份六十年份


最小自由距离

[编辑 | 编辑源代码]

卷积编码配置的 _最小自由距离_ (Df) 是衡量其纠错能力的指标。在一般错误校正和处理错误簇方面,较高的值比较低的值给出更好的结果。它关注的是路径的 _权重_。路径的权重只是沿着其边缘找到的逻辑 _1_ 位的数量。但是,我们关注的是两点之间 _最小_ 权重路径。虽然可以使用格状图来确定 _Df_ 值,但状态图可能是最容易使用的:请参考图 2 的状态图。

  • 从状态图来看,我们注意到输出对值出现在每条边上。我们感兴趣的路径是那些从零节点开始,在同一零节点结束,只沿着一个方向的箭头前进的路径。不考虑自循环,有两条这样的路径;_acba_ 和 _acdba_。_acba_ 路径上的输出值是 (11,11,10),总共有 _五个_ 1,而 _acdba_ 的输出值是 (11,00,01,10),只有 _四个_ 1。因此,_acdba_ 路径是 _最小_ 距离路径,Df 值为 _四个_。
  • 配置的错误校正能力 Ce 是可以清除的最大错误数量 _在与自由距离等长的比特块中_。这里不应该计算清除位。_对于更长的比特块_,清除的错误数量 _可能_ 会超过此数,_进一步_ 的错误 _也可能_ 会发生。当自由距离值包含分数时,只有整数部分是可靠的,而小数部分意味着校正的错误数量只能在 50% 的可能的输入序列中四舍五入。错误容量作为对不同配置的粗略比较很有用。它表示为

Ce = (Df - 1)/ 2

其中 Df 是自由距离。

  • 因此,(7,6) 配置的错误校正能力为 1.5。。也就是说,它可以在短块中清除一个错误,但不能一致地清除两个错误。另一方面,已知 (7,5) 配置的 Df 为 _五个_,因此它的错误清除能力为 2;略好于 (7,6)。这些事实很容易通过模拟器实验得到证实。请参见 VBA 2 中的维特比模拟器,它是在 Excel 中运行的模拟器。这两个配置在处理单个错误方面都很好。在处理短块中的 _两个_ 错误时,(7,6) 最多只能在 _一半_ 的时间内处理两个错误。配置 (7,5) 可以一致地处理 _两个_ 错误比特,无论它们的间距如何。
  • 对错误清除能力的详细预测最好通过模拟来处理。 只有使用模拟器才能克服与错误间距相关的复杂性。在长序列的代码字中模拟错误比计算给出更有用的结果,并允许进行完全随机测试。

另请参见

[编辑 | 编辑源代码]
  • VBA 中的维特比模拟器:接近度:维基教科书:一个用于 Excel 模拟器的 VBA 代码模块文本,可用于测试此页面上讨论的配置。此页面提供了基于 _接近度_ 而不是 _汉明距离_ 的算法。
  • VBA 2 中的维特比模拟器:汉明距离:维基教科书:一个用于 Excel 模拟器的 VBA 代码模块文本,可用于测试此页面上讨论的配置。此页面提供了基于 _汉明距离_ 的算法。
  • 卷积码:维基百科:关于该主题的页面。显示各种配置。
[编辑 | 编辑源代码]
华夏公益教科书