欢迎添加微信互相交流学习哦!

项目源码:https://gitee.com/oklongmm/biye

本科毕业设计(论文)


目    LDPC码性能研究

摘 要
    信道编码是数字通信系统的重要组成部分。LDPC信道编码技术是编码界的重要成果之一。1/2码率的二元LDPC码在AWGN信道下的性能距信息理论中的Shannon极限仅差0.0045dB,它是目前距Shannon极限最近的纠错码。Gallagar在1962年提出LDPC码,1996年经过Mackey、Spielman和Wiberg等人的再发现后,LDPC码以其性能优越、全并行迭代译码结构、便于硬件实现等优点,在无线通信、存储工业等领域得到了广泛应用。
    校验矩阵的构造是编码的前提,本文采用了随机构造法构造,并对矩阵的多种变换方法进行分析,比较了优缺点。译码算法是LDPC码的关键,译码复杂度的大小直接影响系统的实现。主要分硬判决译码、软判决和复合译码。设计中采用的译码方式是软判决译码。
    在性能分析方面,利用matlab仿真码长、列重和迭代次数对LDPC码性能的影响。仿真结果表明,在一定范围内,LDPC码长码的误码性能优于短码;码长较小时,列重的增加会使性能变差,而对于长码,列重在一定范围内的增大会改善LDPC的误码性能;增加迭代次数会使误码率降低,但当迭代次数大到一定值时,误码率将不会再随着迭代次数的增加而降低。

关键词 LDPC码 信道编码 矩阵变换 性能分析  
Abstract
    Channel coding is an important component for digital communication systems. LDPC channel coding technology is one important achievement of the encoding results. The performance of half of the binary bit-rate LDPC codes in AWGN channel only has a tap of 0.0045dB to the Shannon Limit that makes it be the latest error-correcting codes from the Shannon Limit. Gallager proposed LDPC codes in 1962, after Mackey and others re-discovered it in 1996, with best performance, completely decoding algorithm in parallel scheme and easily realized for hardware design, LDPC codes has already been widely used in many practical systems such as wireless communication system and storage system.
    The construction of the Check matrix is a precondition for coding; the randomized method was used in this paper. Several ways to transform the matrix was discussed and being compared about the merits of each method. The decoding algorithm is the key to LDPC code and the complexity of decoding direct impact realization of the system. There are three kinds of decoding algorithms: hard-decision method, soft-decision methods and hybrid decoding. The hard-decision method was used in this design.
Based on studying the basic theory of LDPC codes, the impact of codes length, column weight and iteration times on BER performance of LDPC codes are demonstrated by computer simulation and theoretical analysis. The simulation experiment indicated that: LDPC codes long-code error performance is superior to short-code error performance, but when the code length reaches a certain value, and then increase the code length, BER of LDPC codes lower rate will be small. When the code length is small, increasing the column weight, LDPC codes performance will deteriorate; when code length is large enough, increasing the column weight, LDPC codes performance will be improved, but when the column weight reaches a certain value, as set out priority to increasing the performance of LDPC codes will be worse. To increase the number of decoding iterations, LDPC codes performance will be improved; but when the number of iterations is large enough, then increase the number of iterations, LDPC codes will no longer reduce the error rate.

key words    LDPC codes    channel coding    matrix transformation    performance analysis    
 
目 录

摘 要    I
ABSTRACT    II
第1章 绪论    1
1.1 数字通信系统    1
1.2 信道编码理论及其发展    2
1.3 低密度奇偶校验码的提出、发展和现状    4
第2章 预备知识    7
2.1 线性分组码    7
2.2 信道容量和香农极限    12
第3章 LDPC码表示及编码    14
3.1 LDPC码的定义及其TANNER图表示    14
3.1.1 LDPC码的定义及其描述    14
3.1.2 LDPC码的Tanner图表示    15
3.2 二进制LDPC码的编码原理    16
3.2.1 H矩阵的构造    16
3.2.2  LDPC码的编码思想    17
第4章 LDPC码的译码思想    22
4.1 软判决译码算法    22
4.1.1 Tanner图解析法原理    22
4.1.2 SPA算法原理    24
4.1.3 对数域BP译码算法    27
4.1.4 最小和(Min-Sum)译码算法(改进的对数域BP译码算法)    28
4.2硬判决译码算法    29
4.2.1 Gallager的比特反转译码算法    29
4.2.2 改进的比特反转译码算法    30
4.3 优化的基于加权错误校验的LDPC比特反转算法(IWVBF)    31
第5章 程序流程分析    33
5.1 主程序    33
5.2 H矩阵生成    34
5.3 编码过程    35
5.4 译码过程    36
第6章 LDPC码的性能分析    37
6.1 码长对LDPC码性能的影响    37
6.2 列重对LDPC码性能的影响    37
6.3 迭代次数对LDPC码性能的影响    38
6.4 H矩阵变换方法对性能的影响    39
总结与展望    43
参考文献    44
致 谢    45
附 录    46

第1章 绪论
本章简要介绍了数字通信系统,并对系统中的每一部分进行了功能性说明,介绍了信道编码理论及其发展历程,最后概述了低密度奇偶校验码的提出、发展和现状。
1.1 数字通信系统
通信系统的基本目的在于将信息由信源高效、可靠、安全地传送到信宿。在信息传输的过程中,信道中的噪声会不可避免地对传输信息产生干扰,从而导致了可靠性的降低。所以,通信系统设计的核心问题在于如何克服信道中随机噪声对信号的干扰,减小信息传输产生的差错,同时在最大程度上保证信息传输的效率,即如何解决系统有效性和可靠性的矛盾。一般地,通信系统的可靠性用误比特率(BER)来衡量,其有效性则用信息传输速率R比特/信道符号来衡量。早期的人们普遍认为:通信系统的可靠性与有效性之间存在不可调和的矛盾,一方的改善总是以牺牲另一方为代价,并指出当功率受限时,在有扰通信信道上实现任意小错误概率的信息传输的唯一途径就是把信息传输速率降低至零。Shannon信息和编码理论的奠基性论文“通信的数学理论”于1948年发表之后,改变了这一观点。他首次阐明了在有扰信道上实现可靠通信的方法,指出实现有效而可靠地信息传输的途径就是通过编码。根据Shannon的信息理论,数字通信系统的基本组成如图1.1所示:

图1.1 数字通信系统的基本组成

图中,信源的作用为产生需要传送的信息,信息可以是模拟信号也可以是数字信号。如果是模拟信号,在进入数字通信系统之前需要进行采样和量化处理。
信源编码器的主要作用是将信源发出的信息,例如语音、图像或者是文字等原始的数据进行转化,在保证通信质量的前提下,尽可能的通过对信号的压缩,提高通信系统的有效性。以更少的符号来表示原始信息,使信息能够更好的在传输媒介中进行传输。
信道编码是在发送器和接收器之间实现信号可靠传输的必要手段之一。传输信道中存在的噪声必然会对传输的信息引入失真和信号判决错误,因此需要采用差错控制码来检测和纠正这些比特错误。信道编码器的主要作用是通过对信源编码后的信息加入冗余信息,使得接收方在收到信号后,可以通过信道编码中的冗余信息进行前向纠错,以保证通信系统的可靠性。
数字调制器的作用是使信息变成能够适应信道传输的信号。信号经过调制器后进入物理信道进行传输。典型的物理信道包括有线信道、无线信道、光纤信道、卫星信道等,针对不同的信道设计通信系统时要有不同的考虑,如无线信道会收到多径的影响而产生衰落,而卫星信道会受到信号功率衰减的影响等。
信号到达接收端后,通过数字解调器对接收到的调制信号序列或传输码字进行最优估计,然后输出数字编码序列送到信道译码器。信道译码器对信息进行估计和判决,估计准则是根据编码准则和信道特性而确定的,目的是最小化信道噪声的影响。最后信源译码器根据信源编码准则将得到的信道编码器输出的编码信息序列经过相应的信源译码后,得到对原始信息序列的估计。
1.2 信道编码理论及其发展
图1.1中的信道编译码部分是以特定的控制手段,引入适量冗余比特,以克服信息在传输过程中受到的噪声和干扰影响。根据Shannon提出的信道编码定理,对任意一个平稳离散无记忆有噪声信源,都有一个固定的量,称之为信道容量,记做C。只要信息的传输速率低于信道容量,就必然存在一种编码方法,使得信息出现差错的概率随码长的增加趋于任意小;反之,当信息传输速率超过信道容量时,则不存在这样的编码方法。这就是著名的信道编码定理,它给出了特定信道上信息传输速率的上确界。
信道编码定理:任意离散输入无记忆平稳信道存在信道容量,对预期的任一数据速率和任一错误概率,有可能设计一对编译码器,以保证该信道中速率为R的数据传输具有小于p的译码错误概率。
信道编码定理指出,在有扰信道中,只要信息传输速率小于信道容量,就有可能实现任意可靠的信息传输。这个存在性定理提醒我们可以实现以接近信道容量的传输速率进行通信。但遗憾的是该定理采用的是非构造性的证明方法,其中并没有给出逼近信道容量的码的具体编译码方法。
Shannon在信道编码定理的证明中引用了三个基本条件,即:
(1)、采用随机的编码方式;
(2)、码字长度趋近于无穷大;
(3)、译码采用最佳的最大似然译码。
一般可将信道编译码器所使用的纠错码从性能上分为坏码和好码。所谓坏码是指只有将码率降至零才能使误码率为任意小的编码方式;而好码又可以分为当误码率任意小时,码率逼近信道容量限的非常好码和码率可达到的非零最大值小于信道容量限的一般好码。虽然Shannon指出一个随机选择的码以很高的概率为好码,但随机码的最大似然译码的复杂度往往与码长呈指数关系,即在误码率随码长趋于无穷而趋向于零的同时,译码复杂度以指数增长,而在实际应用中,只能够使用以码长多项式的时间和空间复杂度内完成编译码的纠错码,因而尽管一般的随机码是好码,但不能看作是实用码。
自信道编码定理提出以来,如何构造一个逼近信道容量限的实用好码成了众多研究学者竟相研究的课题,并逐渐形成信息论的一个重要分支——信道编码理论。五十多年来,人们构造实用好码的探索基本上是按照Shannon所引用的基本条件的后两条为主线展开的。虽然从理论上讲,除了目前已知的码外,几乎所有的码都是好码,但到目前为止,构造出真正意义上的实用好码还有较长的距离。虽然如此,通过众多学者,特别是有关数学和信息论学术界的研究人员五十多年的共同努力,目前已经取得了很多成果。下面对其进行简要概述。
纠错码从构造方法上可分为分组码(Block Codes)和卷积码(Convolutional Codes)两大部分。在分组码方面,第一个分组码是1950年发现的能纠正单个错误的Hamming码;在整个50年代,基于代数理论又发现了多个短码长的分组码,如1954年Golay发现的Golay码以及Reed和Muller发现的RM码,Prange在1957年发现的循环码等。最有意义的是Bose和Ray-Chaudhuri在1960年及Hocuenghem在1959年分别独立发现的能纠正多个错误的BCH码,以及Reed和Solomon在1960发现的非二进制RS码。实际上,BCH码可以看作是某个RS码的子域子码,而RS码又可以看作是BCH码的特例。其后发现的分组码主要有1970年的Goppa码和1982年发现的代数几何码。在所有这些分组码中,除了Goppa码和代数几何码中存在个别达到GV限的渐进好码外,其它均不是好码。分组码的译码主要采用基于代数的硬判决译码。
卷积码最早由Elias提出,早期被称为树码(Tree Codes),现在称为格图码(Trellis Codes)或卷积码。卷积码具有动态格图结构,可用有限状态机来描述其状态。由于缺乏有效的理论研究工具,对卷积码的有效研究成果不是很多,目前性能好的卷积码的构造方法主要借助于计算机搜索来获得。卷积码的译码一般采用概率译码,由于译码算法的简单、实用和易于实现,卷积码被广泛应用于实际中。
1966年,Forney将分组码和卷积码结合起来,提出了级联码(Concatenated Codes)的概念。级联码一般采用RS码作为外码,卷积码作为内码。Forney的研究表明,级联码在性能得到较大改善的情况下,其译码复杂度并不显著增加。
根据对接收信号处理方式的不同,纠错码的译码可以分为硬判决译码和软判决译码。硬判决译码是基于传统纠错码观点的译码方法,解调器首先对信道输出值进行最佳硬判决,再将判决结果送入译码器,译码器根据解调器的判决结果,利用码字的代数结构来纠正其中的错误。而软判决译码则充分利用了信道输出的波形信息,解调器将匹配滤波器输出的一个实数值送入译码器,由于实数值包含了比硬判决更多的信道信息,译码器能够通过概率译码充分利用这些信息,从而获得比硬判决译码更大的编码增益。
总之,尽管随机码是理论上的好码,但由于其编码实现的困难性和无法承受的译码复杂度而只被用做理论分析的工具,在信道编码定理和后来的许多编码理论成果中,代数编码理论始终占据了主导地位,使得传统的信道编码技术受到临界速率(Critical Rate),也称做截止速率(Cutoff Rate)的限制。
1993年Turbo码的提出被看作是信道编码理论研究的重要里程碑。Berrou等人将卷积码和随机交织器相结合,同时采用软输出迭代译码来逼近最大似然译码,取得了超乎寻常的优异性能,并一举超越了截止速率,直接逼近Shannon提出的信道容量限。Turbo码是一种信道编码理论界梦寐以求的可实用非常好码,它的出现标志着信道编码理论研究进入了一个崭新的阶段。Turbo码成功的根本原因在于其实现方案中长码构造的伪随机性是核心,它通过随机交织器对信息序列的伪随机置换实现了随机编码的思想,从而为Shannon随机编码理论的应用研究奠定了基础。
随着Turbo码的深入研究,人们重新发现Gallager早在1962年提出的低密度校验码(Low Density Parity-Check Codes,简称LDPC码)也是一种具有渐进特性的非常好码,它的译码性能同样可以逼近Shannon信道容量限。由于LDPC码具有在中长码长时超过Turbo码的性能,并且具有译码复杂度更低,能够并行译码及译码错误可检测等特点,成为目前信道编码理论的研究热点。研究表明,Turbo码只是LDPC码的一个特例,两者都是基于图构造的低密度码,译码算法具有等价性,从而使两者在基于图模型的编译码研究中得到了统一。
1.3 低密度奇偶校验码的提出、发展和现状
1962年,Gallager在他的博士论文中提出了二元正则LDPC码,也被称做Gallager码。Gallager证明了这类码具有很好的汉明距离特性,是满足GV限的渐进好码,在计算树上进行(N为码长)次后验概率迭代译码可以获得依码字长度指数降低的比特错误概率,但限于当时的计算能力,缺少可行的译码算法,LDPC码被认为不是实用码,在很长一段时间内没有受到人们的重视。
1981年,Tanner在他的一篇奠基性的文章中正式提出了用图模型来描述码字的概念,从而将LDPC码的校验矩阵对应到被称为Tanner图的双向二部图上。采用Tanner图构造的LDPC码,通过并行译码可以显著地降低译码复杂度。Tanner还仔细分析了最小和算法(Min-Sum Algorithm)与和积算法(Sum-Product Algorithm)两种信息传递算法,证明了基于有限无环Tanner图的最小和译码算法与和积译码算法的最优性。但Tanner图在实际当中是采用随机图构造的,其中不可避免地存在小环路现象,这些小的环路会造成译码信息的重复传递,使译码过程中的消息之间不满足独立性假设,影响了迭代译码算法的收敛性。
Turbo码的发现重新引发了众多学者对LDPC码的研究兴趣。MacKay和Neal利用随机构造的Tanner图研究了LDPC码的性能,发现采用和积译码算法的正则LDPC码具有和Turbo码相似的译码性能,在长码时甚至超过了Turbo码,这一结果引起了信道编码界的极大关注。此后,Davey和MacKay从减少Tanner图上小环路的概念出发提出了基于的LDPC码,进一步提高了LDPC码的译码性能。
在MacKay和Neal重新发现LDPC码优异性能的同时,Spielman和Sipser提出了基于二部扩展图的扩展码。在对扩展码的研究中,他们证明了一个随机构造的Tanner图以很大的概率为好的扩展图,而由好的扩展图构造的线性纠错码是渐进好码,从而证明了采用随机Tanner图构造的LDPC码以很大概率是渐进好码。Luby等人将采用非正则Tanner图构造的扩展图用于删除信道,称之为Tornado码。由于采用了非正则的Tanner图,Tornado码具有更大的扩展性和更好的收敛性,纠删性能更强。此后,采用优化度序列设计的非正则Tanner图被用于构造LDPC码,称为非正则LDPC码,与正则LDPC码相比,非正则LDPC码的性能得到显著的提高。
同时,Wiberg结合Turbo码和网格图的研究,将Tanner 图推广到包含隐含状态变量的因子图(Factor Graph),对Turbo码和LDPC码的研究在因子图的基础上得到统一。Wiberg对因子图的研究发现,对任意给定系统,无环图的状态复杂度是最大的,有环图的状态复杂度则会大大降低,从而证明了基于有环Tanner图的LDPC码具有较低的译码复杂度。Wiberg同时还证明了最小和算法和和积算法在本质上的同一性,在格图译码中,最小和算法退化为Viterbi译码算法,和积算法退化为BCJR译码算法。
近两年,Richardson等人应用密度进化理论来测度LDPC码的性能。Richardson等人在对LDPC码的研究中发现,译码信息的迭代传递过程中存在着译码阈值现象,即当信噪比大于译码阈值时,迭代译码可使误码率趋于零,反之无论采用多长的LDPC码,经过多少次迭代译码,总存在一定的错误概率。应用中心极限定理,Richardson等人证明了有限随机有环图的译码阈值可以逼近无环图的译码阈值。通过建立在无环图上的密度进化理论,可以精确地计算无环图上LDPC码的译码阈值,分析其译码收敛条件,从而近似估算有环Tanner图上LDPC码的性能。研究表明,译码阈值的大小与LDPC码的构造参数密切相关,采用优化度序列设计的非正则LDPC码可以有效地改善阈值,因此密度进化理论可以用于指导LDPC码的优化设计。
Chung等通过对密度进化理论的研究,进一步提出了应用高斯逼近原理来简化译码阈值计算和收敛性分析,从而使测度LDPC码性能的模型由多参数动态系统的密度进化理论模型简化为单一参数动态系统的高斯逼近模型。
 
第2章 预备知识
本章以汉明码为例,介绍了线性分组码的一般原理,并以此为后文中LDPC码的编码原理及程序中编码算法设计打下理论基础,同时通过对线性分组码的分析介绍,形象地表现了信道编解码过程中的纠错检错过程。此外,还对信道容量以及香农极限进行了说明。
2.1 线性分组码
在第一章中已经提到,信道编码的目的是提高信号传输的可靠性。信道编码是在经过信源编码的码元中增加一些多余的比特,目的在于利用这些特殊的多余比特去发现或纠正传输中发现的错误。在信道编码只有发现错码能力而无纠错能力时,必须结合其他的措施来纠正错码,否则只能将发现为错码的码元删除,以求避免错码带来的负面影响。
在线性分组码中,使用线性代数方程来决定监督位与信息位之间的关系,所谓监督位即在码元中添加的冗余比特。线性分组码的构造方式较为简单、理论较为成熟。本章以汉明码为例介绍线性分组码的一般原理。这种编码方法是由汉明(R. W. Hamming)与1950年提出的。
汉明码是一种能够纠正一个错码的效率较高的线性分组码。对于偶数监督码而言,在接收端解码时,实际上就是在计算下式: 
        (2-1)
若计算出的S=0,就认为无错码;若计算出的S=1,就认为有错码。现在将式(2-1)成为监督关系式,S为校正子。由于校正子是一个二进制数字,他只有两种取值,故只能表示有错和无错,而不能进一步的指明错码的位置。不难推想,若此码长增加一位,即有两个监督位,则能增加一个类似式(2-1)的监督关系式。这样就能得到两个校正子。两个校正子的可能取值有4种组合,即00,01,10,11,故能表示4种不同的信息。若用其中一种组合表示无错码,则还有其他3种组合可以用于指明一个错码的3个不同位置。因此,若有r个监督关系式,则r个校正子可以指明一个错码的()个不同的位置。只有当校正子可以指明的错码位置数目等于或大于码组长度n时,才能够纠正码组中任何一个位置上的错码,即要求: 
        (2-2)
下面通过一个例子来说明如何具体构造监督关系式。要求设计一个能够纠正1个错码的分组码(n,k),给定的码组中有4个监督位,即k=4.由式(2-2)可知,这时要求监督位数。若取,则。现在用表示这7个码元,用表示校正子,这三个校正子恰好能够指明个错码的位置。例如,可以按照表2.1所示规定校正子和错码位置的关系。当然,也可以做其他的规定,这不影响讨论的一般性。
表2.1 校正子和错码位置关系
    错码位置        错码位置
001        101    
010        110    
100        111    
011        000    无错码
由此表可见,仅当在位置上有错码时,校正子的值才等于1;否则的值等于0。这意味着4个码元构成偶数监督关系:
        (2-3)
同理,构成如下偶数监督关系:
        (2-4)
以及构成如下偶数监督关系:
        (2-5)
在编码时,信息位的决定于输入信号,他们是随机的。监督位是按照监督关系决定的,应该保证上列3个式子中的校正子等于0,即有:
        (2-6)
上式可改写为:
        (2-7)
若信息位的值给定,则可以根据上式计算出监督位的值。这样计算出的结果见表2.2。
表2.2 监督位计算结果
            
0000    000    1000    111
0001    011    1001    100
0010    101    1010    010
0011    110    1011    001
0100    110    1100    001
0101    101    1101    010
0110    011    1110    100
0111    000    1111    111
在接收端解码时,对于每个接收码组,先按式(2-3)至式(2-5)计算出校正子,然后按照表2.1判断错码的位置。例如,若接收码组为0000011,则按式(2-3)至式(2-5)计算得到:。这样,由表2.1可知,错码位置在。
按照上述方法构造的码成为汉明码。上面例子中的汉明码是(7,4)码,其最小码距。由式(2-4)和式(2-5)可知,此码能够检测2个错码,或纠正1个错码。汉明码的码率可以由式(2-2)取等号时的值得出: 
         (2-8)
当r或n很大时,上式趋近于1.所以汉明码是一种高效编码。
在讨论上面实例的基础上,现在介绍线性分组码的一般原理。前面已经说明,线性分组码的监督位和信息位的关系是由一组线性代数方程决定的。式(2-6)就是这样的方程式,将此式改写成下列形式:
        (2-9)
在上式中已经将简写成。代表模2加法。式(2-9)可以改写成如下的矩阵形式:
        (2-10)
将上式改写为:
     或     (2-11)
式中
    ,, (2-12)
上标“T”表示将矩阵转置,即将矩阵的第一行变为矩阵的第一列,将矩阵的第二行变为矩阵的第二列……
我们将上式中的H称为监督矩阵。监督矩阵给定后,码组中的信息位和监督位的关系就随之确定了,比较式(2-9)和式(2-10)可以看出,H的行数就是监督关系式的数目,即监督位数r。H的每行中各个“1”的位置表示相应的码元参与监督关系。例如,H的第一行1110100表示监督位是由之和确定的。式(2-11)中的H可以分为如下两部分:
        (2-13)
式中,为阶矩阵,为阶单位方阵。我们将如上式形式所表示的监督矩阵称为典型监督矩阵。
由代数理论可知,H矩阵的各行应该是线性无关的,否则将得不到r个线性无关的监督关系式,从而也得不到r个独立的监督位。若一个矩阵能够写成典型阵形式,则其各行也一定是线性无关的。因为容易验证,的各行是线性无关的,故的各行也是线性无关的。
式(2-7)也可以仿照式(2-9)的做法,写成如下矩阵形式:
        (2-14)
上式两端分别转置后,可以变成:
        (2-15)
式中,Q为阶矩阵,是P的转置,即:
        (2-16)
式(1-15)表示,在信息位给定后,用信息位的行矩阵乘以矩阵Q就得出监督位。
我们将Q的左边加上一个k阶单位阵,构成如下矩阵:
        (2-17)
G称为生成矩阵,因为可以用它产生整个码组A,即有:
        (2-18)
具有形式的生成矩阵成为典型生成矩阵。由典型生成矩阵得出的码组A中,信息位的位置不变,监督位附加于其后。这种形式的码组称为系统码。
比较式(2-13)和式(2-17)可见,典型监督矩阵H和典型生成矩阵G之间通过式(2-16)联系。
与对矩阵H的要求相似,矩阵G的各行也必须是线性无关的。因为由式(2-18)得知,任意一个码组A都是G的各行的线性组合。G共有k行,若他们线性无关,则可以组合出种不同的码组,这恰好是有k位信息位的全部码组。若G的各行中有线性相关的,则不可能生成种不同的码组了。实际上,G的各行本身就是一个码组。因此,如果已有k个线性无关的码组,则可以将其用作生成矩阵G,并由它产生其余的码组。
一般来说,式(2-18)中的A是一个n列的列矩阵:
        (2-19)
它的n个元素就是码组中的n个码元。所以发送码组就是A。由于传输中的干扰影响,接收码组可能出现错码而有别于A。设接收码组是一个n列的行矩阵:
        (2-20)
令接收码组和发送码组之差为:
      (模2)    (2-21)
E就是错码的行矩阵,有时还称其为错误图样:
        (2-22)
式中,。因此,若,则表示该码元未错;若,表示该码元为错码。式(2-21)还可以改写成:
        (2-23)
上式表示发送码组A与错误码组E之和等于接收码组B。例如,若发送码组,错码矩阵,则接收码组。
    在接收端解码时,令式(2-11)中的A等于接收码组B进行计算。若接收码组B中无错码(),由式(2-23)得知,,则式(2-11)仍成立。这时有:
        (2-24)
当接收码组中有错码时,,此时将B代入式(2-11)后,该式不一定成立。此外,在错码较多并超出这种编码的检错能力时,B可能变为另一个许用码组,故式(2-11)仍有可能成立。这时的错码将是不可检测的。所以只有当错码未超出检测能力时,式(2-24)才不成立。假设,这时式(2-24)的右端等于S,即有:
        (2-25)
将式(2-23)代入(2-25),得到:

由式(2-11)可知,上式右端第一项等于0,所以:
        (2-26)
式中,S就是由式(2-1)中的校正子S构成的矩阵,所以也成为校正子,它同样可以用来指示错码的位置。当H确定后,式(2-26)中,S只与E有关,而与A无关。这意味着S和错码E之间有确定的线性变换关系。若S和E有一一对应关系,则S将能代表错码位置。
    线性码有一个重要性质,就是它具有封闭性。封闭性是指一种线性码中任意两个码组之和仍为这种编码中的一个码组。下面对此做一简单证明:
    若和是两个码组,则由式(2-11)有:
   
将以上两式相加得:
        (2-27)
所以也是一个码组。由于线性码具有封闭性,所以两个码组和之间的距离(即对应位不同的数目)必定是另一个码组的重量(即“1”的数目)。因此,码的最小距离就是码的最小重量(除全“0”码组外)。
2.2 信道容量和香农极限
信道容量表示一个信道下可靠传输的最大信息传输速率。不同的信道,噪声的存在形式不同,信道带宽以及信号的各种限制不同,因而信道容量也不相同。香农在其文章中定义的信道容量为: 
         (2-28)
    X和Y分别代表信道的输入和输出,是X的概率密度函数;是X和Y的互信息量;H(X)是信源熵;H(Y/X)为信道条件熵,即因为信道噪声而造成的信息损失熵。
    对于宽带无限的加性高斯白噪声(AWGN)信道,信道容量为: 
         (2-29)
是传输信号的平均功率,为高斯白噪声的功率谱密度。
    对于带宽为W,信号平均功率为的带限AWGN信道,信道容量为: 
         (2-30)
式(2-30)即为著名的香农信道容量公式。
    对于低密度码的研究,需要涉及到输入离散、输出连续的AWGN信道。由于只有输入符号均匀分布时才能使互信息量达到最大,因此假设输入符号的概率密度函数为: 
         (2-31)
即: 
         (2-32)
    对于AWGN信道可得: 
         (2-33)
         (2-34)
将式(2-33)和(2-34)代入式(2-28)有
         (2-35)
    R表示码率,表示传输每一个比特所需要的能量,与关系为。因为式(2-35)无法求出解析解,故智能采用数值仿真的方法近似求解。同时需要根据y的特点对其积分区域进行缩减,于是得到: 
         (2-36)
其中
当传输错误概率时,得到的Shannon极限为
         (2-37)
可以看出这与理想AWGN信道的Shannon极限是完全一致的。
    我们知道在实际研究中,R是不可能趋近于0的。所以利用式(2-36),再考虑满速率传输的情况(R=C),就可以得出不同的R下达到信道容量极限时所需的做小信噪比,如图2.1所示。
 
图2.1 二进制AWGN的信道容量
上图给出了不同编码速率R下二进制AWGN信道的信道容量。可以看出,当评估某一信道编码的性能时,不能直接用它的性能和一般意义下的Shannon极限(-1.6dB)进行比较,而应该根据它的码率在达到实际信道容量时所需的最小信噪比,并用来和其性能做比较,这样才更合理。下表列举出了一些常见码率下所对应的最小信噪比值。
表2.3 不同码率条件下AWGN信道的最小信噪比
码率(R)    最低信噪比(dB)
8/9    3.003
4/5    2.040
2/3    1.060
1/2    0.187
1/3    -0.495
0    -1.6
 
第3章 LDPC码表示及编码
本章系统地概述了LDPC码的定义及其Tanner图表示,以及二进制LDPC码的编码原理。
3.1 LDPC码的定义及其Tanner图表示
3.1.1 LDPC码的定义及其描述
一个码长为n、信息位个数为k的线性分组码可以由一个生成矩阵来定义,信息序列通过G被映射到码字。线性分组码也可以由一个一致校验矩阵来等效描述,所有码字均满足。校验矩阵每一行表示一个校验约束,其中所有非零元素对应的码元变量构成一个校验集,用一个校验方程表示;校验矩阵的每一行表示一个码元变量参与的校验约束,当列元素不为零时,表示该码元变量参与了该行的校验约束。码元变量与检验方程之间的关系成为结构。下面主要对二元LDPC码进行讨论。
LDPC码是一种线性分组码,它的名字来源于其校验矩阵H的稀疏性,即校验矩阵中只有数量很少的元素为“1”,大部分都是“0”。Gallager最早给出了正则LDPC码的定义,具体来讲正则LDPC码的校验矩阵H满足下列三个条件:
(1)、H的每行有个“1”;
(2)、H的每列有个“1”,;
(3)、与码长和H矩阵的行数相比,和都很小。
 
图3.1 (20,3,4)LDPC码的校验矩阵
矩阵H的每列各自包含个“1”,表示每个码元变量受到相同数目的校验约束;每行也各自包含个“1”,表示每个校验方程对相同数目的码元变量进行校验约束;由于和都很小,校验矩阵具有很低的“密度”,因此由校验矩阵所确定的码称为LDPC码。Gallager证明了当时,这类码具有很好的汉明距离特性。正则LDPC码通常用来表示,其中n为码长,和的含义不变,图3.1给出了一个(20,3,4)正则LDPC码的校验矩阵。
当校验矩阵H各行(列)中“1”的个数不全相同时,就得到了非正则LDPC码。
3.1.2 LDPC码的Tanner图表示
设一个正则LDPC码C具有校验矩阵,其对应的Tanner图模型可以表示为一个二部图。其中码字向量表示为一组比特节点,分别对应于校验矩阵的各列,而校验约束则表示为一组校验节点,对应与校验矩阵的各行。仅当时,比特节点与校验节点之间有一条边相连,节点与之间互称邻接节点,其间的连接边称为两个节点的邻接边。对于正则LDPC码,每个比特节点与个个校验节点相连,称该比特节点的度为;每个校验节点与个比特节点相连,称该校验节点的度为,度表示与节点相连的边的数目。图3.2给出了图3.1所示校验矩阵对应的Tanner图结构。
 图3.2 (20,3,4)LDPC码的Tanner图表示
    根据比特节点与校验方程之间的约束关系可以得知,Tanner图中中所有比特节点发出的边的数目必然等于所有校验方程所接收的边的总数。那么对于LDPC码(n,j,k),若假设m为校验方程的个数,即校验矩阵H的行数,则以下等式必然成立:
        (3-1)
    对于非正则的LDPC码,每个校验方程约束的比特节点数目不一样,同时每个比特节点受约束的校验方程的数目也不一样。反映在Tanner图中就是每个点(比特节点和约束节点)所连接的边的数目是不完全相同的。这样一种不规则的LDPC码在码长很大的时候性能要比正则的LDPC码好,这是由于“波浪效应”(Wave Effect)所致。一部分比特节点受到约束的校验方程数目比较多,即收到的约束度比较高,那么其正确译码的速度也相对比较快;以此同时,这些约束度较高的点也为其他约束度较低的点提供了更为准确的译码外信息,最终使得所有比特节点正确译码的速度更快。又因为校验矩阵H中每行和每列1的个数不同,所以不能再用(n,j,k)的方式来进行表示。为了准确地表达一个非正则的LDPC码,我们引入如下表达式: 
         (3-2)
    其中表示比特节点的度的分布,表示校验节点的度的分布;满足 及 。
    正则LDPC码可以看成是非正则LDPC码的特例,对于(n,3,4)形式的正则LDPC码,相应边的度分布多项式分别退化为。
3.2 二进制LDPC码的编码原理
3.2.1 H矩阵的构造
由于LDPC码是以校验矩阵H为特征的,不同的校验矩阵H对应了不同的码字集合。因此,LDPC码的编码首先要设计校验矩阵H,同时这也是LDPC码编码的关键。
对于规则的LDPC码(n,j,k),在码长n一定的情况下,主要的参数选择则为j和k。目前的研究结果表明,性能最好的规则LDPC码是(n,3,6)码。根据式(3-1)可知,参数n,j,k确定后就可以得到校验方程的数目m,那么H矩阵的大小就可以确定为。LDPC码校验矩阵H的一般构造步骤如下:首先生成一个的全0矩阵,然后随机地将每列中的j个0置换成1,每行当中的k个0置换成1。但是在随机置1的过程中,有两种情况是必须要避免的:
(1)、出现长度为4的环
在LDPC码校验矩阵H中有一个很重要的概念:H矩阵的最小围长(girth),即通常说的环。H矩阵中的4环结构示意图如下:
 
图3.3 H矩阵中的4环结构
其对应Tanner图如下:
 
图3.4 Tanner图中的4环结构
当H矩阵中出现长度为4的环时,其结构会导致消息在两组点之间的反复传递,而难以得到更新,与迭代译码的思想初衷所违背,是必须清除的一种结构。我们另外做简单的解释,例如在图3.3所示的H矩阵中,存在一个4环结构,于是这个4环对应的校验方程为:
        (3-3)
        (3-4)
由于4环的存在,我们可以看到,上面两个校验方程含有共同的比特节点与,直观的说,如果这两个校验方程均出错,则我们无法确定与中究竟是哪个出错。从这个角度可以说明小循环对性能带来的影响。所以我们在矩阵H矩阵时要避免4环以及短环的存在。理论分析表明,最小环的长度为6的情况下,码字的最小距离为4。而随机构造的LDPC码的最小距离是随着分组长度,即码长的增加而线性增加的。
(2)、比特节点所连接的校验方程过于集中
当比特节点所连接的校验方程过于集中时,常常导致LDPC码错误地板的发生。例如在图3.5中,比特节点的度为3,但其中三个带阴影的比特节点总共只连接了5个校验方程;除了最右边的一个校验方程外,其它4个校验方程中,每个都连接了两个阴影的比特节点。因此,如果这三个阴影的比特节点都出错时,左边的四个校验方程都不能检测到错误的存在。而当分组长度增大时,出现这种拓扑结构的可能性会随之减少。
 
图3.5比特节点所连接校验方程过于集中的Tanner图
对于不规则的LDPC码其H矩阵的构造也遵循上述两个原则,不同的是校验矩阵H每行和每列中1的个数不再相同。在最早提出的不规则LDPC码中,比特节点和校验节点的度都是不均匀的,即校验矩阵H中每列,每行1的个数都不相同,但实际仿真结果表明,这种双边不均匀的情况并非最佳方案。实际的应用方案是让比特节点的度(即校验矩阵H中每列I的个数)变化比较大,而保持校验节点的度(即校验矩阵H中每行1的个数)比较平均.其中约束度比较大的比特节点称为优先点。在迭代译码过程中,优先点首先被正确译码的概率是最大的.如何分配这些优先点,让哪些校验节点连接更多的优先点,是不规则LDPC码的一个研究方向。
3.2.2  LDPC码的编码思想
1、传统编码方法
这种编码方法需要先将H矩阵进行变换得到一个生成矩阵G,然后利用信息序列与生成矩阵相乘进行编码。下面我们首先给出两个引理来说明校验矩阵经过高斯变换不会影响编码结果。
引理1 设LDPC码的校验矩阵为,其中表示的是第k列的列向量,信息序列S编码后生成的码字为,如果将H矩阵的第i列和第j列进行交换得到,则,原信息序列经过此新的校验矩阵编码后所得的码字为,即将原码字的第i个和第j个位置交换后得到新的码字。
    证明:
    由LDPC码校验矩阵和码字间的正交关系可得,即,所以。所以对校验矩阵进行列变换,得到的新码字也是对原码字进行同样位置的列变换。在编码时,只要记录下校验矩阵列变换的动作,对新校验矩阵下得到的码字进行同样位置的置换即可以得到原校验矩阵所对应的码字。
    引理2 使用高斯消元法对H矩阵进行行变换(即把H矩阵某一行按照模2相加到另一行上)不影响编码结果,变换所得的矩阵与原矩阵具有等价性。
    证明:
    在Tanner图中可以看出,把H矩阵的第i行按照模2相加到第j行上,在Tanner图上即是从节点添加边到所有与相连的节点上,如果已经与该比特节点相连,则把该连接删掉。设分别表示原来与校验节点相连的所有比特节点的集合,表示的交集,表示与变换后的校验节点相连的比特节点的集合;符号表示按模2进行累加,“+”表示按模2 进行相加,表示第k个比
特节点的值,由LDPC码的定义可得及,则有:
         (3-5)
即,原来的码字仍可满足新校验矩阵的校验关系,所以,H矩阵进行行行变换不影响编码结果。
    下面介绍传统编码的基本理论和一般过程。
    设信息源为s,则编码生成的码字。这种编码方式是由最基本的原理推得的。当分组长度为n时,编码复杂度为,在移动通信中这种传播时延对于语音通信是不能忍受的。计算复杂度也会使得存储器的数量过多,影响通信成本。为了简化计算,数学家们设计了很多简便算法。但是这些算法要求校验矩阵H具有相应的特殊形式。
    由编码理论可知,具有系统形式的校验矩阵H对应的生成矩阵G也具有系统形式,得到的码字U也是具有系统形式的码字。现在假设编码前的信息为s,编码后的校验位为c,编码后信息位s位于码字U的后部,即;假设校验矩阵H的大小为,并具有系统形式,其中A是一个的单位矩阵,B是一个的矩阵。运用编码理论即矩阵运算可以得到下列等式:
        (3-6)
    由此等式可得到:,因为A为单位矩阵,故又可以简化为:。
    这种编码方式要求校验矩阵H具有系统形式,但却是以牺牲LDPC码的稀疏性为代价的。因为系统形式的校验矩阵H要求具有一个的单位矩阵,这必然使得校验矩阵H中的其余部分必须承担余下的所有“1”元素,从而使得这部分显得比较密集,并不能很好的达到LDPC码原本所要求的稀疏性。这在一定情况下提高了LDPC码编码的复杂度。
2、基于下三角形式校验矩阵的编码方法
    Mackey等证明,LDPC码要在线性时间内完成编码,则其校验矩阵具有如图3.6所示的下三角的形式,并建议在构造校验矩阵时加入某些约束,使得构造出的校验矩阵具有下三角的形式。但是,如果在构造校验矩阵时加入某些约束,就违背了Shannon在证明信道编码时引入的随机性原则,从而降低了码的性能。所以,既要保持随机性原则,又要在线性时间内完成编码成了LDPC码发展的一个障碍。
 
图3.6 校验矩阵的的下三角形式
基于此T.J.Richardson和R.L.Urbanke提出了Efficient快速编码方法。Efficient编码方法的基本思想是利用LDPC码校验矩阵稀疏性的性质,对校验矩阵进行行列置换,使得校验矩阵具有特定的形式,这中特定的形式使得编码能够在先行时间内完成;基于下三角形式校验矩阵的编码方法、基于近似下三角校验矩阵的编码方法就是其中代表形式。
在基于下三角形式校验矩阵的编码方法中,由于仅仅对校验矩阵进行行列置换,所以校验矩阵的稀疏性并没有被破坏,这样在线性时间内完成编码是毋庸置疑的。下面讨论具体的操作流程:
若LDPC码的校验矩阵具有如图3.6所示的下三角形式,在图中斜线上全为“1”,而其余的“1”均在斜线的左边,则可以采用迭代的方式进行编码。设码字向量为,将其分为两部分,即信息位向量和校验位向量,即,则该编码的过程可具体描述为:
(1)、直接将信息比特的值赋给信息位向量S;
(2)、采用后向迭代确定所有校验位的值,即对所有的从小到大依次计算下式: 
         (3-7)
其中表示校验矩阵中第i行,第j列上的元素。
    实际上,该编码过程就是在从上到下依次利用校验矩阵的各行校验约束关系。对于每一个校验约束关系,其中涉及的变量除斜线上的“1”所对应的校验位外,其余的变量要么是信息位,要么就是前面已经求出的校验位,也就是说,该校验约束关系中只有一个未知变量,因此可以很容易求得相应校验位的值。
    设校验矩阵经过变换成为下三角形式后的平均行重为m,则整个编码约需要m(n-k)次与运算,(m-1)(n-k)次异或运算,当m相对于n可以看作很小的常数时,该编码方法就具有线性的复杂度。
3、基于近似下三角形式校验矩阵的编码方法
    基于近似下三角结构的编码方法可以看作是基于下三角结构的编码方法的改进。该方法的编码处理过程分为两部:预处理过程和实际编码过程。预处理过程是一个离线计算,对于一个给定的码字只需要做一次计算,但实际编码过程主要是针对传输数据的处理部分。
    在变换算法中,假设输入信息比特部分为s,编码获得的校验比特部分分为和,则码字,满足。我们把校验矩阵进行行列重排,若能直接化为下三角矩阵,则编码可以线性实现。通过行列变换我们把校验矩阵化成如下的近似下三角矩阵:
        (3-8)
该矩阵形状如下:
 
图3.7 校验矩阵的近似下三角形式
将校验矩阵左乘如下矩阵
        (3-9)
得到
        (3-10)
那么可以分解为如下两个表达式:
        (3-11)
        (3-12)
定义,并且假设非奇异,则求解上面两式可得:
        (3-13)
        (3-14)
通过如上两个公式可以计算校验信息和,从而得到码字。
 
第4章 LDPC码的译码思想
    LDPC码的译码算法大致分为:软判决译码、硬判决译码和混合判决译码。他们有着各自不同的纠错性能和译码复杂度。软判决译码算法性能最优,纠错性能最好,但是运算复杂度也最高,其经典算法就是置信度传播(Belief Propagation, BP)算法。Gallager提出的比特反转(Bit-Flipping, BF)译码算法是一种硬判决译码算法,运算最为简单 ,复杂度低,但是纠错性能也较低。混合判决译码算法,其纠错性能和译码复杂度都在BF算法和BP算法之间。
    下面将分别介绍三种类型的译码算法,分析它们的译码原理和性能。
4.1 软判决译码算法
    置信度传播译码算法(BP译码算法)是最经典的LDPC码软判决译码算法之一。核心思想是利用Tanner图中的比特节点和校验节点之间的约束关系,在两种节点之间来回传递并且更新置信度信息,最终实现解码。和积算法(Sum-Product Algorithm, SPA)作为一种通用的消息传递算法最早由Gallager提出,具体来说就是针对某一个比特节点进行解码时,从它所参与的校验方程那里得到判决信息,再综合在解码端接收到的软判决信息进行最后的判决。而校验方程的信息又是从参与该校验方程的其他比特节点得到信息的。
4.1.1 Tanner图解析法原理
    上面介绍的SPA算法原理可以用Tanner图来演示。
 
图3.8 Tanner图
如图3.8所示,其中x1~x6为比特节点,f1~f3为校验节点。设y1~y6为接收到的消息。Tanner图中比特节点和校验节点之间的连线看作是信息传递的路径。初始化过程可以表示如下:
 
图3.9 初始化过程
    (1)、比特节点x1将从它所连接的多个非f3校验节点那里得到的信息及原始信息的总和传递给校验节点f3,用于修正校验节点f3的信息。在Tanner图上示意如下:
 
图3.10 校验节点的信息更新(x1f3)
    (2)、校验节点f3将从它所连接的多个非x1比特节点那里得到的信息传递给比特节点x1,x1得到的是该比特节点的后验信息,凭此来修正比特节点的判决信息。在Tanner图上示意如下:
 
图3.11 比特节点的信息更新(f3x1)
(3)、比特节点x1综合从信道直接得到的信息和从与之相连的校验节点得到的信息做出判决。在Tanner图上表示如下:
 
图3.12 比特节点x1的信息判决
4.1.2 SPA算法原理
现在我们对SPA算法的原理进行说明。
令表示与校验节点j相连的比特节点的集合,记为
表示除i外,与校验节点j相连的比特节点的集合;
表示与比特节点i相连的校验矩阵的集合,记为;
表示除j外,与比特节点i相连的校验节点的集合;
表示包含的第j个校验方程中的第k个比特;
表示对应于的接收值;
表示接收到后判断发送比特为的后验概率;
表示接收到后判断包含的第j个校验方程中的第k个比特为的后验概率;
表示码字中的比特节点使得包含的所有校验方程都满足;
表示第i个比特节点传递给第j个比特节点的认为是的外部概率信息,即在得到所有校验节点和信道信息后,判断的概率;
,假设,表示校验节点j传递给比特节点i的外部概率信息,即在给定信息位及其它信息位具有独立概率分布条件下,第j个校验方程满足的概率。
如果收到的码字中某一比特为b,那么定义码字满足校验方程的后验概率为。
首先我们引入三个结论:
(1)、考虑一个二进制序列,其中。
可以证明,a中含有偶数个1的概率为:
         (4-1)
a中含有奇数个1的概率为:
         (4-2)
(2)、假设信道为离散无记忆信道,则接收到的信息序列中的各个采样值独立,可以计算得到给定接收到的码字和校验事件下比特节点的后验概率:
         (4-3)
假设,由结论1可得,该校验方程满足的概率是:
         (4-4)
对于的情况可类似得到。由于假设之间相互独立,所有个校验比特都满足的概率是:
         (4-5)
根据前面对的符号的定义,可以得到如下的计算公式:
         (4-6)
         (4-7)
根据上面两个式子以及结论,则有:
         (4-8)
同样地,根据前面对的符号的定义,可以得出下面的公式:
         (4-9)
         (4-10)
(3)、信道编码器产生的码字经过调制然后送入信道,这里采用AWGN信道和BPSK调制,接收端得到的接收序列可以写成。是0均值且方差为的高斯分布,满足0,1等概率分布,由此可得AWGN信道下比特节点初始概率信息的计算公式为:
         (4-11)

         (4-12)
SPA算法原理执行过程如下:
(1)、概率信息初始化
根据信道接收信息y,利用公式(4-12)计算每个比特节点的初始概率和。
         (4-13)
         (4-14)
(2)、校验节点的概率信息处理
每个比特节点i将自身的概率信息传递给它参与的所有校验节点,计算第j个校验节点从第i个比特节点处获得的信息。
         (4-15)
         (4-16)
(3)、比特节点的概率信息处理
每个校验节点j将自身的概率信息传递给参与它的所有比特节点,计算第i个比特节点从第j个校验节点处获得的信息。
         (4-17)
         (4-18)
其中是常数因子,使得
(4)、判决
         (4-19)
         (4-20)
是常数因子,使得
根据比特i的概率值可以判决为:若,则,否则。
如果或者达到最大译码次数,则终止译码,否则跳转到步骤(2)继续进行迭代译码。
不难看出,在这个算法中有大量的高复杂度的实数操作,并且需要存储大量的中间过程的数据。由于对数操作可以将实数乘法运算转换成实数加法运算,所以为了降低解码复杂度,可以将上面的解码过程转化到对数域实现。
4.1.3 对数域BP译码算法
首先定义对数似然比LLR(Log-APP-ratio):
         (4-21)
据此定义如下一系列LLR表达式:
     
对数域BP算法译码过程如下:
(1)、似然信息初始化
         (4-22)
(2)、校验节点的似然信息处理
将概率域传递公式(4-16)重写为:
     
对它做等式变换,得到:
         (4-23)
利用恒等式 的特性 对(4-23)变换得:
     

     
令 , ,则可以得到对数域计算校验节点似然信息的表达式为:
         (4-24)
(3)、比特节点的似然信息处理
     
即对数域计算比特节点似然信息的表达式为:
         (4-25)
(4)、判决
利用本次迭代过程中每个比特节点从校验节点处获得的似然信息,再加上从信道输出数据得到的初始似然信息,计算新的似然信息值。
         (4-26)
根据比特i的似然值可以判决为:若,则,否则。
如果或者达到最大译码迭代次数,则终止译码,否则跳转到步骤(1)继续执行迭代过程。
4.1.4 最小和(Min-Sum)译码算法(改进的对数域BP译码算法)
重写对数域BP译码算法的公式(4-24)如下:
 
利用函数 的性质 ,可将上面的表达式简化为 。
 的函数特性如图所示:
 
图3.13 函数 与变量x的关系(x≥0)

根据 的函数特性可以做如下简化处理:
 
于是可以得到下列公式:
         (4-27)
其他操作步骤同前。这就是最小和算法,由J.Chen和M.Fossorier等在1999年提出。在LDPC码的列重不太大并且码长不太长的时候,这种算法能够达到较好的性能。这样的简化处理省去了累乘运算,降低了运算复杂度。
4.2硬判决译码算法
由Gallager提出的比特反转(Bit-Flipping,BF)译码算法是一种典型的硬判决译码算法,它的运算最为简单,复杂度最低,但是纠错性能较低。后来的研究人员在其基础上又提出了一系列改进的BF算法,改进的方向大致可以分成两个:3利用软信息对BF算法进行加权优化,第二类是利用校验矩阵的结构特点对BF算法加以改进。本节我们首先介绍Gallager最初提出的比特反转译码算法,然后阐述一下在此基础上的改进算法,并提出一种优化的基于加权错误校验的LDPC码比特反转算法。
4.2.1 Gallager的比特反转译码算法
Gallager的BF译码算法主要通过计算接受序列的伴随式S来进行解码。其译码原理为:先将从信道得到的译码器输入数据判决为“0”、“1”序列,把该序列代入低密度校验矩阵计算各个校验方程的结果,得到相应的错误伴随图样。据此可以找出使得校验方程不成立数目最多的比特节点,然后将比特节点反转,如果再次进行译码校验没有错误出现,则译码终止,否则在达到最大迭代次数前不断重复译码过程,直到所有的校验方程都成立。
设发送的码字序列为 ,BPSK调制后序列为 ,其中 ,接收到的硬判决序列为 ,LDPC码校验矩阵为 ,其中 。
可以计算码字的伴随式为:
         (4-28)
其中M=N-K。
若 ,则说明码字序列满足第i个校验方程,若伴随式S是全零向量,则说明码字无误。若伴随式S不是全零向量,则码字序列Z中一定有错误。按照式(4-29)计算码字序列中每个比特所参与的不满足校验方程数目。

(4-29)
找出F中最大的,反转对应的比特,然后重复上述过程。
综上,Gallager的BF译码过程如下:
(1)、根据式(4-28)计算码字序列Z所对应的伴随式S,若S=0,停止译码并输出Z,否则进入步骤(2)。
(2)、按照式(4-29)计算码字序列Z中每个比特所参与的不满足校验方程数目,并且找出参与错误错误方程数最多的比特。
(3)、反转步骤(2)中找到的比特,更新码字序列Z。
(4)、判断是否达到最大迭代次数上限,否则重复步骤(1)~(3)。
4.2.2 改进的比特反转译码算法
Gallager的BF译码算法非常简单,但是由于只利用了伴随式进行解码,丢失了较多的软信息,因此性能较差。后来的研究人员在其基础上又提出了一系列改进的BF译码算法。Chan等人借助一个“Taboo”函数来辅助每次迭代过程中反转比特的选择,防止同样的比特被反复反转;Kou等人提出了一种加权的BF译码算法;Zhang等人对此甲醛算法进行优化,进一步提升了性能;Dong等人也对BF算法进行了研究,并提出了基于加权错误校验的比特反转算法(Weighted Violation based Bit Flipping, WABF),这种算法较其他算法最大的区别是,它并没有利用任何软信息进行算法加权优化,同样实现了性能的提升,是一种纯粹的硬判决译码,因此实用性更强,一下做详细介绍。
假设校验矩阵 大小为 ,具有统一的列重和行重。 表示接收到的硬判决序列。则z的伴随式表示为 。令 表示第i个比特节点所参与的校验错误的方程数目; 表示校验错误的方程集合。第m个校验方程所含有的比特节点的集合表示为 。第n个比特节点所参与的校验方程的集合为 。
WVBF算法原理如下:
(1)、计算伴随式s。若s全为0,则停止译码。
(2)、计算 ,i=1,2,…,N。
(3)、对m=1,2,…,M,若 ,则计算 。
(4)、对m=1,2,…,M和i=1,2,…,N,若 并且 ,则计算 。
(5)、对i=1,2,…,N,若 ,则计算 。 越大,表示第i个比特节点出错的概率就越大。若 ,则 。
(6)、找到 最大的比特节点,并反转它。
重复(1)~(6),直到伴随式为全0,或者达到最大迭代次数。
4.3 优化的基于加权错误校验的LDPC比特反转算法(IWVBF)
在WVBF算法中,一次迭代只能反转一个比特。而译码的收敛所需的平均迭代次数和 有关(N为码长,p表示接收到的应判决序列的所有比特节点的错误概率),因此译码速率较低。在此提出一种优化的WVBF算法,它会在一次迭代中反转一组比特,大大降低了迭代次数,同时提高了译码性能。
设定一个判决门限t,t为相对于 恰当选择的一个大于0的实数。由于 在一次迭代中最多有 种可能的取值,很多比特的 都有可能超过门限,故可以将所有超过此门限的 所对应的比特在一次迭代中全部反转。因此WVBF算法中步骤(6)可以改进为:
若, ,则反转所有超过门限的比特节点。
直观看来,门限值高,很多错误的比特不能被反转,会引起误判以致性能下降;门限值低,一些正确的比特反被纠错,性能会更差。所以,恰当选择门限是关键。
改进算法的复杂度主要体现在原先算法的步骤(4)和步骤(6),在(4)中, 最多有 种可能的取值,我们可以在给定校验矩阵而译码过程未开始时先计算出这些可能的取值,并存储在查找表中。解码开始后遇到出发操作只需进行查找表操作即可。令 为每次迭代中错误的比特数目( 的均值为Np),WVBF算法在步骤(6)中,一次迭代中最多有 个比特满足 。而一次迭代值反转一个比特,因此需要( )次实数加法操作,IWVBF算法的步骤(6)在一次迭代中反转一组比特,大大降低了译码的迭代次数,因而复杂度较之WVBF算法要低。 
第5章 程序流程分析
为实现对LDPC码性能的分析,基于MATLAB编写了LDPC码的编译码程序。程序中主要包括主程序、H矩阵构建、H矩阵变换、LDPC编码、LDPC译码几个部分。本章主要内容为对程序的流程分析,以及部分函数功能的说明。
5.1 主程序
在本设计中,主程序中实现的功能主要有生成输入序列、生成H矩阵、编译码以及误码率计算、仿真结果输出。其中,生成H矩阵以及与编译码相关的功能通过函数调用的形式实现。在程序文件夹中,主程序对应ldpc_demo.m文件。
主程序的流程图如下:
 
图5.1 主程序流程图
下面对主程序中的部分函数加以说明:
1、原始信息序列的生成
主程序中,通过随机函数生成一个二进制序列作为整个程序中编码之前的原始信息序列,相关程序代码如下:
s=round(rand(1,cols-rows));
其中cols与rows分别为主程序中定义的H矩阵的列数和行数,cols-rows为序列的长度,当然序列的长度值可以由自己直接指定。rand()函数为随机函数,rand(a,b)表示生成a行b列的随机矩阵,矩阵的所有元素取值在0~1之间。round()函数为取整函数,round(a)表示对数值a中的小数部分按照四舍五入规则进行取整。
整体代码执行结果为:生成个长度为(cols-rows)的二进制序列。
2、误码率的计算(BER统计)
在本设计中,误码率的数值是由误码比特数除以整体序列长度得到的。在程序中的代码如下:
errmax=find(s~=uhat);
nerr=length(errmax);
BER=nerr/(cols-rows);
其中s为原始信息序列,uhat为译码后序列。 
整体程序段的执行结果为:逐个比特检索译码后序列与原始序列,求出两个序列中不相同的比特数nerr,最后用误比特数除以序列长度得出误码率。
3、调制与AWGN信道传输部分
在本程序中,为有效仿真通信系统模型,将编码后的序列执行bpsk调制后进行AWGN信道的仿真传输,传输后的序列再送往解码模块。
实现该功能的程序段为:
tx_waveform=bpsk(u,amp);
rx_waveform=awgn(tx_waveform,SNR);
其中u为编码后序列,amp为幅度,SNR为信噪比。awgn(a,snr)函表示在信号a中加入高斯白噪声,信噪比SNR以dB为单位。
5.2 H矩阵生成
设计中生成H矩阵采用的是随机方法,详细构造过程介绍见3.2.1节。在程序中,H矩阵大小为rowscols,定义列重为bits_per_col,为显示方便,在流程图中,我们用n代替列重,用m代替行重。在程序文件中,H矩阵生成对应genH.m文件。
生成H矩阵的程序流程如下:
 
图5.2 H矩阵的生成
设计中,H矩阵的列重bits_per_col=3,当然也可以设置为其他值,但要注意的一点就是,列重不能取1,列重为1时,对于相应的比特节点只有一个校验方程,这样是不能准确完成译码的。列重值过大时可能会影响矩阵的稀疏性,这会在一定程度上加大运算复杂度。
5.3 编码过程
LDPC码的编码在主程序中以函数调用的形式实现,编码算法应用的是传统编码方法,编码原理见2.1节线性分组码以及3.2.2节LDPC码的编码思想。在程序文件中,编码过程对应ldpc_encode.m、H2P.m、mul_GF2.m文件。
编码过程中部分程序如下:
[P,rearranged_cols]=H2P(H);
c=mul_GF2(P,s');
u1=[c' s];
u=reorder_bits(u1,rearranged_cols);
设H矩阵大小为rowscols,程序按照以下步骤执行:
(1)、对H进行高斯消元,将其转换为[I  P]的形式,其中I为cols阶单位阵。
(2)、c=P求得监督位。其中为原信息序列的转置,c为求出的监督位矩阵;
(3)、将求出的监督位与原始信息序列相连接,设计中将监督位放在了信息序列的前面;
(4)、若H矩阵在高斯消元过程中有列交换,则对编码后的码字进行相应的列交换。对码字进行列交换的原因见第3.2.2节。
其流程图为:
 
图5.3 编码过程整体流程图
整个编码过程中的重点为对H矩阵的高斯消元,也是运算量较大的一个部分。,下面我们对程序中高斯消元执行过程进行简单介绍。
设i=1:1:rows,j=rows-1:-1:1。
首先逐一检查H的每行H(i,:),若H(i,i)=0,则寻找该行中的第一个非零元素,并将H的该列与第i列交换,若H(i,i)=1,则不需要进行列交换,然后检查交换后或者不需要的H(:,i),自H(i,i)元素以下的第i+1行到第m行是否还有非零元素,若有,则将H的第i行叠加到该行,若无,则继续检查下一行。循环整个过程,将H转化为左下方全为0,H(i,i)全为1的矩阵H1,最后再对H1自第rows行向第j行叠加,最终得到左边为单位阵的矩阵。即H=[I  P]。
5.4 译码过程
相对编码过程而言,译码过程的运算要相对复杂的多。在本设计中,译码采用的是软判决译码算法的SPA算法。译码过程相关函数对应程序文件中ldpc_decode.m、mul_GF2.m、extract_mesg.m文件。
译码过程流程图如下:
 
图5.4 译码过程流程图
译码时概率信息初始化步骤中初始化概率p(0)与p(1)的取值是与信道有关的,在不同信道中传输信号,其初始化概率值是不相同的。对于AWGN信道,初始化概率值计算公式见式(4-13)、式(4-14)。整个译码过程在4.1节有详细的理论描述,在这里就不再赘述。 
第6章 LDPC码的性能分析
本章主要内容为,通过利用MATLAB软件编程仿真来表现码长、列重和迭代次数对LDPC码性能的影响。仿真时采用图5.1所示的LDPC码编译码仿真框图。
下面我们将就码长、列重及迭代次数三方面对LDPC码性能的影响进行分析。
6.1 码长对LDPC码性能的影响
应用matlab软件针对额LDPC码码长分别为300、500,列重为3,最大迭代次数设置为25次进行了仿真实验,分析研究码长对LDPC码误码性能的影响,仿真结果图如下:
 
图6.1 码长对LDPC码性能的影响

从图中的仿真结果可以看出,在同样的信噪比条件下,随着码长的增加,LDPC码的性能不断提高。在小信噪比区域,码长的增加对误码率的改进不大,但随着信噪比的增加,LDPC码的误码率得到的明显的改善。但随着码长的增加,LDPC码的性能提高是相对的,当达到一定的码长后,性能将会有很小的提高。这是因为一定码长下长编码的性能有一定的极限,随着码长的增大,编码和译码的复杂度也增加,编码性能就会更接近极限,性能随码长增加改善的就更少。
6.2 列重对LDPC码性能的影响
应用matlab软件针对码长为256,译码的最大迭代次数为30,校验矩阵的列重分别为2和4的情况下进行了仿真实验。仿真得出的误码性能曲线如图:

图6.2 列重对LDPC码性能的影响

从上图的仿真结果可以看出来,在相同的信噪比下,随着列重的增加,LDPC码的误码率增大。分析其原因,因为仿真过程中所用的码长不够大,校验矩阵不是足够稀疏,增加列重,会在一定程度上降低校验矩阵的稀疏性,在校验矩阵不足够稀疏的情况下,稀疏性的一定提高会给编码对应的Tanner图带来大量的短环。而短环,尤其是长度为4的环,会使算法的性能恶化,导致LDPC码性能的下降。这种LDPC码性能上的下降会随着码长的增加而逐渐减小,当码长足够长,列重的增加对校验矩阵的稀疏性的影响相对较小,而在译码时,列重大的LDPC码比列重小的LDPC码得到更多的校验信息,从而得到更可靠的译码,所以此时,随着列重的增加,LDPC码的性能将会得到改善。但是当列重增加到较大时,因为校验矩阵不具有稀疏性,性能会随着列重的增加严重下降。
6.3 迭代次数对LDPC码性能的影响
应用matlab仿真软件针对码长500的规则LDPC码,列重为2,译码迭代次数分别为10和100的情况下进行了仿真实验。下图给出了上述情况下仿真得到的结果。
 
图6.3 迭代次数对LDPC码性能的影响
应用matlab对码长为500的规则LDPC码在列重为3、信噪比为4的情况下进行了仿真,得出了LDPC码误码率随迭代次数变化的曲线,下图给出了仿真结果:
 
图6.4 LDPC码误码率随迭代次数变化曲线
从图6.3的仿真结果可以看出,在相同的信噪比条件下,LDPC码的性能随着迭代次数的增加而逐渐提高。但是通过对图6.4的观察发现,误码率并不能随着迭代次数的增加而无限的减少,当迭代次数足够大时,再增加LDPC码的迭代次数,只能增加系统的时延和复杂度,其性能不会再有提高。
6.4 H矩阵变换方法对性能的影响
    在设计中,采用了传统的高斯消元法、基于下三角形式校验矩阵以及基于近似下三角形式校验矩阵的编码方法对LDPC码误码率进行分析和比较。用matlab显示出的列重为4的校验矩阵中非零元素(“1”元素)分布如下:
 
图6.5 H矩阵非零元素分布图
    在对H进行变换的过程中,首先逐一检查H的每行H(i,:),若H(i,i)=0,则寻找该行中的第一个非零元素,并将H的该列与第i列交换,若H(i,i)=1,则不需要进行列交换,然后检查交换后或者不需要的H(:,i),自H(i,i)元素以下的第i+1行到第m行是否还有非零元素,若有,则将H的第i行叠加到该行,若无,则继续检查下一行。循环整个过程,将H转化为左下方全为0,H(i,i)全为1的矩阵H1,最后再对H1自第rows行向第j行叠加,最终得到左边为单位阵的矩阵。即H=[I  P]。经过高斯消元后的H矩阵非零元素分布图如下:
 
图6.6 高斯消元后的校验矩阵非零元素分布

转换成下三角形式的校验矩阵非零元素分布图如下图:、

图6.7 下三角形式的校验矩阵非零元素分布

近似下三角形式的校验矩阵的非零元素分布图如下:

图6.8 近似下三角形式校验矩阵非零元素分布

应用matlab对在码长为512、列重为4、迭代次数为20的条件下采用图6.6~图6.8三种H矩阵变换形式进行编码的LDPC码误码性能进行分析,得出其性能对比图如下:
 
图6.9 三种编码方式LDPC码的误码性能对比
    由图6.6~图6.8可以明显看出,高斯消元的过程破坏了校验矩阵原有的稀疏性,在提高了编码过程中运算量的同时,也会使矩阵中出现较多的短环而影响性能;转换成下三角形式以及近似下三角形式的校验矩阵保留了原有的稀疏性,在进行仿真时,其编码时间明显的短于传统编码所用的时间。通过分析应用matlab进行仿真时所用时间以及观察图6.9发现,在列重较小时,除编码时间上的差别外,三种编码方式LDPC码的误码率差别并不大,但随着列重的增大,基于下三角形式以及近似下三角形势H矩阵的LDPC码误码性能要渐渐优于传统编码方式,此外列重值较大时,H矩阵并不一定能够通过高斯消元转换成图6.6所示的形式,这在一个方面也显示出传统编码方式的缺点。此外,通过对基于下三角形式编码方法以及基于近似下三角形式编码方法的性能对比可以看出,两种编码方式的性能差别并不大,但相比之下,还是后者的性能略好一点。实际上,平时较为常用的LDPC码编码方法就是基于近似下三角形式校验矩阵的编码方法。
 
总结与展望
    信道编码理论及技术作为现代通信系统必不可少的关键技术,近几十年在Shannon信道编码理论的指引下已经经历了飞速的发展并取得了大量的研究成果。LDPC码在1996年经过Mackey、Spielman和Wiberg等人的再发现后,在十年左右的时间里,取得了重大研究进展。与已经发展成熟的Turbo相比,LDPC码拥有更优越的性能,较低的误码错误平台,更低的译码复杂度。
    本文回顾了信道编码理论的发展历史,探讨了LDPC码的基本原理,用matlab软件对LDPC码进行了性能仿真,并分析了码长、列重以及迭代次数的变化会对LDPC码的性能产生什么影响。
    校验矩阵的变换对于编码尤为重要,本文采用随机法构造校验矩阵,并分别探讨了采用高斯消元法、基于下三角矩阵以及基于近似下三角矩阵三种变换方法的特点及理论。相比之下,高斯消元法破坏了矩阵原有的稀疏性,导致运算量较大,性能上也不如后面二者优越。
    LDPC的译码方法有很多,经典的主要有BF、BP、SPA等算法。各有优势。本文中进行性能仿真时采用的是SPA译码算法,在译码过程中,比特节点和校验节点之间传递的是置信度信息,即概率值。算法的原理都在文中也做了详细的介绍。
    任何一项技术的发明都是为了更好的应用,目前LDPC码的理论发展日趋成熟,我相信:随着硬件技术不断发展,加之更加成熟的理论做基础,LDPC码作为一种优秀的信道编码一定会在未来的通信系统中发挥出巨大的作用。
 
参考文献
[1]  R.G. Gallager. Low density parity-check codes. IRE Trans. Inf. Theory, 8(1):21-28, Jan. 1962. 
[2]  Hagiwara, M. & Fossorier, M. P. C. &Imai, 等. Fixed Initialization Decoding of LDPC Codes Over a Binary Symmetric Channel[J]. IEEE Transactions on Information Theory, 2012, 58(4).
[3]  Sridhara D, Kelley C, Rosenthal A J. Tree-based construction of LDPC codes[C]. Information Theory, Institut fur Mathematik, Zurich Univ. , 4-9 Sept. 2005:845 - 849. 
[4]  Jin Lu & Jos M. F. Moura. TS-LDPC Codes: Turbo-Structured Codes With Large Girth[J]. IEEE Transactions on Information Theory, March 2007, 53(3): 1080-1094.
[5]  Moura, JMF, Lu J, etal. Structured low-density parity-check codes[J]. IEEE Signal Processing Magazine, Jan. 2004, 21(1):42-55.
[6]    Mackay D J C. Good error-correcting codes based on very sparse matrices. IEEE Trans. Inform. Theory, 1999; 45(2): 399-431
[7]    Richardson T J, Urbanke R L. Efficient encoding of low-density parity –check code. IEEE Transactions on Information Technology, 2001; 47(2): 638-656
[8]  戴迎春, 赵忠文, 宋楠. 基于对角线法的LDPC编码[A]. 全国第五届信号和智能信息处理与应用学术会议专刊(第一册)[C], 2011.
[9]  王鹏. LDPC码的编译码原理及编码设计[D]. 西安电子科技大学, 2004年1月..
[10]  唐启荣. LDPC编码的研究与硬件实现[D]. 北京邮电大学, 2007年3月.
[11]  刘英, 张志亮. 基于Matlab平台的LDPC码快速仿真研究[J]. 现代电子技术, 2010年(9):121-122,128.
[12]  王冬梅,王秀芳,浦晓威,路敬伟. 基于Matlab的LDPC码的研究[J]. 科学技术与工程, 2010年4月, 10(10):2472-2475.
[13]  岳田, 裴保臣. LDPC 码的几种译码算法比较[J]. 无线电通信技术, 2006, 32(4):24-26.
[14]  邓薇. MATLAB函数速查手册. 北京:人民邮电出版社, 2008年10月.
[15]  何树彬. LDPC码编译码原理及应用. 成都:电子科技大学,2005.
[16]  徐明远, 邵玉斌. MATLAB仿真在现代通信中的应用. 西安:西安电子科技大学出版社,2011年4月.
[17]  韩辉. LDPC码编译码技术研究[D]. 中国科技大学, 2009.
[18]  马龙. LDPC码简化译码算法研究[D]. 重庆邮电大学, 2007.
[19]  李金根, 郑紫薇. 低密度奇偶校验码的编码方法研究 [R]. 大连海事大学信息工程学院:, 2009.
[20]  陈旭灿, 刘冬培. 改进的LDPC译码算法研究[N]. 电子科技大学学报, 2010年3月(第39卷第2期).

基于Matlab的LDPC码性能研究毕业设计(含源文件)相关推荐

  1. 基于matlab的图像形状与分类毕业设计(含源文)

    基于matlab的图像形状与分类 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务 ...

  2. 基于matlab数字识别算法系统设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目 录 内容摘要------------------------------1 关键字----- ...

  3. matlab在风能领域,基于Matlab/Simulink的风力机性能仿真研究

    能源研究与信息 第 22 卷 第 2 期 Energy Research and Information Vol. 22 No. 2 2006 收稿日期:2005-10-14 作者简介:高 平(198 ...

  4. pid控制器matlab仿真研究,基于MATLAB仿真的PID控制器设计毕业设计

    基于MATLAB仿真的PID控制器设计毕业设计 基于 MATLAB 仿真的 PID 控制器设计 摘 要 本论文以温度控制系统为研究对象设计一个 PID 控制器.PID 控制是迄今为止最通用的控制方法, ...

  5. MATLAB的变换器毕业设计,毕业论文基于Matlab的矩阵变换器仿真研究设计1喜欢就下吧(资料4)...

    <[毕业论文]基于Matlab的矩阵变换器仿真研究设计.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文基于Matlab的矩阵变换器仿真研究设计(1)(喜欢就下吧)>相 ...

  6. 基于matlab的ldpc编码的构造,基于LDPC编码的GMSK调制与解调及matlab仿真实现(含录像)...

    基于LDPC编码的GMSK调制与解调及matlab仿真实现(含录像)(开题报告,论文10700字,程序代码,录像) 摘 要 随着无线通信技术的不断发展与进步,数字电视广播.移动视频点播等对数据吞吐量要 ...

  7. 基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  8. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  9. 通信算法之三:LDPC码的研究

    <源自:http://www.chinadata.com.cn/jishujcshow.asp?id=1159 > LDPC码的研究现状与发展动态   1 引言 自从Shannon提出信道 ...

最新文章

  1. php 框架获取服务器,Thinkphp 框架基础之源码获取、环境要求与目录结构分析
  2. R-CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)论文理解...
  3. Rails安全导读【完】
  4. 前端学习(2745):重读vue电商网站55之使用 pm2 管理应用
  5. C#知识点总结系列:3、C#中Delegate和Event
  6. 信息学奥赛一本通(1095:数1的个数)
  7. FTP:226 transfer done but failed to open directory
  8. CentOS6_mini_安装后基本配置
  9. 面向对象编程 --- 反射
  10. html css没有反应,只有CSS和HTML的标签没有正确响应
  11. uniapp自定义字体图标、使用阿里矢量图标库
  12. 用友集团前端面经整理及答案
  13. Ubuntu 20.04安装搜狗输入法(图文详解)
  14. a 标签 jq js 打开新页面跳转
  15. 不能将下载行为传输到IDM(亲测有效)
  16. 【医学】超声波成像原理
  17. 路由器修改wifi密码
  18. 学游戏原画都需要掌握哪些软件
  19. 命令控制qq自动申请远程控制_代码详解
  20. css背景透明(css背景透明度怎么设置)

热门文章

  1. Zend_Form 创建、校验和解析表单的基础--(手冊)
  2. 动态SQL和PL/SQL的EXECUTE选项分析
  3. 艾伟_转载:使用LINQ to SQL更新数据库(中):几种解决方案
  4. 彭文华:详解数字化转型的破局之道(附直播视频)
  5. 电商行业最复杂的人货场分析,我用一个案例给你讲清楚
  6. 用几张图片教你,财务分析的平台、架构、指标体系、模型
  7. 我现写掼蛋游戏就是要努力奋斗
  8. 今天的拿起铅笔盒的飞鸽传书
  9. 关于CEdit控件的透明
  10. 老子学不动系列:Vue 3.0 新特性预览