在远程通信、信息论、编码理论中,前向纠错码(FEC)和信道编码是在不可靠或强噪声干扰的信道中传输数据时用来控制错误的一项技术,前向纠错编码技术(FEC)具有引入级联信道编码等增益编码技术的特点,可以自动纠正传输误码的优点。它的核心思想是发送方通过使用纠错码(ECC)对信息进行冗余编码。美国数学家理查德·卫斯理·汉明在20世纪40年代在这一领域进行了开创性的工作,并且发明了第一种纠错码:汉明码。
编码介绍
FEC编码的冗余部分允许接收方检测可能出现在信息任何地方的有限个差错,并且通常可以纠正这些差错而不用重传。FEC使接收方有能力纠正错误而不需要反向请求数据重传,不过这是以一个固定的更高转发的带宽为代价的。因此FEC被应用在重传开销巨大或者不可能重传的情况下,比如单向通信链接的时候以及以多路广播的形式传送数据给多个接收方时。FEC信息通常被添加到大量存储设备中,以保障受损数据的恢复。FEC也被广泛应用在调制解调中。
接收方利用FEC处理一个数字比特流或对一个数字调制载波进行解调。在后一种情况下,FEC是接收方模拟信号与数字信号转换的一个必要部分。Viterbi解码器完成了一个软判决算法从受噪声干扰的模拟信号中解调数字数据(FEC的译码方式分为硬判决译码和软判决译码两种。硬判决FEC译码器输入为0,1电平,由于其复杂度低,理论成熟,已经广泛应用于多种场景;软判决FEC译码器输入为多级量化电平。由于硬判决译码损失了接收信号中所含的有关信道差错统计特性的信息,软判决译码通常性能要优于硬判决译码 [1] )。许多FEC编码器还能生成一个误比特率(BER)信号,这个信号能用作一个反馈,以此调整模拟信号接收设备。
噪声干扰信道的编码理论建立了在给定噪声水平下信道数据传输率的理论最大值限界。有些高级FEC系统已经非常接近理论最大值。
可被纠正的差错数量和丢失比特的最大值是由FEC的编码方式决定的,因此不同的前向纠错码适合不同的应用场景。在一个码组集合中,任意两个码字之间对应位上码元取值不同的位的数目定义为这两个码字之间的汉明距离。任意两个编码之间汉明距离的最小值称为这个码组的最小汉明距离。最小汉明距离是码的一个重要参数,它是衡量码检错、纠错能力的依据。最小汉明距离越大,码组越具有抗干扰能力。假设d表示汉明距离,当满足d>=e+1时,可检测e个位的错误;当满足d>=2t+1时,可纠正t个位的错误;当满足d>=e+t+1时,可纠正t个错,检测e个错。
工作方式
FEC是基于一种算法给传输的信息添加冗余部分来实现的。一个冗余位的值或许是原始信息中许多信息位的一个复杂函数。编码之后,原始信息或许按原样存在,或许不再按原样存在。如果原始信息原样包含在输出的编码中,这样的编码就是系统的,否则就是非系统的。 一个最简单的FEC的例子就是每个数据位发三次,也就是所谓的(3,1)重复码。经过一个存在噪声的信道传输后,接收者或许会看见8个版本的输出,如右图所示。
这种方法允许三位中的任意一位发生错误,发生错误时通过“多数投票”来纠错。这种FEC的纠错能力局限于:
尽管这种方式简单且应用广泛,但是这种3倍冗余的编码是非常低效的。更好的前向纠错码典型地根据最后接收到的几百个比特来决定如何对当前的一小组比特(通常2到8比特一组)进行译码。
平均噪声
FEC可以说是靠“平均噪声”工作的;由于每一个数据位影响多个传输标志位,即使一些标志位因噪声受损,我们依旧可以利用其它依赖于相同用户数据的未受损标志位得到原始的用户数据。
大多数数据通信系统使用一种固定的信道编码,这种信道编码设计可以处理预期的最坏误比特率,但是当误比特率更糟糕时就会完全失效。一些系统可以自适应给定的信道错误率水平,其中有一些把FEC和ARQ方式结合起来,称为混合纠错方式。ARQ方式在发送端采用某种能发现一定程度传输差错的简单编码方法,对所传信息进行编码,加入少量监督码元,接收端则根据编码规则,对收到的编码信号进行检查,一量检测出有错误时,即向发送端发出询问的信号,要求重发。发送端收到询问信号时,立即重发已发生差错的那部分信息,直到接收端正确收到为止。在混合纠错方式中,只要FEC可以处理当前错误率,就使用一种固定的FEC方法,当错误率太高时,就切换成ARQ方式。另外的自适应调制和编码方式使用了各种各样的FEC率,当信道中的错误率上升时就给每个包加上更多的纠错位,当不需要它们的时候就拿下来。
编码类型
主要有两种FEC码——分组码和卷积码。
有许多种分组码,在经典的分组码中,最著名的是Reed-Solomon码,因为它被广泛使用在激光唱片、DVD和硬盘驱动器中。其他类型的经典分组码包括格雷码、BCH码、多维奇偶校验码和汉明码。
汉明码被广泛用于闪存的纠错。它提供了一位纠错和两位检错。汉明码只适用于更可靠的单层式存储闪存。更密集的多层闪存要求更强大的多位纠错码,例如BCH码和Reed-Solomon码。NOR快闪则典型地不使用任何纠错。
经典的分组码通常使用硬判决算法译码,这意味着对于每一个输入输出信号,硬判决取决于它对应的是1还是0 。与此形成对比的是,卷积码使用Viterbi、MAP或BCJR等软判决算法译码,这些算法离散地处理模拟信号,比硬判决算法的纠错效果更好。几乎所有经典分组码都适用于有限域的代数性质。因此,经典分组码通常被称为代数码。
和经常说明检错或纠错能力的经典分组码相比,许多现代分组码(如LDPC码)缺乏这样的保证。另外,现代分组码靠误比特率进行评估。
大多数的前向纠错都只纠正位翻转,而不是位插入或位删除。在这种背景下,汉明距是衡量误比特率的合适方法(把两个码组中对应位上数字不同的位数称为码组的距离,简称码距。码距又称汉明距离)。有一些前向纠错码是专门用来纠正位插入或位删除的,比如Marker Codes 和 Watermark Codes。当使用这一类的编码时,编辑距离是一种更为合适的用来衡量误比特率的方式(编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符)。
级联码
对于有进行多次编码的系统,对各级编码,看成一个整体编码,称为级联码。经典的(代数的)分组码和卷积码通常会在级联码中合并使用。其中,有限长度的卷积码负责大部分的工作,组长度更大的分组码抹去任何卷积译码器造成的错误。使用这一类纠错码的单通道解码可以获得很低的错误率,但是在远距离传输(比如外太空)的条件下更推荐迭代译码。
自从旅行者2号探测器在1986年飞向天王星的时候首次使用级联码以来,级联码已经成为卫星和外太空通信的标准编码。
Turbo码
从香农信道编码定理可知,要达到或接近信道容量极限,应该采用无限长的随机码,而译码应该采用最大似然译码。但是,采用随机编码,使码长趋于无穷大并且采用最大似然译码将会使系统的复杂度和延时变得太大,无法在实际中使用。因此,必须研究新的编码方案。目前能够逼近香农容量极限的是被称为Turbo-like的一类码,包括Turbo码、LDPC码、RA码等。这类码的特点在于部分地引入了随机编码的思想,并且它们的码长都较长,译码均采用了接近最大后验概率译码的迭代译码算法。
Turbo码是一种迭代软判决方案,它也是一种级联码。它把几种简单的卷积码和交叉器组合起来产生一种分组码。它的性能可以部分达到香农极限。在实际运用方面,Turbo码先于LDPC,它们现在提供相似的性能。Turbo码最早的商业用途是高通公司的数字移动电话技术CDMA2000 1x,后来应用LTE技术中。
Turbo码的性能远远超过了其他的编码方式,得到了广泛的关注和发展,并对当今的编码理论和研究方法产生了深远的影响,信道编码学也随之进入了一个新的阶段。目前Turbo码的研究尚缺少理论基础支持,但是在各种恶劣条件下(即低SNR情况下),提供接近香农极限的通信能力已经通过模拟证明。
LDPC
低密度奇偶校验码(LDPC)是由许多奇偶校验码组成的线性分组码,它是一种级联码。人们最近重新发现了它的高性能。它使用一种迭代的软判决译码手段,能提供接近于理论最大值的信道容量,时间复杂度与组的长度呈线性关系。它的实际实现严重依赖于组成它的奇偶校验码的并行译码。
LDPC最先是由Robert G. Gallager在他1960年的博士论文中提出。但是由于编码器和译码器的计算成就和里德·所罗门码的问世,它被人们长期忽视,直到最近才被重视,被用于许多高速通信标准中,比如DVB-S2 (数字电视广播)、WiMAX (IEEE 802.16e微波通信标准)、 高速无线局域网(IEEE 802.11n)。
局部译码
有时我们只需要对信息中的几位进行译码,或者只是查看一个给定的信号是否是编码字而不用查看整个信号。在数据流的背景下就是这样,编码字太大了,无法快速译码,而信息中只有几位是有用的。这样的编码已经成为计算复杂性理论中的重要工具,例如概率可验证明。
对于可以局部译码的编码来说,即使编码字的一部分已经被损坏了,仍然可以通过查看编码字的一小部分就恢复几位信息。对于可以局部检测的编码来说,可以通过查看信号的一小部分判断该信号是否接近一个编码字。
交叉编码
交叉编码技术被广泛应用在数字通信和存储系统,用于改进前向纠错码的性能。许多信道不是无记忆的:错误通常是突发的而不是独立的。如果码字中的错误数量超过了纠错码的能力,那就无法恢复数据了。
交叉编码技术通过让信号分布在多个码字内来改善这个问题,因此就导致了错误的平均分布。所以交叉被广泛用于突发纠错。对于涡轮码来说,交叉器是必备的部件,它的适当设计对于提高性能非常重要。当代表译码器的因子图中没有短的环路时,迭代译码算法性能最优;交叉器可以用来避免出现短的环路。在多载波器通信系统中,载波器间的交叉用于提供频率隔离以及减轻频率选择性衰减、窄频带干扰。
交叉技术的不足
使用交叉技术增加了总体时延。这是因为必须收到整个交叉块后才能对数据包解码。另外,交叉器隐藏了错误的结构。与交叉器和简单的译码器配合使用相比,更先进的译码算法可以利用错误的结构实现更可靠的通信。
删除码
在使用先进删除码的情况下,数据和前向错误纠正信息被编码到每个数据块内。要恢复数据,系统必须先获取编码系统所要求的最小数量以上的数据块,然后将这些数据块解码以恢复数据。一个CleverSafe系统的要求是,每存储16个数据块,起码需要有10个块才能进行解码并满足读取请求。
使用先进删除码的系统对数据块有最小数据量要求,然后再将数据块予以解码。这样做会大幅增加系统的计算负荷。这里需要指出的是它会增加小型写入的开销,因为还没有被覆盖的数据需要被解码,然后结合完新数据后再重新编码。
因此,我们已经讨论过的所有使用高水平删除码的系统都采用向外扩展架构。给每4到18个磁盘驱动器配置一个Xeon处理器可以让这些使用复杂ECC方式的系统有足够的能力处理数据的编码和解码。传统中端阵列中每800多个磁盘驱动器才有4个Xeon处理器,很难应付这样的计算开销。
FEC列表
距离 |
编码 |
2(检测单位错) |
奇偶校验码 |
3(纠正单位错) |
三重模块冗余码 |
3(纠正单位错) |
(7,4)汉明码 |
4(单错校正双错检测) |
扩展汉明码 |
5(双错纠正) |
|
6(双错纠正/三错检测) |
|
7(三错纠正) |
二进制戈莱码 |