第5章〓信道编码 5.1信道编码的基本概念 在有噪信道上传输信号时,所收到的数据不可避免地会出现差错,所以在数字通信、数据传输、图像传输、计算机网络等数字信息交换和传输中所遇到的一个主要问题是可靠性问题。不同的用户对可靠性的要求是大相径庭的,例如: 对于普通电报,差错概率(误码率)在10-3 时是可以接受的; 而对导弹运行轨道数据的传输,如此高的差错率将使导弹偏离预定的轨道,这显然是不允许的。在数字通信系统中要从多种途径来研究提高系统可靠性的方法。首先要进行合理基带信号设计、选择合适调制解调方式以及采用匹配滤波、均衡等,这是降低差错的根本措施,其目的是改善信道特性,减少差错。在此基础之上利用纠错编码技术对差错进行控制,可大大提高系统的抗干扰能力,降低误码率,这是提高系统可靠性的一项极为有效的措施,也是我们后面要研究和解决的问题。 一个通信系统传输消息必须可靠、快速,如何合理解决可靠性和有效性这对矛盾是数字通信系统设计的一个关键问题。在香农之前,人们普遍认为在有噪信道进行信息传输时,要获得任意小的错误概率的唯一途径是不断减小传输速率,直至为零。1948年,香农在贝尔技术杂志上发表了奠基性文章《通信的数学理论》,标志着信息论与编码理论这一学科的创立。在文中香农提出了著名的有噪信道编码定理,该定理从理论上证明了通过信道编码技术可使信息传输率接近信道容量,同时系统的错误概率达到任意小,即实现可靠性和有效性的有机统一。编码定理及其证明虽然没有给出编码的具体设计方法,却指出了达到信道容量的编译码方法的方向和途径。此后,构造可逼近信道容量(香农限)的信道编码具体方法以及可实现的有效译码算法一直是信道编码理论和技术研究的中心任务,也是编码学者长期追求的目标。 5.1.1信道编码的一般方法 纠错编码又称信道编码或差错控制编码,它涉及很多理论问题和数学知识,本节先介绍基本的纠错编码方法和概念。 设信源编码器输出的二元数字信息序列为(001010110001…),序列中每个数字都是一个信息元素。为了适应信道的最佳传输而进行编码,首先需要对信息序列进行分组。一般是以截取相同长度的码元进行分组,每组长度为k(含有k个信息元),这种序列一般称为信息组或信息序列,例如上面的信息序列以k=1分组为0(代表“雨”)、1(代表“晴”)。如果将这样的信息组直接送入信道传输,它是没有任何抗干扰能力的,因为任意信息组中任意元素出错都会变成另一个信息组,如信息元(0)出错,变成(1),而它们代表着不同的信息组,因此原本发送的气象信息在接收端就会判断错误(“雨”变成“晴”)。可见不管k的大小如何,若直接传输信息组是无任何抗干扰能力的。 如果在各个信息组后按一定规律人为地添上一些数字,如上例,在k=1的信息组后再添上两位数字,使每一组的长度变为3,这样的各组序列称为码字。码字长度记为n,本例中n=k+2。每个码字的前一个码元为原来的信息组,称为信息元,它主要用来携带要传输的信息内容。后两个新添的码元称为监督元(或校验元),其作用是利用添加规则来监督传输是否出错。如果添监督元的规则为新添的每个监督元符号(0或1)与前面信息元符号(0或1)一样,那么这样的码字共有2k=21=2个,即{(000),(111)},它们组成了一个码字集合,称为(3,1)重复码,其每个码字分别代表一个不同的信息组。而在3位二进制序列(码组)中共有23=8个,除以上2个作为码字外,还有6个未被选中,即这6个码组不在发送之列,称为禁用码组,而被编码选中的n重码字称为许用码组。接收端接收序列不在码字集合中,说明不是发送端所发出的码字,从而确定传输有错。因此这种变换后的码字就具有一定的抗干扰能力。以二元对称信道BSC(0.01)为例,若直接传输信息元,接收端平均错误译码概率就等于信道的错误传输概率,即PE=10-2,而采用(3,1)重复码后,只有当码字中3位码元都出错才会误判(将发端传递的“雨”消息误判成“晴”或相反),否则可以检出传输出错,此时系统错误译码概率PE=p3=10-6; 当传输中每个码字仅1位出错,接收端还能根据编码规律进行自动纠错,可计算出此时接收端平均错误译码概率: PE=p3+3(1-p)p2≈3×10-4 可见采用(3,1)重复码后,接收端无论采取检错方式还是纠错方式,系统的错误译码概率都会降低。 以上就是一种最简单的信道编码,在一位信息元之后添加了两位监督元,从而获得了抗干扰能力。一般来说,添加的监督元位数越多,码字的抗干扰能力就越强,不但能识别传输是否有错(检错),还可以根据编码规则确定哪一位出错(即纠错)。因此,纠错编码的一般方法可归纳为: 在传输的信息码元之后按一定规律产生一些附加码元(图5.1.1),经信道传输,在传输中若码字出现错误,接收端能利用编码规律发现码的内在相关性受到破坏,从而按一定译码规则自动纠正错误,降低误码率PE。 图5.1.1信道编码过程 通常按以下方式对纠错码进行分类。 (1) 按照对信息元处理方法分为分组码与卷积码两大类。 分组码是把信源输出的信息序列,以k个码元划分为一段,通过编码器把这段k个信息元按一定规则产生r个校验(监督)元,输出码长为n=k+r的一个码组。这种编码中每一码组的校验元仅与本组的信息元有关,而与别组无关。分组码用(n,k)表示,n表示码长,k表示信息位。 卷积码是把信源输出的信息序列,以k0个(通常k0k0)的码段,但是该码段的n0-k0个校验元不仅与本组的信息元有关,而且与其前m段的信息元有关,一般称m为编码存储,因此卷积码用(n0,k0,m)表示。 (2) 根据校验元与信息元之间的关系分为线性码与非线性码。 若校验元与信息元之间的关系是线性关系(满足线性叠加原理),则称为线性码; 否则,称为非线性码。 目前实用的纠错码以线性码为主,且非线性码的分析比较困难,故本书仅讨论线性码。 (3) 按照所纠错误的类型可分为纠随机错误码、纠突发错误码以及既纠随机错误又纠突发错误码。 (4) 按照每个码元取值可分为二进制码与q进制码(q=pm,p为素数,m为正整数)。 (5) 按照对每个信息元保护能力是否相等可分为等保护纠错码与不等保护(UEP)纠错码。 除非特别说明,今后讨论的纠错码均指等保护能力的码。 此外,在分组码中按照码的结构特点又可分为循环码与非循环码。为了清晰起见,把上述分类用图5.1.2表示。 图5.1.2纠错码分类 为了今后学习的方便,除了上面讲到的基本概念外,还将介绍一些编码中常用的参数。 5.1.2信道编码的基本参数 1. 码率 一般把分组码记为(n,k)码,n为编码输出的码字长度,k为输入的信息组长度,在一个(n,k)码中,信息元位数k在码字长度n中所占的比重称为码率,用R表示。对于二元线性码,它可等效为编码效率,即 η=R=kn 码率是衡量所编的分组码有效性的一个基本参数,码率越大,表明信息传输的效率越高。但对编码来说,每个码字中所加进的监督元越多,码字内的相关性越强,码字的纠错能力越强。而监督元本身并不携带信息,单纯从信息传输的角度来说是多余的。一般地说,码字中冗余度越高,纠错能力越强,可靠性越高,而此时码的效率则降低了。所以信道编码必须注意综合考虑有效性与可靠性的问题,在满足一定纠错能力要求的情况下,总是力求设计码率尽可能高的编码。 2. 汉明距离与重量 定义5.1.1一个码字C中非零码元的个数称为该码字的(汉明)重量,简称码重,记为W(C)。 若码字C是一个二进制n重,则W(C)就是该码字中“1”码的个数。例如: 若C1=(000),则W(C1)=0; 若C2=(011),则W(C2)=2; 若C3=(101),则W(C3)=2; 若C4=(110),则W(C4)=2。 定义5.1.2两个长度相同的不同码字C和C′ 中对应位码元不同的码元数目称为这两个码字间的汉明距离,简称码距(或距离),记为d(C; C′)。 例如上例中,d(C2; C3)=2。 在一个码集中,每个码字都有一个重量,每两个码字间都有一个码距,对于整个码集而言,还有以下两个定义。 定义5.1.3一个码集中非零码字的汉明重量的最小值称为该码的最小汉明重量,记为Wmin(C)。 定义5.1.4一个码集中任两个码字间的汉明距离的最小值称为该码的最小汉明距离,记为d0或dmin。 例如上例中的(3,2)码的最小汉明距离为2。 对于二元编码,不难得出如下关系式: d(C1; C2)=W(C1C2) W(C1C2)=W(C1)+W(C2)-2W(C1⊙C2)(5.1.1) 式中,“”是模2加法运算; “⊙”是模2乘法运算。 例如,C1=(11001),C2=(10111),则有C3=C1C2=(01110),d(C1; C2)=W(C3)=3; C1⊙C2=(10001),W(C3)=3+4-2×2=3。 一个(n,k)分组码共含有2k个码字,每两个码字之间都有一个汉明距离d,因此要计算其最小距离,需比较计算2k-1(2k-1)次。当k较大时,计算量就很大。但对于5.3节将要介绍的(n,k)线性分组码具有以下特点: 任意两个码字之和仍是线性分组码中的一个码字,因此两个码字之间的距离d(Cl; C2)必等于其中某一个码字C3=C1+C2的重量。 定理5.1.1(n,k)线性分组码的最小距离等于非零码字的最小重量: d0=minC,C′∈(n,k){d(C; C′)}=minCi∈(n,k)Ci≠0W(Ci) 该定理的证明见定理5.3.1。这样一来,(n,k)线性分组码的最小距离计算只需检查2k-1个非零码字的重量即可。 此外,码的距离和重量还满足三角不等式的关系: d(C1; C2)≤ d(C1; C3)+d(C3; C2) W(C1+C2)≤ W(C1)+W(C2) 该性质在研究线性分组码的特性时常用到。一种码的d0值是一个重要参数,它决定了该码的纠错、检错能力。d0越大,抗干扰能力越好。 3. 码的纠、检错能力 定义5.1.5若一种码的任一码字在传输中出现了e个或e个以下的错误仍能自动发现,则称该码的检错能力为e。 定义5.1.6若一种码的任一码字在传输中出现t个或t个以下的错误仍能自动纠正,则称该码的纠错能力为t。 定义5.1.7若一种码的任一码字在传输中出现t个或t个以下的错误均能纠正,当出现多于t个而少于e+1个错误(e>t)时此码能检出而不造成译码错误,则称该码能纠正t个错误同时检测e个错误。 (n,k)分组码的纠、检错能力与其最小汉明距离d0有着密切的关系,一般有以下结论。 定理5.1.2若码的最小距离满足d0≥e+1,则码的检错能力为e。 定理5.1.3若码的最小距离满足d0≥2t+1,则码的纠错能力为t。 定理5.1.4若码的最小距离满足d0≥e+t+1(e>t),则该码能纠正t个错误同时检测e个错误。 以上结论可以用图5.1.3所示的几何图加以说明。 图5.1.3码距与检错和纠错能力的关系 图5.1.3(a)中C1表示某一码字,当误码不超过e个时,该码字的位置移动将不超过以它为圆心、以e为半径的圆(实际上是一个多维球),即该圆代表着码字在传输中出现e个以下误码的所有码组的集合。若码的最小距离满足d0≥e+1,则(n,k)分组码中除C这个码字外,其余码字均不在该圆中。这样当码字C在传输中出现e个以下误码时,接收码组必落在图5.1.3(a)的圆内,而该圆内除C1外均为禁用码组,从而可确定该接收码组有错。考虑到码字C的任意性,图5.1.3(a)说明,当d0≥e+1时任意码字传输误码在e个以下的接收码组均在以其发送码字为圆心、以e为半径的圆中,而不会和其他许用码组混淆,使接收端检出有错,即码的检错能力为e。 图5.1.3(b)中Cl、C2分别表示任意两个码字,当各自误码不超过t个时,发生误码后两码字的位置移动将各自不超过以Cl、C2为圆心、以t为半径的圆。若码的最小距离满足d0≥2t+1,则两圆不会相交(由图中可看出两圆至少有l位的差距),设Cl传输出错误在t个以下变成C′l,其距离 d(Cl; C′1)≤t 根据距离的三角不等式可得 d(C′1; C2)≥t 即 d(C′1; C2)≥d(C1; C′1) 根据最大似然译码规则,将C′1 译为C1从而纠正了t个以下的错误。 定理5.1.4中“能纠正t个错误同时检测e个错误”是指当误码不超过t个时系统能自动予以纠正,而当误码大于t个而小于e个时则不能纠正但能检测出来。该定理的关系由图5.1.3(c)反映,其结论请读者自行证明。 以上三个定理是纠错编码理论中最重要的基本理论之一,它说明了码的最小距离d0与其纠、检错能力的关系,从d0中可反映码的性能强弱; 反过来也可根据以上定理的逆定理设计满足纠检错能力要求的(n,k)分组码。 定理5.1.5对于任一(n,k)分组码,若要求: (1) 码的检错能力为e,则最小码距d0≥e+1; (2) 码的纠错能力为t,则最小码距d0≥2t+1; (3) 能纠t个误码同时检测e(e>t)个误码,则最小码距d0≥t+e+1。 5.1.3信道译码规则 已知信道编码器的框图如图5.1.1 信道编码过程所示,设任一个信息序列M是一个k位码元的序列,通过编码器按一定的规律(编码规则)产生若干监督元,形成一个长度为n的序列,即码字。每个信息序列将形成不同的码字与之对应,在二进制下,k维序列共有2k种组合,因此编码输出的码字集合共有Q=2k个码字,而二进制下的n重矢量共有2n种。显然,编码输出的码字仅是所有二进制n重中的一部分,编码实际上就是从这2n种不同的n重矢量中按一定规律(编码规则)选出2k个n重矢量(许用码字)代表2k个不同的信源信息序列。 数字通信系统简化模型如图5.1.4所示,设发送码字是码长为n的序列C: (cn-l,cn-2,…,c1,c0),通过信道传输到达接收端的序列为R: (rn-1,rn-2,…,r1,r0),由于信道中存在干扰,R序列中的某些码元可能与C序列中对应码元的值不同,即产生了错误。而二进制序列中的错误不外乎是1错成0或0错成1,因此,如果把信道中的干扰也用二进制序列E: (en-1,en-2,…,el,e0)表示,则相应有错误的各位ei取值为1,无错的各位取值为0,称E为信道的错误图样或错型,而R就是n维序列C与E模2相加的结果: R=CE 式中: “”为模2加法。 图5.1.4数字通信系统简化模型 经编码后产生的(n,k)码送信道传输,由于信道干扰的影响将不可避免地发生错误,这种错误有以下两种趋势。 (1) 许用码字变成禁用码组。这种错误一旦出现,由于接收到的码组不在编码器输出的码字集合中,译码时可以发现,所以这种错误模型是可检出的。 (2) 许用码字变成许用码字。即发端发生某一码字Ci经传输后错成码集中的另一码字Cj,这时收端无法确认是否出错,因此这是一种不可检出的错误模型。 可见,一个n重二进制码字C在传输中由于信道干扰的影响,到接收端可能变成2n种n重矢量中的任何一个,译码的任务就是将所有可能的接收矢量进行分类,同属一类的接收矢量译为同一个许用码字,将2n种不同的接收矢量还原为2k个许用码字或信息序列。为了能在接收端确认发送的是何种码字,就需要建立一定的判决规则以获得最佳译码。信道编译码过程如图5.1.5所示。 图5.1.5信道编译码过程 一般来说,译码器要完成比编码器更为复杂的运算,译码器性能的好坏、速度的快慢往往决定了整个差错控制系统的性能和成本。译码正确与否的概率主要取决于所使用的码、信道特征及译码算法。对特定码类如何寻找译码错误概率小、译码速度快、设备简单的译码算法,是纠错编码理论中一个重要而实际的课题。下面讨论当码类和信道给定时,应采用什么样的算法使译码错误概率最小。 由图5.1.4和图5.1.5可知,信道输出的R是一个二(或q)进制序列,而译码器的输出是一个信息序列M的估值序列M^。 译码器的基本任务就是根据接收序列R和信道特征,按照一套译码规则,由接收序列R给出与发送的信息序列M最接近的估值序列M^。由于M与码字C之间存在一一对应关系,所以这等价于译码器根据R产生一个C的估值序列C^。显然,当且仅当C^=C时,M^=M,这时译码器正确译码。如果译码器输出的C^≠C,那么译码器产生了错误译码。产生错误译码的原因有两个: 一是信道干扰很严重,超过了码本身的纠错能力; 二是译码设备的故障(这点本书不予讨论)。 当给定接收序列R时,译码器的条件译码错误概率定义为 P(E|R)=P(C^≠C|R) 所以译码器的错误译码概率为 PE=∑RP(E|R)P(R) P(R)是接收序列R的概率,与译码方法无关,所以译码错误概率最小的最佳译码规则是使 minPE=minRP(E|R)=minRP(C^≠C|R) =min1-∑P(R)P(C^=C|R) 进而得译码错误概率最小的最佳译码规则等价于使P(C^=C|R)最大化。 因此,若译码器对输入的R能在2k个码字中选择一个使P(C^i=C|R)(i=1,2,…,2k)最大的码字Ci作为C的估值序列C^,则这种译码规则一定使译码器输出错误概率最小,这种译码规则称为最大后验概率译码。 进一步,由贝叶斯公式 P(Ci|R)=P(Ci)P(R|Ci)P(R) 可知,若发端发送每个码字的概率P(Ci)均相同,且由于P(R)与译码方法无关,则有 maxi=1,2,…,2kP(Ci|R)maxi=1,2,…,2kP(R|Ci)(5.1.2) 对离散无记忆信道(DMC)而言,有 P(R|Ci)=∏nj=1P(rj|cij)(5.1.3) 式中 Ci=(ci1,ci2,…,cin)(i=1,2,…,2k) 一个译码器的译码规则若能在2k个码字C中选择某一个Ci并使式(5.1.2)最大,则这种译码规则称为最大似然译码(MLD),P(R|C)称为似然函数。由于logbx与x是单调关系,因此式(5.1.2)与式(5.1.3)可写成 maxi=1,2,…,2klogbP(R|Ci)=maxi=1,2,…,2k ∑nj=1logbP(rj|cij)(5.1.4) 式中: logbP(R|C)为对数似然函数或似然函数。 对于DMC,当发端发送每一码字的概率P(Ci)(i=1,2,…,2k)均相等时,MLD是使译码错误概率最小的一种译码方法; 否则,MLD不是最佳的。因而,MLD算法是一种准最佳的译码算法。在以后的讨论中,都认为P(Ci)均近似相等。 例5.1.1一个码由00000,00111,11100与11011四个码字组成。每个码字可用来表示4种可能的信息之一。可以计算出该码的最小距离d0=3,由定理5.1 3可知,它可纠正在任何位上出现的单个误码。同时注意到,码长为5的二进制码组共有25=32种可能的序列,除了上述4个许用码字外,其余28个为禁用码组。为了对该码进行纠错处理,需将28种禁用码组的每一个与4种许用码字做“最邻近性”的比较。这种处理意味着要建立一个“译码表”,所以译码的本质就是对码组进行分类,即先将所有与每个许用码字有一位差错的各个可能接收序列列在该码字的下面,这样就得到表5.1.1中以虚线围起的部分。除了这一部分之外,应注意到尚有8个序列未被列入。这8个序列与每个码字至少差两位。但是,它们与上述序列不同,没有唯一的方法可把它们安排到表内。例如,既可将序列10001放在第4列,也可将它放在第1列。在译码过程中使用此表时,可将所接收序列与表内各列对照,当查到该序列时,将该列第一行的码字作为译码器的输出。 表5.1.14个码字的译码表 00000111000011111011 10000011001011101011 01000101000111110011 00100110000001111111 00010111100010111001 续表 00001111010011011010 10001011011011001010 10010011101010101001 用这种方式建立的表具有很大的优点。设信道误码率为pe,出现任何一种具有i个差错特定模式的概率是pie(1-pe)5-i。当pe<1/2,即信道的信噪比足够大时,可以看到: (1-pe)5>pe(1-pe)4>p2e-(1-pe)3>… 即不出错概率大于出错概率; 一个特定的单个差错模式要比一个特定的两个(或多个)差错模式更容易出现。因此,译码器将所收到的一个特定码组译为在汉明距离上最邻近的一个码字时,实际上是选择了最可能发送的那个码字(设各个码字的发送机会相同)。这就是MLD的具体应用,实际上它就是根据接收序列R在2k个码字集中寻找与R的汉明距离最小的码字Ci作为译码输出,因为它最可能是发送的码字。这种译码方法又称为最小汉明距离译码。执行这种译码规则的译码器称为最大似然译码器。在上述条件下,其序列差错概率最小。当用译码表进行译码时,为了实现最大似然译码,可用上述方法列表对码字进行分类。遗憾的是,译码表的大小随码组长度按指数关系增加,故对长码来说直接使用译码表是不切合实际的。但对说明分组码的某些重要性质而言,译码表仍是一种很有用的概念性工具。 总结而言,信道译码准则有以下几种。 最小错误概率译码准则: F(Ri)=C*=arg minPE 最大联合概率译码准则: F(Ri)=C*=arg max[P(C*Ri)] 最大后验概率译码准则: F(Ri)=C*=arg max[P(C*|Ri)] 最大似然概率译码准则: F(Ri)=C*=arg max[P(Ri |C*)] 最小距离译码准则: F(Ri)=C*=arg min[d(C*; Ri)] 可以证明,最大联合概率译码和最大后验概率译码等价,都属于最小错误概率译码,可以得到最小平均译码概率PE,是性能最佳的译码准则。但这几类译码准则依赖发送码字的先验概率P(Ci),计算复杂度大。最大似然译码或最小距离译码仅依赖信道转移概率或码距,译码相对简单,但最大似然译码只有在输入等概时才能得到最小平均译码错误概率,最小距离译码在传输错误概率较小时,等价于最大似然译码。 5.2有噪信道编码定理 5.2.1联合渐近等同分割性与联合典型序列 有噪信道编码定理又称香农第二定理,其基础依据是信道传输表现出联合渐近等同分割性(AEP)。 针对离散信源,AEP定理和ε典型序列说明离散信源的无记忆扩展信源随着序列X1,X2,X3,…,Xn的长度n无限加大,每个ε典型序列发生的概率约为2-nH(X),这些典型序列的总数约为2nH(X),这些ε典型序列为高概率事件。类似的结论对于离散信道也成立。以下讨论离散信道[X,P(y|x),Y]的n次无记忆扩展信道[Xn,P(y|x),Yn],其中,x=(x1,x2,…,xn)(xi∈X)和y=(y1,y2,…,yn)(yi∈Y)分别表示n次无记忆扩展信道的输入和输出的n长随机序列。满足 P(y|x)=P(y1y2…yn|x1x2…xn)=∏ni=1P(yi|xi) 它们对应的信息熵和联合熵分别为H(X)、H(Y)和H(XY)。 定义5.2.1设(x,y)∈(Xn; Yn)是n长随机序列对,对于任意小的正数ε>0,存在足够大的n,若满足下列条件: 1nlogP(x)+H(X)<ε 1nlogP(y)+H(Y)<ε 1nlogP(xy)+H(XY)<ε(5.2.1) 则称(x,y)为联合ε典型序列。 Gε(X)和Gε(Y) 分别表示Xn和Yn中的典型序列集,Gε(XY) 表示XnYn联合空间中的联合典型序列集。联合ε典型序列满足如下性质。 定理5.2.1(联合渐近等同分割性)对于任意小的ε>0,δ>0,当n足够大时,则有以下性质。 性质1典型序列x,y和联合典型序列(x,y)满足 2-n[H(X)+ε]≤P(x)≤2-n[H(X)-ε]2-n[H(Y)+ε]≤P(y)≤2-n[H(Y)-ε]2-n[H(XY)+ε]≤P(xy)≤2-n[H(XY)-ε](5.2.2) 性质2典型序列集Gε(X),Gε(Y)和联合典型序列集Gε(XY)满足 P(Gε(X))≥1-δP(Gε(Y))≥1-δP(Gε(XY))≥1-δ(5.2.3) 性质3以NG表示典型序列集中元素个数,则Gε(X),Gε(Y)和Gε(XY)中序列个数满足 (1-δ)2n[H(X)-ε]≤NGx≤2n[H(X)+ε](1-δ)2n[H(Y)-ε]≤NGy≤2n[H(Y)+ε](1-δ)2n[H(XY)-ε]≤NGxy≤2n[H(XY)+ε](5.2.4) 证明: 性质1是大数定律的直接结果,因1nlog1P(x)、1nlog1P(y)、1nlog1P(xy)分别依概率趋于其统计平均Elog1P(x)=H(X)、Elog1P(y)=H(Y)以及Elog1P(xy)=H(XY)。再根据联合ε典型序列定义式(5.2.1)整理即得性质1。 性质2的证明采用极限理论中εδ描述方法,对于任意小的正数ε>0,δ>0,存在正整数n0,使得对于所有n≥n0,有 P1nlog1P(x)-H(X)≤ε≥1-δ P1nlog1P(y)-H(Y)≤ε≥1-δ P1nlog1P(xy)-H(XY)≤ε≥1-δ 即得性质2。 最后证明性质3,结合概率满足完备性以及联合典型序列满足式(5.2.2),可得 1≥∑x∈Gε(X)P(x)>NGε(X)2-n[H(X)+δ]1≥∑y∈Gε(Y)P(y)>NGε(Y)2-n[H(Y)+δ]1≥∑xy∈Gε(XY)P(xy)>NGε(XY)2-n[H(XY)+δ] NGε(X)2-n[H(X)-δ]>∑x∈Gε(X)P(x)>1-εNGε(Y)2-n[H(Y)-δ]>∑y∈Gε(Y)P(y)>1-εNGε(XY)2-n[H(XY)-δ]>∑xy∈Gε(XY)P(xy)>1-ε 两组公式整理即得性质3。[证毕] 定理5.2.1说明,在两个随机变量情况下,信源Xn、Yn和联合集(Xn Yn)也具有渐近等同分割性。联合ε典型序列对(x,y)是n次无记忆扩展联合空间中经常出现的高概率序列对。这些高概率序列对的出现概率几乎相等,即 P(x)≈2-nH(X), P(y)≈2-nH(Y), P(xy)≈2-nH(XY) 并且与典型序列一样,联合典型序列对(x,y)的概率和也是趋于1的。即随着n的增大,典型序列和联合典型序列属于高概率事件,各自占据了Xn、Yn、(Xn,Yn)的几乎全部概率组成。 那么联合ε典型序列对(x,y)是如何构成的?Xn是扩展信道的输入概率空间,Yn是扩展信道的输出概率空间。取Xn中典型序列x与Yn中典型序列y配对,同时满足式(5.2.2),则构成联合ε典型序列对(x,y)。典型序列x是输入端高概率出现的序列,典型序列y是输出端高概率出现的序列,而联合典型序列对(x,y)就是那些信道输入和输出之间密切关联、经常出现的序列对。 基于定理5.2.1中性质3可知,随着n的增大,典型序列和联合典型序列各自的数目大约为 NGε(X)≈2nH(X), NGε(Y)≈2nH(Y), NGε(XY)≈2nH(XY) 例5.2.1设信源为XP(x)=010.90.1,传输信道为BSC(0.2)的n次扩展信道,其输入和输出构成联合典型序列对(x,y)。存在一个长度n=100的联合典型序列对: x=11111111110000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000 y=00111111110000000000000000000000000000000000000000000000000000000000 00000000000000111111111111111111 可见,x是一个Xn集合的典型序列(满足I(x)/100=H(X)),序列y中有26个“1”,74个“0”,也是Yn中的典型序列,而x与y有20bit不同,即序列对(x,y)正是该信道的一个典型序列对(符合信道典型翻转的概率)。 进一步,可以证明联合ε典型序列还具有如下性质。 定理5.2.2对于任意小的正数ε>0,当n足够大时,有 性质1 2-n[H(Y|X)+2ε]≤P(y|x)≤2-n[H(Y|X)-2ε] 2-n[H(X|Y)+2ε]≤P(x|y)≤2-n[H(X|Y)-2ε] 式中: (x; y)∈Gε(XY)。 性质2 令Gε(X|y)={x: (x,y)∈Gε(XY)},Gε(Y|x)={y: (x,y)∈Gε(XY)},即Gε(X|y)表示在给定ε典型序列y条件下与y构成联合ε典型序列对的所有序列x的集合,Gε(Y|x)表示在给定ε典型序列x条件下与x构成联合ε典型序列对的所有典型序列y的集合。则有 NGε(X|y)≤2n[H(X|Y)+2ε] NGε(Y|x)≤2n[H(Y|X)+2ε] 证明: (1) 令(x; y)∈Gε(XY),对于任意x,y 满足 P(y|x)=P(xy)P(x) 根据式(5.2.2)可得 2-n[H(XY)+ε]×2n[H(X)-ε]≤P(y|x)≤2-n[H(XY)-ε]×2n[H(X)+ε] 2-n[H(XY)-H(X)+2ε]≤P(y|x)≤2-n[H(XY)-H(X)-2ε] 所以 2-n[H(Y|X)+2ε]≤P(y|x)≤2-n[H(Y|X)-2ε] 同理,可得 2-n[H(X|Y)+2ε]≤P(x|y)≤2-n[H(X|Y)-2ε] (2) 假设序列y∈Gε(Y),因为 1=∑XnP(x|y)=∑XnP(xy)P(y)≥∑x∈Gε(X|y)P(xy)P(y) 又因为y是典型序列,x与y构成联合典型序列对,即(x,y)∈Gε(XY),根据式(5.2.2)可得 P(xy)>2-n[H(XY)+ε]P(y)<2-n[H(Y)-ε] 进而可得 1≥∑x∈Gε(X|y)2-n[H(XY)-H(Y)+2ε]=NGε(X|y)2-n[H(X|Y)+2ε] 移项后可得 NGε(X|y)≤2n[H(X|Y)+2ε] 同理,假设序列x∈Gε(X),因为 1=∑YnP(y|x)=∑YnP(xy)P(x)≥∑y∈Gε(Y|x)P(xy)P(x) 又因为(x,y)∈Gε(XY),根据式(5.2.2)可得 P(xy)>2-n[H(XY)+ε]P(x)<2-n[H(X)-ε] 进而可得 1≥∑y∈Gε(Y|x)2-n[H(XY)-H(X)+2ε]=NGε(Y|x)2-n[H(Y|X)+2ε] 移项后可得 NGε(Y|x)≤2n[H(Y|X)+2ε] [证毕] 定理5.2.3若(x′,y′)是统计独立的随机联合典型序列对,并与P(xy)有相同的边缘分布,即(x′,y′)~P(x′)P(y′)=P(xy),且对于任意正数δ>0,当n足够大时,有 (1-δ)2-N[I(X; Y)+3δ]≤P{(x′,y′)∈Gε(XY)}≤2-N[I(X; Y)-3δ] 证明: 因为(x′; y′)是统计独立且与P(xy)有相同的边缘分布,即 P(x′y′)=P(x)P(y)=P(xy) 因此可得 P{(x′; y′)∈Gε(XY)}=∑xy∈Gε(XY)P(x)P(y) ≤2n[H(XY)+ε]×2-n[H(X)-ε]×2-n[H(Y)-ε] =2-n[H(X)+H(Y)-H(XY)-3ε]=2-n[I(X; Y)-3ε] 同理,当n足够大时,有 P{(x′,y′)∈Gε(XY)}=∑xy∈Gε(XY)P(x)P(y) ≥(1-δ)2n[H(XY)-ε]×2-n[H(X)+ε]×2-n[H(Y)+ε] =(1-δ)2-n[H(X)+H(Y)-H(XY)+3ε]=(1-δ)2-n[I(X; Y)+3ε] [证毕] 可以用图形进一步描述上述联合ε典型序列的一系列结论。将联合向量空间XnYn 中所有序列排成如图5.2.1所示的阵列。在联合向量空间中的全部序列对依据是否是典型序列x和典型序列y,可以划分为4部分。以Xn空间中的序列x为行,以Yn空间中的序列y为列,分别将属于ε典型序列的排列在前面,即前面近似2nH(X)行为典型序列x,前面约2nH(Y)列为典型序列y。那么,只有位于阵列左上角部分的序列对(x,y)属于联合ε典型序列的序列对,每个黑点对应一个联合典型序列对,共有2nH(XY)个黑点。根据定理5.2.2中(2)的结论,对于Xn中的每个ε典型序列xi,约有2nH(Y|X)个Yn中的ε典型序列yj与之配对,构成联合典型序列对,即每行有2nH(Y|X)个黑点,构成集合Gε(Y|xi); 同理,对于Yn中的每个ε典型序列yj,约有2nH(X|Y)个Xn中的ε典型序列xi与之配对,构成联合典型序列对,即每列有2nH(X|Y)个黑点,构成集合Gε(X|yj)。 图5.2.1联合典型序列示意 又根据定理5.2.3,随机选择序列对是统计独立的联合典型序列对的概率约为2-nI(X; Y)。也就是说,在2nH(XY)个联合典型序列对中,x与y相互统计独立的序列对(x,y)只占一部分,约为2nI(X; Y)。因此,对于某一典型序列yj,可以认为与它统计独立的联合典型序列对可能有2nI(X; Y)个,这也提示我们在2nH(X)个X典型序列中有2nI(X; Y)个是可区分识别的典型序列xi。 由前面讨论可知,在n次无记忆扩展信道的输入和输出空间之间,联合ε典型序列对(x,y)是一些密切关联的序列对。也就是说,DMC经过足够多次扩展后会呈现出传输极化的特性,即当某一输入典型序列xi发送,转移到收端时,对应的接收序列高概率是能与xi构成联合ε典型序列对的那些典型序列yj。 如果把全部2nH(X)个输入ε典型序列xi都用于传送信息,每个xi将会高概率地转移为能与之构成联合典型序列对的那2nH(Y|X)个典型序列yj,势必会造成不同的xi对应(转移为)相同的yj,即图5.2.1左上角中同一列的黑点重复,这将会造成译码错误。为了避免这种情况,就要求Yn中与每个发送序列配对的典型序列集合不相交,即从Xn中选择若干(不是全部)典型序列xi,要求其在Yn中的联合典型序列集Gε(Y|xi)不相交,如图5.2.2所示。根据定理5.2.2和定理5.2.3,为使收端译码不出错,从编码角度而言,发送端需要从2nH(X)个X典型序列中选择一部分作为许用码字。选取原则是要求每个选出的许用码字xi所配对的2nH(Y|X)个Y典型序列和其他许用码字所对应的Y典型序列没有交集。那么,为保证译码无错,发送端编码最多能够选出的码字数目Q个为多少?对于X典型序列xi,传输后高概率转移为Gε(Y|xi)中的一个典型序列yj,由于每个Gε(Y|xi)中的Y典型序列数目约为2nH(Y|X),Yn中的典型序列集Gε(Y)的总数约为2nH(Y),所以要求 2nH(Y|X)Q≤2nH(Y) 即在不发生译码错误的要求下能够用于传输信息的输入典型序列xi的个数最多为 Q≤2nH(Y)2nH(Y|X)=2nI(X; Y) 图5.2.2n次扩展信道x与y的关系 信道编码需要从全部2nH(X)个n重矢量(输入典型序列)中选取Q(≤2nI(X; Y))个作为许用码字,用来传送消息,并保证这些输入典型序列所对应的输出典型序列彼此无重叠。定理5.2.3从理论上保证了在2nH(X)个X典型序列中可区分识别出2nI(X; Y)个典型序列,与它们配成联合典型序列对的Y典型序列集不重叠,相当于可以把输出典型序列集合划分2nI(X; Y)个不相交的子集,从而可保证译码无错,如图5.2.2所示。 5.2.2香农第二定理(有噪信道编码定理) 有噪信道编码定理又称为香农第二定理,是信息论的基本定理之一。 综合前面的分析,可以将信道编码理解为在编码时随机地选择输入端ε典型序列作为码字Ci,因为它们是在输入端Xn集中高概率出现的序列。n次无记忆扩展信道传输中具有联合渐近等同分割性,所发送的码字Ci与接收序列yj构成联合典型序列对的概率很高,它们之间是高概率密切相关的。因此译码可采取联合典型序列译码准则,即在译码时接收端Yn集中将接收序列yj译成与它构成联合典型序列对的那个码字。 下面给出香农第二定理的完整描述和证明。 定理5.2.4(有噪信道编码定理)设离散无记忆信道[X,P(y|x),Y]的信道容量为C。当信息传输率RC时,无论码长n多长,都找不到一种满足Q=2nR的编码方案使得PE→0。 证明: 设输入端有Q=2nR 个消息(信息序列),用{1,2,…,Q}=[1,Q] 表示消息的标号集。信道编码就是将Q个消息映射成Xn中不同的序列,即编码函数f: {1,2,…,Q=2nR)→Xn,选出许用码字Ci=(xi1xi2…xiN),组成有Q个码字的码集(或称为码书)C={C0C1…CQ-1}。现在采用随机编码: 在Xn中以信道输入概率分布P(x)随机地选取Ci=(xi1xi2…xiN)作为码字,设xi统计独立,且满足 P(xik)=P(x)(k=1,2,…,n)xik∈X={x1,x2,…,xr} 则码字Ci出现的概率为 P(Ci)=∏nk=1P(xik) 随机编码得到的某个码书C的出现概率为 P(C)=∏Q-1i=0P(Ci)=∏Q-1i=0∏nk=1P(xik) 码书C中每个码字都是以输入概率分布P(x),按同一规则随机选取的,因此r元随机编码可以得到的所有码书数目为 S=rnQ=rn2nR 在接收端,接收到序列yj后要译成发送的码字,相应的译码函数g,Yn→{1,2,…,Q=2nR}即将Yn集映射到Q个消息集中。 设从码书C中任选一个码字w∈C被发送,相应接收到的序列为yj,根据译码函数 g(yj)=w∈C,为正确译码 g(yj)=w′∈C,w′≠w,为错误译码 则发送消息w,在接收端译码产生的错误概率为 Pew=P{g(yj)≠w|Cj=w},w∈{C0,C1,…,CQ-1} 而该码书的平均错误概率 PE(C)=1Q∑Q-1j=0P(g(yj)≠w|w)=12nR∑Q-1i=1Pew(5.2.5) 由5.2.1节分析可知,对于n次扩展信道传输具有联合渐近等同分割性,发送的码字Ci时,其接收序列很高概率是与Ci构成联合典型序列对的Y典型序列,所以可选择联合典型序列译码准则作为译码规则。即对某接收序列yj,若存在w∈C,并且(w,yj)∈Gε(XY),即yj与w构成联合典型序列对,则将yj译成w,即g(yj)=w∈C。不难看出联合典型序列译码准则本质就是最大似然译码准则。 因为随机编码选取出的码书C有很多种,因此为了计算随机编码总的平均错误概率,应基于式(5.2.4)的平均错误概率,对所有可能选取的码书进行统计平均,即 PEPr(E)=E所有码书[PE(C)]=∑SP(C)PE(C)=12nR∑Q-1i=1∑SP(C)Pew 另外,由随机编码的规则知,各码字生成方式一样,即选取的机会均等。因此,在所有码书上求平均的平均错误概率与发送码字w具体是哪个无关,即上式中∑SP(C)Pew不依赖发送码字w。为不失一般性,可以先某一码字,如令w=C0统一考虑,即∑SP(C)Pew=Pe0,进而可得 Pr(E)=12nR∑Q-1i=1Pe0=Pe0 =P{g(yj)≠C0|xi=C0} 当采用联合典型序列译码准则时,产生译码错误情况包括以下两种。 (1) 接收矢量yj与发送码字w不构成联合典型序列对,而可能是与其他许用码字w′≠w构成了联合典型序列对,即w∈C,w′∈C,w′≠w,(w,yj)Gε(XY)而(w′,yj)∈Gε(XY)。 (2) 接收矢量yj既与发送码字w构成联合典型序列对,也与其他许用码字w′≠w构成联合典型序列对,即w∈C,w′∈C,w′≠w,(w,yj)∈Gε(XY)且(w′,yj)∈Gε(XY)。 为方便计算,令事件Ei={(Ci,yj)∈Gε(XY)}(i=0,1,…,Q-1); 表示第i个码字Ci与接收序列yj构成联合ε典型序列对,事件i表示发送的第i个码字Ci与接收序列yj不构成联合ε典型序列对,即事件i={(Ci,yj)Gε(XY)}(i=0,1,…,Q-1)。所以有 Pe0=P{g(yj)≠C0|xi=C0} =P(0∪E1∪…∪EQ-1) 由集合论可得 P(∪ksk)≤∑kP(sk) 故而有 Pe0≤P(0)+∑Q-1i=1P(Ei)(5.2.6) 根据式(5.2.3)可得 P(Ei)≥1-δ 又 P(0)=1-P(E0)≤δ(n足够大)(5.2.7) 而因为信道编码是随机选择码字的,所以码字C0和Ci彼此是统计独立的,则序列yj与Ci(i≠0)也统计独立。由定理5.2.3可得 P(Ei)={P(Ci,yj)∈Gε(XY)}≤2-N[I(X; Y)-3δ](5.2.8) 结合式(5.2.7)和式(5.2.8),式(5.2.6)可写为 Pe0≤δ+∑Q-1i=12-n[I(X; Y)-3δ]=δ+(2nR-1)2-n[I(X; Y)-3δ] 信道传递信息时,总希望传输率R尽可能大。在证明中可以选择P(x)是达到信道容量的最佳输入概率分布P*(x),于是可达条件R0,式(5.2.9)表明PE随n增大以指数趋于零。由此可知实际编码的码长n不需选择得很大。 任何信道的信道容量是一个明确的分界点,当取分界点以下的信息传输率时,PE以指数趋于零; 当取分界点以上的信息传输率时,PE以指数趋于1。因此,在任何信道中信道容量是可达的、最大的可靠信息传输率。 香农第二定理也只是一个存在定理,它说明错误概率趋于零的好码是存在的,但并没有给出具体的编码方法。从实用观点来看,定理似乎不令人满意。为了证明该定理,香农提出了随机编码的方法,这种编码并不具有工程可操作性。为了使大数定律有效,要求码长n足够长,但这样得到的码集很大,通过搜索得到好码很难实现,而且即使通过随机编码的方法找到了好码,这种码的码字也是毫无结构的,这就意味着在接收端只能通过查找表的方法进行译码。当码长n很大时,这种查找表占用的存储空间将会是难以承受的,也就难以实用和实现。尽管如此,信道编码定理仍然具有根本性的重要意义。它有助于指导各种通信系统的设计,有助于评价各种通信系统及编码的效率。为此,在香农1948 年发表文章后,研究人员致力于研究实际信道中的各种易于实现的实际纠错编码方法,赋予码以各种形式的数学结构。这方面的研究非常活跃,出现了代数编码、卷积码、几何码等。至今已经发展有许多有趣和有效结构的码,并在实际通信系统中得到广泛应用。而且随着对信道编码研究的深入,关于随机编码的认识也更加深入,例如,1993年Turbo码的出现,使我们发现随机编码理论不仅是分析和证明编码定理的主要方法,其思想在构造码上也发挥重要作用。近代研究反映出随机码思想的回归,许多性能优异的编码都有向随机编码方向靠近的趋势,如Turbo码中交织器的设计,LDPC中稀疏校验矩阵的设计,这些为香农随机码理论的应用研究开启了新思路。 5.3线性分组码 线性分组码是纠错码中很重要的一类码,它也是讨论其他各类码的基础,这类码的原理虽然比较简单,但由此引入的一些概念非常重要,如码率、距离、重量等及其与纠检错能力的关系,以及码的生成矩阵G和一致校验矩阵H的表示及它们之间的关系,H与纠错能力之间的关系等,这些概念也广泛地应用于其他各类码。 5.3.1线性分组码的基本概念 5.3.1.1线性分组码的定义 将信源所给出的二元信息序列首先分成等长的各个信息组,每组信息位长度为k,记为 M=(mk-1,mk-2,…,m1,m0) 信息组M每一位上的信息元取0或1,共有2k种可能的取值。编码器根据某些规则将输入的信息序列编成码长为n的二元序列,即码字记为 C=(cn-1,cn-2,…,cn-k,cn-k-1,…,c1,c0) 码字中每一位数字称为码元,取值为0或1。如果码字的各监督元与信息元关系是线性的(可用一次线性方程来描述),那么这样的码称为线性分组码,记为(n,k)码。 例5.3.1(7,3)分组码,按以下的规则(校验方程)可得到4个校验元c0c1c2c3: c3=c6+c4 c2=c6+c5+c4 c1=c6+c5 c0=c5+c4(5.3.1) 式中: c6、c5和c4是3个信息元。 由此可得到(7,3)分组码的8个码字。8个信息组与8个码字的对应关系列于表5.3.1中。式(5.3.1)中的加均为模2加。由此方程看到,信息元与校验元满足线性关系,因此该(7,3)码是线性码。 表5.3.1例5.3.1的(7,3)码的码字与信息组对应关系 信息组码字 0000000000 0010011101 0100100111 0110111010 1001001110 1011010011 1101101001 1111110100 为了深入理解线性分组码的概念,将其与线性空间联系起来。由于每个码字都是一个长为n的(二进制)数组,因此可将每个码字看成一个二进制n重数组,进而看成二进制n维线性空间Vn(F2)中的一个矢量。n长的二进制数组共有2n个,每个数组都称为一个二进制n重矢量。显然,所有2n个n维数组将组成一个n维线性空间Vn(F2)。 (n,k)分组码的2k个n重就是这个n维线性空间的一个子集,若它能构成一个k维线性子空间,则它就是一个(n,k)线性分组码,这点可由上面的例子得到验证。 长为7的二进制7重共有27=128个,显然这128个7重是GF(2)上的一个7维线性空间,而(7,3)码的8个码字,是从128个7重中按式(5.3.1)的规则挑出来的。可以验证,这8个码字对模2加法运算构成阿贝尔(Abel)群,即该码集是7维线性空间中的一个3维子空间。(n,k)线性分组码又可定义如下: 定义5.3.1二进制(n,k)线性分组码是GF(2)域上的n维线性空间Vn中的一个k维子空间Vn,k。 因为线性空间在模2加运算下构成阿贝尔加群,所以又称线性分组码为群码。 从上面的讨论可知,线性分组码的编码问题就是如何从n维线性空间Vn中挑选出一个k维子空间Vn,k,而选择的规则完全由n-k个校验方程决定。由于线性分组码对模2加满足封闭性,就为其最小距离的计算带来方便,具体有如下定理。 定理5.3.1一个(n,k)线性分组码中非零码字的最小重量等于码字集合C中的最小距离d0。 证明: 设有任两个码字Ca,Cb∈C。根据线性分组码性质,有Ca+Cb=Cc∈C。而Cc的码重等于Ca与Cb的码距d(Ca ; Cb),即 W(Cc)=W(Ca+Cb)=d(Ca ; Cb) Ca和Cb是C中任意两个码字,所以 Wmin(Ca+Cb)=Wmin(Cc)=d0[证毕] 由表5.3.1中(7,3)码的8个码字可见,除全零码字外,其余7个码字最小重量Wmin=4,而其中任二码字之间的最小距离d0=4。 根据线性分组码的封闭性不难得出如下结论。 定理5.3.2任何一个二元线性分组码中要么所有码字的重量都是偶数,要么偶数重量码字与奇数重量码字的数目相等。 证明: 令C表示任何一个线性二元分组码,A表示所有偶数重量的码字集合,B表示所有奇数重量的码字集合,显然C=A∪B。根据线性分组码的特点,无论是A或B中码字两两相加,还是从A和B中各选一个码字相加,得到的和矢量仍为该线性分组码集中的码字。 若B为空集,则C=A,这时所有码字都是偶数重量。若B不为空集,则至少有一个奇数重量的码字b,构成 b+A={b+a|a∈A} 集合b+A表示由集合A中的码字与b相加后所得的码字全体。由式W(C1C2)=W(C1)+W(C2)-2W(C1⊙C2)可知,奇数重量的矢量与偶数重量矢量之和为奇数重量的矢量,因此A+b中所有码字的重量为奇数,而且A+b中的码字数与A中码字的数量相同(这也是陪集的性质),可见偶数重量码字与奇数重量码字的数目相等。 下面再说明集合B中的所有码字都在集合A+b中。设b′为B中任取的一个码字,b′和 b都是奇数重量,同样由式(W(C1C2)=W(C1)+W(C2)-2W(C1⊙C2))可知,奇数重量的矢量与奇数重量矢量之和为偶数重量的矢量,B中码字两两相加的码字是偶数重量,所以存在一个a∈A使b′+b=a,那么 b′=a-b=a+b∈b+A 式中利用了“二元码加法与减法等价”的性质。可见,集合B中的所有码字都在集合A+b中。即若B中有一个奇数重码字,则C中奇数重码字数目与偶数重码字数相等。 [证毕] 5.3.1.2生成矩阵G与一致校验矩阵H (n,k)线性分组码的编码问题就是如何在n维线性空间Vn(F2)中找出满足一定要求的由2k个矢量组成的k维线性子空间C的问题。或者说,在满足给定条件(码的最小距离d0或码率R)下,如何根据已知的k个信息元求得n-k个监督元。由于是线性码,这些监督元一定是由若干线性方程构成的一个方程组,若n-k个监督元是独立的,则该方程组由n-k个线性方程构成。 例5.3.1中的(7,3)码。若c6、c5、c4代表3个信息元,c3、c2、cl、c0代表4个监督元,可以由下列线性方程组建立它们之间的关系: 1·c3=1·c6+0·c5+1·c41·c2=1·c6+1·c5+1·c41·c1=1·c6+1·c5+0·c41·c0=0·c6+1·c5+1·c4(5.3.2) 上述运算均为模2加。在已知c6、c5、c4后,可立即求出c3、c2、c1、c0。例如,M=(101),即c6=1,c5=0,c4=1,代入式(5.3.2),可得4个监督元为(0011),进而得到码字为(1010011)。根据式(5.3.2)对不同信息组进行计算,即可得到全部(7,3)码字。可见式(5.3.2)对确定该(7,3)码是非常关键的。式(5.3.2)称为一致校验方程,它直接反映了码字中信息元与监督元之间的约束关系。不过,从编码的角度看,利用式(5.3.2)逐个计算得到全体码字是很麻烦的,还需进一步寻求其内在规律。 1. 生成矩阵 已知(n,k)线性分组码的2k个码字组成n维矢量空间的一个k维子空间,而线性空间可由其基底张成,因此(n,k)线性分组码的2k个码字完全可由k个独立的矢量所组成的基底张成。设k个矢量为 g1=(g11g12…g1kg1,k+1…g1n) g2=(g21g22…g2kg2,k+1…g2n)  gk=(gk1gk2…gkkgk,k+1…gkn) 将它们写成矩阵形式: G=g11g12…g1kg1,k+1…g1n g21g22…g2kg2,k+1…g2n gk1gk2…gkkgk,k+1…gkn(5.3.3) (n,k)码中的任何码字均可由这组基底的线性组合生成,即 C=MG=(mk-1mk-2…m0)g11g12…g1ng21g22…g2ngk1gk2…gkn(5.3.4) 式中: M=(mk-1mk-2…m0)是k个信息元组成的信息组。 这就是说,每给定一个信息组,通过式(5.3.4)可求得其相应的码字。故这个由k个线性无关矢量组成的基底所构成的k×n矩阵G称为(n,k)码的生成矩阵。 (7,3)码可以从表5.3.1中的8个码字中任意挑选出k=3个线性无关的码字(1001110)、(0100111)和(0011101)作为码的一组基底,由它们组成G的行,可得 G=100111001001110011101 若信息组Mi=(011),则相应的码字为 Ci=(011)100111001001110011101=(0111010) 它是G矩阵后两行相加的结果。 值得注意的是,线性空间(或子空间)的基底可以不止一组,因此作为码的生成矩阵G也可以不止一种形式。但不论哪种形式,它们都生成相同的线性空间(或子空间),即生成同一个(n,k)线性分组码。 实际上,码的生成矩阵还可由其编码方程直接得出。例如,例5.3.1的(7,3)码可将编码方程改写为 c6=c6 c5=c5 c4=c4 c3=c6+c4 c2=c6+c5+c4 c1=c6+c5 c0=c5+c4 写成矩阵形式,即 [c6c5c4c3c2c1c0]=c6c5c4c3c2c1c0T=c6c5c4c6+c4c6+c5+c4c6+c5c5+c4T =[c6c5c4]100111001001110011101 =[c6c5c4]G 故(7,3)码的生成矩阵为 G=100111001001110011101 可见,生成矩阵可由编码方程的系数矩阵转置得到。 在线性分组码中经常用到一种特殊的结构,如上例(7,3)码的所有码字的前三位,都是与信息组相同,属于信息元,后四位是校验元。这种形式的码称为系统码。 定义5.3.2若信息组以不变的形式,在码字的任意k位中出现,则该码称为系统码; 否则,称为非系统码。 目前最流行的有两种形式的系统码: 一种是信息组排在码字(cn-1,cn-2,…,c0)的最左边k位,cn-1,cn-2,…,cn-k,如表5.3.1中所列出的码字就是这种形式; 另一种是信息组被安置在码字的最右边k位,ck-1,ck-2,…,c0。 若采用码字左边k位(前k位)是信息位的系统码形式(今后均采用此形式),则式(5.3.3)所示的G矩阵左边k列应是一个k阶单位方阵Ik(gl,l=g2,2=…=gk,k=1,其余元素均为0)。因此,系统码的生成矩阵可表示成 G0=10…0g1,k+1…g1n01…0g2,k+1…g2n00…1gk,k+1…gkn=[IkP] 式中: P为k×(n-k)矩阵。 只有这种形式的生成矩阵才能生成(n,k)系统型线性分组码,即标准形式,因此,系统码的生成矩阵也是一个典型矩阵(或称标准阵)。考察典型矩阵,便于检查G的各行是否线性无关。如果G不具有标准型,虽能生成线性码,但码字不具备系统码的结构,此时可将G的非标准型经过行初等变换变成标准型G0。由于系统码的编码与译码较非系统码简单,而且对分组码而言,系统码与非系统码的抗干扰能力完全等价,故若无特别声明,仅讨论系统码。 2. 一致校验矩阵 前面介绍过,编码问题是在给定的d0或码率R下如何利用从已知的k个信息元求得r=n-k个校验元。例5.3.1中的(7,3)码的4个检验元由式(5.3.2)所示的线性方程组决定。为了更好地说明信息元与校验元的关系,现将式(5.3.2)填补系数并移项,变换为 1·c6+0·c5+1·c4+1·c3+0·c2+0·c1+0·c0=01·c6+1·c5+1·c4+0·c3+1·c2+0·c1+0·c0=01·c6+1·c5+0·c4+0·c3+0·c2+1·c1+0·c0=00·c6+1·c5+1·c4+0·c3+0·c2+0·c1+1·c0=0 用矩阵表示这些线性方程: 1011000111010011000100110001=c6c5c4c3c2c1c0=0000=0T(5.3.5) 或 [c6c5c4c3c2c1c0]1110011111011000010000100001=[0000]=0(5.3.6) 将上面方程的系数矩阵用H表示: H=1011000111010011000100110001 式(5.3.5)或式(5.3.6)表明,C中的各码元是满足由H所确定的r(r=n-k)个线性方程的解,故C是一个码字; 若C中码元组成一个码字,则一定满足由H所确定的r个线性方程。故C是式(5.3.5)或式(5.3.6)解的集合。显而易见,H一定,便可由信息元求出校验元,编码问题迎刃而解; 或者说,要解决编码问题,只要找到H即可。由于H矩阵是一致校验方程组的系数矩阵,它也反映了码字中的约束关系,故称其为一致校验矩阵。按H所确定的规则也可求出(n,k)码的所有码字。 一般而言,(n,k)线性码有r(r=n-k)个校验元,若这些校验元是独立加入的,则一致校验方程必须有r个独立的线性方程。所以(n,k)线性码的H矩阵由r行和n列组成,可表示为 H=h1,n-1h1,n-2…h10h2,n-1h2,n-2…h20hr,n-1hr,n-2…hr0 这里hij中,i代表行号,j代表列号。因此,H是一个r行n列矩阵。由H矩阵可建立码的r个线性方程: h1,n-1h1,n-2…h10h2,n-1h2,n-2…h20hr,n-1hr,n-2…hr0cn-1cn-2c1c0=0T 简写为 HCT=0T(5.3.7) 或 CHT=0(5.3.8) 式中: C=[cn-1 cn-2… c1 c0],CT是C的转置; 0是一个全为0的r重。 综上所述,将H矩阵的特点归纳如下。 (1) H矩阵的每一行代表一个线性方程的系数,它表示求一个校验元的线性方程。 (2) H矩阵每一列代表此码元与哪几个校验方程有关。 (3) 由此H矩阵得到的(n,k)分组码的每个码字Ci(i=1,2,…,2k)都必须满足由H矩阵行所确定的线性方程,即式(5.3.7)或式(5.3.8)。 (4) 若(n,k)码的r(r=n-k)个校验元是独立的,则H矩阵必须有r行,且各行之间线性无关,即H矩阵的秩为r。若将H的每一行看成一个矢量,则此r个矢量必然张成n维矢量空间中的一个r维子空间Vn,r。 (5) 考虑到生成矩阵G中的每一行及其线性组合都是(n,k)码中的一个码字,故有 GHT=0(5.3.9) 或 HGT=0T(5.3.10) 这说明由G和H的行生成的空间互为零空间。也就是说,H矩阵的每一行与由G矩阵行生成的分组码中每个码字内积均为零,即G和H彼此正交。 (6) 由上面的例子不难看出,(7,3)码的H矩阵右边4行4列为一个4阶单位方阵,一般而言,系统型(n,k)线性分组码的H矩阵右边r列组成一个单位方阵Ir,故有 H=[QIr] 式中: Q为r×k矩阵。 这种形式的矩阵称为典型阵或标准阵,采用典型阵形式的H矩阵更易于检查各行是否线性无关。 (7) 由式(5.3.10)可得 [QIr][IkP]T=[QIr]IkPT=Q+PT=0T 这说明 P=QT 或 PT=Q 这就是说,P的第一行就是Q的第一列,P的第二行就是Q的第二列,……。因此,H一定,G也就一定; 反之亦然。 3. 对偶码 (n,k)码是n维矢量空间中的一个k维子空间Vn,k,可由一组基底即G的行张成。由式(5.3.9)可以看出,由H矩阵的行所张成的n维矢量空间中的一个r维子空间Vn,r是(n,k)码空间Vn,k的一个零空间。由线性代数知,Vn,r的零空间必是一个k维子空间,它正是(n,k)码的全体码字集合。若把(n,k)码的一致校验矩阵看成(n,r)码的生成矩阵,将(n,k)码的生成矩阵看成(n,r)码的一致校验矩阵,则称这两种码互为对偶码。相应地称Vn,k和Vn,r互为对偶空间。 例5.3.2求例5.3.1所述(7,3)码的对偶码。 显然,(7,3)码的对偶码应是(7,4)码,因此,(7,4)码的G矩阵就是(7,3)码的H矩阵: G(7,4)=H(7,3)=1011000111010011000100110001 由此可得出(7,4)码的码字如表5.3.2所示。 表5.3.2(7,4)线性分组码 信息元码字信息元码字 0 0 0 00 0 0 0 0 0 01 0 0 01 0 0 0 1 0 1 0 0 0 10 0 0 1 0 1 11 0 0 11 0 0 1 1 1 0 0 0 1 00 0 1 0 1 1 01 0 1 01 0 1 0 0 1 1 0 0 1 10 0 1 1 1 0 11 0 1 11 0 1 1 0 0 0 0 1 0 00 1 0 0 1 1 11 1 0 01 1 0 0 0 1 0 0 1 0 10 1 0 1 1 0 01 1 0 11 1 0 1 0 0 1 0 1 1 00 1 1 0 0 0 11 1 1 01 1 1 0 1 0 0 0 1 1 10 1 1 1 0 1 01 1 1 11 1 1 1 1 1 1 若一个码的对偶码就是它自己,则称该码为自对偶。自对偶码必是(2m,m)形式的分组码,(2,1)重复码就是一个自对偶码。 5.3.2线性分组码的译码方法 只要找到了H矩阵或G矩阵,便解决了编码问题。经编码后发送的码字,由于信道干扰可能出错,收方怎样发现或纠正错误?这就是译码要解决的问题。 设发送的码字C=(cn-1,cn-2,…,c1,c0),信道产生的错误图样E=(en-1,en-2,…,el,e0),而接收序列R=(rn-1,rn-2,…, rl,r0),那么R=C+E,即有ri=ci+ei,其中ci,ri,ei∈GF(2)。译码的任务就是要从R中求出E,从而得到码字估值C=R-E。 5.3.2.1标准阵列译码 标准阵列译码法是对线性分组码进行译码最一般的方法,这种方法的原理也是对解释线性分组码概念最直接的描述。 在5.1.3节中已介绍,(n,k)码中任一码字C在有噪信道上传输,接收矢量R可以是n维线性空间Vn(F2)中任一矢量。收端译码有很多种,但其本质就是对码字进行分类,以便从接收矢量中确定发送码字的估值。 二元(n,k)码的2k个码字集合是n维矢量空间的一个k维子空间。如果将整个n维矢量空间的2n个矢量划分成2k个子集 1, 2,…, 2k,且这些子集不相交,即彼此不含有公共的矢量,每个子集 i包含且仅包含一个码字Ci(i=1,2,…,2k),从而建立一一对应的关系: C1 1,C2 2,…,C2k 2k 当发送一个码字Ci,而接收字为Ri,则Ri必属于且仅属于这些子集之一。若Ri落入 i中,则译码器可判断发送码字是Ci。 这样做的风险是: 如子集 i是对应原发送的码字,则译码正确; 若 i并不对应原发送的码字,则译码错误。当然,在有扰信道找到一个绝对无误的译码方案是不可能的,但可以找到一种使译码错误概率最小的方案。那么怎样才能将n维矢量空间划分成符合上述要求的2k个子集?最一般的方法是按下列方法制作一个表。先把2k个码矢量置于第一行,并以零码矢C1=(0,0,0,…,0)为最左面的元素,在其余2n-2k个n重中选择一个重量最轻的n重E2,并置E2于零码矢Cl的下面,于是表的第二行是E2和每个码矢Ci相加,并把E2+Ci置于Ci的下面即同一列,完成第二行。第三行是再从其余的n重中任选一个重量最轻的n重E3置于Ci的下面(第三行第一列),同理将E3+Ci置于Ci之下完成第三行,以此类推,一直到全部n重用完为止。于是就得到表5.3.3。 表5.3.3标准阵译码表 码字C1(陪集首) C2…Ci…C2k 禁用码组 E2C2+E2…Ci+E2…C2k+E2 E3C2+E3…Ci+E3…C2k+E3  E2n-kC2+E2n-k…Ci+E2n-k…C2k+E2n-k 表5.3.3共有2n-k行2k列,其中每一列就是含有Ci的子集 i。从按照上述方法列出的表可以看出: 表中同一行中没有两个n重是相同的,也没有一个n重出现在不同行中,所以所划分的子集 i之间是互不相交的,即每个n重在此表中仅出现一次,这个表称为线性分组码的标准阵列。译码表或简称标准阵,而每一行称为一个陪集,每一行最左边的那个n重Ei称为陪集首。而表的第一行即为(n,k)分组码的全体,又称子群。 收到的n重R落在某一列中,则译码器就译成相应于该列最上面的码字。因此,若发送的码字码为Ci,收到的R=Ci+Ej(1≤j≤2n-k,E1是全0矢量),则能正确译码。若收到的R=Cl+Ej(l≠i),则产生了错误译码。现在的问题是如何划分陪集,使译码错误概率最小?这最终取决于如何挑选陪集首。因为一个陪集的划分主要取决于子群,而子群就是2k个码字,这已确定,因此余下的问题就是如何决定陪集首。 在信道误码率P<0.5的BSC中,传输出错情况应为少数,产生1个错误的概率比产生2个错误的大,产生2个错误的比3个错误的大……也就是说,错误图样重量越小,产生的可能性越大。因此,译码器必须首先保证能正确纠正这种出现可能性最大的错误图样,即重量最轻的错误图样。这相当于在构造译码表时要求挑选重量最轻的n重为陪集首,放在标准阵中的第一列,而以全0码字作为子群的陪集首。这样得到的标准阵能使译码错误概率最小。由于这样安排的译码表使得Ci+Ej与Ci的距离保证最小,因而也称为最小距离译码,在BSC下,它们等效于最大似然译码。 构造一般(n,k)码标准阵列的方法归纳如下。 (1) 将Vn,k的2k个码字作第一行,全零矢量作其陪集首,即作为E1。 (2) 在剩下的禁用码组中挑选重量最小的n重作第二行的陪集首,以E2表示,以此求出C2+E2,C3+E2,…,C2k+E2分别列于对应码字Ci所在列,从而构成第二行。 (3) 依方法(2)所述方法,直至将2n个矢量划分完毕。 这样就得到如表5.3.3所示的标准阵列。 从标准阵列可以看出,陪集首的集合就是一个可纠正错误图样Ei的集合,而各码字所对应的列就是该码字的正确接收区。因此,在BSC下,二元线性分组码正确译码概率为 Pc=∑2r-1j=0pW(j)(1-p)n-W(j)=∑ni=0Aipi(1-p)n-i 式中: r=n-k; W(j)为第j个陪集首的重量; Ai是重量为i的陪集首的个数; A=(A0A1 …An)是陪集首的重量分布矢量; p为信道误码率。 从几何的角度理解,码的陪集划分相当于把n维线性空间Vn 按照该线性分组码Vn,k划分。共有2k个码字,相当于有2k个互不相交的球,球的半径是陪集首中错误图样的最大码重,这2k个球把整个线性空间Vn充满,所有禁用码组将分别落在不同的球中。当发送某个码字时,如果错误图样的影响使接收序列位于发送码字的球内,这相当于错误图样出现在陪集首,错误图样中“1”的个数很少,错误不是太严重,则接收端可以根据标准阵正确译码; 如果错误图样的影响使接收码字序列落在其他许用码字的球内,这相当于错误很严重,错误图样中“1”的个数很多,错误图样不属于陪集首,则接收端根据标准阵译码就会产生译码错误。 结合这个几何解释可以分析线性分组码检错、纠错能力与最小码距d0之间的关系。 首先,为了能检测出一个码字中发生的全部e个错误,要求d0≥e+1。只有这样,该e个错误才不至于把一个许用码字变为另一个许用码字。其次,为了能纠正一个码字中发生的全部t个错误,要求d0≥2t+1,如图5.3.1所示。只有满足了这个条件才能保证这个t位错误引起的禁用码组仍位于以发送码字为球心的球内。最后,在一个码字中,为了能纠正所有t个错误; 并同时检测所有e个错误,要求d0≥t+e+1(tr时,使用第一种n-k级编码器较好(g(x)编码); 当kt 由于W(-Si(x))=W(Si(x)),因此上式与假设W(Si(x))≤t相矛盾。因而错误没有集中在n-k低次位以内的反证法假设不能成立,故错误集中在n-k低次位内。 [证毕] 捕错译码的基本流程如下。 (1) 计算接收多项式R(x)对应的伴随式S(x)。 (2) 计算S(x)的重量W(S(x)),并判断是否满足W(Si(x))≤t。若满足,说明错误已被集中捕获至n-k低次位以内,则令E(i)(x)=S(x),R(i)(x)=R(x),进入步骤(3); 反之,把R(x)和相应的伴随式S(x)一起同时在译码器的各自移位寄存器中移位i次,使这些错误全部集中到xiR(x)的后n-k位上。 (3) C(i)(x)=R(i)(x)+E(i)(x)。 (4) 将已纠错的码字C(i)(x)再循环移位n-i次,恢复到原来的接收矢量中各码元的顺序关系,得到码字估值C(x)。 5.4.3.5大数逻辑译码 循环码译码器的复杂性主要取决于码的代数结构,梅吉特译码和捕错译码仅对部分循环码复杂度较低,但对绝大多数纠多个随机错误的循环码来说没有如此简单的译码方法。大数逻辑译码是1954年里德(Reed)在译里德穆勒(ReedMuller,RM)码时提出的一种较简单的译码方法,尽管对于一般码长而言,能用大数逻辑方法译码的大数逻辑可译码,其纠错能力和码率都稍次于有相同参数的其他码,如BCH码,但由于它的译码算法和设备均比相应的BCH码译码方法要简单,因此在实际中有一定的应用。 通过以下例子介绍二进制循环码的大数逻辑译码的基本思想。 例5.4.8(7,3,4)增余删信Hamming码的生成多项式g(x)=(x+1)(x3+x+1)=x4+x3+x2+1,一致校验矩阵为 H=1011000111010011000100110001 接收n重矢量R=C+E,发送码字和错误图样分别为C=(c6,…,c1,c0)和E=(e6,…,e1,e0),相应的伴随式为 ST=s3s2s1s0=HET=1011000111010011000100110001e6e5e4e3e2e1e0 对伴随式的分量s3、s2和s1进行线性组合,也就是对H矩阵的行进行线性组合,得到以下一组新的校验方程组: A1=s3=e6+e4+e3 A2=s1=e6+e5+e1 A3=s2+s0=e6+e2+e0(5.4.13) 该方程组所对应的校验矩阵为 HG=101100011000101000101 由校验方程的定义可知,HG的行向量是H的行向量的线性组合,因为CHT=0,即许用码字C与一致校验矩阵H的各行正交,所以同样有许用码字C与校验矩阵HG的各行正交,即CHGT=0。 另外,观察校验方程组(5.4.13)可知,每个方程式中均包含e6,而e5,e4, …,e0仅出现在一个方程式中。具有这样特点的校验方程称为正交于e6的正交校验方程(或正交监督方程、正交一致校验和式),该方程组的系数矩阵HG称为正交校验矩阵,e6称为正交码元位。 进一步观察例5.4.8中校验方程组(5.4.13)可以发现如下规律。 (1) 若错误图样发生一个错误,且在正交码元位上,即e6=1,则A1=1,A2=1,A3=1。 (2) 若错误图样发生一个错误,且不在正交码元位上,即e6=0,某个ei=1(i=0,1,2,3,4,5),则A1、A2、A3有且只有一个为1。 (3) 若错误图样发生两个错误,一个在正交码元位上,一个不在正交码元位上,即e6=1,某个ei=1(i=0,1,2,3,4,5),则在A1、A2、A3中有两个1、一个0。 (4) 若错误图样发生两个错误,都不在正交码元位上,则A1、A2、A3或者都为0,或者两个为1、一个为0。 不难分析该(7,3)码最小距离为4,其纠错能力为1,结合上述规律可知,当传输中只发生1位错误(码的纠错能力之内)时,可以根据和式Ai中取值为1的个数情况对正交位r6的传输情况进行判断和纠错。这就是大数逻辑译码的基本思想。 对于循环码不必分别建立正交于每个码元位的正交一致校验方程组,而只需根据其循环移位特性,在对r6进行正交校验后,仍基于式(5.4.13),依次将r5 ~r0循环移位至正交位,按照同样的方法进行校验。这种根据正交方程中取值为1的个数的多少进行译码的方法称为大数逻辑译码。由式(5.4.13)可见,正交和式Ai可以表示为伴随式各分量的线性组合,也可以表示为接收矢量(错误图样)各分量的线性组合,因此大数逻辑译码器可分为Ⅰ型和Ⅱ型,它们没有本质的区别。 可以证明,有J个正交校验和式的码能纠正t≤J/2个错误。当传输错误发生在正交位时,正交一致校验方程组中将有大于J/2个和式取值为1,因此可依据此对每位码元进行正交校验。例5.4.8中正交一致校验方程组仅对e6(即x6)码元位正交,因此只要用一次大数逻辑判决就能完成对该位的译码,故称之为一步大数逻辑译码。一步大数逻辑译码的方法虽然简单,但是此类码不多,且纠错能力也不高。为了提高大数逻辑译码的应用范围和改善码的纠错能力,可把对某一码元位正交的概念扩展至对某一码元位置集合正交,并逐次进行大数逻辑译码。这种需要L步大数逻辑译码才能最后译出一个码元的方法称为L步大数逻辑译码。 5.4.4BCH码与RS码 5.4.4.1BCH码 BCH码是最重要的一类循环码,BCH码分别由Hocquenghem在1959年,以及Bose和Chaudhuri在1960年独立提出。1960年Peterson对二进制BCH码提出一种有效的译码方法。从那时起编码领域的学者对BCH码的译码进行了深入研究。由于这些算法均需要应用许多复杂的代数理论知识,特别是有限域上的多项式知识,在此不做深入介绍,仅对BCH码的概念、构造及译码做简单介绍。 BCH码是一类纠正多个随机错误的循环码,它的参数可以在较大范围内变化,选用灵活,适用性强。最为常用的二元BCH码是本原BCH码,其参数及其关系式: 码字长度:n=2m-1 校验位数目:n-k≤mt 最小距离:d≥2t+1(5.4.14) 式中: m为正整数,一般m≥3,纠错位数t<(2m-1)/2。 BCH码的构造是利用循环码生成多项式g(x)之根来研究的,其生成多项式可以按如下流程得到。 令α是GF(2m)的本原元,考虑α的连续幂序列 α,α2,α3,α4,…,α2t 令mi(t)是以αi为根的最小多项式,则满足式(5.4.14)所列参数要求的BCH码生成多项式为 g(x)=LCM[m1(x),m2(x),m3(x),…,m2t(x)] 式中: LCM为最小公倍式。 利用共轭元具有相同最小多项式的特点,则生成多项式可以写成 g(x)=LCM[m1(x),m3(x),…,m2t-1(x)] 表5.4.7给出较小码长的BCH码相关参数和生成多项式。表中: n表示码长; k表示信息位长度; t表示码的纠错能力; 生成多项式g(x)栏下的数字表示其系数,如表中生成多项式为3551时,该多项式序列的二进制表示为(11101101001),则其生成多项式为g(x)=x10+x9+x8+x6+x5+x3+1,构成一个能纠2个错误的(31,21)BCH码。 表5.4.7BCH码的参数和生成多项式 nktg(x)(八进制) 1572721 15532461 312123551 31163107657 311155423325 6351212471 634531701317 63394166623567 63306157464165547 127113241567 127106311554743 2552392267543 2552313156720665 例5.4.9在GF(24)上构造长度为2n-1=15的纠错能力为t的二元本原BCH码。 解: GF(24)如表5.4.8所示。 表5.4.8n=4,p(x)=x4+x+1的GF(24)的所有元素 α的幂α的多项式α的幂α的多项式 00α7α3+α+1 11α8α2+1 ααα9α3+α α2α2α10α2+α+1 α3α3α11α3+α2+α α4α+1α12α3+α2+α+1 α5α2+αα13α3+α2+1 α6α3+α2α14α3+1 (1) 设t=1。由定义该码的生成多项式以GF(24)本原元α和α2为根。考虑到共轭元素有相同最小多项式,所以生成多项式为 g(x)=LCM[m1(x),m3(x),…,m2t-1(x)]=m1(x) =(x+α)(x+α2)(x+α4)(x+α8)=x4+x+1 该生成多项式系数矢量的八进制表示为“23”,它正是(15,11)Hamming码的生成多项式,它有4位校验位。该码的设计距离d=2t+1=3,可以求出该码的实际最小距离也是3,设计距离等于最小距离。 (2) 长度为24-1=15,能纠t=2位错误的BCH码的生成多项式以α、α2、α3、α4为根(α为GF(24)本原元)。考虑到α、α2、α4、α8和 α3、α6、α9、α12为两组共轭根,所以生成多项式为 g(x)=LCM[m1(x),m3(x),…,m2t-1(x)]=m1(x)m3(x) =(x+α)(x+α2)(x+α4)(x+α8)(x+α3)(x+α6)(x+α9)(x+α12) =(x4+x+1)(x4+x3+x2+x+1) =x8+x7+x6+x4+1 这个生成多项式的八进制表示为“721”,它生成一个(15,7)BCH码,有8位校验位,能纠正任意两位错误。这个码的设计距离d=2t+l=5,可以求出这个码的实际最小距离也是5。 (3) 对于可以纠正t=3个错误的BCH码,有 g(x)=LCM[m1(x),m3(x),…,m2t-1(x)]=m1(x)m3(x)m5(x) =(x+α)(x+α2)(x+α4)(x+α8)(x+α3)(x+α6)(x+α9)(x+α12)(x+α5) (x+α10) =(x4+x+1)(x4+x3+x2+x+1)(x2+x+1) =x10+x8+x5+x4+x2+x+1 可见,r=0g(x)=10,这是一个(15,5)BCH码,该码的设计距离d=2t+l=7,与其实际最小距离相同。 (4) 当t=4时,有 g(x)=LCM[m1(x),m3(x),…,m2t-1(x)]=m1(x)m3(x)m5(x)m7(x) =(x4+x+1)(x4+x3+x2+x+1)(x2+x+1)(x4+x3+1) =x14+x13+x12+x11+x10+x9+x8+x7+x6+x5+x4+x3+x2+x+1 可见,该码为(15,1)BCH码,即(15,1)重复码。这个码只有两个码字,全0码字和全1码字,所以它的最小距离为15,然而这个码的设计距离d=2t+l=9。此时,实际最小距离大于设计距离。这个码实际可以纠正7个随机错误。 (5) 如果继续用上面的方法构造t为5、6、7的BCH码,将会发现得到的都是和上面同样的生成多项式: g(x)=x14+x13+x12+x11+x10+x9+x8+x7+x6+x5+x4+x3+x2+x+1 因为(15,1)BCH码的纠错能力覆盖了t=4~7。可见按BCH码构造的生成多项式实际可达纠错能力大于或等于设计能力t。 (6) 如果要构造t=8的BCH码,就需要域元素α15的最小多项式m15(x),这已经超出了扩域GF(24)的范畴,需要更大的扩域才能做到。可见,纠错能力更强的BCH码需要用域元素更多的扩域来构造。 对于BCH码来说,也可以生成多项式的根定义一致校验矩阵H。如果码字多项式C(x)有一个根β,即C(β)=0,也就是 cn-1βn-1+cn-2βn-2+…+c1β+c0=0 将上式写为矩阵形式,有 Cβn-1β1=0 式中: C=(cn-1,cn-2,…,c1,c0)是码字矢量。 因此,如果β1,β2,…,βj都是C(x)的根,则 Cβn-11βn-12…βn-1j  β1β2…βj 1111=0 由校验矩阵H的定义可得 CHT=0 因此可认为校验矩阵H为 (βn-11)T…(β1)T1T(βn-12)T…(β2)T1T(βn-1j)T…(βj)T1T 对于(15,11)Hamming码来说,若α为GF(24)上本原元,则有 H=[(α14)T,…,(α2)T,(α)T,1T] 本原元素α的各次幂正好是这个域的全部非零元。由表5.4.8可得相应的校验矩阵为 H=111101011001000011110101100100001111010110010111010110010001 同样,对于生成多项式为g(x)=x10+x8+x5+x4+x2+x+1的(15,7)BCH码,生成多项式的根中只有α、α3是独立的,所以校验矩阵为 H=(αn-1)T…(α2)T(α)T1T(α3n-3)T…(α6)T(α3)T1T 下面介绍BCH码的经典译码算法原理,是一种扩展Peterson算法(也称GorensteinZierler算法)。 在对BCH码进行译码时,如果发生v≤t个错误,那么一般要找出这v个错误的位置,同时要求出这些错误的值(错误大小)。一般可以从伴随式求得错误位置多项式。迭代算法的译码过程就是利用BCH码生成多项式的特点确定这两个信息的过程。当然,在二元码中因为出错位的取值总等于1,所以只需求出错误位置。 对于一个码长为n的BCH码,其纠错能力为t,考虑其错误图样多项式(简称错误多项式): E(x)=en-1xn-1+en-2xn-2+…+e1x+e0 系数en-i(i=1~n-1)表示错误图样中相应码元的取值,最多有t个非零系数。假设实际发生了v(0≤v≤t)个错误,这些错误发生在位置j1,j2,…,jv,则可以把错误多项式改写为 E(x)=ejvxjv+…+ej2xj2+ej1xj1 E(x)=Yvxjv+…+Y2xj2+Y1xj1 式中: Yl为第l个错误的取值。 根据BCH码的定义,可把伴随式定义为接收矢量多项式在各个域元素处的值,如在域元素α处,伴随式为 S=s1s2s2tT 式中 si=E(αi)=R(αi) =∑vl=1Yl(αi)jl=∑vl=1Yl(αjl)i(i=1,2,…,2t)(5.4.15) 令 αjlXl 则有 si=∑vl=1YlXil(i=1,2,…,2t) 式中: Yl表示错误大小; Xl表示错误位置。 于是上式展开为 s1=Y1X1+Y2X2+…+YvXv s2=Y1X21+Y2X22+…+YvX2v  s2t=Y1X2t1+Y2X2t2+…+YvX2tv(5.4.16) 这是一个有2v个未知参量的方程组,包含错误大小Y1,Y2,…,Yv,错误位置X1,X2,…,Xv,再定义错误位置多项式为 σ(x)=(1-xX1)(1-xX2)…(1-xXt) 1+σ1x+σ2x2+…+σtxt 也就是说,错误位置的倒数x-1l是这个多项式的零点值。应用错误位置多项式可以把上面的方程组改写成矩阵形式: s1s2…svs2s3…sv+1svsv+1…s2v-1σvσv-1σ1=-sv+1sv+2s2v(5.4.17) 通过解这个方程组就可以求出错误位置多项式的所有系数σi的值。在解方程组过程中需要求伴随式矩阵的逆,所以要求伴随式矩阵是非奇异的。可以证明,当存在v个错误时,伴随式矩阵是非奇异的。由此可以从伴随式矩阵的奇异性中确定实际发生错误的个数v。 BCH码迭代法译码步骤具体如下。 (1) 设v=t,计算伴随式矩阵的行列式det(M),其中, M=s1s2…svs2s3…sv+1svsv+1…s2v-1 若det(M)=0,则说明伴随式矩阵是奇异的,接收码字中没有发生t个错误。 (2) 对矩阵M做降维处理,设v=t-1,重新计算det(M)。重复这个过程直到det(M)≠0,这时的v值就是实际发生错误的个数。 (3) 根据找到的v值,解方程式(5.4.17),得到错误位置多项式的所有系数σi的值。 (4) 解方程σ(x)=0,得到它的所有零点。这里可采用钱氏搜索(Chien search)算法进行穷举搜索,即把所有域元素α逐一代入σ(x)中进行检测,看方程σ(x)=0是否成立。得到它的所有零点后,其倒数也就是 σ(x)=(1-xX1)(1-xX2)…(1-xXt) 式中: X1,X2,…,Xv为错误位置。 对于二进制码来说,因为错误值只能是1,所以译码过程到这里就结束了。对于非二进制码,要求错误值Y1,Y2,…,Yv,再回到方程式(5.4.17),现在其中的错误位置X1,X2,…,Xv是已知的,解这个线性方程式,就可以得到所有错误值。 例5.4.10对于例5.4.9中构造的(15,7)BCH码,设收到矢量R=(100010111000101)。将其以多项式表示,根据式(5.4.15)计算出其伴随式(运算在GF(24)上进行)为s1=α14,s2=s21=α13,s3=α13,s4=s22=α11。代入方程式(5.4.17)可得 σ(x)=1+α14x+α2x2 =(1-xα-3)(1-xα-14) 试探可得α3和α10为错误位置多项式的根,故第12位和第5位出错,于是对应的码字C=(100000111001101)。 由上面的介绍可知,决定BCH译码器复杂度和速度的主要因素是求错误位置多项式σ(x)。1966年伯利坎普(Berlekamp)提出了迭代译码算法,1969年梅西(Massey)进行了改进,这种译码算法称为BM迭代译码算法,它大大节省了计算量,加快了译码速度,很好地解决了BCH码译码的实用问题。之后研究人员不断提出新的译码算法,如欧几里得算法、连分式算法、频域译码等。迭代算法的优点是使用的硬件资源相对较少,而且对错误位数不敏感,当错误位数较多时,迭代译码算法所使用的硬件资源与位数少的情况相差无几。另外,迭代译码算法的运算速度与码的纠错能力呈线性关系,当纠错能力大时,迭代次数也会相应增多。 5.4.4.2RS码 RS(ReedSolomon)码首先由里德(Reed)和索罗门(Solomon)于1960年构造,是一类具有很强纠错能力的非二进制BCH码,近年来在许多通信系统中获得了应用。RS码的码元符号取自有限域GF(q),它的生成多项式的根也是GF(q)中的本原元,所以它的符号域和根域相同。由于RS码是以每符号m bit进行的多元符号编码,在编码方法上与二元(n,k)循环码不同。分组块长n=2m-1的码字比特数为m(2m-1)bit,当m=1时就是二元编码。RS码一般常用m=8bit,这类RS码具有很大应用价值。能纠正t个错误的RS码具有如下参数: 码字长度: n=q-1(符号) 校验位数据: n-k=2t(符号) 最小距离: d=2t+1(符号) 由5.3.3节介绍的码的性能限可知,线性码的最大可能的最小距离为校验位数目加1,这就是Singleton限界,RS码正好达到此限。因此,RS码是一种MDS码,在同等码率下其纠错能力最强。 若取q=2m,则RS码的码元符号取自GF(2m),码长n=2m-1。一个能纠正t位符号错误的RS码的生成多项式可表示为 g(x)=(x+α)(x+α2)(x+α3)…(x+α2t) 式中: α为GF(2m)上的本原元。 由于RS码实质是一类非二进制BCH码,因此其译码算法可以沿用BCH译码算法,只是它在纠错时除了要确定错误位置Yi外,还要求出相应的错误值Xi。 RS码在深空通信、移动通信、军用通信、光纤通信、磁盘阵列及光盘纠错等方面得到了广泛应用。例如,RS(255,223)码已成为美国国家航空航天局和欧洲空间站的深空通信系统中的标准信道编码,RS(31,15)码是军用通信中的首选信道编码,RSPC(182,172)(208,192)成为数字光盘(DVD)系统的纠错标准。 例5.4.11一个符号取自GF(23),长度n=23-l=7,能纠正2个错误的RS码的生成多项式为 g(x)=(x+α)(x+α2)(x+α3)(x+α4) 根据表5.4.9所示的GF(23)域元素,可得 g(x)=x4+α3x3+x2+αx+α3 式中: α为本原多项式x3+x+1的根。这个RS码的校验位长n-k=4,因而是(7,3)RS码。 假设该(7,3)RS码经传输,在第2位出现值为α的错误,第6位出现 α2的错误,则错误多项式为 E(x)=α2x6+αx2 因此伴随矢量S=(s1,s2,s3,s4)(运算在GF(23)上进行)。为 s1=E(α)=α2α6+αα2=1s2=E(α2)=α2α12+αα4=α4s3=E(α3)=α2α18+αα6=α2s4=E(α4)=α2α24+αα8=α3 表5.4.9n=3,p(x)=x3+x+1的GF(23)的所有元素 α的幂α的多项式3重表示式 00000 11001 αα010 α2α2100 α3α+1011 α4α2+α110 α5α2+α+1111 α6α2+1101 于是,错误位置多项式σ(x)的系数σ1、σ2是下面方程组的解: 1α4α4α2σ2σ1=α2α3 由此得错误位置多项式为 σ(x)=σ2x2+σ1x+1=αx2+x+1 用钱氏搜索算法进行穷举搜索,把有限域GF(23)的元素逐个代入σ(x)=αx2+x+1试探,发现仅当x=α和x=α5时错误位置多项式σ(x)=αx2+x+1为零。所以错误位置为i1=7-5=2和i2=7-1=6,这正是所设的错误位置。 设β1=αi1=α2,β2=αi2=α6,于是错误值方程为 β1β2β21β22Y2Y1=s1s2 解此方程可得 Y2=α12+α10α14+α10=α Y1=α6+α4α=α2 于是第2位出现值为α、第6位出现值为α2的错误,这正是题设所假设的错误值。 5.5卷积码 卷积码自1955年由Elias发明以来,从20世纪70年代开始被广泛应用于无线通信、深空通信及广播通信中,普及的原因是使用最大似然序列译码器进行译码时实现相对简单,以及与ReedSolomon码级联时表现出来的优异性能。从20世纪90年代初开始,由于在Turbo(或者类Turbo)码中级联多个卷积码所表现出来的有效性,这一类码又重新得到重视。本节从码的定义与表述、译码算法以及应用等方面介绍卷积码。 5.5.1卷积码的定义 卷积码是具有十分独特代数结构的线性码,虽然它们可以在基于分组的情况下使用,但是它们的编码器更多地被描述为面向数据流的形式。首先介绍四状态、码率为1/2的卷积码,它的编码器如图5.5.1所示。每一个信息比特进入编码器都会生成相应的两个编码比特,即k=1,n=2; 编码器中含有m=2个二进制记忆单元(寄存器),其状态数目为2m=4,编码约束度为m+1=3。编码器的上下两部分像是运算在GF(2)域上的两个离散时间有限冲激响应滤波器。顶部滤波器的冲激响应是g(1)=[111],而底部滤波器的冲激响应是g(2)=[101]。从这样的角度看,编码器的输出c(1)是输入u和冲激响应g(1)的卷积,编码器的输出c(2)也是如此,这就是卷积码的起源。卷积码通常用(n,k,m),则图5.5.1表示(2,1,2)卷积码。这样的话,对于j=1,2,有 c(j)=u○ *g(j) 其中,○ *表示离散卷积,所有的运算都是模之和。 而且,时域里的卷积运算对应变换域里的乘积运算,这个方程还可以重新写成 c(j)(D)=u(D)g(j)(D) 图5.5.1一个四状态、码率为1/2的 卷积码编码器 其中,D的多项式系数是对应向量的元素,所以g(1)(D)=1+D+D2,g(2)(D)=1+D2。D在编码的文献里被广泛使用,它等价于单位离散时间延迟算子z-1。 上述编码过程可以描述为如下形式: [c(1)(D)c(2)(D)]=u(D)[g(1)(D)g(2)(D)] =u(D)G(D) 式中: G(D)=[g(1)(D)g(2)(D)]是该码的生成矩阵,为1×2阶矩阵; g(j)(D)为生成多项式。 对于长为l的输入数据(u(D)的次数是l-1),输出数据的长度为2l+4。为了使编码器状态归零,需使用额外的两个0,从而产生了4个额外编码比特。因此,实际上码率是l/(2l+4),当l很大时码率接近1/2。由于信息数据和码字之间具有简单而高度结构化的关系,卷积码具有较低的编码复杂度和译码复杂度。 5.5.2卷积码的表示 5.5.2.1代数描述 定义一个二元卷积码C,码字c(D)∈C有如下的形式: c(D)=[c(1)(D)c(2)(D)…c(n)(D)] 式中: c(j)(D)=∑∞i=rc(j)iDi。 每一个c(D)∈C可以写成这个基向量{gi(D)}ki=1的线性组合: c(D)=∑ki=1u(i)(D)gi(D) 式中: k是C的维数。 与线性分组码类似,上式可以重写为 c(D)=u(D)G(D)(5.5.1) 这里u(D)=[u(1)(D)u(2)(D)…u(k)(D)],基向量gi(D)=[g(1)i(D)g(2)i(D)…g(n)i(D)]构成了k×n生成矩阵G(D)的行,所以G(D)中第i行第j列的元素是g(j)i(D)。 G(D)表示一般的生成矩阵,它可以是系统或者非系统形式。存在一个(n-k)×n校验矩阵H(D),使得 c(D)HT(D)=0 同时 G(D)HT(D)=0 在前面的两个等式中的0分别表示1×(n-k)零向量和k×(n-k)零矩阵。对于线性分组码,G(D)和H(D)都有系统形式,即为G0(D)=[I|P(D)]和H0(D)=[PT(D)|I],G0(D)是由G(D)通过行变换得到。卷积码也有类似的情况,通过例5.5.1来描述。 例5.5.1一个码率为2/3的卷积码的生成矩阵如下: G(D)=1+D1+D+D201+D111+DD1+D2(5.5.2) 如将矩阵的第一行乘以(1+D+D2)/(1+D),把新得到的第一行加到第二行,把新得到的第二行乘以(1+D),就可以得到系统形式 G0(D)=101+D+D2011+D3+D41+D(5.5.3) 基于式(5.5.2)、式(5.5.3)的编码器如图5.5.2所示。 图5.5.2例5.5.1中给出的2/3码率卷积码的编码器实现 由子矩阵P(D)(G0(D)的最右一列)可得 H0(D)=1+D+D21+D3+D41+D1 这是因为H0(D)=[PT(D)|I]。G(D)中元素分母的最小公倍式是(1+D+D2)(1+D2),所以可得一个多项式形式的生成矩阵,用Gp(D)来表示: Gp(D)=(1+D)30(1+D+D2)(1+D)3(1+D+D2)(1+D2)(1+D+D2)(1+D)D(1+D+D2) 将H0(D)中的每个元素乘以1+D,可得 Hp(D)=[1+D31+D3+D41+D] 任意可实现的卷积码都必定存在一个多项式形式的生成矩阵和校验矩阵。需要强调的是,G(D)、G0(D)和Gp(D)都生成同一个码,即它们的行张成相同的子空间。类似线性分组码,卷积码的生成矩阵也可以写成码字的形式。 例5.5.2码率为1/2、生成矩阵是G(D)=[g(1)(D)g(2)(D)]=[1+D+D21+D2]的卷积码,g(1)=[g(1)0g(1)1g(1)2]=[111],g(2)=[g(2)0g(2)1g(2)2]=[101]。对应复用码字的生成矩阵可写成如下形式: G′=g(1)0g(2)0g(1)1g(2)1g(1)2g(2)2g(1)0g(2)0g(1)1g(2)1g(1)2g(2)2g(1)0g(2)0g(1)1g(2)1g(1)2g(2)2 =111011111011111011 与分组码不同,这是一个半无限长的生成矩阵。 一般来说,卷积码的参数n和k的典型值都非常小。如k=1,2,3和n=2,3,4,典型的码率如1/2、1/3、1/4、2/3和3/4,其中1/2是最常见的码率。更高的码率一般通过降低码率的卷积码进行凿孔实现,即将编码器输出的比特进行周期性地删除而不传输。例如,为了通过将1/2码率的卷积码进行凿孔来得到2/3码率的卷积码,只需要在每四个编码输出比特中删除一个。由于每组的四个码字比特是由两个信息比特产生的,但是四个里面只有三个被传输,于是就实现了码率2/3。因为编译码器的复杂度和性能,码率接近1(如0.95)的卷积码在实际中是不存在的,不管是否使用凿孔。卷积码译码器的复杂度正比于2μ,这里μ是编码器的记忆长度,即编码器记忆单元的个数。典型的μ值在10以下,工业标准中码率为1/2卷积码对应的μ=6,其生成多项式是g(1)(D)=1+D+D2+D3+D6 和g(2)(D)=1+D2+D3+D5+D6。常见的做法是用八进制数表示这些多项式,上述生成多项式可以表示成g(1)oct=117和g(2)oct=155。 5.5.2.2图表示 卷积码的代数描述有利于编码器的实现和分类。本节介绍的图表示方法则有利于卷积码的译码、设计、性能分析等。 下面以1/2码率的卷积码为例进行描述,其生成矩阵G(D)=[1+D+D21+D2],编码器如图5.5.1所示。从图及状态的定义中可以得到状态转移表(表5.5.1),按表可以画出这个码的有限状态转移图,如图5.5.3(a)所示。状态图对于通过分析确定卷积码的距离谱很有用,而且可以直接导出码的网格图,网格图是在水平方向上加上离散时间维度的状态图(图5.5.3(b)),编码器从00状态开始。值得注意的是,在i和i+1(i≥2)节之间的网格,本质上是状态图的完全复制。同时,任意给定长度的码序列表,可以通过追溯网格图上同样长度的所有可能路径,并在每条路径上截取标记每个分支(或边)的码符号得到。 表5.5.1状态转移表 输入ui当前状态ui-1ui-2下一状态uiui-1输出c(i)ic(2)i 0000000 1001011 0010011 1011000 0100110 1101101 0110101 1111110 图5.5.3有限状态转移图和编码器的网格图 考虑基于网格图译码的时候,将会发现,除非网格图的最后一个状态是已知的,否则得到的末尾几个译码比特(大概5μ比特)将有些不可靠。为了解决这种情况,系统设计者通常会将网格图终止在一个已知的状态里。很明显,这需要在信息序列后面再添加μ比特,这样做增加了编码开销(或者说降低了码率)。而一种能够保持网格图终止优势,同时可避免降低编码效率的办法是咬尾。对于咬尾卷积码,用信息序列的最后μ比特初始化编码器的状态,使得编码器的初始状态和最终状态都是一样的。 5.5.3卷积码的译码 目前卷积码有大数逻辑译码器、序列译码器、Viterbi 译码器和BCJR译码器,算法根据实际应用选择。通过Viterbi算法实现的最大似然序列译码器(MLSD)可最小化码字序列的错误概率,通过BCJR算法实现的逐比特最大化后验概率(MAP)译码器则可最小化信息误码率。一般来讲,这两种译码器的性能特性不管是从比特错误概率还是码字错误概率来讲都是相当接近的。但BCJR算法的译码复杂度约为Viterbi算法的3倍。本节主要讨论Viterbi译码算法。 我们关注的是二元对称信道(BSC)和二进制输入加性高斯白噪声信道(BIAWGNC)。为了满足统一的要求,对于两种信道用xi表示第i个输入,用yi表示第i个信道输出。给定信道输入xi=ci∈{0,1}和信道输出yi∈{0,1},BSC的信道转移概率为 P(yi≠x|xi=x)=ε P(yi=x|xi=x)=1-ε 式中: ε为交叉概率。 对于BIAWGNC,码字比特映射到信道输入是xi=(-1)ci∈{±1}。BIAWGNC的信道转移概率密度函数(PDF)为 p(yi|xi)=12πσexp[-(yi-xi)2/(2σ2)] 式中: σ2为零均值的高斯噪声采样ni的方差。 信道将ni直接加到传输值xi上(因此,yi=xi+ni)。首先考虑BSC,它的ML判决是 c^=arg maxc P(y|x) 可以化简成 c^=arg minc dH(y,x) 式中: dH(y,x)表示y和x之间的汉明距离(注意x=c)。 BIAWGNC的ML判决是 c^=arg maxc p(y|x) 可以简化成 c^=arg minc dE(y,x) 式中: dE(y,x)表示y和x之间的欧几里得距离(注意x=(-1)c)。 因此,对于BSC(BIAWGNC),MLSD将会选择在汉明(欧几里得)距离的意义下最接近信道输出y的码字序列c。从理论上来说,由于网格图列举了所有的码字序列,因此可以用穷搜索的办法在网格图上寻找最接近y的序列。L条网格分支的计算: ΓL=∑Ll=1λl(5.5.4) 式中: λl为第l个分支度量,且有 λl=∑nj=1dH(y(j)l,x(j)l)=∑nj=1y(j)lx(j)l(BSC)(5.5.5) λl=∑nj=1d2E(y(j)l,x(j)l)=∑nj=1(y(j)l-x(j)l)2(BIAWGNC)(5.5.6) 在BSC下,x(j)l=c(j)l,而在BIAWGNC下,x(j)l=(-1)c(j)l。式(5.5.5)中的度量称为汉明度量,式(5.5.6)中的度量称为欧几里得度量。 很明显,arg minc dH(y,x)和arg minc dE(y,x)的计算量是非常庞大的,这是因为对于码率为k/(k+1)的码来说,网格图上L节意味着有2kL个码字序列。但是,Viterbi根据以下观察发现,在不损失性能的情况下这个复杂度可以降低到O(2μ)。考虑在图5.5.2(b)中以[000000]和[111011]开始的两个码字序列,它们对应的输入序列是[000…]和[100…]。观察到对应这两个序列的网格路径在状态0/时间0开始岔开,而在经过三个分支后(或者等效地说,经过网格图中的三节后)又汇聚到状态0。经过三节后汇合的重要性在于此后的网格中这两条路径有相同的扩展。因此,如果这两条路径其中一条在l=3时有着较大的累积度量,那么这条路径加上扩展以后也会拥有较大的累积度量。因此,从长远角度考虑可以把l=3时度量较大的路径移除。这条被保留的路径称为幸存路径。这样的做法将会应用到网格中所有汇聚路径,以及在l>3时每个网格节点拥有多于两条汇聚路径的网格中。这就引出了以下基于MLSD的Viterbi算法。 算法5.5.1Viterbi算法 定义 (1) λl(s′,s)是从l-1时刻状态s′转移到l时刻状态s的分支度量,这里s′,s∈{0,1,…,2μ-1}。 (2) Γl-1(s′)是在l-1时刻幸存状态s′的累积度量,即幸存路径的分支度量和。 (3) Γl(s′,s)是从l-1时刻状态s′延展到l时刻状态s路径的暂定累积度量,Γl(s′,s)=Γl-1(s′)+λl(s′,s)。 加比选(AddCompareSelect,ACS)迭代 初始化设定Γ0(0)=0和Γ0(s′)=-∞,对于所有s′∈{1,…,2μ-1}(编码器、网格被初始化为状态0)。 for l=1 to L (1) 计算可能的分支度量λl(s′,s)。 (2) 对于在l-1时刻的每个状态s′和l时刻从状态s′出发所有可能到达的状态s,计算从状态s′延展到状态s路径的暂定累积度量Γl(s′,s)=Γl-1(s′)+λl(s′,s)。 (3) 对于在时刻l的每个状态s,从度量Γl(s′,s)选出并记录下具有最小度量的路径。这时状态s的累积度量是Γl(s)=mins′{Γl(s′,s)} end 下面讨论几种选择最大似然码序列的方法。 面向分组的方法1: 假设一个信息序列长为kLbit,在经过L次加比选迭代后,选择具有最优累积度量的路径(若相同,则任意确定),L在这里必须足够大,从而能充分发挥这个码的全部优势,一般有L>50μ。 面向分组的方法2: 假设一个非递归卷积码,在信息序列后面加上μ个0,使得网格在信息序列的末端可以回归0状态。在最后一次ACS迭代后,最大似然路径即是回归到状态0的幸存路径。同样,这里的L也必须足够大。 面向流的方法1: 这个方法利用了幸存路径都会有共同的“尾巴”这个特点。在第l次ACS迭代后,译码器将会沿着任意的幸存路径回溯δ个分支,然后将网格第l-δ节分支上的标记作为信息比特输出。这是一个很有效的滑动窗口译码器,其顺着网格的长度滑动,在δ节内存储和处理信息。译码延迟δ的值通常直接使用记忆长度的4倍或者5倍。然而,通过计算机仿真来确定这个值会更好,因为这个值是根据具体的码来确定的。也就是说,可以在码的网格图上使用计算机搜索算法,从在0状态/0时刻发散于全零路径、后来再聚合的最小重量码字序列中确定所需要的最大路径长度。δ可以设定成比这个最大路径长度稍微大一点的值。 面向流的方法2: 在第l次ACS迭代后,选择具有最优累积度量的网格路径,然后回溯δ个分支,选择网格第l-δ节中分支上所标记的比特作为对应的输出判决。 针对BIAWGNG的欧几里得距离度量(式5.5.6)可以做如下简化: arg minc d2E(y,x)=arg minc ∑Ll=1∑nj=1(y(j)l-x(j)l)2 =arg minc∑Ll=1∑nj=1[(y(j)l)2+(x(j)l)2-2y(j)lx(j)l] =arg maxc∑Ll=1∑nj=1y(j)lx(j)l 最后一行是因为第二行的平方项是独立于c的。因此,式(5.5.6)中的AWGN分支度量可以用下面的相关度量代替: λl=∑nj=1y(j)lx(j)l(5.5.7) 以上式子在BIAWGNC下成立。 图5.5.4展示了一个BSC上应用面向分组判决方法1的Viterbi译码例子。这里y=[00,01,00,01],非幸存路径用“×”标示,累积度量在汇聚分支附近用粗体写出。例子中不存在彻底的最小距离路径,任一距离为2的路径与ML路径一样。 图5.5.4图5.5.3中的码在BSC上使用Viterbi译码的例子 图5.5.5展示了一个BIAWGNC上应用面向分组判决方法1和相关度量的Viterbi译码的例子。这里y=[-0.7,-0.5,-0.8,-0.6,-1.1,+0.4,+0.9,+0.8],非幸存路径用“×”标示,累积度量在汇聚分支附近用粗体写出。ML路径就是累积度量为3.8的路径。 图5.5.5图5.5.3中的码在BIAWGNC上使用Viterbi译码的例子 5.5.4卷积码的应用 5.5.4.1IEEE 802.16中的卷积码 IEEE 802.16工作组专门开发宽带固定无线技术标准,IEEE 802.16标准的颁布推动了宽带无线接入的发展,是点对多点宽带固定无线接入系统的权威规范。在该标准的物理层规范中采用正交频分复用(OFDM)调制,信道编码分为扰码、前向纠错(FEC)和交织三步。 FEC包括级联的卷积码(内码)和RS码(外码),编码过程是首先数据以块的形式经过RS编码器,然后经过0截止的卷积码编码器。RS码采用GF(28)中的(255,239,8)码,编码生成多项式为 g(x)=(x+α)(x+α2)…(x+α2t),α=02HEX 域生成多项式为g(x)=x8+x4+x3+x2+1。码字可以缩短或打孔,以适应不同大小的数据块和不同的纠错能力。每个RS数据块进行卷积编码,采用(2,1,7)卷积码,生成多项式为G=[171,133],如图5.5.6所示。 图5.5.6码率为1/2的卷积编码器 表5.5.2列出了为实现不同编码码率而使用的打孔模式和串联顺序,表中的“1”表示发送比特,“0”表示删除比特。 表5.5.2内卷积编码及配置 码率 Rate1/22/33/45/6 dfree10654 X11010110101 Y11111011010 XYX1Y1X1Y1Y2X1Y1Y2X3X1Y1Y2X3Y4X5 不同调制方式的块长度和码率见表5.5.3。 表5.5.3不同调制方式的块长度和码率 调制方式未编码块长度/字节编码块长度/字节总码率RS码率CC码率 BPSK12241/2(12,12,0)1/2 QPSK24481/2(32,24,4)2/3 QPSK36483/4(40,36,2)5/6 16QAM48961/2(64,48,8)2/3 16QAM72963/4(80,72,4)5/6 64QAM961442/3(108,96,6)3/4 64QAM1081443/4(120,108,6)5/6 5.5.4.2CCSDS中的卷积码 国际空间数据系统咨询委员会(CCSDS)标准是国际上广泛应用于深空通信领域的通信标准,该标准集合了目前在深空遥控、测控和通信标准等方面的最新研究成果,至今已发布了涵盖物理层调制解调、信道编译码、数据链路层协议和图像压缩等领域的众多标准,并为世界众多学术机构认可。CCSDS建议书最初针对民用目的而开发,因其具有卓越性能、良好经济效益和广泛适应性等特点,近年来越来越受到世界各国军事组织的关注,已逐步被世界各国应用于军用航天任务。 CCSDS建立了包括卷积码、RS码、级联码、Turbo码和LDPC码等信道码在内的一系列信道码标准。这些高增益信道编码通过优异的编译码算法设计获得可观的信道增益,有效降低信号解调阈值,进而抵消信号在长距离空间传播过程中带来的能量损失。其中,CCSDS标准推荐采用约束长度为7bit、码率为1/2的卷积码,通过打孔抽取可得到2/3、3/4、5/6和7/8,共4种码率。1/2编码器结构如图5.5.7所示,卷积码抽取参数如表5.5.4所示。 图5.5.71/2编码器结构 表5.5.4卷积码抽取参数 抽 取 样 式码率输出 C1: 10 C2: 112/3C1(1)C2(1)C2(2)… C1: 101 C2: 1103/4C1(1)C2(1)C2(2)C1(3)… C1: 10101 C2: 110105/6C1(1)C2(1)C2(2)C1(3)C2(4)C1(5)… C1: 1000101 C2: 11110107/8C1(1)C2(1)C2(2)C2(3)C2(4)C1(5)C2(6)C1(7)… 5.5.4.3移动通信中的卷积码 WCDMA中有三种方式用于专用物理信道的编码,分别为卷积码(码率为1/2或1/3)、Turbo码(只有1/3码率)和没有信道编码。卷积编码主要用于误码率为10-3级别的业务,典型的有传统的话音业务和低速信令的传输。 WCDMA中定义的卷积编码器如图5.5.8所示,其约束长度K=9,码率为1/3或1/2。码率为1/3的编码器输出顺序为Output0,Output1,Output2,Output0,Output1,Output 2,Output 0,…,Output2。而码率为1/2的编码器输出顺序为Output 0,Output 1,Output 0,Output 1,Output 0,…,Output 1。移位寄存器的初始状态应为全“0”。因此,在编码前需要将8个0值尾比特添加到码块,以清零编码器。 图5.5.8码率为1/2和1/3的卷积编码器结构 从编码理论的角度考虑,卷积码性能主要与其编码效率、约束长度及自由距离有关。编码效率越小,编码冗余度就越大,纠错性能越好,占用带宽也越大; 约束长度越大,其纠错性能越好,但译码复杂度的指数增加,K=9是一个比较折中的方案。最后,在相同的编码效率和约束长度下,自由距离越大越好。K=9,编码效率为1/2、1/3的卷积码的最大自由距离为12和18,其生成多项式分别为(561)8、(753)8和(557)8、(663)8、(711)8。 图5.5.9给出了LTE系统中的咬尾卷积码编码器结构,其中寄存器的个数m=6,码率R=1/3,编码器输入的信息比特流为u,输出为(c(0),c(1),c(2))。 图5.5.9LTE系统中的咬尾卷积码编码器结构 咬尾卷积码已应用于4G 中的 LTE 系统中,并且成为5G 中超高可靠与低时延通信(URLLC)场景中的备选编码方案。LTE系统中的咬尾卷积码直接用信息序列的最后6个比特将编码寄存器初始化。这样全部编码后寄存器的结束状态将和编码前的起始状态相同,这样的编码方式没有传输额外的比特,从而提高了编码效率。 5.5.4.4卫星导航系统中的卷积码 全球卫星导航系统(Global Navigation Satellite System,GNSS)一般由空间星座、地面监控和用户设备三部分构成。空间星座是指GNSS中的导航卫星,该部分的作用是进行数据观测,并将接收的导航信息进行一定的处理后将其发送给地球用户。地面监控部分是整个GNSS 能否正常运行的保障,它主要的作用是对空间星座部分的卫星进行观测与跟踪,校对卫星的时钟、轨道等误差,使整个系统调整到正常运行状态。用户设备部分的功能是接收导航信息,并将接收到的信息进行各项处理(如数字化、功率放大、频率变换等),从而得到有效的用户自身的时间、速度和位置等参数,以实现定位。导航电文是GNSS信号最主要的组成部分,它是导航卫星发送给接收机(用户)的描述卫星的各项运行状态参数的一段数据码信息。 导航电文的纠错编码作为导航电文设计的重要组成部分,为了保证GNSS导航电文传输的可靠性,越来越多的编译码方法运用到卫星导航系统中。目前 GNSS 中所涉及的电文编译码方法有Hamming 码,CRC 码、BCH 码、卷积码、LDPC和交织编码等。 在全球定位系统(GPS)及伽利略(Galileo)系统的导航电文中,均采用了(2,1,6)卷积码,其编码结构如图5.5.10所示。Galileo系统与GPS卷积码参数相同,区别在于GPS为无卷尾的卷积码,Galileo为有卷尾卷积码,即Galileo系统的卷积码在编码的尾部要添加“0”(卷尾),使得卷积码从全“0”状态开始,最终编码结束状态又回到全“0”状态。 图5.5.10GPS(Galileo系统)中的卷积码结构 小结 纠错能力与最小距离d0的关系: 对于(n,k)分组码,一般有以下结论。 若码的最小距离满足d0≥e+1,则码的检错能力为e。 若码的最小距离满足d0≥2t+1,则码的纠错能力为t。 若码的最小距离满足d0≥e+t+1(e>t),则该码能纠正t个错误同时检测e个错误。 联合ε典型序列: 设(x,y)∈(Xn; Yn)是n长随机序列对,对于任意小的正数ε>0,存在足够大的n,若满足下列条件,则称(x,y)为联合ε典型序列。 1nlogP(x)+H(X)<ε 1nlogP(y)+H(Y)<ε 1nlogP(xy)+H(XY)<ε 联合渐近等同分割性: 对于任意小的ε>0,δ>0,当n足够大时,则有以下性质。 典型序列x、y和联合典型序列(x,y)满足 2-n[H(X)+ε]≤P(x)≤2-n[H(X)-ε] 2-n[H(Y)+ε]≤P(y)≤2-n[H(Y)-ε] 2-n[H(XY)+ε]≤P(xy)≤2-n[H(XY)-ε] 典型序列集Gε(X)、Gε(Y)和联合典型序列集Gε(XY)满足 P(Gε(X))≥1-δ P(Gε(Y))≥1-δ P(Gε(XY))≥1-δ 以NG表示典型序列集中元素个数,则Gε(X)、Gε(Y)和Gε(XY)中序列个数满足 (1-δ)2n[H(X)-ε]≤NGx≤2n[H(X)+ε] (1-δ)2n[H(Y)-ε]≤NGy≤2n[H(Y)+ε] (1-δ)2n[H(XY)-ε]≤NGxy≤2n[H(XY)+ε] 有噪信道编码定理: 有噪信道的信道容量为C,当信息传输率R