基于交织技术的 LDPC 码性能研究

摘要:低密度奇偶校验(LDPC)码是一种基于稀疏校验矩阵的线性分组码,借助置信传播等迭代译码算法,能够在逼近香农极限的同时保持较低的译码复杂度,已广泛应用于现代数字通信系统。然而,传统 LDPC 译码算法通常假设信道为无记忆随机错误模型,对突发错误较为敏感,突发错误会严重削弱其纠错性能。为此,在 LDPC 编码系统中引入交织技术,将突发错误打散为随机独立错误,是充分发挥 LDPC 码性能的关键手段。本文构建了基于 LDPC 编码的数字通信系统,重点研究多种交织策略(随机交织、卷积交织与分层交织)在瑞利衰落信道下的误码性能。仿真结果表明:无交织时 LDPC 编码难以有效发挥纠错能力,即使在高信噪比下仍存在明显的性能损失;随机交织的误码率性能优于卷积交织与分层交织。此外,本文还分析了不同译码算法、卷积编码方式及码率对系统误码率的影响。研究结果为瑞利衰落信道下 LDPC 编码与交织技术的联合设计提供了理论依据与工程参考。

关键词:低密度校验码;瑞利衰落信道;突发错误;交织技术;误码性能


Performance Analysis of LDPC Codes with Interleaving Techniques

目录

摘要 II
Abstract II
1 绪论 6
1.1 研究背景和意义 6
1.2 LDPC 码在国内外研究现状 7
2 LDPC 码原理介绍 9
2.1 LDPC 码的定义 9
2.2 LDPC 码的分类 10
2.3 LDPC 码的优势 11
3 LDPC 编译码方法 12
3.1 LDPC 码编码方法 12
3.1.1 LDPC 码的标准编码方法 12
3.1.2 LU 分解编码算法 13
3.2 构造校验矩阵 14
3.3 交织技术 15
3.3.1 分组交织 15
3.3.2 卷积交织 16
3.3.3 随机交织 17
3.4 LDPC 的译码算法 18
3.4.1 置信传播(BP)译码算法 19
3.4.2 最小和(MS)译码算法及其修正算法 20
3.4.3 分层译码算法 24
4 基于交织技术的 LDPC 码性能研究 25
4.1 系统设计 26
4.2 不同交织技术下误码率曲线 30
4.3 不同译码算法下误码率曲线 31
4.4 不同编码参数对误码率影响 32


1 绪论

1.1 研究背景和意义

随着现代无线通信技术的飞速发展,用户对数据传输速率、可靠性和频谱效率的要求日益提高,而通信系统面临着复杂多变的信道环境,如多径衰落、阴影效应和噪声干扰等,这些因素严重制约了传输质量。因此,采用高效的差错控制技术成为保证通信可靠性的关键[1,2]。低密度奇偶校验(LDPC)码因其逼近香农极限的优异性能、较低的译码复杂度和良好的并行实现结构,被广泛采纳为多种通信标准的前向纠错(FEC)方案,例如 IEEE 802.11n/ac/ax(Wi-Fi)、DVB-S2/S2X(数字卫星广播)、5G NR 等。LDPC 码通过稀疏校验矩阵实现迭代译码,能够在高信噪比下提供接近理论极限的纠错能力。然而,在衰落信道中,信道状态随时间变化,突发错误往往集中出现,这会严重破坏 LDPC 码的译码性能,导致误码率升高[3-6]。

交织技术作为一种有效应对突发错误的工程手段,通过将原始比特序列按照一定规则重新排列,使原本相邻的比特在时间或空间上分散开,从而将信道引起的突发错误“打散”为随机错误,为后续的纠错译码创造有利条件。交织器与 LDPC 码的结合,有望在保持 LDPC 码高效纠错能力的同时,增强系统对抗衰落信道中突发干扰的鲁棒性。不同的交织方式对 LDPC 译码性能的影响存在差异,如何设计适合 LDPC 码特性的交织方案,以及交织器参数对系统性能的影响规律,是值得深入研究的课题[7]。

因此,开展基于交织编码的 LDPC 性能研究具有重要的理论意义和工程价值。一方面,通过分析不同交织方式在瑞利衰落信道下的误码率性能,可以揭示交织对 LDPC 译码收敛性、误码率的影响机理,为 LDPC 码在实际系统中的应用提供理论指导。另一方面,该研究有助于优化交织器的设计,在复杂度与性能之间取得平衡,为下一代通信系统如卫星通信、深空通信等中高可靠传输方案的设计提供参考依据。本课题结合 MATLAB 仿真平台,搭建调制解调、LDPC 编解码、交织与解交织、以及软判决译码的完整链路,通过对比不同交织方式下、不同译码算法,不同信道编码、不同码率情况下的误码率曲线,评估其对 LDPC 性能的提升效果,从而为实际通信系统的抗衰落设计提供数据支持和设计思路。

1.2 国内外研究现状

1962 年,Gallager 在其博士研究工作中首次系统性地提出了低密度奇偶校验(Low-Density Parity-Check,LDPC)码的基本概念与理论框架[8]。然而,受限于当时计算能力与硬件实现条件的制约,这一编码技术并未在随后数十年间获得学界的广泛关注。直到 1996 年,Mackey 与 Neal 等人通过采用和积(Sum-Product)译码算法,从仿真角度证实了 LDPC 码的误码率性能可无限逼近香农限,从而重新点燃了学术界对 LDPC 码的研究热情[9]。次年,Luby 等人进一步提出了非规则 LDPC 码的概念,并通过详实的仿真结果表明,非规则结构在误码性能方面显著优于规则 LDPC 码,自此非规则 LDPC 码逐渐成为该领域的研究主线[10]。进入 21 世纪,林舒等人于 2001 年提出了准循环低密度奇偶校验(Quasi-Cyclic LDPC,QC-LDPC)码[11]。该类码因其校验矩阵具有分块循环结构,在硬件实现中展现出优异的存储与计算效率,因而获得了广泛的应用基础。值得注意的是,当前第五代移动通信(5G)系统中采用的 LDPC 码正是非规则 QC-LDPC 码的典型代表。

在编码算法层面,Gallager 最早建议采用线性分组码的通用编码策略,即利用生成矩阵 G \mathbf{G} G 对信息向量 u \mathbf{u} u 执行乘法运算 u × G \mathbf{u} \times \mathbf{G} u×G,这一方法被称为直接编码算法[12]。尽管该算法在概念上简洁明了,但在实际应用中面临着存储复杂度高、编码延迟大等不足。针对上述局限性,Neal 等人随后提出了一种基于校验矩阵 H \mathbf{H} H L U LU LU 分解编码算法[13]。该算法通过将校验矩阵分解为下三角与上三角矩阵的乘积,显著提升了编码吞吐量,同时大幅降低了编码过程的计算复杂度。2001 年,Richardson 等人提出了一种更为高效的近似下三角矩阵编码策略,简称为 RU 算法[14]。RU 算法的核心思想是将校验矩阵通过行列置换转化为近似下三角形式,从而实现对编码过程的加速。进一步地,将 RU 算法与 QC-LDPC 码的准循环特性相结合,能够利用压缩后的校验矩阵完成编码运算,这一结合为 LDPC 码在 FPGA、ASIC 等硬件平台上的高效实现提供了全新的技术路径。

[注:原文重复段落已省略]

自 LDPC 理论被引入至今,国内外的研究人员都在寻求一种性能尽量逼近香农限制、降低计算复杂度、易于实现的信道编码方法。从最早的循环码、BCH 码、RS 码、卷积码、级连码,直到最近几年的 Turbo、LDPC 码以及极化码,其性能逐渐接近 Shannon 极限[8]。

Turbo 码的出现,激发了以图为基础的编解码与迭代解码的研究热潮。自上世纪 90 年代,Mackay 等人通过对 LDPC 码的研究,发现 LDPC 码在低复杂度条件下,能够达到甚至超过 Turbo 码的纠错能力,从而掀起了一股 LDPC 码的研究热潮[9]。LDPC 码作为一种性能优异的码型,是当前信道编码研究的一个热点[10]。

低密度奇偶校验码作为一类特殊的线性块码,其独特之处在于其检验矩阵的稀疏性,从而获得了更好的性能。随着 LDPC 码的出现,如何构造实用的、有效的 LDPC 码的编译编码技术,已经成为 LDPC 码领域的研究热点。准循环 LDPC 码是 LDPC 码中的一种,其最显著的特征是准循环结构,不需要大的内存,仅需要存储矩阵,且其准循环性质使其更容易实现准循环、低复杂度的编解码,因而准循环 LDPC 码的研究具有重大的学术意义和应用前景[11-13]。

LDPC 码结构简单、抗误码能力强、易于并行运算、易于硬件实现、吞吐率高、解码速度快等优点,被视为能与 Turbo 码匹敌的一种新型信道编码方法。LDPC 码有望替代 Turbo 码,成为下一代移动通信中最有希望的一种编码方式[14]。文献[15]重点分析了 LDPC 码与 BCH 码级联过程的性能,深入探讨了 DVB-S2 标准中前向纠错编码的性能优势,作者分析指出,当信噪比超过一定阈值后,LDPC 码会出现错误平层现象,导致编码性能下降,而引入 BCH 码可有效降低错误平层区,从而提升纠错性能。文献[16]以空间通信场景中的中/短长度数据为对象,研究了非二进制 LDPC 码的性能。Costantini 等人设计并测试了非二进制 LDPC 码,通过在加性高斯白噪声(AWGN)信道下与二进制 LDPC 码及 Turbo 码进行仿真对比,结果表明,所设计的非二进制 LDPC 编码在中/短长度数据条件下可获得显著的编码增益。文献[17]将对接收到的初始数据转化为对数似然比(Log-likelihood Ratio, LLR),相较于基于概率域的置信传播(Belief Propagation, BP)译码算法,LLR 域的 BP 译码算法具有更好的数值稳定性,从而获得更低的误码率。文献[18]提到最小和算法(Min-sum Algorithm, MSA),该算法对 LLR 域中的 SPA 译码算法在校验节点的计算过程进行了简化,通过数学运算以 LLR 域的最小值替换双曲正切函数,大幅降低了计算复杂度,但性能表现较差。文献[19]在归一化最小和算法(Normalized Min-sum Algorithm, NMSA)的基础上进行了进一步改进。NMSA 译码算法在 MSA 的基础上引入归一化因子以提升译码性能,并在此基础上又增加了一个归一化因子,进一步提高了译码性能,使其逼近 BP 译码的性能。


2 LDPC 码原理介绍

2.1 LDPC 码的定义

在 GF(2) 域上,LDPC 码是一个码长长的线性分组码,它的校验矩阵 H \mathbf{H} H 是唯一确定的,其每行与一条校验方程相对应,而每一列则代表着码字的一个比特。每行中非零元的数量叫做行的重量,每列中非零元的数量叫做列的重量。等式 (2-1) 给出了一个 5 × 10 5 \times 10 5×10 的校验矩阵及其关联的校验方程,其中码字 C = ( c 1 , c 2 , c 3 , c 4 , c 5 , c 6 , c 7 , c 8 , c 9 , c 10 ) \mathbf{C} = (c_1, c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_{10}) C=(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) 表示编码信息。满足

H ⋅ C T = 0 (2-1) \mathbf{H} \cdot \mathbf{C}^T = \mathbf{0} \quad \text{(2-1)} HCT=0(2-1)

这种 LDPC 码的名称源于其校验矩阵的显著稀疏特性:非零元素的数量大大少于零元素的数量,或者其行与列的重量相对于码长 n n n 均非常小。这一独特的结构使得 LDPC 码在纠错编码理论领域占据关键位置。因此,设计低复杂度、高效率的 LDPC 码成为可能。当校验矩阵 H \mathbf{H} H 是满秩时,可完美实现,并且编码率 R R R 自然等于 1 − M N 1 - \frac{M}{N} 1NM。若 H \mathbf{H} H 的秩小于 M M M,则其秩必然小于 N N N

设计一个维度为 M × N M \times N M×N 的矩阵 H \mathbf{H} H,借助高斯消元法进行精确转换,使其符合

H = [ P ∣ I M × M ] (2-2) \mathbf{H} = [\mathbf{P} \mid \mathbf{I}_{M \times M}] \quad \text{(2-2)} H=[PIM×M](2-2)

此过程的核心要义在于:只要 H \mathbf{H} H 为满秩矩阵,则变换后的矩阵中将不会出现全零行。基于这种精细的行列操作,可推导出系统格式下的生成矩阵

G = [ I K × K ∣ P T ] (2-3) \mathbf{G} = [\mathbf{I}_{K \times K} \mid \mathbf{P}^T] \quad \text{(2-3)} G=[IK×KPT](2-3)

2.2 LDPC 码的分类

LDPC 码具有多种分类方式,可以从多个角度对其进行分类。根据 LDPC 码稀疏矩阵中每一行或每一列“1”的数量是否相同,可以将其区分为规则码和非规则码。在规则码中,每一行或每一列包含“1”的数目是固定的,并且具有一定的规则性,该特性在某些特殊的通信场合(例如信号稳定、干扰少的情况下)具有明显的优越性,因为其规则性使得编码、译码过程更加容易,运算量也更少。而非规则码,其稀疏矩阵中每一行或每一列的“1”个数是不固定的,这就使得其在复杂变化的通信环境(如有大量噪声、多径衰落等)下,通过“1”的分布来适应各种干扰状况,具有较强的纠错能力[20]。

LDPC 码按照其元素取值的不同,可以将其划分为二元 LDPC 码(亦称为二元 LDPC 码)和高阶有限域 G F ( q )   ( q = 2 m ) \mathrm{GF}(q)\ (q=2^m) GF(q) (q=2m) 上的多元 LDPC 码。二进制 LDPC 码,其稀疏矩阵中的元素只能取 0、1 两个值,这一简单的数值使其在基本的数字通信系统中得到了广泛的应用。由于计算机内的信息存储与处理大多是二进制,因此 LDPC 码与计算机体系的组合具有很强的适应性,编码、译码过程也比较易于理解与实施。高阶有限域 G F ( q )   ( q = 2 m ) \mathrm{GF}(q)\ (q=2^m) GF(q) (q=2m) 上的多元 LDPC 码,其数值结构的复杂性使其具有更强的纠错能力,在深空通信和卫星通信等对信息传输可靠性要求很高的场合,可以利用多元 LDPC 码的高精度纠错能力,保证数据的准确传输。

根据 LDPC 码稀疏矩阵中的非零元在阵列中的位置和构建方法,将 LDPC 码分为随机码与结构型码(代数型与组合型)[18]。由于随机编码的随机性,可以为 LDPC 码的性能研究提供一个理想的模型。但在实践中,随机码的产生与处理难度很大,且具有很大的计算量。结构型码分为代数型与组合型两类,前者建立在特殊的代数法则基础上,如运用多项式、矩阵操作等,后者具有较好的数学特性,易于分析与设计,因此被广泛地用于某些对编码结构有较高要求的通信系统。组合结构码是利用组合设计、图论等组合数学工具,对非零元进行定位,在构造 LDPC 码等特定特性上有其独特的优势,如 LDPC 码的译码算法可以实现低复杂度[21]。

按照 LDPC 码中各要素的限制,将其划分为 LDPC 分组码、LDPC 卷积码、广义 LDPC 码三种。LDPC 分组码是将一个信息序列划分为一定长度的一组,并且每个组之间相互独立地进行编码,该方法适合于不需要对数据传输实时性有很高要求、但是对数据精度有很高要求的场合,例如文档传送等。LDPC 卷积码是一种利用存储器将前后信息相结合的新型 LDPC 码,在诸如语音通信等实时通信系统中具有良好的性能。广义 LDPC 码是对传统 LDPC 码的扩充,其编码架构与性能更加灵活,可适应多样化的通信要求。

2.3 LDPC 码的优势

与其他逼近香农极限的码(如 Turbo 码)相比,LDPC 码具有如下优点:

(1) LDPC 码的解码方法,是一种在稀疏矩阵基础上进行迭代解码的特殊方法。从操作原则上来说,该算法只需要在稀疏矩阵中与非零元有关的节点上进行信息传输与计算。与此相反,Turbo 码在迭代过程中需要进行更复杂的交织、解交织和卷积码的相关操作,这就使得它的运算量大大增加。由于 LDPC 码在稀疏矩阵上的操作简单,因此与 Turbo 码相比,LDPC 码的计算量要小得多。而且,因为其结构自然具有并行性,所以在硬件实现上,可以更容易地使用并行处理单元(例如:现场可编程门阵列(FPGA)中的多个逻辑单元,或 ASIC 中的并行计算模块),把解码工作划分到相应的并行计算单元中,以达到高效的硬件解码[21]。因此,LDPC 码在 5G 通信中的应用(如 5G 通信基站和海量终端设备间的数据传输,以及卫星通信中地面站和卫星间的高速数据交互)有其独特的优势。

(2) 可根据实际通信需要,灵活构造 LDPC 码的编码速率。通过对校验矩阵的结构与参数进行灵活的调节,可以使通信工程师在通信系统的设计过程中获得所需要的码率。因此,LDPC 码具有较强的适应性,可适用于多种通信环境与服务需求。相比之下,Turbo 码要获得较高的码率,其主要方法就是采用打孔运算。打孔是指将原编码序列中的一些位移除,以达到提升码速率的目的。但是,如何选择合适的打孔模式是一个关键且具有挑战性的问题。若选错了打孔模式,比如在丢弃位的过程中损坏了重要的校验信息或对其约束关系产生了干扰,则会导致编码性能急剧下降,从而极大地提高系统的误码率,对通信质量产生极大的影响。

(3) LDPC 码的误码性能较好。在实际的通信系统中,随着 SNR 的提高,系统的误码率将趋于一个比较平稳的值,该值称为误码平层。LDPC 码具有很好的误码性能,可以满足诸如光纤通信等需要高误码率的长距离、高速率的无线通信;在深空通信中,由于太空中存在着多种复杂的环境,因此对误码率的要求非常高,LDPC 码可以很好地适应这种情况;另外在硬盘存储行业,为了确保数据的完整与准确,对 LDPC 码也有严格的要求。而 Turbo 码的误比特率约为 10 − 6 10^{-6} 106,如果将其用于一些对误码率有较高要求的场合,单靠 Turbo 码本身很难满足需求,往往需要与外部码串联。比如,将 Turbo 码与里德-所罗门码(RS 码)串联,利用外部码(RS 码)对解码后的残余误差进行校正,以达到实际应用的 BER 准则。

(4) LDPC 码诞生于 60 年代,历经数十年的发展与研究,其原理与概念已不再是秘密。其编码、解码原理,性能分析等方面的理论得到了深入的研究和广泛的理解。这样就不会有关于知识产权与专利权的问题。因此,对于起步较晚的企业来说,不会因为 LDPC 码的应用而受到专利纠纷的困扰。这就给了这些国家和企业一个良好的发展机遇,使他们可以迅速地赶上世界先进水平,促进自己的通信工业发展。


3 LDPC 编译码方法

3.1 LDPC 码编码方法

3.1.1 LDPC 码的标准编码方法

设 LDPC 码的码长为 n n n,信息码长度为 k k k,校验码长度为 m = n − k m = n - k m=nk。校验矩阵 H \mathbf{H} H 经过高斯消元可以化为

H = [ P ∣ I m × m ] (3-1) \mathbf{H} = [\mathbf{P} \mid \mathbf{I}_{m \times m}] \quad \text{(3-1)} H=[PIm×m](3-1)

其中, P \mathbf{P} P 是尺寸为 m × k m \times k m×k 的二进制矩阵, I m × m \mathbf{I}_{m \times m} Im×m 是尺寸为 m × m m \times m m×m 的单位矩阵。于是可以得到生成矩阵

G = [ I k × k ∣ P T ] (3-2) \mathbf{G} = [\mathbf{I}_{k \times k} \mid \mathbf{P}^T] \quad \text{(3-2)} G=[Ik×kPT](3-2)

通过生成矩阵 G \mathbf{G} G 就可以进行编码,计算信息码向量 u \mathbf{u} u 和生成矩阵 G \mathbf{G} G 的乘积。但是该编码方案有两个问题。一个问题是 G \mathbf{G} G 不可能是稀疏矩阵,计算编一帧码的运算量很大。

乘法次数为

k × ( n − k ) (3-3) k \times (n - k) \quad \text{(3-3)} k×(nk)(3-3)

加法次数为

k × ( n − k − 1 ) (3-4) k \times (n - k - 1) \quad \text{(3-4)} k×(nk1)(3-4)

3.1.2 LU 分解编码算法

首先将构造出的 m × n m \times n m×n 的校验矩阵 H \mathbf{H} H 写成如下形式

H = [ H 1 ∣ H 2 ] (3-5) \mathbf{H} = [\mathbf{H}_1 \mid \mathbf{H}_2] \quad \text{(3-5)} H=[H1H2](3-5)

其中 H 1 \mathbf{H}_1 H1 的尺寸为 m × k m \times k m×k H 2 \mathbf{H}_2 H2 的尺寸为 m × m m \times m m×m。设编码后的码字向量为 c \mathbf{c} c,它的长度为 n n n,把它写成如下形式

c = [ s ∣ p ] (3-6) \mathbf{c} = [\mathbf{s} \mid \mathbf{p}] \quad \text{(3-6)} c=[sp](3-6)

其中, s \mathbf{s} s 是信息码行向量,长度为 k k k p \mathbf{p} p 为校验码行向量,长度为 m m m。根据校验等式有

H ⋅ c T = 0 (3-7) \mathbf{H} \cdot \mathbf{c}^T = \mathbf{0} \quad \text{(3-7)} HcT=0(3-7)

上式展开得

[ H 1 ∣ H 2 ] ⋅ [ s ∣ p ] T = 0 (3-8) [\mathbf{H}_1 \mid \mathbf{H}_2] \cdot [\mathbf{s} \mid \mathbf{p}]^T = \mathbf{0} \quad \text{(3-8)} [H1H2][sp]T=0(3-8)

展开该矩阵方程,并考虑到运算是在 GF(2) 中进行,得到

H 1 s T + H 2 p T = 0 (3-9) \mathbf{H}_1 \mathbf{s}^T + \mathbf{H}_2 \mathbf{p}^T = \mathbf{0} \quad \text{(3-9)} H1sT+H2pT=0(3-9)

如果校验矩阵 H \mathbf{H} H 是非奇异阵,则 H 2 \mathbf{H}_2 H2 满秩,所以有

p T = H 2 − 1 H 1 s T (3-10) \mathbf{p}^T = \mathbf{H}_2^{-1} \mathbf{H}_1 \mathbf{s}^T \quad \text{(3-10)} pT=H21H1sT(3-10)

公式 (3-5)、(3-6) 是用校验矩阵直接编码而不需要生成矩阵的方程,所有仅依靠校验矩阵的编码均可通过这两个公式完成。

通过对检验矩阵的 H 2 \mathbf{H}_2 H2 子矩阵做 LU 分解,获得下三角矩阵 L 和上三角矩阵 U,再使用正向迭代方法,能够很容易地将这些信息转化为校验比特,从而实现编码,即 LU 分解方法。LU 分解算法的计算复杂性随着编码长度的增加而增加。

还可以将检验矩阵 H \mathbf{H} H 设为满秩矩阵,若校验矩阵不满足满秩,则可对其进行行约化,从而获得行满秩检验矩阵。该校验矩阵 H \mathbf{H} H 具有 m × n m \times n m×n 的大小。用高斯消元法可以把检验矩阵 H \mathbf{H} H 表示成对角状,从而使检验矩阵的计算更加简便。

3.2 构造校验矩阵

若规定 LDPC 码的参数为 ( n , γ , ρ ) (n, \gamma, \rho) (n,γ,ρ),其中 n n n 表示码长,每个校验矩阵的列与行分别包含 γ \gamma γ 个 1 和 ρ \rho ρ 个 1,则该 LDPC 码属于规则码。

如果 H \mathbf{H} H 矩阵 W \mathbf{W} W 的元素来自 GF(M) 域,且它的第 i i i 个元素 W i , j W_{i,j} Wi,j W \mathbf{W} W

W = ( w 0 , 0 w 0 , 1 ⋯ w 0 , n − 1 w 1 , 0 w 1 , 1 ⋯ w 1 , n − 1 ⋮ ⋮ ⋱ ⋮ w m − 1 , 0 w m − 1 , 1 ⋯ w m − 1 , n − 1 ) (3-11) \mathbf{W} = \begin{pmatrix} w_{0,0} & w_{0,1} & \cdots & w_{0, n-1} \\ w_{1,0} & w_{1,1} & \cdots & w_{1, n-1} \\ \vdots & \vdots & \ddots & \vdots \\ w_{m-1,0} & w_{m-1,1} & \cdots & w_{m-1, n-1} \end{pmatrix} \quad \text{(3-11)} W= w0,0w1,0wm1,0w0,1w1,1wm1,1w0,n1w1,n1wm1,n1 (3-11)

这里, w i , j w_{i,j} wi,j 均为素数,矩阵 W \mathbf{W} W 称为索引矩阵。

分析矩阵 H \mathbf{H} H 内的第 i i i 阶循环子矩阵,其生成方式需将信息的 z z z 比特以 z × z z \times z z×z 维度单位矩阵 I 为基本单元,沿指定行向右侧循环展开排列,由此构建的检验矩阵尺寸为 m z × n z mz \times nz mz×nz,生成的码字率需满足不低于 1 − m / n 1 - m/n 1m/n 的关系约束。编码速率可以超过 1 − m / n 1 - m/n 1m/n,这取决于行与行之间的线性相关性。事实上,我们知道,在 H \mathbf{H} H 中,至少有 m m m 条关联的线。

检验矩阵 H \mathbf{H} H 是从 p p p 个循环子集构成的。

H = ( H 0 , 0 H 0 , 1 ⋯ H 0 , n − 1 H 1 , 0 H 1 , 1 ⋯ H 1 , n − 1 ⋮ ⋮ ⋱ ⋮ H m − 1 , 0 H m − 1 , 1 ⋯ H m − 1 , n − 1 ) (3-12) \mathbf{H} = \begin{pmatrix} \mathbf{H}_{0,0} & \mathbf{H}_{0,1} & \cdots & \mathbf{H}_{0, n-1} \\ \mathbf{H}_{1,0} & \mathbf{H}_{1,1} & \cdots & \mathbf{H}_{1, n-1} \\ \vdots & \vdots & \ddots & \vdots \\ \mathbf{H}_{m-1,0} & \mathbf{H}_{m-1,1} & \cdots & \mathbf{H}_{m-1, n-1} \end{pmatrix} \quad \text{(3-12)} H= H0,0H1,0Hm1,0H0,1H1,1Hm1,1H0,n1H1,n1Hm1,n1 (3-12)

在此处, H i , j \mathbf{H}_{i,j} Hi,j 表示一个 z × z z \times z z×z 的单位循环矩阵,该矩阵通过将单位矩阵各行的元素向右循环偏移 h i , j h_{i,j} hi,j 位来实现操作,形成了一种独特的数值变换。

从前面对 LDPC 码的理论分析可知,校验矩阵 H \mathbf{H} H 既是 LDPC 码的主要组成部分,也是整个解码过程的关键。在已有研究成果中,检验矩阵按其构造方法可分为两大类:随机检验矩阵与结构检验矩阵。

构建于 Gallager 法、MacKay 法、比特填充法及 PEG 法等前沿编码技术之上的校验矩阵,均源于概率论驱动的随机序列设计,因而具备超群的错误修正效能,可有效削弱在数据传递期间遭遇的噪声与干扰。但鉴于这类方案的固有的随机本质,其在编码阶段表现出操作不便捷性,并且解码环节中会诱发显著的内存占用及运算负担,过高的复杂度直接限制了对系统整体布局的改善与创新,特别是在磁记录、光纤通信等对传输速率有严苛指标的应用环境中,这一问题更为显著。与之形成对比的是,采用有限几何学概念或基矩阵构建技术生成校验矩阵的方法,能有效防止短循环现象的发生,从而形成的 LDPC 码不仅继承了循环码与类循环码的有益特质,而且在实现层面更为简便,非常适合在硬件平台中进行集成与配置,并且能够依据需求设计出具有更长周长的码型,其纠正错误的能力完全可与随机校验矩阵生成的码字相媲美。

3.3 交织技术

交织方法在数字通信领域扮演着核心角色,主要用于增强无差错传输性能。该方法通过在发射端对信道编码数据进行复杂重排,并在接收端精确反演,从而显著降低数据在传输期间因串扰引发的干扰效应。为深入理解此技术,后续将具体阐述三种典型交织策略的运作机制,并分析各自的应用背景及场景。

3.3.1 分组交织

分组交织属于一种高效的块处理数据交织技术,其核心参数交织深度 M × N M \times N M×N。其中 M M M 表示寄存器的行数量, N N N 则代表寄存器的列数量。具体工作流程包括:首先将数据逐个写入 M × N M \times N M×N 的寄存器阵列中;其次在寄存器完全装载后,必须严格按照列优先方式依次读出数据;若数据传输过程中寄存器未达最大容量,则需依据标准协议填充 ‘0’ 或 ‘1’ 以维持传输的完整性。接收端的操作逻辑与其相呼应:先将接收的数据存入同规格的寄存器阵列,随后按行顺序读出,最终可还原为发送前的原始数据序列。该技术可精炼表达为“行与列的动态交互”,此类交织器亦称为行列式交织方式。

具体过程如下图 3-1 所示,经过信道编码的编码序列 x m \mathbf{x}_m xm,进入大小为 M × N M \times N M×N 的寄存器阵列中。

[图 3-1 分组交织过程]

其中,交织器输出的第一块信息序列为

y 1 = ( x 11 , x 21 , … , x M 1 , x 12 , x 22 , … , x M 2 , … , x 1 N , x 2 N , … , x M N ) (3-13) \mathbf{y}_1 = (x_{11}, x_{21}, \dots, x_{M1}, x_{12}, x_{22}, \dots, x_{M2}, \dots, x_{1N}, x_{2N}, \dots, x_{MN}) \quad \text{(3-13)} y1=(x11,x21,,xM1,x12,x22,,xM2,,x1N,x2N,,xMN)(3-13)

鉴于该方法的架构设计简洁明了,并兼具软硬件两方面的适配性能,故而在移动通信、数字电视传输、数据存储及深空通信等众多应用场景中都获得了普及。尽管如此,该交织机制在处理能力上存在明显不足,其最大并行处理的数据规模受限为 M × N M \times N M×N,这一限制无疑会导致系统内部时间延长的加剧。为消弭此项不足,后续将引入一种新型交织方案,该方案具备更低的延时特性。

3.3.2 卷积交织

卷积交织器作为一类兼具高效性与连续操作特性的交织装置,其核心运行机制围绕交织深度 τ \tau τ 及交织宽度 B B B 两个关键参数展开。分组交织的执行机制如下:初始阶段,数据以顺序方式输入至卷积交织器中,各寄存器的延迟单元数量严格遵循序号递增规律,即每个单元的延迟与序号 j j j 呈正比例关系;进入中间阶段,第 j j j 个寄存器所储存的数据将经过精确调制后立即传输;最终阶段,解交织过程采用反向延迟方案,解交织延迟单元数设定为 τ − j \tau - j τj,通过这种反向递减的延迟设计,成功实现原始数据序列的准确还原。

[图 3-2 卷积交织过程]

具体过程如图 3-2 所示,经过信道编码的编码序列 x m \mathbf{x}_m xm,进入交织深度为 τ \tau τ、交织宽度为 B B B 的卷积交织器中,可以得到卷积交织后的半无限大矩阵

y = ( x 1 x 2 ⋯ x B x B + 1 ⋯ x 1 + B x 2 + B ⋯ x 2 B x 2 B + 1 ⋯ ⋮ ⋮ ⋱ ⋮ ⋮ x 1 + ( τ − 1 ) B x 2 + ( τ − 1 ) B ⋯ x τ B x τ B + 1 ⋯ ) (3-14) \mathbf{y} = \begin{pmatrix} x_{1} & x_{2} & \cdots & x_{B} & x_{B+1} & \cdots \\ x_{1+B} & x_{2+B} & \cdots & x_{2B} & x_{2B+1}& \cdots \\ \vdots & \vdots & \ddots & \vdots & \vdots & \\ x_{1+(\tau-1)B} & x_{2+(\tau-1)B} & \cdots & x_{\tau B} & x_{\tau B+1} & \cdots \end{pmatrix} \quad \text{(3-14)} y= x1x1+Bx1+(τ1)Bx2x2+Bx2+(τ1)BxBx2BxτBxB+1x2B+1xτB+1 (3-14)

深入分析矩阵结构可见,第 i i i 行的元素形成独特序列,该序列较第 j j j 行相应元素序列整体表现出清晰的右移 i − j i-j ij 特征。接收端执行解交织功能时,需将接收数据精巧地部署于寄存器矩阵中。随后通过特定指令,促使第 i i i 行元素向量实施左移 i − j i-j ij 操作,从而高效完成解交织过程。此机制确保了序列元素的精确对位,有效恢复了原始数据结构。

卷积交织通过不间断地、无缝地处理数据流,避免了对整块数据加载的复杂性,从而使其成为实时性需求严苛的通信场景或流式传输环境中的高效选择。此外,缓冲器延迟的精巧设计不仅保留了低复杂度的特性,更显著提升了系统的抗干扰性能,实现了优异的性能水平。

3.3.3 随机交织

随机交织是一种灵活运用随机化逻辑的序列交织方式,其关键要素涉及交织深度 N N N 及特定的随机映射规则 π \pi π π ( i ) \pi(i) π(i) 定义了序列第 i i i 个元素对应的目标位置编号。具体实现流程如下:首先,设计出精确的随机交织索引表,该表指导原始信息通过位置置换形成交织结构;接着,通过该表完成数据的逐项重排,生成目标序列。在解交织环节,接收方利用反映射索引表执行逆向映射,按此逻辑逐步还原出未经处理的原始数据集。

当交织索引表为 [ π ( 1 ) , π ( 2 ) , … , π ( N ) ] [\pi(1), \pi(2), \dots, \pi(N)] [π(1),π(2),,π(N)],信道编码序列为 x = [ x 1 , x 2 , … , x N ] \mathbf{x} = [x_1, x_2, \dots, x_N] x=[x1,x2,,xN],则经过随机交织后的数据为 y = [ x π ( 1 ) , x π ( 2 ) , … , x π ( N ) ] \mathbf{y} = [x_{\pi(1)}, x_{\pi(2)}, \dots, x_{\pi(N)}] y=[xπ(1),xπ(2),,xπ(N)]

随机交织技术采用伪随机或真随机生成的索引序列来实现数据重排序,由此产生的输出序列具备高度不确定性,并展现出显著的随机性。该技术通过将原本连续的数据单元分散到相距较远的存储点,有效降低了传输链路中突发性错误对数据完整性的损害。实践中,该技术与低密度奇偶校验码(LDPC)码相结合,能够强化信道纠错能力,从而显著增进数据传输的稳定性和可靠性,常见于无线通信、卫星传输及光纤网络等现代通信系统中。

3.4 LDPC 的译码算法

基于线性码的解码理论,解码的目标是利用已知的信道特性以及已知信息对其后验概率进行估计,由此得到满足特定条件的噪声信息的估计值。尽管 LDPC 码属于线性分组码,但其校验矩阵的显著稀疏特性使其线性译码复杂度降至极低,展现出明显优势。本章所讨论的软判决解码过程主要采用消息传递机制,该机制以丰富的可靠性度量为基础,通过在 Tanner 图的多条路径上,于校验节点与变量节点间进行反复交错的迭代运算来实现解码。每次精准的迭代循环中,变量节点会严格依据邻近校验节点传递的数据,对自身状态进行精密的调整,并随后将修订后的信息转发给紧邻的校验节点;相应地,校验节点在获取来自变量节点的数据后,也将执行全面的参数更新,并将优化后的信息传递给邻近的变量节点;最终阶段,变量节点整合最初数据与最新数据,完成解码并输出结果。本章节将详细阐述在 LDPC 码框架内广泛应用的软判决解码方案,具体包括置信传播(BP)解码算法、最小和(MS)解码算法、归一化最小和(NMS)解码算法、偏移最小和(OMS)解码算法以及分层解码算法。

在校验矩阵 H M × N \mathbf{H}_{M \times N} HM×N,规格为 M × N M \times N M×N 的条件下,界定变量节点集 V = { v 1 , v 2 , … , v N } V = \{v_1, v_2, \dots, v_N\} V={v1,v2,,vN} 以容纳所有变量节点,并设定校验节点集 C = { c 1 , c 2 , … , c M } C = \{c_1, c_2, \dots, c_M\} C={c1,c2,,cM} 来包含全部校验节点。 q m n q_{mn} qmn 是变量节点传递给校验节点的信息, r m n r_{mn} rmn 是校验节点传递给变量节点的信息。 N ( m ) N(m) N(m) 是传递消息给校验节点 c m c_m cm 的变量节点的集合, M ( n ) M(n) M(n) 是传递消息给变量节点 v n v_n vn 的校验节点的集合。 N ( m ) ∖ n N(m)\setminus n N(m)n 表示除去变量节点 v n v_n vn 的集合, M ( n ) ∖ m M(n)\setminus m M(n)m 表示除去校验节点 c m c_m cm 的集合。

记传输码字为 x = ( x 1 , x 2 , … , x N ) \mathbf{x} = (x_1, x_2, \dots, x_N) x=(x1,x2,,xN),经过二进制相移键控(BPSK)调制,码字映射成 s = ( s 1 , s 2 , … , s N ) \mathbf{s} = (s_1, s_2, \dots, s_N) s=(s1,s2,,sN),映射关系为 s i = 1 − 2 x i s_i = 1 - 2x_i si=12xi i = 0 , 1 , … , N − 1 i = 0, 1, \dots, N-1 i=0,1,,N1。然后经过均值为 0,方差为 σ 2 \sigma^2 σ2 的加性高斯白噪声(AWGN)信道,该信道产生均值为 0,方差为 σ 2 \sigma^2 σ2,单边功率谱密度为 N 0 N_0 N0 的高斯变量 n i n_i ni i = 0 , 1 , … , N − 1 i = 0, 1, \dots, N-1 i=0,1,,N1 作为噪声,加到传输码字上,得到 y i = s i + n i y_i = s_i + n_i yi=si+ni。在接收端译码得到的码字为 x ^ \hat{\mathbf{x}} x^。发送端每个比特等概率发送, P ( x i = 0 ) = P ( x i = 1 ) = 1 / 2 P(x_i = 0) = P(x_i = 1) = 1/2 P(xi=0)=P(xi=1)=1/2

3.4.1 置信传播(BP)译码算法

置信传播(BP)译码算法主要包含概率域 BP 算法与对数域 BP 算法两类。概率域 BP 算法在迭代过程中通过概率值传递信息,其优点在于能够有效应用于多元 LDPC 码,但缺点是由于需要执行大量的乘法运算,导致计算负担沉重,不仅延长了译码时间,还使得硬件资源消耗过大,限制了其实际应用。与此不同,对数域 BP 算法则采用对数似然比作为信息载体,主要针对二元 LDPC 码进行设计。通过对数域的巧妙转换,该算法能够将复杂的乘法运算简化为加法操作,大幅提升了运算效率。为进一步简化分析,本部分后续将集中讨论对数域 BP 算法。

第一步:首要环节为节点变量的初始化。

参照式 (3-16) 精确计算变量节点的初始对数似然比 L ( P n ) L(P_n) L(Pn),并沿着 Tanner 图的结构,将该数值沿着边传递至邻近的校验节点 r m n r_{mn} rmn m , n m, n m,n,其传播规则遵循式 (3-17),同时将初始化迭代计数器 k k k 的初始值设定为 1。

L ( P n ) = ln ⁡ P ( x n = 0 ∣ y n ) P ( x n = 1 ∣ y n ) = 2 σ 2 y n (3-16) L(P_n) = \ln \frac{P(x_n = 0 | y_n)}{P(x_n = 1 | y_n)} = \frac{2}{\sigma^2} y_n \quad \text{(3-16)} L(Pn)=lnP(xn=1∣yn)P(xn=0∣yn)=σ22yn(3-16)

q m n = L ( P n ) (3-17) q_{mn} = L(P_n) \quad \text{(3-17)} qmn=L(Pn)(3-17)

第二步:校验节点更新。

接收到变量节点 n ′ ∈ N ( m ) ∖ n n' \in N(m) \setminus n nN(m)n 传递的信息后,校验节点 c m c_m cm 更新,并将更新后的信息沿着边传递给与之相连的变量节点。本次消息更新利用前一次迭代中相邻变量节点传递来的信息,但不包括即将要传递给的变量节点的前一次信息,这样可以避免错误信息被来回迭代。校验节点 c m c_m cm 更新式如下:

r m n = 2 tanh ⁡ − 1 ( ∏ n ′ ∈ N ( m ) ∖ n tanh ⁡ ( q m n ′ 2 ) ) (3-18) r_{mn} = 2 \tanh^{-1} \left( \prod_{n' \in N(m) \setminus n} \tanh \left( \frac{q_{mn'}}{2} \right) \right) \quad \text{(3-18)} rmn=2tanh1 nN(m)ntanh(2qmn) (3-18)

第三步:变量节点更新。

变量节点 v n v_n vn n ∈ M ( m ) ∖ m n \in M(m) \setminus m nM(m)m 将依据校验节点提供的权威数据,启动变量节点 v n v_n vn 更新程序:

q m n = L ( P n ) + ∑ m ′ ∈ M ( n ) ∖ m r m ′ n (3-19) q_{mn} = L(P_n) + \sum_{m' \in M(n) \setminus m} r_{m'n} \quad \text{(3-19)} qmn=L(Pn)+mM(n)mrmn(3-19)

第四步:将整合所有已收集和更新的数据,集中力量展开解码尝试,最终生成并输出解码结果。

当前变量节点信息为 Q n Q_n Qn 为:

Q n = L ( P n ) + ∑ m ′ ∈ M ( n ) r m ′ n (3-20) Q_n = L(P_n) + \sum_{m' \in M(n)} r_{m'n} \quad \text{(3-20)} Qn=L(Pn)+mM(n)rmn(3-20)

第五步,对涉及译码结果的硬判决处理:

x ^ n = { 0 , Q n ≥ 0 1 , Q n < 0 (3-21) \hat{x}_n = \begin{cases} 0, & Q_n \ge 0 \\ 1, & Q_n < 0 \end{cases} \quad \text{(3-21)} x^n={0,1,Qn0Qn<0(3-21)

H x ^ T = 0 \mathbf{H} \hat{\mathbf{x}}^T = 0 Hx^T=0,当迭代次数达到预设的最大值时,解码结果 x ^ \hat{\mathbf{x}} x^ 将被输出;否则,需返回第二步,重新配置并优化校验节点数据,然后继续进行后续的迭代过程, k = k + 1 k = k+1 k=k+1

3.4.2 最小和(MS)译码算法及其修正算法

在对数域 BP 译码算法以及其修正形式最小和(MS)译码算法的运算过程中,校验节点更新是计算负担的主要源头,因为该环节必须反复执行针对双曲函数的精密乘法操作,这造成了显著的运算开销并延缓了译码过程速率。针对这一复杂性困境,学术界投入大量研究,最终通过创新设计,研发出了最小和(MS)算法,该算法专门致力于优化运算过程,减轻计算压力,显著提升了整体译码性能。

首先定义函数:

Φ ( x ) = − ln ⁡ tanh ⁡ ( x 2 ) = ln ⁡ e x + 1 e x − 1 (3-22) \Phi(x) = -\ln \tanh \left( \frac{x}{2} \right) = \ln \frac{e^x + 1}{e^x - 1} \quad \text{(3-22)} Φ(x)=lntanh(2x)=lnex1ex+1(3-22)

根据 Φ ( x ) \Phi(x) Φ(x) Φ − 1 ( x ) \Phi^{-1}(x) Φ1(x) 的函数性质可知:

Φ − 1 ( x ) = 2 tanh ⁡ − 1 ( e − x ) (3-23) \Phi^{-1}(x) = 2 \tanh^{-1}(e^{-x}) \quad \text{(3-23)} Φ1(x)=2tanh1(ex)(3-23)

Φ − 1 ( Φ ( x ) ) = x , Φ ( x ) = Φ − 1 ( x ) (3-24) \Phi^{-1}(\Phi(x)) = x, \quad \Phi(x) = \Phi^{-1}(x) \quad \text{(3-24)} Φ1(Φ(x))=x,Φ(x)=Φ1(x)(3-24)

因此 BP 算法中校验节点更新式 (3-18) 可以推导为:

r m n = ( ∏ n ′ ∈ N ( m ) ∖ n sgn ( q m n ′ ) ) ⋅ Φ ( ∑ n ′ ∈ N ( m ) ∖ n Φ ( ∣ q m n ′ ∣ ) ) (3-25) r_{mn} = \left( \prod_{n' \in N(m) \setminus n} \text{sgn}(q_{mn'}) \right) \cdot \Phi \left( \sum_{n' \in N(m) \setminus n} \Phi(|q_{mn'}|) \right) \quad \text{(3-25)} rmn= nN(m)nsgn(qmn) Φ nN(m)nΦ(qmn) (3-25)

根据 Φ ( x ) \Phi(x) Φ(x) 的函数性质: Φ ( Φ ( x ) ) = x \Phi(\Phi(x)) = x Φ(Φ(x))=x,得到 (3-26),可以对式 (3-25) 进一步化简,由此得到 MS 算法的校验节点更新式 (3-27):

Φ ( ∑ i Φ ( ∣ q m n ′ ∣ ) ) ≈ min ⁡ n ′ ∈ N ( m ) ∖ n ∣ q m n ′ ∣ (3-26) \Phi\left( \sum_i \Phi(|q_{mn'}|) \right) \approx \min_{n' \in N(m) \setminus n} |q_{mn'}| \quad \text{(3-26)} Φ(iΦ(qmn))nN(m)nminqmn(3-26)

r m n = ( ∏ n ′ ∈ N ( m ) ∖ n sgn ( q m n ′ ) ) ⋅ min ⁡ n ′ ∈ N ( m ) ∖ n ∣ q m n ′ ∣ (3-27) r_{mn} = \left( \prod_{n' \in N(m) \setminus n} \text{sgn}(q_{mn'}) \right) \cdot \min_{n' \in N(m) \setminus n} |q_{mn'}| \quad \text{(3-27)} rmn= nN(m)nsgn(qmn) nN(m)nminqmn(3-27)

针对完整的译码迭代过程进行深入探究,MS 算法创新性地将 tanh 函数的计算与乘法运算合并,转化为优化的符号运算与最小值搜索算法,极大简化了校验节点更新的计算负担,显著增强了运算性能。然而,由于 BP 算法所提供的校验节点信息绝对值明显低于 MS 算法中的对应信息,这直接导致了译码性能的显著下降。为应对挑战,研究人员提出了 MS 算法的改进方案,其中归一化最小和译码算法(Normalized MS,NMS)与偏移最小和译码算法(Offset MS,OMS)尤为典型。这两种修正策略的共同特点是,通过在最小值计算中引入非负常数进行加法或减法操作来调整译码过程。

算法 3.1 对数域水平分层 NMS 译码算法

初始化:根据式 (3-16) 计算每个变量节点的初始信息,然后根据式 (3-17) 初始化变量节点 v n v_n vn 传递给校验节点 c m c_m cm 的信息 q m n q_{mn} qmn,并将校验节点传递给变量节点的信息 r m n r_{mn} rmn 初始化为 0,初始化迭代次数 i t e r = 1 iter = 1 iter=1

逐层更新变量节点:

for l a y e r = 1 layer = 1 layer=1 to M M M do

  1. 更新与校验节点 c m c_m cm 相连的变量节点传递的信息

    for n ∈ N ( m ) n \in N(m) nN(m) do

    q ~ m n = L ( P n ) + ∑ m ′ ∈ M ( n ) , m ′ < m r m ′ n \tilde{q}_{mn} = L(P_n) + \sum_{m' \in M(n), m' < m} r_{m'n} q~mn=L(Pn)+mM(n),m<mrmn ([公式:对应原文中的等式])

    end for

  2. 校验节点 c m c_m cm 更新后传递信息给变量节点

    for n ∈ N ( m ) n \in N(m) nN(m) do

    按式 (2.28) 计算 r m n r_{mn} rmn ([公式:原文中为 2.28,应为 3.28])

    end for

  3. 变量节点更新自身信息,尝试译码输出

    for n ∈ N ( m ) n \in N(m) nN(m) do

    Q n = L ( P n ) + ∑ m ′ ∈ M ( n ) r m ′ n Q_n = L(P_n) + \sum_{m' \in M(n)} r_{m'n} Qn=L(Pn)+mM(n)rmn

    end for

end for

至此完成一轮迭代,对译码结果进行硬判决。若 H x ^ T = 0 \mathbf{H} \hat{\mathbf{x}}^T = 0 Hx^T=0,或迭代次数达到最大迭代次数,则输出译码结果;否则进行下一次迭代, i t e r = i t e r + 1 iter = iter + 1 iter=iter+1

NMS 译码算法是通过乘以一个常量 α \alpha α 来做进一步改进的,改进后的校验节点更新式为

r m n = α ⋅ ( ∏ n ′ ∈ N ( m ) ∖ n sgn ( q m n ′ ) ) ⋅ min ⁡ n ′ ∈ N ( m ) ∖ n ∣ q m n ′ ∣ (3-28) r_{mn} = \alpha \cdot \left( \prod_{n' \in N(m) \setminus n} \text{sgn}(q_{mn'}) \right) \cdot \min_{n' \in N(m) \setminus n} |q_{mn'}| \quad \text{(3-28)} rmn=α nN(m)nsgn(qmn) nN(m)nminqmn(3-28)

其中 α \alpha α 称为归一化因子,取值范围是 0 < α ≤ 1 0 < \alpha \le 1 0<α1 α \alpha α 的最佳取值随着迭代次数和信噪比的变化而变化,但实际工程中为了简单起见, α \alpha α 常取一个定值,估计最佳 α \alpha α 的一个方法是密度演进(DE)。

OMS 译码算法是在 MS 算法求得校验节点信息的基础上减去一个 β \beta β 因子来进行修正的,其中 β > 0 \beta > 0 β>0,同时要求相减的结果非负。改进后的校验节点更新式为:

r m n = max ⁡ ( ( ∏ n ′ ∈ N ( m ) ∖ n sgn ( q m n ′ ) ) ⋅ min ⁡ n ′ ∈ N ( m ) ∖ n ∣ q m n ′ ∣ − β ,   0 ) (3-29) r_{mn} = \max\left( \left( \prod_{n' \in N(m) \setminus n} \text{sgn}(q_{mn'}) \right) \cdot \min_{n' \in N(m) \setminus n} |q_{mn'}| - \beta, \ 0 \right) \quad \text{(3-29)} rmn=max nN(m)nsgn(qmn) nN(m)nminqmnβ, 0 (3-29)

[图 3-3 泛洪译码算法与分层译码算法的迭代示意图]

3.4.3 分层译码算法

前面介绍的译码算法统称为泛洪译码算法,每一次迭代中,要等到所有校验节点完成更新,再更新变量节点,数据之间相互独立,易于硬件实现,译码速度快。但由于消息传递过程中无法使用最新的信息,译码收敛的速度较慢,硬件资源占用大。为实现译码效率与硬件成本之间的最优匹配,研究人员探索性地采用了一种分层(layered)译码方案。该方案通过将复杂的 LDPC 码结构解构为若干级联逻辑单元,每个单元独立构成一个解码层级,层级间以串行迭代形式交换信息,单元内部则执行全并行迭代操作,并支持 BP、MS、NMS、OMS 等先进解码技术的灵活选用。在分层迭代过程中,各层级间的信息传递遵循特定时序:仅当前层级中所有校验节点的解码信息完成更新后,才会同步更新后续层级的变量节点数据。这一设计巧妙地使下层校验节点在解码时能够即时获取上层变量节点最新的中间结果,从而极大缩短了迭代收敛时间,有效提升了译码性能表现。

分层译码算法的单次迭代过程,可定义为所有校验节点完成一轮信息全量更新。两种译码方式的消息传递机制详见图 3-3,图中直观展现了变量节点更新策略的关键差异。泛洪译码在一次迭代内即可同步完成对全部校验节点的更新操作,而分层算法则采用更为精密的顺序化处理方式:首先,由底层 ( r m − 1 , n r_{m-1,n} rm1,n) 与次底层信息 ( r m − 2 , n r_{m-2,n} rm2,n) 联合作用更新校验节点 c m c_m cm;次之,校验节点通过内部迭代实现自我优化;继而,变量节点 v n v_n vn v n − 1 v_{n-1} vn1 在第三层迭代时将更新后的信息传递给校验节点 c m − 1 c_{m-1} cm1;最终,当所有校验节点均获得充分更新,标志着该轮迭代结束。


4 基于交织技术的 LDPC 码性能研究

本小节将以前文所梳理的 LDPC 码基础理论为根基,系统性地开展基于 MATLAB 平台的 LDPC 编码方案搭建工作。作为信道编码领域的核心技术之一,LDPC 码凭借其逼近香农极限的优异性能及相对可行的译码复杂度,在现代通信系统中得到了广泛应用。本节内容旨在将抽象的理论模型转化为可执行、可验证的仿真系统,从而为后续性能分析与算法优化提供可靠的实验基础。

4.1 系统设计

在这里插入图片描述

[图 4.1 发送端系统设计]

本文构建了一个基于 LDPC 编码的数字通信系统,重点在于通过引入多种交织策略,系统评估其在瑞利衰落信道环境下的误码性能表现。在发送端,系统设计了两种并行链路结构以形成性能对比:其一为未采用信道编码的基准 QPSK 链路,用于提供性能对比的下界参考;其二为基于 LDPC 编码的链路,该链路在编码后分别对输出比特流采用随机交织、分组交织、卷积交织以及无交织四种不同处理方式,以研究交织类型对抗衰落能力的影响。所有链路生成的比特流均经过 QPSK 调制,采用格雷映射以减小相邻符号间的误比特率,随后通过脉冲成型滤波与低通滤波器处理后发射,从而有效模拟实际通信系统中因带宽限制而产生的带限信道特性,具体实现结构如图 4.1 所示。系统参数如表 4-1 所示。

表 4-1 系统参数

系统基础参数
参数 说明
信息速率 10 Mbps 二进制信息速率
调制阶数 4 QPSK 调制
信息比特长度 648000
符号率 5 Msym/s
采样率 20 MHz
成型滤波参数
滚降因子 0.35 平方根升余弦滤波器
滤波器跨度 6 符号长度
低通截止频率因子 648000
符号率 0.5 用于模拟带限信道,实际截止频率 ≈5 MHz
低通滤波器阶数 64 FIR 滤波器阶数
LDPC 参数
原型矩阵 P 12×24 矩阵 基于 IEEE 802.11n 结构自定义
子块大小 54 扩展得到准循环 LDPC 矩阵
码长 1296 bit 编码后每块长度
码率 1/2 每块信息比特数
译码算法 归一化最小和 迭代次数 50,缩放因子 0.75
在这里插入图片描述

[图 4.2 接收端系统设计]

经过瑞利衰落信号后,接收端首先对信号进行迫零均衡以消除信道衰落影响,再经过与发送端匹配的根升余弦滤波和下采样恢复符号,随后依据对应的交织类型执行反交织,再送入归一化最小和 LDPC 译码器。通过对比无 LDPC 编码、不同交织方式下 LDPC 编码系统的性能差异,从而验证交织技术对抵抗突发错误、提升衰落信道下 LDPC 编码性能的有效性,如图 4.2 所示。
在这里插入图片描述

[图 4.3 调制及成形滤波效果] (包含四张小图:眼图、频谱、星座图等)

根据图 4.3,可以看到:a) 眼图张开清晰,无明显闭合,表明码间串扰较小,在可接受范围内。b) 成型滤波后信号频谱主瓣宽度约为 5 MHz,与 QPSK 符号率 5 Msym/s 及滚降因子 0.35 的理论值一致,带外衰减良好,满足带限信道要求。c) 星座点集中在四个理想位置附近,无明显旋转或畸变,说明调制和滤波对信号相位的影响较小,接收端可正确解调。综上,该系统参数设置合理,QPSK 调制及成型滤波环节工作正常,信号质量良好,为后续 LDPC 编码及交织性能评估奠定了可靠的物理层基础。

4.2 不同交织技术下误码率曲线

在这里插入图片描述

[图 4.4 不同交织方案下的误码率]

根据图 4.4 可以得到结论如下:

a) 成型匹配滤波的必要性:未经成型匹配滤波的误码率曲线显著高于经过成型匹配滤波。这表明在瑞利衰落信道中,未进行成型匹配滤波时,系统受码间干扰和带外噪声影响严重,误码率性能较差。经过成型匹配滤波后,系统能有效抑制干扰,在相同信噪比下获得更低的误码率,体现了脉冲成型与匹配滤波在带限信道中的重要作用。

b) LDPC 码结合交织器的性能增益:在相同 LDPC 编码基础上,引入不同交织方式后,误码率性能均得到大幅提升,具体表现为:

  • LDPC+随机交织 性能最优:在相同信噪比下,误码率最低。此优势源于随机交织有效将突发错误分解为独立随机错误,从而充分激活 LDPC 码的强大纠错性能。
  • LDPC+卷积交织 次之:其性能略逊于随机交织,但依然显著优于无交织情况。卷积交织通过深度交织能有效对抗深衰落引起的连续错误。
  • LDPC+分组交织 再次之:虽然也带来了明显的编码增益,但在对抗长突发错误的能力上弱于随机交织和卷积交织,性能居中。
  • LDPC+无交织 性能最差:在瑞利衰落信道下,若不进行交织,信道产生的连续错误会超出 LDPC 码的纠错能力范围,导致误码率下降缓慢。

4.3 不同译码算法下误码率曲线

在这里插入图片描述

[图 4.5 不同译码算法下的误码率曲线]

根据图 4.5 可以得到结论如下:

a) 成型匹配滤波是 LDPC 编码系统发挥性能的前提:无论采用何种译码算法,先进行成型匹配滤波都能为后续信道编码提供更干净的接收信号,避免因码间干扰掩盖编码增益。

b) 译码算法之间的性能比较

  • 最小和译码 实现最简单,但性能损失最大。
  • 归一化最小和与偏移最小和译码 性能次之。它们是对最小和译码的修正算法,通过引入缩放因子或偏移量来补偿近似误差,在复杂度和性能之间取得平衡,但性能仍略逊于 BP 译码。
  • BP 类译码算法(BP、分层 BP) 性能最优,适用于对误码率要求严苛的场景,但计算复杂度较高。

4.4 不同编码参数对误码率影响

在这里插入图片描述

[图 4.6 LDPC 与卷积码的误码率曲线]

根据图 4.6 可以看到,LDPC 编码在本组数据中表现最佳,显著优于未编码系统。卷积码在低信噪比下与 LDPC 性能相近,但 LDPC 在高信噪比区域下降趋势更明显。使用软判决的卷积译码性能优于硬判决卷积译码,这是因为软判决保留了接收信号幅度的细节信息,充分利用了信道输出的置信度,从而在译码过程中做出更可靠的路径选择。

[图 4.7 不同码率的误码率曲线图]
在这里插入图片描述

根据图 4.7 可以看到,随着信噪比增加,所有码率下的误码率均迅速下降。此外,在相同信噪比下,码率越低(冗余越大),误码率越低。这是因为,码率越低,意味着在传输的每比特信息中加入了越多的冗余校验比特,从而提供了更强的纠错能力。低码率提供了更强的纠错能力,但牺牲了频谱效率;高码率频谱效率高,但误码率略高。


部分源码:

H = genH(512,1920);
% 理想QPSK星座图位置(格雷映射,单位平均功率)
standard_constellation_Q = [1+1i, -1+1i, -1-1i, 1-1i] .* (1/sqrt(MQ));

%%%%%%%%%%%%%%%%%% 信源生成 %%%%%%%%%%%%%%%%%%
rng default; % 保证可重现
message = randi([0 1], N, 1);   % 生成随机二进制信源

% QPSK调制:每2个比特映射为1个复数符号
message_mod_Q = pskmod(message, MQ, pi/4, "InputType", "bit", PlotConstellation=true);
message_mod_Q=message_mod_Q./sqrt(MQ);
% 绘制QPSK调制星座图
scatterplot(message_mod_Q, MQ);
title('QPSK调制星座图');
drawnow;
h = findobj(gca, 'Type', 'line');
set(h, 'MarkerSize', 20);

% 绘制信号频谱
L_sym = length(message_mod_Q);
figure;
plot(linspace(-1, 1, L_sym), abs(fftshift(fft(message_mod_Q))));
xlabel("\omega / \pi");
ylabel("幅值");
title("QPSK数字调制后信号频谱");

%%%%%%%%%%%%%%%%%% 上采样 %%%%%%%%%%%%%%%%%
up16_message_mod_tmp_Q = upsample(message_mod_Q, up_sample);
up16_message_mod_Q = reshape(up16_message_mod_tmp_Q.', 1, []);

figure;
h2=eyediagram(real(up16_message_mod_Q(1:eye_sig_count)), up_sample);
set(findobj(h2, 'Type', 'line'), 'Color', 'b');
set(gca, 'Color', 'w');
title('QPSK成型滤波前眼图(实部)');
%%%%%%%%%%%%%%%%%%% 成型滤波 %%%%%%%%%%%%%%%%%
rcos = rcosdesign(rcos_fator, span, up_sample, "sqrt");
rcos_delay = grpdelay(rcos, 1, 1);

rcos_filter_input_Q = [up16_message_mod_Q, zeros(1, rcos_delay)];
rcos_filter_output_Q = filter(rcos, 1, rcos_filter_input_Q);
rcos_message_mod_Q = rcos_filter_output_Q(rcos_delay+1:end);

figure;
h3=eyediagram(real(rcos_message_mod_Q(1:eye_sig_count)), up_sample);
set(findobj(h3, 'Type', 'line'), 'Color', 'b');
set(gca, 'Color', 'w');
title('QPSK成型滤波前眼图(实部)');
% 绘制成型滤波后的星座图(匹配下采样点)
scatterplot(rcos_message_mod_Q(1:up_sample:end), MQ);
title('QPSK成型滤波后星座图');

L_rcos = length(rcos_message_mod_Q);
figure;
plot(linspace(-1, 1, L_rcos), 20*log10(abs(fftshift(fft(rcos_message_mod_Q)))));
xlabel("\omega / \pi");
ylabel("幅值");
title("QPSK插值、成型滤波后信号频谱");

%%%%%%%%%%%% 初始化性能指标存储数组%%%%%%%%%
bit_ratio_Q = zeros(1, length(SNR));
bit_count_Q = zeros(1, length(SNR));
bit_ratio_Q_t = zeros(1, length(SNR));
bit_count_Q_t = zeros(1, length(SNR));
% ====== c ======
Rs_Q = Rb / log2(MQ);      % QPSK 符号率
Fs_Q = up_sample * Rs_Q;   % QPSK 采样率


lpFc_Q = min(4 * Rs_Q, Fs_Q/2 *0.9999) .* factor;
Nfir = 64;
Wn_Q = lpFc_Q/(Fs_Q/2);
b_lp_Q = fir1(Nfir, Wn_Q, hann(Nfir+1));

b_lp_Q_delay=grpdelay(b_lp_Q,1,1);

try
    [rcos_message_mod_Q_prefilter, low_pass_Q] = lowpass(rcos_message_mod_Q, lpFc_Q, Fs_Q*1.1);
        up16_message_mod_Q_prefilter=lowpass(up16_message_mod_Q, lpFc_Q, Fs_Q);
catch
    rcos_message_mod_Q_prefilter_input = [rcos_message_mod_Q, zeros(1, b_lp_Q_delay)];
rcos_message_mod_Q_prefilter_output = filter(b_lp_Q, 1, rcos_message_mod_Q_prefilter_input);
rcos_message_mod_Q_prefilter = rcos_message_mod_Q_prefilter_output(b_lp_Q_delay+1:end);

    up16_message_mod_Q_prefilter_input = [up16_message_mod_Q, zeros(1, b_lp_Q_delay)];
up16_message_mod_Q_prefilter_output = filter(b_lp_Q, 1, up16_message_mod_Q_prefilter_input);
up16_message_mod_Q_prefilter = rcos_message_mod_Q_prefilter_output(b_lp_Q_delay+1:end);

end

在这里插入图片描述
代码获取方式:见vx公众号

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐