数字通信介绍(3)信道编码

数字通信介绍(3)信道编码

(2009-09-04 08:09:37)

前面介绍过,香农在1948年发表了《通信的一个数学理论》完整地解决了通信速度上限的问题。“信息论”(InformationScience)从此诞生。(见上文《数字通信介绍(2)香农与信息论》,http://www.de-sci.org/blogs/fouyang/archives/19714http://www.mitbbs.com/pc/pccon.php?id=2721&nid=60453http://blog.sina.com.cn/s/blog_48dcfed30100chf2.html)。但是香农也留下了一个巨大挑战:怎样才能达到这个速度上限?这个挑战,就开辟了后来五十年来十分热门的研究领域:信道编码。在继续读下去以前,建议读者先复习一下上文的内容。

 

在数据传送时,我们不是直接把一个一个数码(比特)送去调制,而是只传送一些预先选定的序列(称为码字,codewords)。要传送的数据被对应到相应的码字来传送。在接收方,根据收到的码字就能恢复出原始数据。这种传送的方法就称为编码。编码的目的可以有多种。一个目的是保密,这里不讨论。另一个目的是加快数据传送速度。把不常用的数据编成长码,常用的编成短码,就能降低码的平均长度,而传送更多的数据。上文开始时介绍的摩斯码就是这个原理。我们现在常用zip程式来压缩文档,也是如此。在通信中,这种编码叫做源编码(sourcecoding)有时也称数据压缩。香农在这方面也有开创性的工作,按下不表。第三个目的,就是纠正噪声引起的传送错误。这在上文中也有简单介绍。这种编码就叫信道编码(channelcoding),也叫纠错码(forward error correction, FEC)。信道编码就是本文的主题。

 

香农在证明他的信道容量定理中,引进了“典型序列”的概念。典型序列就是指序列中的符号出现的比例与符号的先验概率相同。对于足够长的序列,所有出现机率不为零的序列都是典型序列。通过选取一些典型序列作为码字,香农证明了最大传送速率。但是这个概念实行起来有困难。很长的序列在编码和解码两方面都会非常困难。而如果序列不长的话,就无法利用“典型序列”的概念。所以,香农给出的传输速率,在几十年中都不能达到。

 

最早的编码类型是分组码(blockcode)。这也是最容易理解的一种码。顾名思义,分组码这种编码方式就是把输入数据(二进制)分为长度固定的组,对每一组分别编码。比如,最早的分组码是海明码,写为(7,4,3)。它的意思是把数据分成4个比特一组,所以共有2的4次方,也就是16种可能的序列。每个序列对应了一个7比特的码字。它的编码率(coderate)是4/7,也就是说在每7比特传送的数据中,有4比特的有效信息,剩下3比特称为冗余(redundancy)。当然,一般说来我们并不能说7比特中哪个比特是信息哪个比特是冗余,它们是组合在一起的。

 

(7,4,3)中最后那个数字3,是码字间的最小距离。码字间的距离(称为海明距离)是指它们之间不相同的比特数。比如,两个码字A(0010110)和B(0110011)的海明距离是3,因为它们有三个比特不同(从左数起比特2,5,7)。如果我们收到了(0110110),我们可以知道传送的更可能是A,因为它与A只有一个比特不同(比特2),而与B有两个比特不同(比特5和7)。换句话说,如果传送的是A而接收时错了一位,我们能纠正这个错误。如果错了两个比特,那它就可能更接近B而导致我们的判断错误。但它还是不等于B,所以我们还是知道出了错。假如错三比特的话,那我们就可能认为发射的是B而无法纠正或检测到错误。所以如果码字间的最小海明距离是3的话,这个码就可以纠正1比特的错误,检测2比特的错误。这里面的关系,读者自己想一下就明白了。

 

由此可见,分组码的性能是由编码率和最小距离决定的。编码率决定了同样调制方式下信息传输的速度。最小距离决定了纠错的能力。纠错能力越强,就能在越强的噪声下(也就是越低的信噪比下)保持很低的误码率(也就是每一比特信息出错的几率)。所以,性能优越的码,就是要在同样的编码率下达到尽可能高的最小距离。我们还记得,香农定理说,在给定的信噪比下有一个最大传送速率。只要数据转送速率在此限度以下,就可以做到没有错误。或者反过来说,给定传送速率时,有一个最小的信噪比,只要信噪比大于这个限度就可以做到没有错误。而对于现实的编码来说,绝对没有错误是不可能的。对于一个特定的码,它的传送速率是固定的。在不同的信噪比下,它有不同的误码率。我们可以在一个可以接受的误码率(如10的-7次方)下比较它所需要的信噪比与不编码情况下(同样的信息传送速率)的信噪比。这两者的差称为编码增益(codinggain)。编码增益越大,这个码的性能就越好。而香农定理给出了编码增益的上限,这个上限同时也是研究者的努力目标。

 

图1给出了描写编码性能的一个例子。纵坐标是误码率(每个比特出错的几率)。横坐标是信噪比(这里用分贝即dB来表示。3个分贝的区别意味着噪声功率差一倍)。这里信噪比的定义已经考虑了信号传送速率的区别,所以对各个码来说是一个公平的比较。对于每个码,都有误码率与信噪比关系的一条曲线。我们可以看到,在较高信噪比的情况下,编码增益分别约为1分贝,1.5分贝和2.2分贝。而这些码的性能与香农上限还相差很远。

 

 

对实际应用来说,除了纠错性能外,一个码要求的运算复杂度也是很重要的。我们上面其实已经给出了一个最直接的,也是最优的解码方法(称为最大似然法,MaximumLikelihood):把收到的数据序列与所有码字比较,找出海明距离最短的那个作为解码结果。这样,运算量就与码长(上面例子中的4)成指数关系。这对于稍长的码来说就很难实现了。而实用的分组码是基于种种数学结构而产生的,编码和解码都使用某些数学运算而不是硬性搜寻。这样运算的复杂度就会低很多。人们为此发展了种种技术。目前通用的也只是普遍认为最好的几个系列。一般来说,码越长,纠错能力就越强,但需要的运算量也就越大。

 

 

数字通信介绍(3)信道编码

图一:编码性能举例(引自[1]图4)

 

除了分组码以外,另一类编码是卷积码。它是基于卷积运算,如图二所示。图中输入数据进入移位寄存器。在每一个时钟点,移位寄存器里储存的比特依次向前移一位,也就是得到一位(比特)新的输入数据,同时丢掉一位最老的数据。同时,寄存器里的数据与两个系数序列(图上标为码1和码2)逐位相乘,结果相加后成为输出比特。在输出端,两个码产生的两个输出比特被依次输出。注意,以上说的加法是以2为模的。即0+0=0,0+1=1,1+1=0,没有进位。

 

在这种情况下,每个输入比特产生两个输出比特。所以编码率是1/2。对于一个传送序列,开始的一段和最后的一段是收,发双方约定的,用来帮助解码。我们也可以说卷积码是一种很长的分组码:一个传送序列就是一个码组。当然,由于卷积结构的限制,卷积码的性能并不是同样长度分组码中的最优。

 

数字通信介绍(3)信道编码

 

图二:卷积码编码器举例

 

 

卷积码没有复杂的代数结构,其解码方法就是上面描述过的最大似然法。上面说过,这种方法的复杂度与码长成指数关系。幸运的是,1967年维特比(Viterbi)提出了著名的维特比算法。它遵照最大似然法的原则(因而也是最优的),但利用了卷积码的结构,而使得解码器的复杂度与序列长度成线性关系。这个发明使得卷积码成为一种实用和有吸引力的编码方法。

 

维特比算法的基本原理可以用一个简单的例子来说明。假如我们要找一条从A到B费时最短的路。这就是最大似然法的基本要求。从A到B要经过一座桥C。从A到C有5条路,从C到B有4条路。这样组合一下就有20(5×4)种走法,需要做20次测量来找出费时最小的选择。但是,维特比指出了另一种方法:我们可以先找出A到C的最好路程,需要做5此测量。然后再找出从C到B的最好路程,4次测量。总共测量9次(5+4),就解决问题了。这个乘法到加法的转变,就把复杂度从指数增长变成了线性增长。这个问题可以简化的关键在于:我们要优化的参数(时间)是每段路程之值的线性相加。而卷积码正具有这个特性。

 

以上说的解码方法,都是基于已经解调的信号(也就是收到的比特序列)。但解调过程中已经丢掉了一些信息。如果我们规定收到-1V为0,1V为1,那么如果收到0.1V或0.9V,解调的结果都是1。但是这两种情况下这个“1”的确定程度是不同的,前者更有可能出错。要提高解码增益,就要试图利用这个附加信息,也就是把解调与解码结合起来。对于分组码,这样做法需要特殊的设计。而对于卷积码,这个要求可以在维特比算法下自然完成。这也就是卷积码的主要吸引力。

 

卷积码的另一个特点,就是它在低信噪比条件下解码增益高,而在高信噪比条件下表现就不那么好。也就是说,在输入数据含有很多错误时,它可以把误码率降低。但在低误码率的输入情况下,它的进一步的纠错能力就不高了。于是,人们把两种编码方法合起来使用。把分组码作为“外码”,即最先编码,最后解码。而卷积码作为“内码”。这样,在接收器中,收来的信号先经过维特比算法的解调/解码,产生较低误码率的比特序列。这个序列再经过分组码解码,进一步降低误码率。

 

以上谈到的分组码和卷积码有一个共性,就是码字是经过精心设计的,使得码字之间的最小距离尽可能大,来增强纠错能力,降低误码率。分组码有着种种特别的数学性质,以便使用巧妙的解码方法。而卷积码通常用维特比算法来解码。另外,还有把调制和卷积码编码结合在一起的“格状编码调制”(TrellisCoding Modulation,TCM),这里就不细谈了。这些码的性能离开香农极限都有几个分贝。在一段时间内,人们认为要达到香农极限即使可能也是非常困难的。

 

但是柳暗花明,九十年代初期人们走出了另一条路。回到香农定理的证明,那里的“码字”就是“典型序列”。而如果我们随机产生序列的话,只要足够长,绝大多数结果都是典型序列。所以随机产生的码字就是好码字。问题是,这样没有结构的码没有好的解码方法。所以长的随机码是不现实的。但是人们发现了具有一定结构的码也可以具有这样随机的特性。而它们的结构可以帮助解码。首先发现的是turbo码。它也叫乘积码。编码方法是把两个短码(分组码或卷积码),一个编码后把次序按一定规律打乱,再编一次码。这样,最后的码长是两个短码长度的乘积。解码时,也是对于两个短码分别解,但采用迭代的办法。第一次解码,只是得到一个“可能”的结果。把这个结果及其相关的概率再输入解码器一遍,就得到一个更加“可靠”一些的结果。如此反复,就能提高解码增益。从理论上讲这种方法不一定是最优的,但实际上最后性能非常接近香农极限。Turbo码也是有结构的,但这个结构不是为了增加码字间的最小距离,而是为了给解码提供方便。在Turbo码的码字中,可能有距离很近(也就是很容易出错)的码字。但这些码字只占总体的很小一部分,所以总的来说误码率还是很低。而在分组码,卷积码中,不同码字出错的几率是差不多的。可见,Turbo码的思路与以前的编码技术有很大区别,可以说是一场革命。在此启发下,又有人重新发现了另一种随机码——低密度奇偶校验码(LDPC)也有类似的特征。LDPC码也可以用迭代方法解码,性能也接近香农极限。LDPC码早在1960就被提出了,但后来几十年间这个技术慢慢被人遗忘了。直到1990年代中叶,人们用图论重新诠释LDPC码,找到了系统的设计方法和有效的解码技术,才使得LDPC重振雄风。

 

随机码的发明使得编码增益大大提高,基本达到了香农极限。到2000年代,这些码已经被现代通信系统采纳了。当然,它们的实现还是比较复杂,所以常常是作为可选功能。

 

从香农的信息论提出后的半个多世纪,人们为了实现香农预言的传送速度极限作出了巨大的努力,发展了很多精致有效的数学工具,也进行了很多大海捞针式的搜寻。随着香农极限的基本达到,编码的研究是否到了终点呢?当然,性能和复杂性的权衡总是有工作要做的,特别是在硬件性能突飞猛进的今天。另外,除了香农所研究的基本信道外,还有许多更加复杂有趣的信道。特别是无线通信的发展,产生了多天线通信,协同通信等新技术,给信道容量和实现信道容量提出了很多新课题。这些方面我们以后会继续介绍。

 

 

 

【参考文献】

[1]D. J. Costello and D. Forney, “Channel Coding: The Road toChannel Capacity”, Proceedings of the IEEE, vol. 95, No. 6, June2007 p. 1150

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值