• 文件浏览器
  • 000 信息论 (Information Theory)知识框架 001 《信息论:历史背景与深远影响》 002 《信息论:基本概念与核心原理深度解析》 003 《信息论的基石:概率论与随机过程深度解析》 004 《信息论:信源编码基本原理深度解析》 005 《信息论:无损信源编码深度解析 (Information Theory: In-Depth Analysis of Lossless Source Coding)》 006 《信息论之有损信源编码:原理、理论与实践》 007 《信息论:信道模型理论、分析与应用全解》 008 《信息论核心:信道容量理论与应用》 009 《信道编码与纠错:从原理到实践的深度解析(Channel Coding and Error Correction: In-depth Analysis from Principles to Practice)》 010 《信息论:多用户信道深度解析 (Information Theory: In-depth Analysis of Multi-User Channels)》 011 《网络编码:信息论视角下的全面理论与深度应用解析 (Network Coding: Comprehensive Theory and In-depth Application Analysis from an Information Theory Perspective)》 012 《无线网络信息论:从基础到前沿》 013 《信息论:通信系统全面深度解析 (Information Theory: A Comprehensive and In-Depth Analysis of Communication Systems)》 014 《信息论:数据压缩与存储——原理、算法与应用深度解析》 015 《信息论与密码学:原理、应用与深度解析》 016 《信息论、统计推断与机器学习:从基础到前沿》 017 《信息论在生物信息学中的全面与深度解析》 018 《信息论与量子信息论:从经典基础到量子前沿》 019 《信息论的普适原理与跨领域应用》 020 《多终端信息论:原理、模型与前沿(Multi-Terminal Information Theory: Principles, Models, and Frontiers)》 021 《信息论与统计学:原理、方法与应用 (Information Theory and Statistics: Principles, Methods, and Applications)》 022 《信息论与计算复杂性:从基础到前沿》 023 《信息论的哲学意义:从比特到存在 (Philosophical Implications of Information Theory: From Bit to Being)》 024 《信息论的未来:趋势、挑战与前沿探索 (The Future of Information Theory: Trends, Challenges, and Frontier Exploration)》

    009 《信道编码与纠错:从原理到实践的深度解析(Channel Coding and Error Correction: In-depth Analysis from Principles to Practice)》


    作者Lou Xiao, gemini创建时间2025-04-18 22:51:18更新时间2025-04-18 22:51:18

    🌟🌟🌟本文案由Gemini 2.5 Flash Preview 04-17创作,用来辅助学习知识。🌟🌟🌟

    书籍大纲

    ▮▮▮▮ 1. chapter 1:引言(Introduction)
    ▮▮▮▮▮▮▮ 1.1 信息论(Information Theory)概述
    ▮▮▮▮▮▮▮ 1.2 信道编码(Channel Coding)的作用与重要性
    ▮▮▮▮▮▮▮ 1.3 纠错编码(Error Correction Coding)的基本思想
    ▮▮▮▮▮▮▮ 1.4 历史回顾与发展趋势
    ▮▮▮▮▮▮▮ 1.5 本书结构与内容概览
    ▮▮▮▮ 2. chapter 2:数学基础(Mathematical Preliminaries)
    ▮▮▮▮▮▮▮ 2.1 群、环、域(Groups, Rings, Fields)
    ▮▮▮▮▮▮▮ 2.2 有限域(Finite Fields / Galois Fields, GF(q))
    ▮▮▮▮▮▮▮▮▮▮▮ 2.2.1 有限域的构造
    ▮▮▮▮▮▮▮▮▮▮▮ 2.2.2 有限域上的运算
    ▮▮▮▮▮▮▮ 2.3 向量空间(Vector Spaces)
    ▮▮▮▮▮▮▮ 2.4 多项式环(Polynomial Rings)
    ▮▮▮▮ 3. chapter 3:信道模型与编码基本概念(Channel Models and Basic Coding Concepts)
    ▮▮▮▮▮▮▮ 3.1 通信系统模型(Communication System Model)
    ▮▮▮▮▮▮▮ 3.2 离散无记忆信道(Discrete Memoryless Channels, DMC)
    ▮▮▮▮▮▮▮▮▮▮▮ 3.2.1 二元对称信道(Binary Symmetric Channel, BSC)
    ▮▮▮▮▮▮▮▮▮▮▮ 3.2.2 二元删除信道(Binary Erasure Channel, BEC)
    ▮▮▮▮▮▮▮ 3.3 加性高斯白噪声信道(Additive White Gaussian Noise Channel, AWGN)
    ▮▮▮▮▮▮▮ 3.4 码字(Codeword)与码本(Codebook)
    ▮▮▮▮▮▮▮ 3.5 码率(Code Rate)
    ▮▮▮▮▮▮▮ 3.6 汉明距离(Hamming Distance)与最小距离(Minimum Distance)
    ▮▮▮▮▮▮▮ 3.7 检错(Error Detection)与纠错(Error Correction)能力
    ▮▮▮▮ 4. chapter 4:线性分组码(Linear Block Codes)
    ▮▮▮▮▮▮▮ 4.1 定义与性质
    ▮▮▮▮▮▮▮ 4.2 生成矩阵(Generator Matrix)与编码
    ▮▮▮▮▮▮▮ 4.3 校验矩阵(Parity-Check Matrix)与伴随式(Syndrome)
    ▮▮▮▮▮▮▮ 4.4 伴随式译码(Syndrome Decoding)
    ▮▮▮▮▮▮▮ 4.5 汉明码(Hamming Codes)
    ▮▮▮▮▮▮▮ 4.6 其他经典线性码(Other Classic Linear Codes)
    ▮▮▮▮ 5. chapter 5:循环码(Cyclic Codes)
    ▮▮▮▮▮▮▮ 5.1 定义与多项式表示
    ▮▮▮▮▮▮▮ 5.2 生成多项式(Generator Polynomial)
    ▮▮▮▮▮▮▮ 5.3 循环码的编码
    ▮▮▮▮▮▮▮ 5.4 循环码的伴随式计算
    ▮▮▮▮▮▮▮ 5.5 BCH 码(Bose-Chaudhuri-Hocquenghem Codes)
    ▮▮▮▮▮▮▮ 5.6 Reed-Solomon (RS) 码
    ▮▮▮▮▮▮▮▮▮▮▮ 5.6.1 RS 码的构造
    ▮▮▮▮▮▮▮▮▮▮▮ 5.6.2 RS 码的译码基础
    ▮▮▮▮ 6. chapter 6:码的界限(Bounds on Codes)
    ▮▮▮▮▮▮▮ 6.1 球堆积界/汉明界(Sphere Packing Bound / Hamming Bound)
    ▮▮▮▮▮▮▮ 6.2 Singleton 界(Singleton Bound)与最大距离可分码(MDS Codes)
    ▮▮▮▮▮▮▮ 6.3 Gilbert-Varshamov 界(Gilbert-Varshamov Bound)
    ▮▮▮▮▮▮▮ 6.4 其他界限简介
    ▮▮▮▮ 7. chapter 7:卷积码(Convolutional Codes)
    ▮▮▮▮▮▮▮ 7.1 定义与编码器结构
    ▮▮▮▮▮▮▮ 7.2 状态图(State Diagram)与网格图(Trellis Diagram)
    ▮▮▮▮▮▮▮ 7.3 维特比(Viterbi)译码算法
    ▮▮▮▮▮▮▮▮▮▮▮ 7.3.1 硬判决维特比译码(Hard-Decision Viterbi Decoding)
    ▮▮▮▮▮▮▮▮▮▮▮ 7.3.2 软判决维特比译码(Soft-Decision Viterbi Decoding)
    ▮▮▮▮▮▮▮ 7.4 其他卷积码译码算法(如序列译码 Sequential Decoding)
    ▮▮▮▮ 8. chapter 8:信道容量与香农限(Channel Capacity and Shannon Limit)
    ▮▮▮▮▮▮▮ 8.1 互信息(Mutual Information)与信道容量(Channel Capacity)
    ▮▮▮▮▮▮▮ 8.2 离散无记忆信道容量的计算
    ▮▮▮▮▮▮▮ 8.3 AWGN 信道容量
    ▮▮▮▮▮▮▮ 8.4 香农信道编码定理(Shannon's Channel Coding Theorem)
    ▮▮▮▮▮▮▮ 8.5 可达性(Achievability)与反向定理(Converse)
    ▮▮▮▮▮▮▮ 8.6 香农限的意义与编码的挑战
    ▮▮▮▮ 9. chapter 9:现代编码理论 I:Turbo 码(Turbo Codes)
    ▮▮▮▮▮▮▮ 9.1 Turbo 码的起源与结构
    ▮▮▮▮▮▮▮ 9.2 并行级联卷积码(Parallel Concatenated Convolutional Codes, PCCC)
    ▮▮▮▮▮▮▮ 9.3 交织器(Interleaver)的作用
    ▮▮▮▮▮▮▮ 9.4 迭代译码(Iterative Decoding)原理
    ▮▮▮▮▮▮▮ 9.5 分量译码器(Component Decoders):MAP(Maximum A Posteriori)与 SOVA(Soft-Output Viterbi Algorithm)
    ▮▮▮▮▮▮▮ 9.6 外信息(Extrinsic Information)的交换
    ▮▮▮▮ 10. chapter 10:现代编码理论 II:LDPC 码(Low-Density Parity-Check Codes)
    ▮▮▮▮▮▮▮ 10.1 LDPC 码的起源与定义
    ▮▮▮▮▮▮▮ 10.2 校验矩阵(Parity-Check Matrix)与 Tanner 图(Tanner Graph)
    ▮▮▮▮▮▮▮ 10.3 LDPC 码的编码
    ▮▮▮▮▮▮▮ 10.4 LDPC 码的译码算法
    ▮▮▮▮▮▮▮▮▮▮▮ 10.4.1 置信传播(Belief Propagation, BP)算法
    ▮▮▮▮▮▮▮▮▮▮▮ 10.4.2 和积算法(Sum-Product Algorithm, SPA)
    ▮▮▮▮▮▮▮ 10.5 LDPC 码的构造方法
    ▮▮▮▮ 11. chapter 11:高级译码技术与迭代译码原理(Advanced Decoding Techniques and Iterative Decoding Principles)
    ▮▮▮▮▮▮▮ 11.1 软判决译码(Soft-Decision Decoding)的优势
    ▮▮▮▮▮▮▮ 11.2 最大后验概率(MAP)译码
    ▮▮▮▮▮▮▮ 11.3 迭代译码的通用框架
    ▮▮▮▮▮▮▮ 11.4 图模型(Graphical Models)与因子图(Factor Graphs)
    ▮▮▮▮ 12. chapter 12:编码的应用与未来展望(Applications and Future Perspectives)
    ▮▮▮▮▮▮▮ 12.1 编码在无线通信系统中的应用(如 4G/5G 中的 Turbo/LDPC)
    ▮▮▮▮▮▮▮ 12.2 编码在数据存储中的应用(如硬盘、SSD、内存 ECC)
    ▮▮▮▮▮▮▮ 12.3 编码在深空通信与卫星通信中的应用
    ▮▮▮▮▮▮▮ 12.4 编码在光通信与网络中的应用
    ▮▮▮▮▮▮▮ 12.5 极化码(Polar Codes)简介
    ▮▮▮▮▮▮▮ 12.6 编码理论的未来研究方向
    ▮▮▮▮ 13. chapter 13:附录(Appendices)
    ▮▮▮▮▮▮▮ 13.1 常用有限域表
    ▮▮▮▮▮▮▮ 13.2 常用符号表
    ▮▮▮▮ 14. chapter 14:参考文献(References)
    ▮▮▮▮▮▮▮ 14.1 书籍
    ▮▮▮▮▮▮▮ 14.2 期刊论文
    ▮▮▮▮▮▮▮ 14.3 会议论文
    ▮▮▮▮▮▮▮ 14.4 标准文档


    1. chapter 1:引言(Introduction)

    欢迎来到信息论(Information Theory)中一个至关重要且充满活力的领域:信道编码(Channel Coding),也称为纠错编码(Error Correction Coding)。在这个数字化、互联互通的时代,信息的可靠传输和存储是所有现代通信和计算系统的基石。然而,信息在传输过程中不可避免地会受到噪声(Noise)和干扰(Interference)的影响,在存储介质中也可能因物理缺陷或环境因素导致数据损坏。信道编码正是应对这些挑战的强大工具,它通过在原始信息中巧妙地加入冗余(Redundancy),使得接收端或读取端能够在一定程度上检测甚至纠正传输或存储过程中产生的错误,从而确保信息的完整性和可靠性。

    本章作为全书的开篇,旨在为您构建一个关于信息论、信道编码和纠错编码的初步认知框架。我们将从信息论的宏大视角出发,理解信息传输的本质问题;随后聚焦于信道编码在解决这一问题中的核心作用;接着阐述纠错编码的基本思想,揭示其“魔力”所在;回顾这一领域的历史沿革与最新发展趋势;最后,我们将概述本书的整体结构和内容,帮助您规划学习路径。无论您是初次接触这些概念的初学者,还是希望深入理解其原理和应用的进阶者,抑或是寻求前沿理论和技术的专家,本章都将为您打开通往信道编码精彩世界的大门。

    1.1 信息论(Information Theory)概述

    信息论是由克劳德·香农(Claude Shannon)在1948年创立的一门学科,其核心在于量化信息、研究信息的传输、存储和处理的根本限制与可能性。香农的划时代论文《通信的数学理论》(A Mathematical Theory of Communication)奠定了这门学科的基础,并提出了通信系统的基本模型。

    一个典型的通信系统通常包含以下几个主要组成部分:
    信息源(Information Source):产生需要传输的信息,例如文字、语音、图像等。
    发送器(Transmitter):将信息源产生的消息转换为适合在信道中传输的信号。这通常包括源编码(Source Coding)和信道编码(Channel Coding)。
    信道(Channel):传输信号的物理媒介,例如电缆、光纤、无线电波、存储介质等。信道是引入噪声和干扰的主要环节。
    接收器(Receiver):接收来自信道的信号,并将其转换回原始消息的估计。这通常包括信道译码(Channel Decoding)和源译码(Source Decoding)。
    信宿(Destination):接收最终恢复的消息。

    信息论关注的核心问题之一是如何在存在噪声的不可靠信道上实现可靠通信。香农的信道编码定理(Channel Coding Theorem)给出了在给定信道条件下,可靠传输信息的最大速率,即信道容量(Channel Capacity)。这个定理具有深远的意义,它告诉我们,只要传输速率低于信道容量,原则上就可以通过设计足够好的编码方案实现任意低的错误概率。而信道编码正是实现这一目标的手段。

    信息论中的一些基本概念包括:
    信息量(Information Content):衡量一个事件发生所带来的信息多少,通常用对数表示。一个发生概率越低的事件,其信息量越大。
    熵(Entropy):衡量一个随机变量或信息源的不确定性或平均信息量。熵越高,信息源的不确定性越大。
    互信息(Mutual Information):衡量两个随机变量之间的相互依赖程度,或者说通过观察一个变量获得关于另一个变量的信息量。在通信系统中,互信息衡量了接收到的信号中包含的关于发送消息的信息量。

    信道编码是信息论中与信道容量紧密相关的部分。它的任务是在发送端对信息进行编码,增加适当的冗余,使得在接收端即使信号受到噪声污染,也能尽可能准确地恢复原始信息。

    1.2 信道编码(Channel Coding)的作用与重要性

    想象一下,您正在通过一个嘈杂的电话线路与朋友通话,或者通过无线网络下载文件。电话线路上的静电干扰、无线信号的衰落和干扰都可能导致您听不清朋友的话语,或者下载的文件出现错误。在数字通信中,这些干扰表现为传输的二进制比特(Bits)发生翻转(例如,0变成了1,或者1变成了0),或者部分数据丢失。

    信道编码的作用正是为了对抗这些信道引入的错误。它通过在原始信息比特序列中加入经过精心设计的冗余比特(Parity Bits 或 Check Bits),生成一个更长的编码序列(码字,Codeword)。这些冗余比特与原始信息比特之间存在特定的数学关系。在接收端,译码器(Decoder)利用这些关系来检测接收到的序列中是否存在错误。如果错误在编码方案的纠错能力范围内,译码器甚至可以确定错误发生的位置并将其纠正,从而恢复出原始的无误信息。

    信道编码的重要性体现在以下几个方面:
    提高通信可靠性(Reliability):这是信道编码最直接的作用。它使得信息能够在有噪声的信道上以极低的错误率传输,满足了现代通信系统对数据完整性的严格要求。
    逼近信道容量(Approaching Channel Capacity):优秀的信道编码方案能够使得通信速率尽可能地接近香农极限,从而最大限度地利用信道资源。
    支持高效率通信(Efficiency):虽然信道编码增加了冗余,降低了原始信息的传输速率(码率小于1),但它允许系统在较低的信噪比(Signal-to-Noise Ratio, SNR)下工作,或者在相同的信噪比下实现更高的可靠性,从系统整体来看,提高了通信效率。
    广泛的应用领域(Wide Applications):信道编码不仅仅用于无线和有线通信,它在数据存储(硬盘、固态硬盘、内存)、卫星通信、深空探测、二维码、数字电视广播等众多领域都扮演着不可或缺的角色。例如,计算机内存中的错误检查与纠正(ECC)功能就依赖于纠错码。

    如果没有信道编码,我们只能通过简单地重复发送信息来提高可靠性,但这会极大地浪费信道资源,效率低下。信道编码提供了一种更智能、更有效的方式来对抗错误。

    1.3 纠错编码(Error Correction Coding)的基本思想

    纠错编码是信道编码的一个重要分支,其核心思想是通过增加结构化的冗余来赋予编码后的数据检测和纠正错误的能力。

    考虑一个简单的例子:假设我们要传输一个比特信息 \(m\),它可能是0或1。如果直接发送,信道噪声可能导致接收端收到错误的比特。为了提高可靠性,我们可以使用一个简单的重复码(Repetition Code)。例如,将比特0编码为000,将比特1编码为111。

    如果发送000,接收端可能收到:
    ⚝ 000:无误。
    ⚝ 001, 010, 100:发生1个比特错误。
    ⚝ 011, 101, 110:发生2个比特错误。
    ⚝ 111:发生3个比特错误。

    在接收端,如果采用“多数判决”(Majority Voting)的译码规则,即哪个比特出现次数多就判决为哪个原始比特,那么:
    ⚝ 收到000, 001, 010, 100都会被译码为0。
    ⚝ 收到011, 101, 110, 111都会被译码为1。

    这个重复码(3,1)码(表示每1个信息比特编码为3个码字比特)可以纠正最多1个比特错误。例如,收到001时,0出现两次,1出现一次,多数判决为0,成功纠正了错误。但如果发生2个错误,例如收到011,多数判决为1,导致译码错误。

    这个例子揭示了纠错编码的几个基本概念:
    信息位(Information Bits):原始需要传输的比特。
    校验位(Parity Bits / Check Bits):为了纠错而额外添加的冗余比特。
    码字(Codeword):信息位和校验位组成的完整编码序列。
    码本(Codebook):所有可能的合法码字的集合。
    码率(Code Rate):信息位数与码字总位数的比值,衡量了编码的效率。例如,重复码(3,1)的码率为 \(1/3\)。码率越低,冗余越多,纠错能力通常越强,但传输效率越低。
    汉明距离(Hamming Distance):两个等长二进制序列之间不同比特的个数。例如,\(d(000, 001) = 1\),\(d(000, 011) = 2\)。
    最小距离(Minimum Distance, \(d_{min}\)):码本中任意两个不同码字之间的最小汉明距离。这是衡量一个码纠错能力的关键指标。

    对于一个码,如果其最小距离为 \(d_{min}\),则它可以检测出最多 \(d_{min}-1\) 个错误,并且可以纠正最多 \(\lfloor (d_{min}-1)/2 \rfloor\) 个错误。在上面的重复码(3,1)例子中,合法码字是000和111,它们之间的汉明距离是3。所以 \(d_{min}=3\)。它可以检测 \(3-1=2\) 个错误,纠正 \(\lfloor (3-1)/2 \rfloor = 1\) 个错误,与我们的分析一致。

    纠错编码的设计目标就是构建具有较大最小距离的码本,同时保持尽可能高的码率和较低的编码/译码复杂度。不同的编码方案(如线性分组码、循环码、卷积码、Turbo码、LDPC码等)采用不同的数学结构来生成校验位,并设计相应的译码算法。

    1.4 历史回顾与发展趋势

    信道编码的历史与信息论本身紧密相连。
    奠基阶段(20世纪40-50年代):香农在1948年提出了信道容量的概念和信道编码定理,指出了可靠通信的可能性。随后,理查德·汉明(Richard Hamming)在1950年发明了第一个实用的纠错码——汉明码(Hamming Codes),用于解决早期计算机内存中的错误问题。马赛尔·戈莱(Marcel Golay)在1954年发现了完美的戈莱码(Golay Codes)。
    经典编码时代(20世纪60-80年代):线性分组码和循环码理论得到深入发展。BCH码(Bose-Chaudhuri-Hocquenghem Codes)和Reed-Solomon (RS) 码被发现,它们是代数码的代表,在纠正突发错误方面表现优异,广泛应用于通信和存储系统(如CD、DVD)。卷积码(Convolutional Codes)及其高效的维特比(Viterbi)译码算法也在这一时期兴起,特别适用于无线通信。
    低迷与复兴(20世纪90年代):在一段时间内,人们认为已经找到了接近香农极限的编码方法,研究似乎进入瓶颈。然而,1993年,克劳德·柏莱(Claude Berrou)等人提出了Turbo码,通过并行级联和迭代译码的思想,首次证明了在实际系统中逼近香农极限是可能的,引发了编码领域的“第二次革命”。几乎同时,罗伯特·加拉格尔(Robert Gallager)在1960年代提出的LDPC码(Low-Density Parity-Check Codes)被重新发现并证明其性能可以与Turbo码媲美,且在硬件实现上更具优势。
    现代编码时代(21世纪至今):Turbo码和LDPC码成为现代通信系统(如3GPP的LTE/5G、Wi-Fi、DVB等)的核心技术。研究热点转向如何设计更好的迭代译码算法、如何构造性能更优异的LDPC码和Turbo码。同时,新的编码方案也在不断涌现,例如,由埃尔达·阿里坎(Erdal Arıkan)在2008年提出的极化码(Polar Codes)被证明是第一个能够达到离散无记忆信道容量的显式构造的编码方案,并已被采纳为5G控制信道的标准编码。

    当前和未来的发展趋势包括:
    逼近香农极限的编码方案:继续优化LDPC码、Turbo码和极化码的构造和译码算法,使其性能更接近理论极限。
    面向特定应用的编码:针对不同的信道特性(如衰落信道、干扰信道)和应用需求(如低延迟、低功耗、高吞吐量)设计定制化的编码方案。
    编码与调制、多天线技术的融合:将信道编码与高阶调制、MIMO(Multiple-Input Multiple-Output)等多天线技术、信道均衡等技术联合优化,实现系统整体性能的最大化。
    硬件实现与算法优化:研究高效的硬件实现架构和低复杂度的译码算法,以满足实际系统的实时性要求。
    量子信息与编码:探索量子纠错码等前沿领域。

    1.5 本书结构与内容概览

    本书旨在系统、全面、深入地介绍信道编码和纠错编码的理论、设计方法和应用。全书共分为14章(含附录和参考文献),内容安排如下:

    第1章:引言 - 本章,介绍信息论、信道编码的基本概念、作用、历史和本书结构。
    第2章:数学基础 - 介绍理解纠错编码所需的代数基础,包括群、环、域、有限域及其运算、向量空间和多项式环。这是理解线性码和代数码的关键。
    第3章:信道模型与编码基本概念 - 介绍通信系统模型、常见的信道模型(如BSC、BEC、AWGN)以及码字、码本、码率、汉明距离、最小距离、检错与纠错能力等基本概念。
    第4章:线性分组码 - 详细讲解线性分组码的定义、生成矩阵、校验矩阵、伴随式译码,并介绍经典的汉明码等。
    第5章:循环码 - 介绍循环码的多项式表示、生成多项式、编码方法,并重点讲解重要的BCH码和Reed-Solomon (RS) 码的构造和译码基础。
    第6章:码的界限 - 探讨衡量码性能的理论界限,如汉明界、Singleton界、Gilbert-Varshamov界等,帮助理解不同码的性能潜力。
    第7章:卷积码 - 介绍卷积码的定义、编码器结构、状态图和网格图,并详细讲解经典的维特比译码算法(硬判决和软判决)。
    第8章:信道容量与香农限 - 回归信息论的核心,深入探讨互信息、信道容量的计算,并详细阐述香农信道编码定理及其意义。
    第9章:现代编码理论 I:Turbo 码 - 介绍Turbo码的结构、并行级联卷积码、交织器、迭代译码原理以及MAP和SOVA等分量译码算法。
    第10章:现代编码理论 II:LDPC 码 - 介绍LDPC码的定义、校验矩阵、Tanner图、编码方法以及置信传播(BP)和和积(SPA)等译码算法。
    第11章:高级译码技术与迭代译码原理 - 总结和深化软判决译码、MAP译码以及迭代译码的通用框架和图模型表示。
    第12章:编码的应用与未来展望 - 介绍信道编码在各种实际系统中的应用案例,并简要介绍极化码等新兴编码以及未来的研究方向。
    第13章:附录 - 提供常用的数学表格和符号列表,方便读者查阅。
    第14章:参考文献 - 列出本书引用的主要书籍、期刊和会议文献,供读者进一步深入学习。

    本书内容由浅入深,既包含经典的代数码和卷积码,也涵盖了现代高性能的Turbo码和LDPC码,并触及了信息论的理论基础和前沿发展。我们力求通过清晰的阐述、丰富的示例和必要的数学推导,帮助不同层次的读者掌握信道编码的核心原理和技术,并具备分析和解决实际问题的能力。

    希望您在阅读本书的过程中,能够感受到信道编码的精妙与力量,并激发您对信息科学的浓厚兴趣。

    2. chapter 2:数学基础(Mathematical Preliminaries)

    欢迎来到本书的第二章!在深入探讨信道编码(Channel Coding)和纠错编码(Error Correction Coding)的奇妙世界之前,我们需要先建立一些必要的数学基础。纠错编码,尤其是代数编码(Algebraic Codes),严重依赖于抽象代数(Abstract Algebra)中的概念,特别是有限域(Finite Fields)及其上的向量空间(Vector Spaces)和多项式环(Polynomial Rings)。本章将为您提供这些关键数学工具的概览,帮助您更好地理解后续章节中的编码理论和算法。

    2.1 群、环、域(Groups, Rings, Fields)

    抽象代数是研究代数结构(Algebraic Structures)的数学分支。群(Group)、环(Ring)和域(Field)是其中最基本且重要的三种结构,它们定义了一组元素以及这些元素上的一个或多个运算所满足的性质。

    群(Group):一个集合 \(G\) 和其上的一个二元运算 \(*\) 构成一个群 \((G, *)\),如果满足以下四个条件:
    ▮▮▮▮⚝ 封闭性(Closure):对于任意 \(a, b \in G\),都有 \(a * b \in G\)。
    ▮▮▮▮⚝ 结合律(Associativity):对于任意 \(a, b, c \in G\),都有 \((a * b) * c = a * (b * c)\)。
    ▮▮▮▮⚝ 存在单位元(Existence of Identity Element):存在一个元素 \(e \in G\),使得对于任意 \(a \in G\),都有 \(a * e = e * a = a\)。
    ▮▮▮▮⚝ 存在逆元(Existence of Inverse Element):对于任意 \(a \in G\),都存在一个元素 \(a^{-1} \in G\),使得 \(a * a^{-1} = a^{-1} * a = e\)。
    如果群的运算还满足交换律(Commutativity),即对于任意 \(a, b \in G\),都有 \(a * b = b * a\),则称该群为阿贝尔群(Abelian Group)或交换群(Commutative Group)。在编码理论中,我们经常遇到加法群(Additive Group),其运算通常记为 \(+\),单位元记为 \(0\),逆元记为 \(-a\)。

    环(Ring):一个集合 \(R\) 和其上的两个二元运算,通常记为加法 \(+\) 和乘法 \(*\),构成一个环 \((R, +, *)\),如果满足以下三个条件:
    ▮▮▮▮⚝ \((R, +)\) 是一个阿贝尔群。
    ▮▮▮▮⚝ \((R, *)\) 满足结合律:对于任意 \(a, b, c \in R\),都有 \((a * b) * c = a * (b * c)\)。
    ▮▮▮▮⚝ 乘法对加法满足分配律(Distributivity):对于任意 \(a, b, c \in R\),都有 \(a * (b + c) = (a * b) + (a * c)\) 和 \((a + b) * c = (a * c) + (b * c)\)。
    如果环的乘法满足交换律,则称该环为交换环(Commutative Ring)。如果环存在乘法单位元(Multiplicative Identity),通常记为 \(1\),使得对于任意 \(a \in R\),都有 \(a * 1 = 1 * a = a\),则称该环为幺环(Ring with Unity)或单位环。在编码理论中,多项式环(Polynomial Rings)是一个重要的例子。

    域(Field):一个集合 \(F\) 和其上的两个二元运算,加法 \(+\) 和乘法 \(*\),构成一个域 \((F, +, *)\),如果满足以下三个条件:
    ▮▮▮▮⚝ \((F, +, *)\) 是一个交换幺环。
    ▮▮▮▮⚝ 域的加法单位元(\(0\))不等于乘法单位元(\(1\))。
    ▮▮▮▮⚝ 对于 \(F\) 中每一个非零元素 \(a\),都存在乘法逆元(Multiplicative Inverse)\(a^{-1} \in F\),使得 \(a * a^{-1} = a^{-1} * a = 1\)。
    简单来说,域是一个集合,其中加、减、乘、除(除数不能为零)运算都是封闭的,并且满足通常的算术规则。实数集 \(\mathbb{R}\) 和复数集 \(\mathbb{C}\) 都是无限域(Infinite Fields)。在编码理论中,我们主要关注有限域(Finite Fields)。

    2.2 有限域(Finite Fields / Galois Fields, GF(q))

    有限域是只包含有限个元素的域。它们在纠错编码中扮演着核心角色,特别是对于构造非二元码(Non-binary Codes),如 BCH 码(Bose-Chaudhuri-Hocquenghem Codes)和 Reed-Solomon (RS) 码。有限域通常也称为伽罗瓦域(Galois Fields),记作 \(GF(q)\),其中 \(q\) 是域中元素的个数。

    一个重要的定理指出:有限域的元素个数 \(q\) 必须是素数(Prime Number)的幂次,即 \(q = p^m\),其中 \(p\) 是一个素数,\(m\) 是一个正整数。对于任意素数 \(p\) 和正整数 \(m\),都存在一个且唯一的(在同构意义下)元素个数为 \(p^m\) 的有限域 \(GF(p^m)\)。

    最简单的有限域是 \(GF(p)\),其中 \(p\) 是一个素数。\(GF(p)\) 的元素是整数 \(\{0, 1, \dots, p-1\}\),加法和乘法都是在模 \(p\) 意义下进行的。例如,\(GF(2)\) 只有两个元素 \(\{0, 1\}\),加法和乘法规则如下:
    \[ \begin{array}{c|cc} + & 0 & 1 \\ \hline 0 & 0 & 1 \\ 1 & 1 & 0 \end{array} \quad \begin{array}{c|cc} ⚝ & 0 & 1 \\ \hline 0 & 0 & 0 \\ 1 & 0 & 1 \end{array} \]
    注意,\(1+1=0\) 在 \(GF(2)\) 中成立,这对应于二进制运算中的异或(XOR)。\(GF(2)\) 是二元编码(Binary Codes)的基础。

    2.2.1 有限域的构造

    构造 \(GF(p^m)\)(当 \(m > 1\) 时)通常是通过多项式环(Polynomial Ring)来实现的。考虑在 \(GF(p)\) 上的多项式环 \(GF(p)[x]\)。\(GF(p^m)\) 可以构造为 \(GF(p)[x]\) 对一个在 \(GF(p)\) 上 \(m\) 次的不可约多项式(Irreducible Polynomial)\(P(x)\) 生成的理想(Ideal)的商环(Quotient Ring)。
    \[ GF(p^m) \cong GF(p)[x] / \langle P(x) \rangle \]
    这意味着 \(GF(p^m)\) 的元素可以表示为在 \(GF(p)\) 上次数小于 \(m\) 的多项式:
    \[ a_{m-1}x^{m-1} + a_{m-2}x^{m-2} + \dots + a_1x + a_0, \quad \text{其中 } a_i \in GF(p) \]
    这样的多项式共有 \(p^m\) 个,因为每个系数 \(a_i\) 都有 \(p\) 种选择。

    例如,构造 \(GF(2^2) = GF(4)\)。我们需要一个在 \(GF(2)\) 上次数为 2 的不可约多项式。次数为 2 的多项式有 \(x^2\), \(x^2+1\), \(x^2+x\), \(x^2+x+1\)。
    ⚝ \(x^2 = x \cdot x\) (可约)
    ⚝ \(x^2+1 = (x+1)(x+1)\) (可约,因为 \(1+1=0\) 在 \(GF(2)\) 中)
    ⚝ \(x^2+x = x(x+1)\) (可约)
    ⚝ \(x^2+x+1\) 在 \(GF(2)\) 中没有根(\(0^2+0+1=1\), \(1^2+1+1=1\),非零),因此是不可约的。
    所以,我们可以选择 \(P(x) = x^2+x+1\)。\(GF(4)\) 的元素可以表示为次数小于 2 的多项式:\(0, 1, x, x+1\)。

    2.2.2 有限域上的运算

    在 \(GF(p^m)\) 中,元素的加法和乘法是基于多项式加法和乘法,然后对不可约多项式 \(P(x)\) 取模。

    加法(Addition):两个多项式相加,对应项系数在 \(GF(p)\) 中相加。
    例如,在 \(GF(4)\) 中,元素是 \(\{0, 1, x, x+1\}\)。
    \((x+1) + x = (1+1)x + 1 = 0x + 1 = 1\) (系数在 \(GF(2)\) 中相加)

    乘法(Multiplication):两个多项式相乘,然后在 \(GF(p)[x]\) 中对不可约多项式 \(P(x)\) 取模。
    例如,在 \(GF(4)\) 中,使用 \(P(x) = x^2+x+1\)。
    \(x \cdot x = x^2\)。因为我们在 \(GF(p)[x] / \langle P(x) \rangle\) 中,\(x^2\) 等价于 \(x^2 \pmod{x^2+x+1}\)。
    \(x^2 = 1 \cdot (x^2+x+1) + (x+1)\) (在 \(GF(2)\) 中,\(-x = x\), \(-1 = 1\))
    所以,\(x^2 \equiv x+1 \pmod{x^2+x+1}\)。
    因此,在 \(GF(4)\) 中,\(x \cdot x = x+1\)。
    另一个例子:\(x \cdot (x+1) = x^2 + x\)。
    \(x^2+x \equiv (x+1) + x \pmod{x^2+x+1}\) (因为 \(x^2 \equiv x+1\))
    \((x+1) + x = 1\) (如上所示)
    所以,在 \(GF(4)\) 中,\(x \cdot (x+1) = 1\)。这意味着 \(x\) 的乘法逆元是 \(x+1\)。

    有限域的结构非常丰富,它们为构造具有强大纠错能力的编码提供了代数框架。理解有限域上的算术是理解 BCH 码和 RS 码等代数码的关键。

    2.3 向量空间(Vector Spaces)

    向量空间是线性代数(Linear Algebra)的基本概念。在编码理论中,我们主要关注定义在有限域 \(GF(q)\) 上的向量空间。

    定义(Definition):一个集合 \(V\) 称为域 \(F\) 上的向量空间,如果 \(V\) 对于向量加法(Vector Addition)构成一个阿贝尔群,并且存在一个标量乘法(Scalar Multiplication)运算,满足以下条件:
    ▮▮▮▮⚝ 对于任意 \(v \in V\) 和 \(c \in F\),都有 \(c \cdot v \in V\) (封闭性)。
    ▮▮▮▮⚝ 对于任意 \(v, w \in V\) 和 \(c \in F\),都有 \(c \cdot (v + w) = c \cdot v + c \cdot w\) (标量乘法对向量加法的分配律)。
    ▮▮▮▮⚝ 对于任意 \(v \in V\) 和 \(c, d \in F\),都有 \((c + d) \cdot v = c \cdot v + d \cdot v\) (向量乘法对标量加法的分配律)。
    ▮▮▮▮⚝ 对于任意 \(v \in V\) 和 \(c, d \in F\),都有 \((c \cdot d) \cdot v = c \cdot (d \cdot v)\) (标量乘法的结合律)。
    ▮▮▮▮⚝ 对于域 \(F\) 的乘法单位元 \(1\),对于任意 \(v \in V\),都有 \(1 \cdot v = v\)。

    在编码理论中,我们通常考虑 \(F = GF(q)\),而向量空间 \(V\) 是由长度为 \(n\) 的、元素来自 \(GF(q)\) 的向量组成的集合 \(GF(q)^n\)。一个向量 \(v \in GF(q)^n\) 可以表示为 \((v_1, v_2, \dots, v_n)\),其中 \(v_i \in GF(q)\)。
    ⚝ 向量加法:\((v_1, \dots, v_n) + (w_1, \dots, w_n) = (v_1+w_1, \dots, v_n+w_n)\),其中加法在 \(GF(q)\) 中进行。
    ⚝ 标量乘法:\(c \cdot (v_1, \dots, v_n) = (c \cdot v_1, \dots, c \cdot v_n)\),其中乘法在 \(GF(q)\) 中进行。

    子空间(Subspace):向量空间 \(V\) 的一个非空子集 \(W\) 称为 \(V\) 的子空间,如果 \(W\) 在 \(V\) 的向量加法和标量乘法下是封闭的。也就是说,对于任意 \(w_1, w_2 \in W\) 和 \(c \in GF(q)\),都有 \(w_1 + w_2 \in W\) 和 \(c \cdot w_1 \in W\)。
    线性分组码(Linear Block Codes)就是 \(GF(q)^n\) 的一个子空间。这是线性码(Linear Codes)的核心代数结构。

    基(Basis)与维数(Dimension):向量空间 \(V\) 的一组向量 \(\{v_1, \dots, v_k\}\) 称为 \(V\) 的基,如果它们是线性无关的(Linearly Independent),并且可以生成(Span)\(V\) 中的所有向量。基中向量的个数 \(k\) 称为向量空间 \(V\) 的维数(Dimension),记为 \(\dim(V)\)。
    对于 \(GF(q)^n\),其维数是 \(n\)。线性分组码 \(C\) 是 \(GF(q)^n\) 的一个 \(k\) 维子空间,这意味着码 \(C\) 包含 \(q^k\) 个码字(Codewords),并且存在 \(k\) 个线性无关的码字可以生成所有码字。这 \(k\) 个生成码字可以构成生成矩阵(Generator Matrix)的行向量。

    2.4 多项式环(Polynomial Rings)

    多项式环在构造和分析循环码(Cyclic Codes)等代数码时非常有用。

    定义(Definition):给定一个域 \(F\),以 \(x\) 为不定元(Indeterminate)的多项式环 \(F[x]\) 是由所有系数取自 \(F\) 的多项式组成的集合:
    \[ a_n x^n + a_{n-1} x^{n-1} + \dots + a_1 x + a_0, \quad \text{其中 } a_i \in F, n \ge 0 \]
    多项式的加法和乘法按照通常的多项式规则进行,系数的运算在域 \(F\) 中进行。
    例如,在 \(GF(2)[x]\) 中:
    \((x^2 + x + 1) + (x + 1) = x^2 + (1+1)x + (1+1) = x^2 + 0x + 0 = x^2\) (系数在 \(GF(2)\) 中相加)
    \((x+1) \cdot (x+1) = x^2 + x + x + 1 = x^2 + (1+1)x + 1 = x^2 + 0x + 1 = x^2 + 1\) (系数在 \(GF(2)\) 中相乘和相加)

    \(F[x]\) 是一个交换幺环。它还具有一些特殊的性质,例如它是主理想整环(Principal Ideal Domain, PID),这意味着它的每一个理想(Ideal)都可以由一个元素生成。

    在循环码中,我们通常考虑在 \(GF(q)\) 上的多项式环 \(GF(q)[x]\),以及由长度为 \(n\) 的向量对应的多项式组成的集合。一个长度为 \(n\) 的向量 \((v_0, v_1, \dots, v_{n-1})\) 可以对应一个次数小于 \(n\) 的多项式 \(v(x) = v_0 + v_1 x + \dots + v_{n-1} x^{n-1}\)。
    循环码的代数结构通常是在商环 \(GF(q)[x] / \langle x^n - 1 \rangle\) 中定义的。这个商环中的元素也是次数小于 \(n\) 的多项式,加法是多项式加法,乘法是多项式乘法后对 \(x^n - 1\) 取模。
    例如,在 \(GF(2)[x] / \langle x^n - 1 \rangle\) 中,\(x^n \equiv 1 \pmod{x^n - 1}\)。这对应于向量的循环移位(Cyclic Shift):将向量 \((v_0, v_1, \dots, v_{n-1})\) 乘以 \(x\) 对应于多项式 \(x \cdot v(x) = v_0 x + v_1 x^2 + \dots + v_{n-1} x^n\)。在模 \(x^n - 1\) 意义下,\(x^n \equiv 1\),所以 \(v_{n-1} x^n \equiv v_{n-1}\)。因此 \(x \cdot v(x) \equiv v_{n-1} + v_0 x + v_1 x^2 + \dots + v_{n-2} x^{n-1}\),这对应于向量 \((v_{n-1}, v_0, v_1, \dots, v_{n-2})\),即原向量的循环左移。

    循环码的另一个关键概念是生成多项式(Generator Polynomial)。循环码是 \(GF(q)[x] / \langle x^n - 1 \rangle\) 的一个理想,而这个理想可以由一个唯一的、次数最小的、首一(Monic)多项式 \(g(x)\) 生成,且 \(g(x)\) 必须是 \(x^n - 1\) 的因子。码字对应的多项式都是 \(g(x)\) 的倍数。

    本章简要介绍了群、环、域、有限域、向量空间和多项式环这些重要的数学概念。这些概念是理解线性码和代数码的基础。在后续章节中,我们将看到这些抽象的代数结构如何优雅地描述和构造具有强大纠错能力的编码方案。如果您对这些数学概念感到陌生,建议查阅相关的抽象代数或离散数学教材进行更深入的学习。📚

    3. chapter 3:信道模型与编码基本概念(Channel Models and Basic Coding Concepts)

    欢迎来到本书的第三章!在前两章中,我们初步了解了信息论和纠错编码的重要性,并回顾了必要的数学基础。现在,我们将深入探讨信息传输的核心环节——信道,以及为了对抗信道引入的错误而提出的基本编码概念。理解信道的特性是设计有效编码方案的前提,而本章介绍的基本概念则是后续章节学习各种具体编码技术的基石。

    3.1 通信系统模型(Communication System Model)

    在深入研究信道编码之前,我们首先需要建立一个完整的通信系统模型。这个模型将帮助我们理解信息从发送端到接收端经历的整个过程,以及信道编码在其中扮演的角色。

    一个典型的数字通信系统模型通常包含以下几个主要组成部分:

    信息源(Information Source):产生需要传输的信息。信息可以是离散的(如文本、数字)或连续的(如语音、图像)。在数字通信中,连续信息需要先进行数字化处理。

    信源编码器(Source Encoder):对信息源产生的原始信息进行压缩,去除信息中的冗余,以提高传输效率。例如,霍夫曼编码(Huffman Coding)或 Lempel-Ziv 编码(LZ Coding)。信源编码的目标是在保证一定失真度的情况下,用尽可能少的比特(bit)表示信息。

    信道编码器(Channel Encoder):这是我们本书关注的重点。信道编码器在信源编码器输出的压缩信息中引入受控的冗余。这种冗余不是为了压缩,而是为了增强信息的抗干扰能力,使得在信息通过有噪声或有干扰的信道后,接收端能够检测甚至纠正传输过程中发生的错误。

    调制器(Modulator):将信道编码器输出的数字比特流转换为适合在物理信道上传输的模拟信号。例如,幅度调制(Amplitude Modulation, AM)、频率调制(Frequency Modulation, FM)或相位调制(Phase Modulation, PM),以及更复杂的正交幅度调制(Quadrature Amplitude Modulation, QAM)等。

    信道(Channel):信息传输的物理媒介。信道可能是导线、光纤、无线电波、存储介质等。信道的关键特性是它会引入噪声(Noise)、干扰(Interference)或衰减(Attenuation),导致传输的信息发生错误。

    解调器(Demodulator):接收到信道输出的信号后,解调器执行与调制器相反的操作,将模拟信号转换回数字比特流。由于信道的影响,解调器输出的比特流可能与调制器输入的比特流不同,即可能包含错误。

    信道译码器(Channel Decoder):这是信道编码器的对应部分。信道译码器利用信道编码引入的冗余,尝试检测并纠正解调器输出比特流中的错误。译码的成功率取决于信道编码方案的设计和信道的噪声水平。

    信源译码器(Source Decoder):执行与信源编码器相反的操作,将信道译码器输出的比特流恢复成原始信息。

    信息宿(Information Sink):接收最终恢复的信息。

    整个系统的流程可以概括为:
    信息源 → 信源编码 → 信道编码 → 调制 → 信道 → 解调 → 信道译码 → 信源译码 → 信息宿。

    信道编码和信道译码构成了通信系统中的“差错控制(Error Control)”部分。它们是信息论在实践中最重要的应用之一,使得在不可靠的信道上进行可靠通信成为可能。

    3.2 离散无记忆信道(Discrete Memoryless Channels, DMC)

    在研究信道编码时,我们通常会使用简化的数学模型来描述信道的行为。离散无记忆信道(Discrete Memoryless Channel, DMC)是最基本且重要的信道模型之一。

    定义: 一个离散无记忆信道是一个由输入字母表 \(\mathcal{X}\)、输出字母表 \(\mathcal{Y}\) 以及一组转移概率(Transition Probabilities)\(p(y|x)\) 组成的系统,其中 \(x \in \mathcal{X}\),\(y \in \mathcal{Y}\)。对于任意输入序列 \(x_1, x_2, \dots, x_n\) 和输出序列 \(y_1, y_2, \dots, y_n\),信道的行为是“无记忆”的,这意味着每个输出符号 \(y_i\) 仅依赖于对应的输入符号 \(x_i\),而与之前的输入或输出符号无关。即:
    \[ p(y_1, y_2, \dots, y_n | x_1, x_2, \dots, x_n) = \prod_{i=1}^n p(y_i | x_i) \]
    这里的 \(\mathcal{X}\) 和 \(\mathcal{Y}\) 都是有限集合。在数字通信中,通常 \(\mathcal{X}\) 和 \(\mathcal{Y}\) 都是二进制集合 \(\{0, 1\}\)。

    DMC 模型虽然简化,但能够捕捉许多实际信道的核心特性,并且是理解更复杂信道模型的基础。

    3.2.1 二元对称信道(Binary Symmetric Channel, BSC)

    二元对称信道(Binary Symmetric Channel, BSC)是 DMC 中最简单也是最常用的模型之一,特别适用于描述数字通信中的比特错误。

    定义: 二元对称信道是一个 DMC,其输入字母表 \(\mathcal{X} = \{0, 1\}\),输出字母表 \(\mathcal{Y} = \{0, 1\}\)。信道的特性由一个参数 \(p\) 决定,称为交叉概率(Crossover Probability)或比特错误率(Bit Error Rate, BER)。参数 \(p\) 表示传输一个比特时,该比特发生翻转的概率。

    转移概率如下:
    \[ p(y=1 | x=0) = p \]
    \[ p(y=0 | x=1) = p \]
    \[ p(y=0 | x=0) = 1-p \]
    \[ p(y=1 | x=1) = 1-p \]

    可以用一个图来表示 BSC:

    1.双击鼠标左键复制此行;2.单击复制所有代码。
                                    
                                        
    1 0 ----(1-p)----> 0
    2 | ^
    3 (p) (p)
    4 v |
    5 1 ----(1-p)----> 1

    或者更直观的表示:

    1.双击鼠标左键复制此行;2.单击复制所有代码。
                                    
                                        
    1 Input (x) Output (y) Probability p(y|x)
    2 ------------------------------------------
    3 0 0 1-p
    4 0 1 p
    5 1 0 p
    6 1 1 1-p

    BSC 模型假设:
    ⚝ 输入是二进制的。
    ⚝ 输出也是二进制的。
    ⚝ 传输 0 变成 1 的概率与传输 1 变成 0 的概率相等,都等于 \(p\)。
    ⚝ 每个比特的传输错误是独立的(无记忆性)。

    BSC 模型广泛应用于理论分析和教学,因为它简单且能反映许多实际信道(如无线信道在经过适当调制解调后)的基本错误特性。参数 \(p\) 越小,信道质量越好。当 \(p=0\) 时,信道是无错的;当 \(p=0.5\) 时,信道输出与输入完全无关,传输的信息完全丢失。

    3.2.2 二元删除信道(Binary Erasure Channel, BEC)

    二元删除信道(Binary Erasure Channel, BEC)是另一种重要的 DMC 模型,它描述了信息可能丢失(被删除)而不是被错误接收的情况。这在某些通信场景(如分组网络中丢包)或存储介质中(如某个存储单元失效)更为适用。

    定义: 二元删除信道是一个 DMC,其输入字母表 \(\mathcal{X} = \{0, 1\}\),输出字母表 \(\mathcal{Y} = \{0, 1, e\}\),其中 \(e\) 表示“删除(Erasure)”符号。信道的特性由一个参数 \(\epsilon\) 决定,称为删除概率(Erasure Probability)。参数 \(\epsilon\) 表示传输一个比特时,该比特被删除的概率。

    转移概率如下:
    \[ p(y=0 | x=0) = 1-\epsilon \]
    \[ p(y=e | x=0) = \epsilon \]
    \[ p(y=1 | x=0) = 0 \]
    \[ p(y=1 | x=1) = 1-\epsilon \]
    \[ p(y=e | x=1) = \epsilon \]
    \[ p(y=0 | x=1) = 0 \]

    可以用一个图来表示 BEC:

    1.双击鼠标左键复制此行;2.单击复制所有代码。
                                    
                                        
    1 0 ----(1-epsilon)----> 0
    2 |
    3 (epsilon)
    4 v
    5 e
    6 ^
    7 (epsilon)
    8 |
    9 1 ----(1-epsilon)----> 1

    或者更直观的表示:

    1.双击鼠标左键复制此行;2.单击复制所有代码。
                                    
                                        
    1 Input (x) Output (y) Probability p(y|x)
    2 ------------------------------------------
    3 0 0 1-epsilon
    4 0 e epsilon
    5 0 1 0
    6 1 0 0
    7 1 e epsilon
    8 1 1 1-epsilon

    BEC 模型假设:
    ⚝ 输入是二进制的。
    ⚝ 输出可以是 0、1 或删除符号 \(e\)。
    ⚝ 传输 0 时,要么正确接收 0,要么被删除;传输 1 时,要么正确接收 1,要么被删除。不会发生 0 变成 1 或 1 变成 0 的错误。
    ⚝ 每个比特的传输或删除是独立的(无记忆性)。

    BEC 模型在理论分析中也非常有用,因为它在数学上比 BSC 更容易处理,尤其是在分析某些编码方案(如 LDPC 码)的性能时。参数 \(\epsilon\) 越小,信道质量越好。当 \(\epsilon=0\) 时,信道是无错的;当 \(\epsilon=1\) 时,所有信息都被删除。

    3.3 加性高斯白噪声信道(Additive White Gaussian Noise Channel, AWGN)

    加性高斯白噪声信道(Additive White Gaussian Noise Channel, AWGN)是连续信道中最重要且最常用的模型,特别适用于描述无线通信和有线通信中的噪声影响。与 BSC 和 BEC 不同,AWGN 信道的输出是连续的。

    定义: 加性高斯白噪声信道是一个连续信道模型。假设输入信号为 \(x(t)\),信道输出信号为 \(y(t)\),则 \(y(t) = x(t) + z(t)\),其中 \(z(t)\) 是加性噪声。这里的噪声 \(z(t)\) 具有以下特性:
    加性(Additive):噪声直接叠加在信号上。
    白(White):噪声的功率谱密度(Power Spectral Density, PSD)在所有频率上是均匀的(常数)。这意味着噪声在时间上是不相关的。
    高斯(Gaussian):噪声的瞬时幅度服从高斯(正态)分布。

    在数字通信中,我们通常考虑离散时间的 AWGN 信道。假设经过调制后,每个符号(或比特)被映射为一个实数或复数信号点。对于实数信号,如果输入是 \(x_i\),则输出是 \(y_i = x_i + z_i\),其中 \(z_i\) 是独立同分布(Independent and Identically Distributed, IID)的高斯随机变量,均值为 0,方差为 \(\sigma^2\)。即 \(z_i \sim \mathcal{N}(0, \sigma^2)\)。

    高斯随机变量 \(Z\) 的概率密度函数(Probability Density Function, PDF)为:
    \[ f_Z(z) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{z^2}{2\sigma^2}} \]

    对于输入 \(x_i\),输出 \(y_i\) 的条件概率密度函数为:
    \[ f_{Y|X}(y_i | x_i) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(y_i - x_i)^2}{2\sigma^2}} \]

    AWGN 信道的性能通常用信噪比(Signal-to-Noise Ratio, SNR)来衡量。对于实数信号,如果输入信号的平均功率为 \(P = E[x_i^2]\),则 SNR 定义为:
    \[ \text{SNR} = \frac{P}{\sigma^2} \]
    通常用分贝(dB)表示:
    \[ \text{SNR}_{\text{dB}} = 10 \log_{10} \left( \frac{P}{\sigma^2} \right) \]

    AWGN 信道模型是分析许多调制和编码方案性能的基础,特别是软判决译码(Soft-Decision Decoding)的性能分析。虽然实际信道可能包含衰落、干扰等更复杂的因素,但 AWGN 模型仍然是理解噪声影响和编码增益(Coding Gain)的重要工具。

    3.4 码字(Codeword)与码本(Codebook)

    信道编码的核心思想是在原始信息比特序列中加入冗余,形成一个更长的序列进行传输。这个更长的序列就是码字。

    定义:
    消息(Message)或信息字(Information Word):信道编码器的输入,通常是一个固定长度的二进制序列,表示要传输的原始信息。假设消息长度为 \(k\) 比特。
    码字(Codeword):信道编码器的输出,是一个固定长度的二进制序列,由原始消息比特和附加的冗余比特组成。假设码字长度为 \(n\) 比特。
    编码(Encoding):将一个 \(k\) 比特的消息映射到一个 \(n\) 比特的码字的过程。这个映射关系由信道编码器确定。
    码本(Codebook):所有可能的 \(k\) 比特消息经过编码后生成的所有 \(n\) 比特码字的集合。由于有 \(2^k\) 个不同的 \(k\) 比特消息,因此码本中包含 \(2^k\) 个不同的码字。

    一个 \( (n, k) \) 二进制码(Binary Code)是指将 \(k\) 比特消息编码为 \(n\) 比特码字的编码方案。这里的 \(n > k\),增加的 \(n-k\) 比特是冗余比特,也称为校验比特(Parity Bits)。

    示例:
    考虑一个简单的重复码(Repetition Code)。将 1 比特消息重复三次进行编码。
    消息长度 \(k=1\)。可能的 संदेश 是 0 或 1。
    码字长度 \(n=3\)。
    编码规则:
    消息 0 → 码字 000
    消息 1 → 码字 111

    这个重复码的码本是 \(\{000, 111\}\)。
    如果传输消息 0,发送码字 000。如果在 BSC 信道上传输,接收端可能收到 000, 001, 010, 100, 011, 101, 110, 111 等。
    如果收到 001,译码器可以根据“多数判决(Majority Voting)”原则,认为原始消息是 0。
    如果收到 011,多数判决会认为是 1,此时发生了译码错误。

    码本的设计是信道编码的关键。好的码本应该使得码字之间具有足够的“距离”,以便在信道引入错误时,接收到的序列更接近发送的码字,从而能够正确译码。

    3.5 码率(Code Rate)

    码率是衡量信道编码效率的重要指标,它表示传输一个信息比特平均需要多少个码字比特。

    定义: 对于一个将 \(k\) 比特消息编码为 \(n\) 比特码字的编码方案,其码率(Code Rate)\(R\) 定义为:
    \[ R = \frac{k}{n} \]

    码率是一个介于 0 和 1 之间的值(对于有用的编码,\(k>0\) 且 \(n>k\))。
    ⚝ 码率越高(接近 1),表示引入的冗余越少,传输效率越高。
    ⚝ 码率越低(接近 0),表示引入的冗余越多,抗干扰能力越强,但传输效率越低。

    在实际应用中,需要在传输效率(高码率)和可靠性(低码率)之间进行权衡。例如,前面提到的重复码 \( (3, 1) \) 的码率是 \(R = 1/3\)。这意味着每传输 1 个信息比特,需要发送 3 个码字比特。

    香农信道编码定理(Shannon's Channel Coding Theorem)告诉我们,对于任何码率 \(R\) 小于信道容量(Channel Capacity)\(C\) 的信道,存在一种编码方案,可以在该信道上实现任意低的错误概率。信道容量是信道的最大可能传输速率(无差错传输的理论上限)。因此,码率 \(R\) 必须小于信道容量 \(C\) 才能实现可靠通信。

    3.6 汉明距离(Hamming Distance)与最小距离(Minimum Distance)

    为了量化码字之间的“距离”以及编码方案的检错和纠错能力,我们需要定义一个度量。汉明距离是衡量两个等长二进制序列之间差异的常用度量。

    定义: 两个等长二进制序列 \(x\) 和 \(y\) 之间的汉明距离(Hamming Distance),记为 \(d(x, y)\),是它们对应位置上不同的比特数。

    示例:
    \(x = 10110\),\(y = 11010\)
    \(d(x, y) = 2\) (第二个和第三个位置不同)

    汉明距离满足距离的三个基本性质:
    ① 非负性:\(d(x, y) \ge 0\),当且仅当 \(x=y\) 时 \(d(x, y) = 0\)。
    ② 对称性:\(d(x, y) = d(y, x)\)。
    ③ 三角不等式:\(d(x, z) \le d(x, y) + d(y, z)\)。

    汉明距离在信道编码中至关重要,因为它直接关联到编码的检错和纠错能力。当一个码字 \(c\) 在 BSC 信道上传输时,如果发生了 \(t\) 个比特错误,接收到的序列 \(r\) 与原码字 \(c\) 的汉明距离就是 \(t\),即 \(d(c, r) = t\)。

    定义: 一个码本 \(\mathcal{C}\) 的最小距离(Minimum Distance),记为 \(d_{\min}\),是码本中任意两个不同码字之间汉明距离的最小值。
    \[ d_{\min} = \min_{c_i, c_j \in \mathcal{C}, c_i \ne c_j} \{d(c_i, c_j)\} \]

    最小距离 \(d_{\min}\) 是衡量一个编码方案抗错误能力的关键参数。一个更大的最小距离意味着码字之间“间隔”更远,因此在传输过程中即使发生一些错误,接收到的序列仍然更有可能“靠近”发送的原始码字,从而更容易被正确译码。

    3.7 检错(Error Detection)与纠错(Error Correction)能力

    一个编码方案的检错和纠错能力直接由其最小距离 \(d_{\min}\) 决定。

    检错能力:
    一个码本的最小距离为 \(d_{\min}\),则该码本可以检测出任意 \(t\) 个或少于 \(t\) 个错误,当且仅当 \(t < d_{\min}\)。
    也就是说,一个码可以检测出最多 \(d_{\min}-1\) 个错误。
    证明思路: 如果发生了 \(t\) 个错误,接收到的序列 \(r\) 与发送的码字 \(c\) 的距离为 \(t\),即 \(d(c, r) = t\)。如果 \(t < d_{\min}\),那么 \(r\) 不可能是码本中的任何其他码字 \(c'\)(因为 \(d(c, c') \ge d_{\min} > t\))。因此,如果接收到的序列 \(r\) 不在码本中,就可以断定发生了错误。

    纠错能力:
    一个码本的最小距离为 \(d_{\min}\),则该码本可以纠正任意 \(t\) 个或少于 \(t\) 个错误,当且仅当 \(2t < d_{\min}\),即 \(t < \lfloor (d_{\min}-1)/2 \rfloor + 1\)。
    通常我们说一个码可以纠正最多 \(t = \lfloor (d_{\min}-1)/2 \rfloor\) 个错误。
    证明思路: 考虑发送码字 \(c\),接收到序列 \(r\),其中 \(d(c, r) = t\)。如果 \(t \le \lfloor (d_{\min}-1)/2 \rfloor\),我们希望能够将 \(r\) 唯一地译码回 \(c\)。一种常见的译码策略是最小距离译码(Minimum Distance Decoding):将接收到的序列 \(r\) 译码为码本中距离 \(r\) 最近的码字。如果 \(r\) 与发送的码字 \(c\) 的距离为 \(t\),且 \(t \le \lfloor (d_{\min}-1)/2 \rfloor\),那么对于码本中的任何其他码字 \(c'\) (\(c' \ne c\)),根据三角不等式,有 \(d(r, c') \ge d(c, c') - d(c, r) \ge d_{\min} - t\)。由于 \(t \le \lfloor (d_{\min}-1)/2 \rfloor\),则 \(2t \le d_{\min}-1\),即 \(t \le d_{\min}-1-t\),所以 \(d_{\min} - t \ge t+1\)。因此,\(d(r, c') \ge t+1 > t = d(r, c)\)。这意味着 \(r\) 距离 \(c\) 比距离任何其他码字 \(c'\) 都更近,所以最小距离译码会将 \(r\) 译码为 \(c\),从而纠正了 \(t\) 个错误。

    总结:
    ⚝ 一个码的最小距离为 \(d_{\min}\)。
    ⚝ 它可以检测出最多 \(d_{\min}-1\) 个错误。
    ⚝ 它可以纠正出最多 \(t = \lfloor (d_{\min}-1)/2 \rfloor\) 个错误。

    例如,前面提到的重复码 \( (3, 1) \),码字是 \(\{000, 111\}\)。
    \(d(000, 111) = 3\)。所以 \(d_{\min} = 3\)。
    该码可以检测出最多 \(3-1=2\) 个错误。
    它可以纠正出最多 \(\lfloor (3-1)/2 \rfloor = \lfloor 2/2 \rfloor = 1\) 个错误。
    这与我们之前的多数判决示例一致:收到 001(1个错误),可以纠正为 000;收到 011(2个错误),多数判决会错判为 111,但可以检测出错误(因为 011 不在码本中,如果允许检测的话)。

    最小距离是评估一个码性能的初步指标,但不是唯一指标。对于更复杂的信道和译码算法(如软判决译码),码字的权重分布(Weight Distribution)等其他特性也十分重要。

    本章我们介绍了通信系统的基本模型,几种重要的信道模型(BSC, BEC, AWGN),以及信道编码中的核心概念:码字、码本、码率、汉明距离和最小距离,并阐述了最小距离与检错纠错能力的关系。这些概念是理解后续章节各种具体编码方案的基础。在下一章中,我们将开始学习第一类重要的纠错码——线性分组码。

    好的,同学们,欢迎来到我们信息论课程的第四章:线性分组码(Linear Block Codes)。在前面的章节中,我们了解了信息论的基本概念、信道模型以及纠错编码的必要性。现在,我们将深入探讨一类非常重要且应用广泛的纠错码——线性分组码。它们之所以重要,不仅在于其良好的纠错性能,更在于其简洁的代数结构,这使得编码和译码过程变得相对容易实现。

    本章,我们将系统地学习线性分组码的定义、性质、表示方法(生成矩阵和校验矩阵)、编码和译码方法(特别是伴随式译码),并通过经典的汉明码(Hamming Codes)来加深理解。最后,我们还会简要介绍其他一些重要的线性码。

    4. chapter 4:线性分组码(Linear Block Codes)

    4.1 定义与性质

    线性分组码(Linear Block Codes)是纠错编码中最基本、最重要的一类码。它们之所以被称为“线性”,是因为它们具有代数上的线性结构;被称为“分组码”,是因为它们将待发送的信息序列分成固定长度的组(或块),然后对每一组信息独立地进行编码。

    在一个 \(q\) 元域 \(GF(q)\) 上,一个 \((n, k)\) 线性分组码(Linear Block Code) \(C\) 是指 \(GF(q)^n\) 的一个 \(k\) 维子空间(Subspace)。这里,\(n\) 是码字(Codeword)的长度,\(k\) 是信息位(Information Bits)的长度,\(q\) 是码元(Code Symbol)所在的有限域的大小。通常,我们主要研究二元线性分组码,即 \(q=2\),码元为 0 或 1,运算在 \(GF(2)\) 上进行(加法是异或 XOR,乘法是与 AND)。

    让我们回顾一下向量空间(Vector Space)和子空间(Subspace)的概念。在一个域 \(F\) 上的向量空间 \(V\) 是一个集合,其元素称为向量,并定义了向量加法和标量乘法,满足一系列公理。一个子空间 \(W\) 是 \(V\) 的一个非空子集,且在 \(V\) 的加法和标量乘法下是封闭的。也就是说,如果 \(w_1, w_2 \in W\) 且 \(a \in F\),那么 \(w_1 + w_2 \in W\) 且 \(a \cdot w_1 \in W\)。

    对于一个 \((n, k)\) 线性分组码 \(C\) 在 \(GF(q)\) 上,它满足以下性质:

    ① 码字集合 \(C\) 是 \(GF(q)^n\) 的一个 \(k\) 维子空间。
    ② 任意两个码字的线性组合(在 \(GF(q)\) 上)仍然是码字。特别地,任意两个码字的和(对于二元码即异或)仍然是码字。
    ③ 零向量(All-zero vector) \((0, 0, \dots, 0)\) 必定是一个码字。这是因为子空间必须包含零向量。
    ④ 码字集合 \(C\) 包含 \(q^k\) 个码字。这是因为 \(C\) 是一个 \(k\) 维子空间,可以由 \(k\) 个线性无关的基向量生成,每个基向量可以乘以 \(q\) 种标量(\(GF(q)\) 中的元素),共有 \(q^k\) 种线性组合。

    线性码的代数结构带来了巨大的便利。例如,计算码字之间的汉明距离(Hamming Distance)变得更容易。对于线性码 \(C\),任意两个码字 \(c_1, c_2 \in C\) 之间的汉明距离 \(d(c_1, c_2)\) 等于它们的差 \(c_1 - c_2\) 的汉明重量(Hamming Weight) \(w(c_1 - c_2)\)。由于 \(c_1 - c_2\) 也是一个码字(因为 \(C\) 是子空间),所以线性码的最小距离(Minimum Distance) \(d_{min}\) 等于其非零码字的最小汉明重量。

    \[ d_{min} = \min_{c \in C, c \neq 0} w(c) \]

    这个性质非常重要,因为它将计算任意码对之间的最小距离简化为只计算非零码字的最小重量。

    4.2 生成矩阵(Generator Matrix)与编码

    由于线性分组码 \(C\) 是 \(GF(q)^n\) 的一个 \(k\) 维子空间,它必然有一个基(Basis),由 \(k\) 个线性无关的码字组成。设这 \(k\) 个基向量为 \(g_0, g_1, \dots, g_{k-1}\),每个向量都是 \(GF(q)^n\) 中的 \(n\) 维向量。我们可以将这 \(k\) 个基向量作为行向量构成一个 \(k \times n\) 的矩阵,称为生成矩阵(Generator Matrix),记为 \(G\)。

    \[ G = \begin{pmatrix} g_0 \\ g_1 \\ \vdots \\ g_{k-1} \end{pmatrix} \]

    任何一个 \(k\) 维信息向量(Information Vector) \(u = (u_0, u_1, \dots, u_{k-1})\),其中 \(u_i \in GF(q)\),都可以通过与生成矩阵 \(G\) 相乘来生成一个唯一的 \(n\) 维码字 \(c\)。

    \[ c = uG \]

    这里的乘法是在 \(GF(q)\) 上进行的矩阵乘法。具体来说,如果 \(u = (u_0, \dots, u_{k-1})\) 且 \(G\) 的行向量是 \(g_0, \dots, g_{k-1}\),那么码字 \(c\) 就是这些基向量的线性组合:

    \[ c = u_0 g_0 + u_1 g_1 + \dots + u_{k-1} g_{k-1} \]

    由于 \(g_i\) 都是码字(它们是基向量),且码字集合在加法和标量乘法下封闭,所以它们的线性组合 \(c\) 也必然是码字。通过遍历所有 \(q^k\) 个可能的 \(k\) 维信息向量 \(u\),我们可以生成所有的 \(q^k\) 个码字,从而得到整个码本(Codebook)。

    示例: 考虑一个二元 \((5, 2)\) 线性分组码,其生成矩阵为:

    \[ G = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} \]

    这里 \(n=5, k=2, q=2\)。信息向量 \(u\) 是一个 2 维向量,有 \(2^2=4\) 种可能:(0,0), (0,1), (1,0), (1,1)。

    ① 信息向量 \(u = (0, 0)\):
    \(c = (0, 0) \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} = (0, 0, 0, 0, 0)\)

    ② 信息向量 \(u = (0, 1)\):
    \(c = (0, 1) \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} = (0 \cdot 1 + 1 \cdot 0, 0 \cdot 0 + 1 \cdot 1, 0 \cdot 1 + 1 \cdot 0, 0 \cdot 1 + 1 \cdot 1, 0 \cdot 0 + 1 \cdot 1) = (0, 1, 0, 1, 1)\)

    ③ 信息向量 \(u = (1, 0)\):
    \(c = (1, 0) \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} = (1 \cdot 1 + 0 \cdot 0, 1 \cdot 0 + 0 \cdot 1, 1 \cdot 1 + 0 \cdot 0, 1 \cdot 1 + 0 \cdot 1, 1 \cdot 0 + 0 \cdot 1) = (1, 0, 1, 1, 0)\)

    ④ 信息向量 \(u = (1, 1)\):
    \(c = (1, 1) \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} = (1 \cdot 1 + 1 \cdot 0, 1 \cdot 0 + 1 \cdot 1, 1 \cdot 1 + 1 \cdot 0, 1 \cdot 1 + 1 \cdot 1, 1 \cdot 0 + 1 \cdot 1) = (1, 1, 1, 0, 1)\) (注意:\(1+1=0\) 在 GF(2) 中)

    该码的码本是 \(\{ (0,0,0,0,0), (0,1,0,1,1), (1,0,1,1,0), (1,1,1,0,1) \}\)。

    为了方便编码实现,生成矩阵通常可以化为系统(Systematic)形式。一个 \(k \times n\) 的生成矩阵 \(G\) 如果可以表示为 \(G = [I_k | P]\) 的形式,其中 \(I_k\) 是 \(k \times k\) 的单位矩阵,\(P\) 是一个 \(k \times (n-k)\) 的矩阵,则称 \(G\) 是系统生成矩阵。

    如果生成矩阵是系统形式 \(G = [I_k | P]\),那么信息向量 \(u = (u_0, \dots, u_{k-1})\) 编码后的码字 \(c = uG = u[I_k | P] = [uI_k | uP] = [u | uP]\)。这意味着码字的前 \(k\) 位就是信息位本身,后 \(n-k\) 位是校验位(Parity Bits),由信息位通过 \(uP\) 计算得到。这种形式的码字称为系统码字(Systematic Codeword)。系统码的优点是信息位可以直接从码字中提取,无需额外的处理。任何一个线性分组码都可以通过行变换(不改变码空间)将其生成矩阵化为系统形式。

    码率(Code Rate) \(R\) 定义为信息位的长度与码字长度之比,即 \(R = k/n\)。码率反映了编码的效率,码率越高,冗余度越低,传输效率越高,但纠错能力通常越弱。

    4.3 校验矩阵(Parity-Check Matrix)与伴随式(Syndrome)

    与生成矩阵 \(G\) 对应,每个 \((n, k)\) 线性分组码 \(C\) 都有一个 \((n-k) \times n\) 的校验矩阵(Parity-Check Matrix),记为 \(H\)。校验矩阵 \(H\) 的行向量张成一个 \((n-k)\) 维空间,这个空间是码空间 \(C\) 在 \(GF(q)^n\) 中的正交补空间(Orthogonal Complement)。

    校验矩阵 \(H\) 的核心性质是:对于任意一个 \(n\) 维向量 \(v\),它是码字当且仅当 \(vH^T = 0\),其中 \(H^T\) 是 \(H\) 的转置矩阵,\(0\) 是一个 \((n-k)\) 维零向量。

    \[ c \in C \iff cH^T = 0 \]

    这是因为 \(C\) 是 \(G\) 的行空间,而 \(H\) 的行空间是 \(G\) 的行空间的零空间(Null Space)。也就是说,\(G\) 的每一行都与 \(H\) 的每一行正交(内积为零)。因此,\(G\) 的行向量与 \(H\) 的行向量的转置相乘结果为零矩阵:

    \[ GH^T = 0 \]

    如果生成矩阵 \(G\) 是系统形式 \(G = [I_k | P]\),那么对应的校验矩阵 \(H\) 也可以写成系统形式 \(H = [-P^T | I_{n-k}]\)。在二元域 \(GF(2)\) 上,\(-P^T = P^T\),所以系统校验矩阵为 \(H = [P^T | I_{n-k}]\)。

    示例(接上例): 对于系统生成矩阵 \(G = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix}\),其中 \(I_2 = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\) 且 \(P = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \end{pmatrix}\)。
    \(n=5, k=2, n-k=3\)。
    \(P^T = \begin{pmatrix} 1 & 0 \\ 1 & 1 \\ 0 & 1 \end{pmatrix}\)。
    系统校验矩阵 \(H = [P^T | I_3] = \begin{pmatrix} 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 1 \end{pmatrix}\)。

    我们可以验证 \(GH^T = 0\)。
    \[ G H^T = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1+0+1+0+0 & 1+0+0+1+0 & 0+0+1+0+0 \\ 0+0+0+0+0 & 0+1+0+1+0 & 0+1+0+0+1 \end{pmatrix} \]
    在 GF(2) 中,\(1+1=0\)。
    \[ GH^T = \begin{pmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \end{pmatrix} \]
    等等,这里计算出错了。让我重新检查系统校验矩阵的定义。
    如果 \(G = [I_k | P]\),那么 \(H = [-P^T | I_{n-k}]\).
    \(G = \begin{pmatrix} I_k & P \end{pmatrix}\)
    \(H = \begin{pmatrix} -P^T \\ I_{n-k} \end{pmatrix}\) 是 \(n \times (n-k)\) 矩阵的转置,所以 \(H\) 是 \((n-k) \times n\) 矩阵。
    如果 \(G = [I_k | P]\),则 \(H = [-P^T | I_{n-k}]\).
    \(G = \begin{pmatrix} 1 & 0 & | & 1 & 1 & 0 \\ 0 & 1 & | & 0 & 1 & 1 \end{pmatrix}\). \(k=2, n=5\). \(P = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \end{pmatrix}\). \(n-k=3\).
    \(P^T = \begin{pmatrix} 1 & 0 \\ 1 & 1 \\ 0 & 1 \end{pmatrix}\).
    \(H = [-P^T | I_3]\) 在 GF(2) 中 \(-P^T = P^T\).
    \(H = \begin{pmatrix} 1 & 0 & | & 1 & 0 & 0 \\ 1 & 1 & | & 0 & 1 & 0 \\ 0 & 1 & | & 0 & 0 & 1 \end{pmatrix}\).
    Let's check \(GH^T\).
    \(H^T = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\).
    \[ G H^T = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1+0+1+0+0 & 1+0+0+1+0 & 0+0+1+0+0 \\ 0+0+0+0+0 & 0+1+0+1+0 & 0+1+0+0+1 \end{pmatrix} \]
    Ah, the matrix multiplication is row of G times column of H^T.
    Row 1 of G: (1 0 1 1 0)
    Column 1 of H^T: (1 0 1 0 0)^T.好的,同学们,欢迎来到我们信息论课程的第四章:线性分组码(Linear Block Codes)。在前面的章节中,我们了解了信息论的基本概念、信道模型以及纠错编码的必要性。现在,我们将深入探讨一类非常重要且应用广泛的纠错码——线性分组码。它们之所以重要,不仅在于其良好的纠错性能,更在于其简洁的代数结构,这使得编码和译码过程变得相对容易实现。

    本章,我们将系统地学习线性分组码的定义、性质、表示方法(生成矩阵和校验矩阵)、编码和译码方法(特别是伴随式译码),并通过经典的汉明码(Hamming Codes)来加深理解。最后,我们还会简要介绍其他一些重要的线性码。

    4. chapter 4:线性分组码(Linear Block Codes)

    4.1 定义与性质

    线性分组码(Linear Block Codes)是纠错编码中最基本、最重要的一类码。它们之所以被称为“线性”,是因为它们具有代数上的线性结构;被称为“分组码”,是因为它们将待发送的信息序列分成固定长度的组(或块),然后对每一组信息独立地进行编码。

    在一个 \(q\) 元域 \(GF(q)\) 上,一个 \((n, k)\) 线性分组码(Linear Block Code) \(C\) 是指 \(GF(q)^n\) 的一个 \(k\) 维子空间(Subspace)。这里,\(n\) 是码字(Codeword)的长度,\(k\) 是信息位(Information Bits)的长度,\(q\) 是码元(Code Symbol)所在的有限域的大小。通常,我们主要研究二元线性分组码,即 \(q=2\),码元为 0 或 1,运算在 \(GF(2)\) 上进行(加法是异或 XOR,乘法是与 AND)。

    让我们回顾一下向量空间(Vector Space)和子空间(Subspace)的概念。在一个域 \(F\) 上的向量空间 \(V\) 是一个集合,其元素称为向量,并定义了向量加法和标量乘法,满足一系列公理。一个子空间 \(W\) 是 \(V\) 的一个非空子集,且在 \(V\) 的加法和标量乘法下是封闭的。也就是说,如果 \(w_1, w_2 \in W\) 且 \(a \in F\),那么 \(w_1 + w_2 \in W\) 且 \(a \cdot w_1 \in W\)。

    对于一个 \((n, k)\) 线性分组码 \(C\) 在 \(GF(q)\) 上,它满足以下性质:

    ① 码字集合 \(C\) 是 \(GF(q)^n\) 的一个 \(k\) 维子空间。
    ② 任意两个码字的线性组合(在 \(GF(q)\) 上)仍然是码字。特别地,任意两个码字的和(对于二元码即异或)仍然是码字。
    ③ 零向量(All-zero vector) \((0, 0, \dots, 0)\) 必定是一个码字。这是因为子空间必须包含零向量。
    ④ 码字集合 \(C\) 包含 \(q^k\) 个码字。这是因为 \(C\) 是一个 \(k\) 维子空间,可以由 \(k\) 个线性无关的基向量生成,每个基向量可以乘以 \(q\) 种标量(\(GF(q)\) 中的元素),共有 \(q^k\) 种线性组合。

    线性码的代数结构带来了巨大的便利。例如,计算码字之间的汉明距离(Hamming Distance)变得更容易。对于线性码 \(C\),任意两个码字 \(c_1, c_2 \in C\) 之间的汉明距离 \(d(c_1, c_2)\) 等于它们的差 \(c_1 - c_2\) 的汉明重量(Hamming Weight) \(w(c_1 - c_2)\)。由于 \(c_1 - c_2\) 也是一个码字(因为 \(C\) 是子空间),所以线性码的最小距离(Minimum Distance) \(d_{min}\) 等于其非零码字的最小汉明重量。

    \[ d_{min} = \min_{c \in C, c \neq 0} w(c) \]

    这个性质非常重要,因为它将计算任意码对之间的最小距离简化为只计算非零码字的最小重量。一个码的纠错能力 \(t\) 与其最小距离 \(d_{min}\) 之间的关系是 \(t = \lfloor (d_{min} - 1) / 2 \rfloor\)。

    4.2 生成矩阵(Generator Matrix)与编码

    由于线性分组码 \(C\) 是 \(GF(q)^n\) 的一个 \(k\) 维子空间,它必然有一个基(Basis),由 \(k\) 个线性无关的码字组成。设这 \(k\) 个基向量为 \(g_0, g_1, \dots, g_{k-1}\),每个向量都是 \(GF(q)^n\) 中的 \(n\) 维向量。我们可以将这 \(k\) 个基向量作为行向量构成一个 \(k \times n\) 的矩阵,称为生成矩阵(Generator Matrix),记为 \(G\)。

    \[ G = \begin{pmatrix} g_0 \\ g_1 \\ \vdots \\ g_{k-1} \end{pmatrix} \]

    任何一个 \(k\) 维信息向量(Information Vector) \(u = (u_0, u_1, \dots, u_{k-1})\),其中 \(u_i \in GF(q)\),都可以通过与生成矩阵 \(G\) 相乘来生成一个唯一的 \(n\) 维码字 \(c\)。

    \[ c = uG \]

    这里的乘法是在 \(GF(q)\) 上进行的矩阵乘法。具体来说,如果 \(u = (u_0, \dots, u_{k-1})\) 且 \(G\) 的行向量是 \(g_0, \dots, g_{k-1}\),那么码字 \(c\) 就是这些基向量的线性组合:

    \[ c = u_0 g_0 + u_1 g_1 + \dots + u_{k-1} g_{k-1} \]

    由于 \(g_i\) 都是码字(它们是基向量),且码字集合在加法和标量乘法下封闭,所以它们的线性组合 \(c\) 也必然是码字。通过遍历所有 \(q^k\) 个可能的 \(k\) 维信息向量 \(u\),我们可以生成所有的 \(q^k\) 个码字,从而得到整个码本(Codebook)。

    示例: 考虑一个二元 \((5, 2)\) 线性分组码,其生成矩阵为:

    \[ G = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} \]

    这里 \(n=5, k=2, q=2\)。信息向量 \(u\) 是一个 2 维向量,有 \(2^2=4\) 种可能:(0,0), (0,1), (1,0), (1,1)。

    ① 信息向量 \(u = (0, 0)\):
    \(c = (0, 0) G = (0, 0, 0, 0, 0)\)

    ② 信息向量 \(u = (0, 1)\):
    \(c = (0, 1) G = (0, 1, 0, 1, 1)\)

    ③ 信息向量 \(u = (1, 0)\):
    \(c = (1, 0) G = (1, 0, 1, 1, 0)\)

    ④ 信息向量 \(u = (1, 1)\):
    \(c = (1, 1) G = (1, 1, 1, 0, 1)\) (注意:在 GF(2) 中 \(1+1=0\))

    该码的码本是 \(\{ (0,0,0,0,0), (0,1,0,1,1), (1,0,1,1,0), (1,1,1,0,1) \}\)。

    为了方便编码实现,生成矩阵通常可以化为系统(Systematic)形式。一个 \(k \times n\) 的生成矩阵 \(G\) 如果可以表示为 \(G = [I_k | P]\) 的形式,其中 \(I_k\) 是 \(k \times k\) 的单位矩阵,\(P\) 是一个 \(k \times (n-k)\) 的矩阵,则称 \(G\) 是系统生成矩阵。

    如果生成矩阵是系统形式 \(G = [I_k | P]\),那么信息向量 \(u = (u_0, \dots, u_{k-1})\) 编码后的码字 \(c = uG = u[I_k | P] = [uI_k | uP] = [u | uP]\)。这意味着码字的前 \(k\) 位就是信息位本身,后 \(n-k\) 位是校验位(Parity Bits),由信息位通过 \(uP\) 计算得到。这种形式的码字称为系统码字(Systematic Codeword)。系统码的优点是信息位可以直接从码字中提取,无需额外的处理。任何一个线性分组码都可以通过行变换(不改变码空间)将其生成矩阵化为系统形式。

    码率(Code Rate) \(R\) 定义为信息位的长度与码字长度之比,即 \(R = k/n\)。码率反映了编码的效率,码率越高,冗余度越低,传输效率越高,但纠错能力通常越弱。

    4.3 校验矩阵(Parity-Check Matrix)与伴随式(Syndrome)

    与生成矩阵 \(G\) 对应,每个 \((n, k)\) 线性分组码 \(C\) 都有一个 \((n-k) \times n\) 的校验矩阵(Parity-Check Matrix),记为 \(H\)。校验矩阵 \(H\) 的行向量张成一个 \((n-k)\) 维空间,这个空间是码空间 \(C\) 在 \(GF(q)^n\) 中的正交补空间(Orthogonal Complement)。

    校验矩阵 \(H\) 的核心性质是:对于任意一个 \(n\) 维向量 \(v\),它是码字当且仅当 \(vH^T = 0\),其中 \(H^T\) 是 \(H\) 的转置矩阵,\(0\) 是一个 \((n-k)\) 维零向量。

    \[ c \in C \iff cH^T = 0 \]

    这是因为 \(C\) 是 \(G\) 的行空间,而 \(H\) 的行空间是 \(G\) 的行空间的零空间(Null Space)。也就是说,\(G\) 的每一行都与 \(H\) 的每一行正交(内积为零)。因此,\(G\) 的行向量与 \(H\) 的行向量的转置相乘结果为零矩阵:

    \[ GH^T = 0 \]

    如果生成矩阵 \(G\) 是系统形式 \(G = [I_k | P]\),那么对应的校验矩阵 \(H\) 也可以写成系统形式 \(H = [-P^T | I_{n-k}]\)。在二元域 \(GF(2)\) 上,\(-P^T = P^T\),所以系统校验矩阵为 \(H = [P^T | I_{n-k}]\)。

    示例(接上例): 对于系统生成矩阵 \(G = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix}\),其中 \(I_2 = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\) 且 \(P = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \end{pmatrix}\)。
    \(n=5, k=2, n-k=3\)。
    \(P^T = \begin{pmatrix} 1 & 0 \\ 1 & 1 \\ 0 & 1 \end{pmatrix}\)。
    系统校验矩阵 \(H = [P^T | I_3] = \begin{pmatrix} 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 1 \end{pmatrix}\)。

    我们可以验证 \(GH^T = 0\)。
    \[ G H^T = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 \end{pmatrix} \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1\cdot1+0\cdot0+1\cdot1+1\cdot0+0\cdot0 & 1\cdot1+0\cdot1+1\cdot0+1\cdot1+0\cdot0 & 1\cdot0+0\cdot1+1\cdot0+1\cdot0+0\cdot1 \\ 0\cdot1+1\cdot0+0\cdot1+1\cdot0+1\cdot0 & 0\cdot1+1\cdot1+0\cdot0+1\cdot1+1\cdot0 & 0\cdot0+1\cdot1+0\cdot0+1\cdot0+1\cdot1 \end{pmatrix} \]
    在 GF(2) 中进行加法(异或):
    \[ G H^T = \begin{pmatrix} 1+0+1+0+0 & 1+0+0+1+0 & 0+0+0+0+0 \\ 0+0+0+0+0 & 0+1+0+1+0 & 0+1+0+0+1 \end{pmatrix} = \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} \]
    验证成功!👍

    校验矩阵 \(H\) 在译码过程中起着关键作用。假设发送的码字是 \(c\),在信道中受到噪声干扰后,接收到的向量是 \(r\)。接收向量 \(r\) 可以表示为发送码字 \(c\) 加上一个错误向量(Error Vector) \(e\),即 \(r = c + e\)。错误向量 \(e\) 的非零位表示发生了错误的位置。

    我们将接收向量 \(r\) 与校验矩阵的转置 \(H^T\) 相乘,得到一个 \((n-k)\) 维向量,称为伴随式(Syndrome),记为 \(s\)。

    \[ s = rH^T \]

    由于 \(r = c + e\),且矩阵乘法满足分配律,我们在 GF(q) 上进行计算:

    \[ s = (c + e)H^T = cH^T + eH^T \]

    因为 \(c\) 是一个码字,所以 \(cH^T = 0\)。因此,伴随式 \(s\) 只与错误向量 \(e\) 有关:

    \[ s = eH^T \]

    这意味着,如果我们能够计算出接收向量的伴随式 \(s\),我们就获得了关于错误向量 \(e\) 的信息。不同的错误向量 \(e\) 可能会产生不同的伴随式 \(s\)。如果 \(s = 0\),则表示接收到的向量 \(r\) 是一个码字。这可能意味着没有发生错误(\(e=0\)),或者发生了无法检测到的错误(\(e\) 是一个非零码字)。如果 \(s \neq 0\),则表示接收到的向量不是一个码字,肯定发生了错误。

    伴随式 \(s\) 是一个 \((n-k)\) 维向量,共有 \(q^{n-k}\) 种可能的取值。

    4.4 伴随式译码(Syndrome Decoding)

    伴随式译码(Syndrome Decoding)是一种基于伴随式的线性分组码译码方法。其核心思想是利用伴随式 \(s = eH^T\) 来确定最可能的错误向量 \(e\),然后从接收向量 \(r\) 中减去(在 GF(2) 中是异或)这个估计的错误向量 \(\hat{e}\) 来恢复发送的码字 \(\hat{c} = r - \hat{e}\)。

    译码步骤如下:

    ① 计算接收向量 \(r\) 的伴随式 \(s = rH^T\)。
    ② 根据计算出的伴随式 \(s\),查找一个预先建立好的伴随式表(Syndrome Table),找到与 \(s\) 对应的最可能的错误向量 \(\hat{e}\)。这个 \(\hat{e}\) 通常是具有伴随式 \(s\) 的所有向量中汉明重量最小的那一个。具有相同伴随式的向量构成一个陪集(Coset),其中重量最小的向量称为陪集首(Coset Leader)。
    ③ 从接收向量中减去(异或)估计的错误向量 \(\hat{e}\) 得到译码输出 \(\hat{c} = r - \hat{e}\)。

    \[ \hat{c} = r - \hat{e} \]

    如果信道是二元对称信道(BSC),且错误发生的概率 \(p < 0.5\),那么最小重量的错误向量是最可能发生的错误模式。伴随式译码在查找表中选择陪集首作为错误向量的估计,这实现了最小距离译码(Minimum Distance Decoding),也就是最大似然译码(Maximum Likelihood Decoding)在 BSC 信道下的简化形式。

    伴随式表的构建:
    伴随式表包含 \(q^{n-k}\) 行,每一行对应一个可能的伴随式 \(s\)。对于每一个非零伴随式 \(s\),我们需要找到一个重量最小的向量 \(e\) 使得 \(eH^T = s\)。零伴随式 \(s=0\) 对应于错误向量 \(e=0\)(这是重量最小的向量)。

    构建伴随式表的过程:
    ① 列出所有 \(q^n\) 个可能的接收向量。
    ② 对于每个接收向量 \(r\),计算其伴随式 \(s = rH^T\)。
    ③ 将具有相同伴随式的接收向量归为一类,形成一个陪集。
    ④ 在每个陪集中,找到汉明重量最小的向量,将其作为该陪集的陪集首(即最可能的错误向量 \(\hat{e}\))。
    ⑤ 构建伴随式表,将每个伴随式 \(s\) 与其对应的陪集首 \(\hat{e}\) 关联起来。

    示例(接上例): 对于 \((5, 2)\) 码,\(n=5, k=2, n-k=3\)。伴随式是 3 维向量,共有 \(2^3=8\) 种可能。校验矩阵 \(H = \begin{pmatrix} 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 1 \end{pmatrix}\)。

    陪集首通常是重量为 1 的向量(如果存在且伴随式不同),然后是重量为 2 的向量,以此类推。
    重量为 0 的向量:\(e = (0,0,0,0,0)\). \(s = eH^T = (0,0,0)\). 陪集首:(0,0,0,0,0).
    重量为 1 的向量:
    \(e = (1,0,0,0,0)\). \(s = (1,0,0,0,0)H^T = (1,1,0)\).
    \(e = (0,1,0,0,0)\). \(s = (0,1,0,0,0)H^T = (0,1,1)\).
    \(e = (0,0,1,0,0)\). \(s = (0,0,1,0,0)H^T = (1,0,1)\).
    \(e = (0,0,0,1,0)\). \(s = (0,0,0,1,0)H^T = (0,1,0)\).
    \(e = (0,0,0,0,1)\). \(s = (0,0,0,0,1)H^T = (0,0,1)\).
    我们已经得到了 6 个不同的伴随式:(0,0,0), (1,1,0), (0,1,1), (1,0,1), (0,1,0), (0,0,1)。还剩下 2 个伴随式。我们需要找重量为 2 的向量。
    重量为 2 的向量有很多,例如 (1,1,0,0,0). \(s = (1,1,0,0,0)H^T = (1+0, 1+1, 0+1) = (1,0,1)\). 这个伴随式 (1,0,1) 已经对应了重量为 1 的 (0,0,1,0,0)。所以 (1,1,0,0,0) 不是陪集首。
    我们需要找到那些伴随式尚未出现的向量。
    伴随式 (1,0,0): 尝试重量为 2 的向量。例如 (1,0,0,1,0). \(s = (1,0,0,1,0)H^T = (1+0, 1+1, 0+0) = (1,0,0)\). 找到了!陪集首:(1,0,0,1,0).
    伴随式 (1,1,1): 尝试重量为 2 的向量。例如 (0,1,1,0,0). \(s = (0,1,1,0,0)H^T = (0+1, 1+0, 1+1) = (1,1,0)\). 已经有了。
    尝试 (1,0,1,0,0). \(s = (1,0,1,0,0)H^T = (1+1, 1+0, 0+1) = (0,1,1)\). 已经有了。
    尝试 (0,0,0,1,1). \(s = (0,0,0,1,1)H^T = (0+0, 1+0, 0+1) = (0,1,1)\). 已经有了。
    尝试重量为 3 的向量。例如 (1,1,1,0,0). \(s = (1,1,1,0,0)H^T = (1+1+0, 1+0+1, 0+1+1) = (0,0,0)\). 这是码字。
    尝试 (1,0,0,0,1). \(s = (1,0,0,0,1)H^T = (1+0, 1+0, 0+1) = (1,1,1)\). 找到了!陪集首:(1,0,0,0,1).

    伴随式表(部分):
    | 伴随式 \(s\) | 陪集首 \(\hat{e}\) |
    | :---------- | :----------------- |
    | (0,0,0) | (0,0,0,0,0) |
    | (1,1,0) | (1,0,0,0,0) |
    | (0,1,1) | (0,1,0,0,0) |
    | (1,0,1) | (0,0,1,0,0) |
    | (0,1,0) | (0,0,0,1,0) |
    | (0,0,1) | (0,0,0,0,1) |
    | (1,0,0) | (1,0,0,1,0) |
    | (1,1,1) | (1,0,0,0,1) |

    译码过程示例: 假设发送码字 \(c = (1,0,1,1,0)\),接收向量 \(r = (1,1,1,1,0)\)。
    ① 计算伴随式:
    \(s = rH^T = (1,1,1,1,0) \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = (1+0+1+0+0, 1+1+0+1+0, 0+1+0+0+0) = (0, 1, 1)\).
    ② 查找伴随式表,伴随式 (0,1,1) 对应的陪集首是 \(\hat{e} = (0,1,0,0,0)\).
    ③ 译码输出:\(\hat{c} = r - \hat{e} = (1,1,1,1,0) - (0,1,0,0,0) = (1,1,1,1,0) + (0,1,0,0,0) = (1,0,1,1,0)\).
    译码结果 \(\hat{c}\) 与发送码字 \(c\) 相同,译码成功!🎉

    伴随式译码的复杂性主要在于构建和查找伴随式表。对于大型码,表的规模 \(q^{n-k}\) 会非常大,这限制了伴随式译码在实际中的应用范围,主要适用于 \(n-k\) 较小的码。

    4.5 汉明码(Hamming Codes)

    汉明码(Hamming Codes)是一类重要的线性分组码,由 Richard Hamming 在 1950 年提出。它们是第一类被发现的具有纠错能力的码,并且是完美码(Perfect Codes)的一个例子(在二元域上)。完美码是指能够达到汉明界(Hamming Bound)的码,即码字周围半径为 \(t\) 的球恰好填满整个空间 \(GF(q)^n\) 而没有重叠和空隙。汉明码能够纠正任意单个错误。

    一个二元汉明码通常记为 \(Ham(m, q)\),其中 \(m \ge 2\) 是一个整数,\(q\) 是域的大小(对于二元码 \(q=2\))。对于二元汉明码 \(Ham(m, 2)\),其参数为:
    ⚝ 码字长度 \(n = 2^m - 1\)
    ⚝ 信息位长度 \(k = 2^m - 1 - m\)
    ⚝ 校验位长度 \(n-k = m\)
    ⚝ 最小距离 \(d_{min} = 3\)

    汉明码的最小距离为 3,这意味着它可以检测到任意两个错误,并纠正任意一个错误(\(t = \lfloor (3-1)/2 \rfloor = 1\))。

    二元汉明码的校验矩阵 \(H\) 的构造非常简洁:它的列是由所有非零的 \(m\) 维二元向量组成的矩阵。列的顺序可以任意排列,但通常按照字典序或数值大小排列。

    示例: 考虑 \(m=3\) 的二元汉明码 \(Ham(3, 2)\)。
    \(n = 2^3 - 1 = 7\)
    \(k = 2^3 - 1 - 3 = 4\)
    \(n-k = 3\)
    这是一个 \((7, 4)\) 码,最小距离 \(d_{min} = 3\)。

    校验矩阵 \(H\) 是一个 \(3 \times 7\) 矩阵,其列是所有 7 个非零的 3 维二元向量:
    \[ H = \begin{pmatrix} 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 \end{pmatrix} \]
    (列的顺序可以不同,这里按列向量表示的数值从 1 到 7 排列:001, 010, 011, 100, 101, 110, 111 的转置)

    系统生成矩阵 \(G\) 可以通过 \(GH^T = 0\) 的关系推导出来。对于系统码 \(G = [I_k | P]\) 和 \(H = [P^T | I_{n-k}]\),有 \(PI_{n-k}^T + I_k P^T = P + P^T = 0\),这在 GF(2) 中总是成立。我们只需要找到 \(P\) 使得 \(H = [P^T | I_m]\) 的形式。
    将 \(H\) 的列进行适当的置换,使其后 \(m\) 列构成单位矩阵 \(I_m\)。
    \[ H' = \begin{pmatrix} 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 1 & 0 & 0 \end{pmatrix} \]
    (将原 \(H\) 的列 4, 6, 7 移到最后 3 列,构成 \(I_3\),并对前 4 列进行相应调整)
    这个 \(H'\) 的形式是 \([P'^T | I_3]\),其中 \(P'^T = \begin{pmatrix} 1 & 1 & 1 & 0 \\ 1 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \end{pmatrix}\)。
    所以 \(P' = \begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix}\) (转置时行变列)。
    系统生成矩阵 \(G' = [I_4 | P'] = \begin{pmatrix} 1 & 0 & 0 & 0 & | & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 & | & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & | & 1 & 0 & 1 \\ 0 & 0 & 0 & 1 & | & 0 & 1 & 0 \end{pmatrix}\)。

    汉明码的伴随式译码:
    汉明码的伴随式译码非常直观。对于一个接收向量 \(r\),计算其伴随式 \(s = rH^T\)。
    如果 \(s = 0\),则认为没有错误发生,译码输出 \(\hat{c} = r\)。
    如果 \(s \neq 0\),由于汉明码可以纠正单个错误,且 \(d_{min}=3\),任何重量为 1 的错误向量都会产生一个唯一的非零伴随式。具体来说,如果错误向量 \(e\) 只有在第 \(i\) 位是 1 (即 \(e = (0, \dots, 1_i, \dots, 0)\)),那么 \(s = eH^T\) 将等于 \(H\) 的第 \(i\) 列。
    因此,对于非零伴随式 \(s\),我们只需要在 \(H\) 的列中查找是否存在与 \(s\) 完全相同的列。如果 \(s\) 等于 \(H\) 的第 \(i\) 列,那么最可能的错误就是发生在第 \(i\) 位,即 \(\hat{e}\) 是一个在第 \(i\) 位为 1 的向量。然后译码输出 \(\hat{c} = r - \hat{e}\) (在 GF(2) 中是 \(r \oplus \hat{e}\))。

    示例: 使用上面的 \(Ham(3, 2)\) 码和校验矩阵 \(H = \begin{pmatrix} 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 \end{pmatrix}\)。
    假设发送码字 \(c = (1,0,1,1,0,1,0)\) (这是由信息位 (1,0,1,0) 使用 \(G'\) 生成的码字)。
    假设接收向量 \(r = (1,0,1,0,0,1,0)\) (第 4 位发生错误)。
    计算伴随式:
    \[ s = rH^T = (1,0,1,0,0,1,0) \begin{pmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\ 1 & 1 & 1 \end{pmatrix} \]
    \[ s = (1\cdot0+0\cdot0+1\cdot0+0\cdot1+0\cdot1+1\cdot1+0\cdot1, \quad 1\cdot0+0\cdot1+1\cdot1+0\cdot0+0\cdot0+1\cdot1+0\cdot1, \quad 1\cdot1+0\cdot0+1\cdot1+0\cdot0+0\cdot1+1\cdot0+0\cdot1) \]
    \[ s = (0+0+0+0+0+1+0, \quad 0+0+1+0+0+1+0, \quad 1+0+1+0+0+0+0) \]
    \[ s = (1, 0, 0) \]
    伴随式 \(s = (1,0,0)\)。查找 \(H\) 的列,发现第 4 列是 \(\begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix}\)。
    这意味着错误最可能发生在第 4 位。估计的错误向量 \(\hat{e} = (0,0,0,1,0,0,0)\)。
    译码输出 \(\hat{c} = r \oplus \hat{e} = (1,0,1,0,0,1,0) \oplus (0,0,0,1,0,0,0) = (1,0,1,1,0,1,0)\)。
    译码成功,恢复了原始码字!🥳

    汉明码是理解线性码和伴随式译码的绝佳入门。它们结构简单,易于实现,并且在纠正单个错误方面是最优的。

    4.6 其他经典线性码(Other Classic Linear Codes)

    除了汉明码,还有许多其他重要的线性分组码,它们在不同的应用场景中发挥着重要作用。这里我们简要介绍几种:

    扩展汉明码(Extended Hamming Codes): 在 \(Ham(m, 2)\) 码的末尾增加一个总校验位(使得所有码字的重量都是偶数),可以得到一个 \((2^m, 2^m-1-m, 4)\) 的扩展汉明码。它的最小距离增加到 4,因此可以检测到任意三个错误,并纠正任意一个错误。在某些应用中,检测更多错误的能力比纠正单个错误更重要。

    Golay 码(Golay Codes): 最著名的 Golay 码是二元 \((23, 12, 7)\) Golay 码 \(G_{23}\) 和扩展二元 \((24, 12, 8)\) Golay 码 \(G_{24}\)。\(G_{23}\) 是一个完美码,可以纠正任意 3 个错误(\(t = \lfloor (7-1)/2 \rfloor = 3\))。\(G_{24}\) 可以纠正任意 3 个错误并检测任意 4 个错误。Golay 码具有非常特殊的代数结构,并且在深空通信等领域有过应用。

    Reed-Muller (RM) 码: Reed-Muller 码是一类基于多元多项式的线性码,具有递归结构。它们在编码和译码上相对容易实现(特别是对于低阶 RM 码),并且在某些信道条件下性能良好。RM 码在早期的通信标准中有所应用。

    Reed-Solomon (RS) 码: RS 码是在有限域 \(GF(q)\) 上定义的循环码(Cyclic Codes)的一个子类,通常在 \(GF(2^m)\) 上定义。它们是最大距离可分码(MDS Codes)的一个重要例子,这意味着它们达到了 Singleton 界(Singleton Bound),具有最优的纠错能力。RS 码特别擅长纠正突发错误(Burst Errors),因为它们的码元是 \(m\) 个比特组成的符号,一个符号错误可能包含多个比特错误。RS 码在许多实际系统中广泛应用,如 CD、DVD、蓝光、QR 码、DVB、ADSL、WiMAX 等。我们将在下一章循环码中更详细地讨论 RS 码。

    这些经典线性码构成了纠错编码理论的基石,它们各自的特性和构造方法为后续更强大的编码技术(如 Turbo 码和 LDPC 码)奠定了基础。理解线性码的代数结构和译码原理,对于深入学习现代编码理论至关重要。

    同学们,本章我们深入学习了线性分组码。我们了解了它们的定义、如何使用生成矩阵进行编码、如何使用校验矩阵进行错误检测以及如何利用伴随式进行译码。汉明码作为一个典型的例子,帮助我们具体理解了这些概念。线性码的代数结构是其强大之处,但也限制了其在某些复杂信道或需要逼近香农限(Shannon Limit)的应用中的性能。在后续章节中,我们将学习更先进的编码技术,它们在性能上有了显著提升。

    希望大家通过本章的学习,对线性分组码有了扎实的基础认识。如果有什么疑问,欢迎随时提出!

    5. chapter 5:循环码(Cyclic Codes)

    欢迎来到本章,我们将深入探讨一类非常重要的线性分组码——循环码(Cyclic Codes)。循环码因其独特的代数结构而备受青睐,这种结构极大地简化了编码和译码过程,使得它们在实际通信和存储系统中得到了广泛应用。在本章中,我们将从循环码的定义出发,引入多项式表示这一强大的工具,然后详细讲解生成多项式、编码方法和伴随式计算。最后,我们将重点介绍两种著名的循环码:BCH 码和 Reed-Solomon (RS) 码。

    5.1 定义与多项式表示

    我们首先回顾一下线性分组码(Linear Block Codes)的基本概念。一个 \((n, k)\) 线性分组码是 \(GF(q)^n\) 的一个 \(k\) 维子空间。循环码是线性分组码的一个特殊子类,它具有额外的结构特性。

    定义 5.1.1 一个长度为 \(n\) 的线性分组码 \(C\) 称为循环码(Cyclic Code),如果对于任意码字 \(c = (c_0, c_1, \dots, c_{n-1}) \in C\),其循环移位(Cyclic Shift)得到的向量 \(c' = (c_{n-1}, c_0, c_1, \dots, c_{n-2})\) 也属于 \(C\)。

    换句话说,如果一个向量是码字,那么将它的分量向右循环移动一位得到的向量仍然是码字。通过重复应用这个操作,任何循环移位得到的向量都是码字。

    循环码的这种循环移位不变性(Cyclic Shift Invariance)使得我们可以利用多项式代数工具来分析和处理它们,这比直接处理向量要方便得多。

    我们将 \(GF(q)\) 上的一个长度为 \(n\) 的向量 \(v = (v_0, v_1, \dots, v_{n-1})\) 表示为一个多项式 \(v(x) = v_0 + v_1 x + \dots + v_{n-1} x^{n-1}\)。这些多项式的次数(degree)小于 \(n\)。所有次数小于 \(n\) 的多项式构成了多项式环 \(GF(q)[x]\) 的一个子集。

    为了处理循环移位,我们引入多项式环 \(R_n = GF(q)[x] / \langle x^n - 1 \rangle\)。这个环由所有次数小于 \(n\) 的多项式组成,其乘法运算是模 \(x^n - 1\) 的乘法。

    考虑一个码字 \(c = (c_0, c_1, \dots, c_{n-1})\),其多项式表示为 \(c(x) = c_0 + c_1 x + \dots + c_{n-1} x^{n-1}\)。对其进行一次循环右移得到 \(c' = (c_{n-1}, c_0, c_1, \dots, c_{n-2})\)。其多项式表示为 \(c'(x) = c_{n-1} + c_0 x + c_1 x^2 + \dots + c_{n-2} x^{n-1}\)。

    观察 \(x \cdot c(x)\):
    \(x \cdot c(x) = c_0 x + c_1 x^2 + \dots + c_{n-2} x^{n-1} + c_{n-1} x^n\).
    在环 \(R_n\) 中,我们计算 \(x \cdot c(x) \pmod{x^n - 1}\)。由于 \(x^n \equiv 1 \pmod{x^n - 1}\),我们有:
    \(x \cdot c(x) \equiv c_0 x + c_1 x^2 + \dots + c_{n-2} x^{n-1} + c_{n-1} \cdot 1 \pmod{x^n - 1}\)
    \(x \cdot c(x) \equiv c_{n-1} + c_0 x + c_1 x^2 + \dots + c_{n-2} x^{n-1} \pmod{x^n - 1}\)
    这正是 \(c'(x)\)。

    因此,在环 \(R_n = GF(q)[x] / \langle x^n - 1 \rangle\) 中,将一个多项式乘以 \(x\) 对应于其向量表示的循环右移。

    一个线性码 \(C\) 是循环码当且仅当其对应的多项式集合在环 \(R_n\) 中构成一个理想(Ideal)。这是因为线性码本身是向量空间的子空间(对应多项式集合对加法封闭),而循环移位不变性对应于多项式集合对乘以 \(x\) 封闭。结合对乘以任意多项式 \(a(x) \in R_n\) 的封闭性(因为 \(a(x)\) 是 \(x\) 的幂次的线性组合,而线性码对加法封闭),这正好满足理想的定义。

    定理 5.1.2 长度为 \(n\) 的循环码 \(C\) 是环 \(R_n = GF(q)[x] / \langle x^n - 1 \rangle\) 的一个理想。反之,环 \(R_n\) 的每一个理想都对应一个循环码。

    这个定理非常重要,因为它将循环码的研究转化为了对多项式环 \(R_n\) 的理想的研究。

    5.2 生成多项式(Generator Polynomial)

    根据抽象代数的知识,主理想整环(Principal Ideal Domain, PID)中的每一个理想都是主理想,即由一个元素生成。虽然 \(R_n\) 通常不是 PID,但它是一个主理想环(Principal Ideal Ring),其每一个理想都是主理想。

    定理 5.2.1 环 \(R_n = GF(q)[x] / \langle x^n - 1 \rangle\) 的每一个理想 \(I\) 都是主理想,即存在一个唯一的多项式 \(g(x) \in I\),它是 \(I\) 中次数最低的非零多项式(并且是首一的,即最高次项系数为 1),使得 \(I = \langle g(x) \rangle = \{ a(x) g(x) \pmod{x^n - 1} \mid a(x) \in R_n \}\)。

    对于循环码 \(C\),它对应于 \(R_n\) 的一个理想。因此,存在一个唯一确定的首一多项式 \(g(x)\),称为该循环码的生成多项式(Generator Polynomial),使得码中所有码字多项式都是 \(g(x)\) 的倍数(模 \(x^n - 1\))。

    定理 5.2.2 长度为 \(n\) 的循环码 \(C\) 的生成多项式 \(g(x)\) 具有以下性质:
    ① \(g(x)\) 是 \(C\) 中次数最低的首一多项式。
    ② \(g(x)\) 整除 \(x^n - 1\)。
    ③ 码 \(C\) 由所有形如 \(m(x) g(x) \pmod{x^n - 1}\) 的多项式组成,其中 \(m(x)\) 是任意次数小于 \(n - \text{deg}(g(x))\) 的多项式。
    ④ 码的维数 \(k = n - \text{deg}(g(x))\)。

    性质 ② 是因为 \(x^n - 1\) 必须是 \(g(x)\) 的倍数(模 \(x^n - 1\)),而 \(x^n - 1 \equiv 0 \pmod{x^n - 1}\),所以 \(x^n - 1\) 必须在理想 \(C\) 中,因此 \(x^n - 1\) 是 \(g(x)\) 的倍数。

    生成多项式 \(g(x)\) 的次数为 \(n-k\)。它完全决定了一个循环码。

    与生成多项式 \(g(x)\) 对应的是校验多项式(Parity-Check Polynomial)\(h(x)\),定义为 \(h(x) = (x^n - 1) / g(x)\)。校验多项式的次数为 \(k\)。

    对于任意码字多项式 \(c(x)\),由于 \(c(x)\) 是 \(g(x)\) 的倍数,即 \(c(x) = m(x) g(x)\),则 \(c(x) h(x) = m(x) g(x) h(x) = m(x) (x^n - 1)\). 在环 \(R_n\) 中,\(c(x) h(x) \equiv 0 \pmod{x^n - 1}\)。

    这提供了校验码字的另一种方式:一个多项式 \(v(x)\) 是码字多项式当且仅当 \(v(x) h(x) \equiv 0 \pmod{x^n - 1}\)。

    5.3 循环码的编码(Encoding of Cyclic Codes)

    给定一个 \( (n, k) \) 循环码的生成多项式 \(g(x)\)(次数为 \(n-k\)),以及一个 \(k\) 维的消息向量 \(u = (u_0, u_1, \dots, u_{k-1})\),其消息多项式为 \(m(x) = u_0 + u_1 x + \dots + u_{k-1} x^{k-1}\)(次数小于 \(k\))。编码的目标是生成一个长度为 \(n\) 的码字向量 \(c = (c_0, c_1, \dots, c_{n-1})\),其码字多项式 \(c(x)\) 是 \(g(x)\) 的倍数。

    有两种主要的编码方法:

    非系统码(Non-systematic Encoding)
    最直接的方法是计算 \(c(x) = m(x) g(x)\)。
    由于 \(m(x)\) 的次数小于 \(k\),\(g(x)\) 的次数为 \(n-k\),所以 \(m(x) g(x)\) 的次数小于 \(k + (n-k) = n\)。因此,\(m(x) g(x)\) 本身就是一个次数小于 \(n\) 的多项式,它在 \(R_n\) 中就是其自身。
    这种方法得到的码字 \(c(x)\) 是 \(g(x)\) 的倍数,因此是有效的码字。然而,消息位 \(u_i\) 通常不会直接出现在码字 \(c\) 的某个固定位置上,所以称为非系统码。

    系统码(Systematic Encoding)
    在许多应用中,我们希望消息位直接出现在码字的前 \(k\) 位或后 \(k\) 位,这称为系统码。对于循环码,可以通过多项式除法来实现系统编码。
    我们希望找到一个码字多项式 \(c(x)\) 使得其高次项对应于消息位,低次项对应于校验位。
    考虑多项式 \(x^{n-k} m(x)\)。它的次数小于 \(n-k+k = n\)。将 \(x^{n-k} m(x)\) 除以 \(g(x)\) 得到商 \(q(x)\) 和余式 \(r(x)\):
    \[ x^{n-k} m(x) = q(x) g(x) + r(x) \]
    其中 \(r(x)\) 的次数小于 \(n-k\)。
    我们将校验多项式定义为 \(p(x) = r(x)\)。
    构造码字多项式为 \(c(x) = x^{n-k} m(x) - r(x)\).
    注意,在 \(GF(q)\) 中,减法和加法是相同的(对于二元域 \(GF(2)\) 更是如此),所以 \(c(x) = x^{n-k} m(x) + r(x)\) 也是可以的。
    从上面的除法等式可以看出,\(c(x) = q(x) g(x)\),所以 \(c(x)\) 是 \(g(x)\) 的倍数,是一个有效的码字多项式。
    将 \(c(x)\) 写出来:
    \(c(x) = r(x) + x^{n-k} m(x)\)
    如果 \(m(x) = u_0 + u_1 x + \dots + u_{k-1} x^{k-1}\),那么 \(x^{n-k} m(x) = u_0 x^{n-k} + u_1 x^{n-k+1} + \dots + u_{k-1} x^{n-1}\).
    如果 \(r(x) = p_0 + p_1 x + \dots + p_{n-k-1} x^{n-k-1}\),那么
    \(c(x) = (p_0 + p_1 x + \dots + p_{n-k-1} x^{n-k-1}) + (u_0 x^{n-k} + u_1 x^{n-k+1} + \dots + u_{k-1} x^{n-1})\).
    对应的码字向量为 \(c = (p_0, p_1, \dots, p_{n-k-1}, u_0, u_1, \dots, u_{k-1})\).
    可以看到,消息位 \(u_0, \dots, u_{k-1}\) 出现在码字的后 \(k\) 位,而前 \(n-k\) 位是校验位 \(p_0, \dots, p_{n-k-1}\)。这正是系统码的结构。

    系统编码的实现通常使用一个线性反馈移位寄存器(Linear Feedback Shift Register, LFSR),这是一种高效的硬件实现方式。

    编码步骤(系统码)
    ① 将消息多项式 \(m(x)\) 乘以 \(x^{n-k}\)。
    ② 将 \(x^{n-k} m(x)\) 除以生成多项式 \(g(x)\),得到余式 \(r(x)\)。
    ③ 码字多项式为 \(c(x) = x^{n-k} m(x) + r(x)\)(或 \(x^{n-k} m(x) - r(x)\))。

    例 5.3.1 考虑一个在 \(GF(2)\) 上的 \((7, 4)\) 循环码,其生成多项式为 \(g(x) = 1 + x + x^3\)。这里 \(n=7, k=4\),\(n-k=3\)。\(g(x)\) 的次数是 3。
    消息多项式 \(m(x) = 1 + x^2\) 对应消息向量 \((1, 0, 1, 0)\)。
    计算 \(x^{n-k} m(x) = x^3 (1 + x^2) = x^3 + x^5\).
    将 \(x^3 + x^5\) 除以 \(g(x) = 1 + x + x^3\)。
    \[ \begin{array}{c|ccccccc} \multicolumn{2}{r}{x^2} & + x & + 1 \\ \cline{2-7} x^3+x+1 & x^5 & + x^3 & & & & \\ \multicolumn{2}{r}{x^5} & + x^3 & + x^2 \\ \cline{2-5} \multicolumn{2}{r}{0} & 0 & + x^2 & & & \\ \multicolumn{2}{r}{} & x^2 & + x & + 1 \\ \cline{3-6} \multicolumn{2}{r}{} & 0 & + x & + 1 \\ \multicolumn{2}{r}{} & & x & + 1 \\ \cline{4-7} \multicolumn{2}{r}{} & & 0 & + 0 & + 0 \\ \end{array} \]
    等等,这里除法有点问题,应该用多项式长除法。
    \(x^5 + x^3 = x^2(x^3+x+1) + x^3 + x^2 + x^3 = x^2 g(x) + x^2\).
    所以 \(x^5 + x^3 \pmod{g(x)}\) 的余式是 \(x^2\).
    \(x^5 + x^3 = x^2(x^3+x+1) + x^2\).
    \(x^5 + x^3 + x^2 = x^2(x^3+x+1)\).
    所以 \(x^5 + x^3 \equiv x^2 \pmod{x^3+x+1}\).
    余式 \(r(x) = x^2\).
    码字多项式 \(c(x) = x^3 + x^5 + x^2 = x^2 + x^3 + x^5\).
    对应的码字向量为 \((0, 0, 1, 1, 0, 1, 0)\).
    消息向量是 \((1, 0, 1, 0)\),校验位是 \((0, 0, 1)\)。码字是 \((0, 0, 1, 1, 0, 1, 0)\)。
    注意,这里的系统码是将校验位放在前面。如果按照 \(c(x) = r(x) + x^{n-k} m(x)\) 的定义,余式 \(r(x)\) 的系数是低次项,\(x^{n-k} m(x)\) 的系数是高次项。
    \(r(x) = x^2 \implies (0, 0, 1)\)
    \(m(x) = 1 + x^2 \implies (1, 0, 1, 0)\)
    \(x^{n-k} m(x) = x^3(1+x^2) = x^3 + x^5 \implies (0, 0, 0, 1, 0, 1, 0)\) (作为次数小于7的多项式)
    \(c(x) = r(x) + x^{n-k} m(x) = x^2 + x^3 + x^5\).
    对应的向量是 \((0, 0, 1, 1, 0, 1, 0)\).
    这里的系统码形式是 \((p_0, p_1, p_2, u_0, u_1, u_2, u_3)\).
    \(r(x) = x^2 \implies p_0=0, p_1=0, p_2=1\).
    \(m(x) = 1 + x^2 \implies u_0=1, u_1=0, u_2=1, u_3=0\).
    所以码字是 \((0, 0, 1, 1, 0, 1, 0)\). 这与 \(x^2 + x^3 + x^5\) 的系数 \((0, 0, 1, 1, 0, 1, 0)\) 是一致的。

    5.4 循环码的伴随式计算(Syndrome Calculation for Cyclic Codes)

    伴随式(Syndrome)是线性码译码中的关键概念,它能够指示接收到的向量是否是码字,如果不是,则提供关于错误模式的信息。对于循环码,伴随式的计算可以利用多项式除法来高效实现。

    设发送的码字多项式为 \(c(x)\),接收到的多项式为 \(y(x) = c(x) + e(x)\),其中 \(e(x)\) 是错误多项式。
    由于 \(c(x)\) 是生成多项式 \(g(x)\) 的倍数,即 \(c(x) = m(x) g(x)\),所以 \(c(x) \pmod{g(x)} = 0\).

    定义 5.4.1 接收多项式 \(y(x)\) 的伴随式多项式(Syndrome Polynomial)定义为 \(s(x) = y(x) \pmod{g(x)}\).

    计算伴随式:
    \(s(x) = y(x) \pmod{g(x)}\)
    \(s(x) = (c(x) + e(x)) \pmod{g(x)}\)
    \(s(x) = c(x) \pmod{g(x)} + e(x) \pmod{g(x)}\)
    由于 \(c(x) \pmod{g(x)} = 0\),所以
    \(s(x) = e(x) \pmod{g(x)}\).

    伴随式 \(s(x)\) 的次数小于 \(n-k\),即小于 \(g(x)\) 的次数。
    伴随式只取决于错误多项式 \(e(x)\),而与发送的码字 \(c(x)\) 无关。
    如果 \(s(x) = 0\),则表示接收到的 \(y(x)\) 是 \(g(x)\) 的倍数。在没有错误发生时 (\(e(x)=0\)),\(s(x)=0\)。在某些错误模式下 (\(e(x)\) 是 \(g(x)\) 的非零倍数),也可能出现 \(s(x)=0\),这对应于未检测到的错误。
    如果 \(s(x) \neq 0\),则表示检测到了错误。

    伴随式的计算可以通过硬件(如 LFSR)或软件实现多项式除法来完成。

    伴随式译码(Syndrome Decoding)的基本思想
    ① 计算接收多项式 \(y(x)\) 的伴随式 \(s(x) = y(x) \pmod{g(x)}\).
    ② 根据伴随式 \(s(x)\) 确定最可能的错误多项式 \(e(x)\)。这是译码中最困难的部分,需要一个伴随式与错误模式的对应表,或者更复杂的算法。
    ③ 从接收多项式中减去估计的错误多项式得到译码后的码字:\(\hat{c}(x) = y(x) - \hat{e}(x)\).

    对于一般的循环码,构建伴随式与错误模式的对应表只适用于纠错能力非常有限的码。对于纠错能力更强的码,需要更复杂的译码算法,这些算法通常利用伴随式的代数结构来找到错误位置和错误值。

    5.5 BCH 码(Bose-Chaudhuri-Hocquenghem Codes)

    BCH 码是一类非常重要的多进制循环码,它们是构造具有指定最小距离的码的有效方法。BCH 码是纠错编码领域的一个里程碑,是许多现代纠错码(如 RS 码)的基础。

    BCH 码的构造基于有限域的性质。设 \(GF(q)\) 是基本域,我们通常在 \(GF(q^m)\) 的扩展域中考虑 BCH 码的根。

    一个 \(t\) 纠错的 BCH 码被设计成其生成多项式 \(g(x)\) 在扩展域 \(GF(q^m)\) 中有连续的 \(2t\) 个根。
    设 \(\alpha\) 是 \(GF(q^m)\) 的一个本原元(Primitive Element)。一个长度为 \(n\) 的 BCH 码(其中 \(n\) 整除 \(q^m - 1\))的生成多项式 \(g(x)\) 是使得 \(\alpha^1, \alpha^2, \dots, \alpha^{2t}\) 都是其根的次数最低的首一多项式。
    根据有限域理论,如果 \(\beta\) 是一个多项式 \(f(x) \in GF(q)[x]\) 的根,那么 \(\beta^q, \beta^{q^2}, \dots\) 也是 \(f(x)\) 的根。为了确保 \(g(x)\) 的系数在 \(GF(q)\) 中,\(g(x)\) 必须包含 \(\alpha^i\) 及其在 \(GF(q)\) 上的共轭元(Conjugates)的最小多项式(Minimal Polynomial)作为因子。
    \(\alpha^i\) 在 \(GF(q)\) 上的最小多项式 \(m_{\alpha^i}(x)\) 是以 \(\alpha^i\) 为根的次数最低的首一多项式,且其系数在 \(GF(q)\) 中。\(m_{\alpha^i}(x)\) 的根是 \(\alpha^i\) 在 \(GF(q)\) 上的共轭元集合 \(\{ \alpha^i, \alpha^{iq}, \alpha^{iq^2}, \dots \}\)。

    BCH 码的生成多项式 \(g(x)\) 定义为 \(\text{lcm}(m_{\alpha^1}(x), m_{\alpha^2}(x), \dots, m_{\alpha^{2t}}(x))\),即 \(\alpha^1, \alpha^2, \dots, \alpha^{2t}\) 的最小多项式的最小公倍数。
    \[ g(x) = \text{lcm}(m_{\alpha^1}(x), m_{\alpha^2}(x), \dots, m_{\alpha^{2t}}(x)) \]
    这个 \(g(x)\) 保证了 \(\alpha^1, \alpha^2, \dots, \alpha^{2t}\) 都是 \(g(x)\) 的根。

    BCH 码的性质
    ① 码长 \(n\) 整除 \(q^m - 1\)。最常见的 BCH 码是本原 BCH 码(Primitive BCH Codes),其码长 \(n = q^m - 1\)。
    ② 设计距离(Designed Distance)为 \(d = 2t + 1\)。这意味着生成多项式 \(g(x)\) 有连续 \(d-1 = 2t\) 个根 \(\alpha^1, \dots, \alpha^{2t}\)。
    ③ 实际最小距离 \(d_{min} \ge d\)。根据 BCH 码的构造,其最小距离至少是设计距离。
    ④ BCH 码可以纠正多达 \(t = \lfloor (d-1)/2 \rfloor\) 个错误。

    BCH 码的译码通常采用代数译码方法,如 Peterson-Gorenstein-Zierler 算法或 Berlekamp-Massey 算法。这些算法利用伴随式(在扩展域 \(GF(q^m)\) 中计算)来找到错误位置多项式和错误值,从而纠正错误。详细的 BCH 译码算法比较复杂,通常在高级课程中深入讲解。

    5.6 Reed-Solomon (RS) 码

    Reed-Solomon (RS) 码是 BCH 码的一个非常重要的子类。它们是定义在 \(GF(q)\) 上的非二元码,通常取码长 \(n = q-1\)。RS 码以其强大的纠突发错误能力而闻名,在许多实际应用中(如 CD、DVD、硬盘、二维码、深空通信等)扮演着关键角色。

    RS 码是 BCH 码在 \(n = q-1\) 时的特殊情况。设 \(\alpha\) 是 \(GF(q)\) 的一个本原元。

    5.6.1 RS 码的构造(Construction of RS Codes)

    一个在 \(GF(q)\) 上、码长为 \(n=q-1\) 的 \(t\) 纠错 RS 码,其生成多项式 \(g(x)\) 定义为:
    \[ g(x) = (x - \alpha^1)(x - \alpha^2)\dots(x - \alpha^{2t}) \]
    这里,\(g(x)\) 的根是 \(\alpha^1, \alpha^2, \dots, \alpha^{2t}\)。这些根都在 \(GF(q)\) 中。由于 \(g(x)\) 是这些因子的乘积,其系数也在 \(GF(q)\) 中。
    \(g(x)\) 的次数是 \(2t\)。
    码的维数 \(k = n - \text{deg}(g(x)) = (q-1) - 2t\).
    码率 \(R = k/n = (q-1-2t)/(q-1)\).
    设计距离 \(d = 2t + 1\).
    RS 码的一个重要性质是其最小距离恰好等于设计距离:\(d_{min} = d = 2t + 1\)。
    根据最小距离,一个 RS 码可以纠正多达 \(t\) 个符号错误。注意,这里的错误是符号错误,而不是比特错误。一个符号错误可能包含多个比特错误。

    例 5.6.1 考虑在 \(GF(2^3) = GF(8)\) 上的 RS 码。\(q=8\),码长 \(n = q-1 = 7\)。设 \(\alpha\) 是 \(GF(8)\) 的一个本原元(例如,由本原多项式 \(x^3+x+1\) 生成)。
    构造一个可以纠正 \(t=1\) 个符号错误的 RS 码。设计距离 \(d = 2t+1 = 3\).
    生成多项式 \(g(x) = (x - \alpha^1)(x - \alpha^2)\).
    \(g(x) = x^2 - (\alpha^1 + \alpha^2)x + \alpha^3\).
    计算 \(\alpha^1 + \alpha^2\) 和 \(\alpha^3\) 在 \(GF(8)\) 中的值(需要 \(GF(8)\) 的乘法和加法表)。
    例如,如果 \(\alpha\) 是 \(x^3+x+1=0\) 的根,则 \(\alpha^3 = \alpha+1\),\(\alpha^2\) 保持原样,\(\alpha^1 = \alpha\)。
    \(\alpha^1 + \alpha^2 = \alpha + \alpha^2\).
    \(\alpha^3 = \alpha+1\).
    \(g(x) = x^2 + (\alpha + \alpha^2)x + (\alpha+1)\) (在 \(GF(2)\) 中加法和减法相同).
    这个码的长度是 \(n=7\),生成多项式次数是 2,所以维数 \(k = n - \text{deg}(g(x)) = 7 - 2 = 5\).
    这是一个 \((7, 5)\) RS 码,可以纠正 \(t=1\) 个符号错误。

    5.6.2 RS 码的译码基础(Basics of RS Decoding)

    RS 码的译码是代数译码的经典例子。其主要思想是利用伴随式来确定错误的位置和值。

    设发送的码字多项式为 \(c(x)\),接收到的多项式为 \(y(x) = c(x) + e(x)\),其中 \(e(x)\) 是错误多项式。
    由于 \(c(x)\) 是 \(g(x)\) 的倍数,而 \(g(x)\) 的根是 \(\alpha^1, \dots, \alpha^{2t}\),所以 \(c(\alpha^j) = 0\) 对于 \(j=1, \dots, 2t\).

    伴随式计算
    对于接收多项式 \(y(x)\),计算其在 \(g(x)\) 的根处的取值,这些值称为伴随式分量(Syndrome Components):
    \(S_j = y(\alpha^j)\) 对于 \(j=1, \dots, 2t\).
    由于 \(y(x) = c(x) + e(x)\),我们有:
    \(S_j = y(\alpha^j) = c(\alpha^j) + e(\alpha^j)\).
    因为 \(c(\alpha^j) = 0\),所以 \(S_j = e(\alpha^j)\) 对于 \(j=1, \dots, 2t\).

    伴随式分量 \(S_1, S_2, \dots, S_{2t}\) 提供了关于错误多项式 \(e(x)\) 的信息。如果所有伴随式分量都为零,即 \(S_j = 0\) 对于所有 \(j\),则 \(y(\alpha^j) = 0\),这意味着 \(y(x)\) 是 \(g(x)\) 的倍数,因此 \(y(x)\) 是一个码字。在这种情况下,我们假设没有检测到错误。

    如果至少有一个 \(S_j \neq 0\),则表示检测到了错误。译码的目标是根据 \(S_1, \dots, S_{2t}\) 来确定错误多项式 \(e(x)\)。

    假设发生了 \(v\) 个错误,错误位置在 \(i_1, i_2, \dots, i_v\),错误值为 \(e_{i_1}, e_{i_2}, \dots, e_{i_v}\)(其中 \(e_{i_j} \neq 0\))。错误多项式可以写成:
    \[ e(x) = \sum_{j=1}^v e_{i_j} x^{i_j} \]
    伴随式分量为:
    \[ S_k = e(\alpha^k) = \sum_{j=1}^v e_{i_j} (\alpha^{i_j})^k \quad \text{对于 } k=1, \dots, 2t \]
    令 \(X_j = \alpha^{i_j}\) 为错误位置的指标(Error Location Indicators),\(Y_j = e_{i_j}\) 为错误值(Error Values)。则伴随式方程组为:
    \[ S_k = \sum_{j=1}^v Y_j X_j^k \quad \text{对于 } k=1, \dots, 2t \]
    这是一个有 \(2t\) 个方程和 \(2v\) 个未知数(\(X_j\) 和 \(Y_j\))的非线性方程组。如果 \(v \le t\),则这个方程组有唯一解。

    RS 码的代数译码算法(如 Berlekamp-Massey 算法或 Euclidean 算法)的核心就是求解这个方程组。这些算法通常分为几个主要步骤:
    计算伴随式(Syndrome Calculation):计算 \(S_1, \dots, S_{2t}\)。
    计算错误位置多项式(Error Locator Polynomial):利用伴随式 \(S_j\) 求解一个多项式 \(\Lambda(x)\)(通常使用 Berlekamp-Massey 算法),其根的倒数 \(1/X_j\) 就是错误位置的指标 \(X_j\)。
    寻找错误位置(Finding Error Locations):找到 \(\Lambda(x)\) 的根。这通常通过 Chien 搜索(Chien Search)来实现,即遍历 \(GF(q)\) 中的所有非零元素 \(\beta\),检查 \(\Lambda(\beta)\) 是否为零。如果 \(\Lambda(\beta) = 0\),则 \(1/\beta\) 是一个错误位置指标 \(X_j\),对应的错误位置是 \(i_j\) 使得 \(\alpha^{i_j} = 1/\beta\)。
    计算错误值(Calculating Error Values):一旦找到错误位置 \(i_j\),就可以利用 Forney 算法(Forney Algorithm)根据伴随式和错误位置多项式来计算每个错误位置上的错误值 \(e_{i_j}\)。
    纠正错误(Error Correction):从接收多项式 \(y(x)\) 中减去错误多项式 \(e(x)\) 得到译码后的码字 \(\hat{c}(x) = y(x) - e(x)\)。

    RS 码的代数译码算法虽然步骤较多,但它们是确定性的,并且可以在多项式时间内完成,这使得 RS 码在实际系统中非常实用。RS 码的强大纠错能力(特别是纠突发错误)以及存在高效的译码算法是其广泛应用的关键原因。

    本章我们深入探讨了循环码的代数结构,学习了生成多项式、编码和伴随式计算。我们还重点介绍了 BCH 码和 RS 码的构造和基本译码原理。循环码的代数特性为设计和分析强大的纠错码提供了坚实的基础。在后续章节中,我们将看到这些概念如何进一步发展,以及现代编码技术如何突破香农限。

    6. chapter 6:码的界限(Bounds on Codes)

    欢迎来到本章!在前面的章节中,我们学习了不同类型的纠错码,如线性分组码、循环码和卷积码,以及它们如何通过增加冗余来检测和纠正通信信道中的错误。我们知道,一个码的纠错能力与它的最小距离(Minimum Distance)紧密相关。最小距离越大,码的纠错能力通常越强。然而,在给定码字长度(Codeword Length) \(n\) 和码本大小(Codebook Size) \(M\) (或对于线性码,信息位数 \(k\))的情况下,我们能构造出的码的最小距离有多大呢?或者反过来,给定码字长度 \(n\) 和最小距离 \(d\),我们最多能有多少个码字?

    这些问题引出了“码的界限”(Bounds on Codes)这一重要概念。码的界限为我们提供了关于码的参数(长度 \(n\)、码字数量 \(M\) 或信息位数 \(k\)、最小距离 \(d\))之间关系的理论限制。它们告诉我们,在给定某些参数时,其他参数可能达到的最好或最坏情况。这些界限对于评估现有编码方案的性能以及指导新码的设计具有重要的理论和实践意义。

    本章将深入探讨几个最基本和最重要的码的界限:球堆积界(Sphere Packing Bound),也称为汉明界(Hamming Bound);Singleton 界(Singleton Bound);以及 Gilbert-Varshamov 界(Gilbert-Varshamov Bound)。我们还将简要介绍其他一些界限。通过学习这些界限,我们将对纠错码的性能极限有一个更清晰的认识。

    6.1 球堆积界/汉明界(Sphere Packing Bound / Hamming Bound)

    球堆积界,也称为汉明界,是最直观且最容易理解的码的界限之一。它基于这样一个事实:一个具有最小距离 \(d = 2t + 1\) 的码,可以纠正任意 \(t\) 个或更少的错误。

    考虑一个二进制码 \(C\),码字长度为 \(n\),码本大小为 \(M\)。假设这个码的最小距离为 \(d\)。根据纠错能力定义,如果接收到的向量 \(y\) 与某个码字 \(c\) 的汉明距离(Hamming Distance) \(d(y, c)\) 小于或等于 \(t = \lfloor (d-1)/2 \rfloor\),那么我们可以唯一地将 \(y\) 译码为 \(c\)。

    我们可以想象在所有可能的 \(n\) 位二进制向量空间 \(\{0, 1\}^n\) 中,每个码字 \(c \in C\) 都“占据”了一个以 \(c\) 为中心,半径为 \(t\) 的“球”(Sphere)。这个球包含所有与 \(c\) 的汉明距离小于或等于 \(t\) 的向量。

    一个半径为 \(t\) 的球包含多少个 \(n\) 位二进制向量呢?这相当于计算从 \(n\) 个位置中选择 \(i\) 个位置翻转(发生错误)的所有可能方式的总和,其中 \(i\) 从 0 到 \(t\)。这个数量由二项式系数给出:
    \[ V(n, t) = \sum_{i=0}^{t} \binom{n}{i} \]
    其中 \(\binom{n}{i} = \frac{n!}{i!(n-i)!}\) 是从 \(n\) 个元素中选择 \(i\) 个元素的组合数。

    为了使码能够纠正 \(t\) 个错误,任意两个码字 \(c_1\) 和 \(c_2\) 周围的半径为 \(t\) 的球必须互不相交。如果它们相交,意味着存在一个向量 \(y\) 同时位于以 \(c_1\) 为中心和以 \(c_2\) 为中心的半径为 \(t\) 的球内,即 \(d(y, c_1) \le t\) 且 \(d(y, c_2) \le t\)。在这种情况下,译码器收到 \(y\) 时将无法确定原始码字是 \(c_1\) 还是 \(c_2\),导致译码错误。

    由于所有 \(M\) 个码字周围的半径为 \(t\) 的球都必须互不相交,并且它们都位于总共 \(2^n\) 个可能的 \(n\) 位向量空间中,所以这些不相交的球所占据的总空间不能超过总空间的大小。因此,我们有:
    \[ M \cdot V(n, t) \le 2^n \]
    将 \(V(n, t)\) 的表达式代入,得到球堆积界(汉明界):
    \[ M \sum_{i=0}^{t} \binom{n}{i} \le 2^n \]
    对于线性码,码本大小 \(M = 2^k\),其中 \(k\) 是信息位数。因此,对于二进制线性码,汉明界可以写为:
    \[ 2^k \sum_{i=0}^{t} \binom{n}{i} \le 2^n \]
    或者,取对数后,可以表示为对码率 \(R = k/n\) 的限制:
    \[ R \le \frac{1}{n} \left( n - \log_2 \left( \sum_{i=0}^{t} \binom{n}{i} \right) \right) \]
    其中 \(t = \lfloor (d-1)/2 \rfloor\)。

    这个界限之所以被称为“球堆积界”,是因为它形象地描述了在整个向量空间中,以码字为中心、半径为纠错能力 \(t\) 的球不能重叠,就像在空间中堆积互不相交的球一样。它也被称为“汉明界”,是为了纪念信息论的先驱 Richard Hamming。

    如果一个码能够达到汉明界,即等号成立,那么这样的码被称为完美码(Perfect Code)。完美码的球恰好填满了整个向量空间,没有任何空隙,也没有任何重叠。这意味着对于任何接收到的向量,它都恰好位于某个码字的半径为 \(t\) 的球内。对于二进制码,除了平凡的重复码(Repetition Code)和全零码(或全一码)之外,已知的完美码只有汉明码(Hamming Codes)和 Golay 码(Golay Code) \(G_{23}\)。这表明完美码是非常罕见的。

    汉明界是一个上界,它告诉我们码字数量 \(M\) 不可能超过某个值。它为码的性能设定了一个理论上的天花板。

    6.2 Singleton 界(Singleton Bound)与最大距离可分码(MDS Codes)

    Singleton 界是另一个重要的码的界限,它通常比汉明界更宽松,但对于某些类型的码(特别是最大距离可分码)来说是可达的。

    考虑一个 \(q\) 元码 \(C\),码字长度为 \(n\),码本大小为 \(M\),最小距离为 \(d\)。码字是来自有限域 \(GF(q)\) 的 \(n\) 维向量。

    假设我们有一个码字 \(c = (c_1, c_2, \dots, c_n)\)。如果我们删除码字的最后 \(d-1\) 个分量,得到一个长度为 \(n - (d-1)\) 的短向量 \((c_1, c_2, \dots, c_{n-d+1})\)。

    考虑码本中的任意两个不同的码字 \(c^{(1)}\) 和 \(c^{(2)}\)。它们的汉明距离 \(d(c^{(1)}, c^{(2)}) \ge d\)。这意味着它们至少在 \(d\) 个位置上不同。因此,当我们将这两个码字都删除最后 \(d-1\) 个分量后,得到的两个短向量 \((c^{(1)}_1, \dots, c^{(1)}_{n-d+1})\) 和 \((c^{(2)}_1, \dots, c^{(2)}_{n-d+1})\) 必须是不同的。为什么呢?因为如果这两个短向量相同,那么 \(c^{(1)}\) 和 \(c^{(2)}\) 就只可能在最后 \(d-1\) 个位置上不同,这意味着它们的距离最多是 \(d-1\),这与最小距离为 \(d\) 的假设矛盾。

    所以,码本中所有 \(M\) 个不同的码字,在删除最后 \(d-1\) 个分量后,会得到 \(M\) 个不同的长度为 \(n-d+1\) 的 \(q\) 元向量。

    总共有多少个不同的长度为 \(n-d+1\) 的 \(q\) 元向量呢?每个分量有 \(q\) 种选择,共有 \(n-d+1\) 个分量,所以总共有 \(q^{n-d+1}\) 个这样的向量。

    由于我们从 \(M\) 个不同的码字得到了 \(M\) 个不同的短向量,这些短向量的数量不可能超过所有可能的短向量的总数。因此,我们有:
    \[ M \le q^{n-d+1} \]
    这就是 Singleton 界。对于线性码,\(M = q^k\),所以 Singleton 界可以写为:
    \[ q^k \le q^{n-d+1} \]
    取对数后,得到:
    \[ k \le n - d + 1 \]
    或者,重新排列一下,得到关于最小距离 \(d\) 的界限:
    \[ d \le n - k + 1 \]
    这个界限对于任何线性码都成立。

    如果一个线性码能够达到 Singleton 界,即 \(d = n - k + 1\),那么这样的码被称为最大距离可分码(Maximum Distance Separable, MDS Codes)。MDS 码在给定长度 \(n\) 和信息位数 \(k\) 的情况下,具有可能的最大最小距离。

    MDS 码的一些重要性质:
    ⚝ 如果一个线性码是 MDS 码,那么它的对偶码(Dual Code)也是 MDS 码。
    ⚝ MDS 码的生成矩阵(Generator Matrix)的任意 \(k\) 列都是线性无关的。
    ⚝ MDS 码的校验矩阵(Parity-Check Matrix)的任意 \(n-k\) 列都是线性无关的。

    MDS 码的例子包括:
    ⚝ 重复码(Repetition Codes):长度 \(n\),信息位数 \(k=1\),最小距离 \(d=n\)。满足 \(d = n - 1 + 1 = n\)。
    ⚝ 单个奇偶校验码(Single Parity-Check Codes):长度 \(n\),信息位数 \(k=n-1\),最小距离 \(d=2\)。满足 \(d = n - (n-1) + 1 = 2\)。
    ⚝ 汉明码(Hamming Codes):对于二进制汉明码,\(n = 2^m - 1\),\(k = n - m\),\(d=3\)。满足 \(d = n - k + 1 = (2^m - 1) - (2^m - 1 - m) + 1 = m + 1\)。只有当 \(m=2\) 时,\(n=3, k=1, d=3\),是 MDS 码(重复码)。对于 \(m>2\),汉明码不是 MDS 码。
    ⚝ Reed-Solomon (RS) 码:RS 码是在有限域 \(GF(q)\) 上定义的,码字长度 \(n \le q-1\),信息位数 \(k\),最小距离 \(d = n - k + 1\)。RS 码是 MDS 码的典型例子,它们在实际应用中非常广泛,如 CD、DVD、硬盘、QR 码以及深空通信等。

    Singleton 界告诉我们,码的最小距离 \(d\) 不可能超过 \(n - k + 1\)。MDS 码是那些达到了这个理论上限的“最优”码。

    6.3 Gilbert-Varshamov 界(Gilbert-Varshamov Bound)

    Gilbert-Varshamov 界(简称 GV 界)与前两个界限不同,它是一个存在性界限(Existence Bound)。它不告诉我们任何特定码的参数关系,而是保证了在给定长度 \(n\) 和最小距离 \(d\) 的情况下,存在一个码字数量 \(M\) 至少达到某个值的码。换句话说,它为码字数量(或信息位数 \(k\))提供了一个下界。

    GV 界可以从一个贪婪算法(Greedy Algorithm)的角度来理解。假设我们想构造一个 \(q\) 元码,长度为 \(n\),最小距离至少为 \(d\)。我们可以从一个空码本开始,然后逐个添加码字。

    ① 选择第一个码字,例如全零向量。
    ② 选择第二个码字 \(c_2\),要求 \(d(c_2, c_1) \ge d\)。
    ③ 选择第三个码字 \(c_3\),要求 \(d(c_3, c_1) \ge d\) 且 \(d(c_3, c_2) \ge d\)。
    ④ 以此类推,选择第 \(M\) 个码字 \(c_M\),要求 \(d(c_M, c_i) \ge d\) 对于所有 \(i = 1, \dots, M-1\)。

    我们持续添加码字,直到无法再添加任何新的码字为止。也就是说,任何不在当前码本中的向量 \(v\) 都与码本中的某个码字 \(c_i\) 的距离小于 \(d\),即 \(d(v, c_i) < d\)。

    考虑我们最终得到的码本 \(C = \{c_1, c_2, \dots, c_M\}\)。根据构造过程,对于任何不在 \(C\) 中的向量 \(v\),都存在某个 \(c_i \in C\) 使得 \(d(v, c_i) < d\)。这意味着所有 \(q^n\) 个可能的向量都被包含在以码字为中心、半径为 \(d-1\) 的球的并集内。

    以码字 \(c_i\) 为中心,半径为 \(d-1\) 的球包含所有与 \(c_i\) 的汉明距离小于或等于 \(d-1\) 的向量。这样的球包含的向量数量为:
    \[ V(n, d-1) = \sum_{i=0}^{d-1} \binom{n}{i} (q-1)^i \]
    (对于二进制码,\(q=2\),\((q-1)^i = 1\),所以是 \(\sum_{i=0}^{d-1} \binom{n}{i}\))。

    由于所有 \(q^n\) 个向量都被包含在 \(M\) 个这样的球的并集内,所以这些球的总大小(即使它们可能重叠)必须大于或等于总向量空间的大小:
    \[ M \cdot V(n, d-1) \ge q^n \]
    将 \(V(n, d-1)\) 的表达式代入,得到 Gilbert-Varshamov 界:
    \[ M \sum_{i=0}^{d-1} \binom{n}{i} (q-1)^i \ge q^n \]
    对于 \(q\) 元线性码,\(M = q^k\),GV 界可以写为:
    \[ q^k \sum_{i=0}^{d-1} \binom{n}{i} (q-1)^i \ge q^n \]
    取对数后,得到:
    \[ k \ge n - \log_q \left( \sum_{i=0}^{d-1} \binom{n}{i} (q-1)^i \right) \]
    这个界限表明,存在一个长度为 \(n\)、最小距离至少为 \(d\) 的 \(q\) 元线性码,其信息位数 \(k\) 至少满足上述不等式。

    GV 界是一个下界,它保证了存在“足够好”的码。它与汉明界(上界)之间存在一个差距,这个差距反映了完美码的稀有性以及构造达到理论极限的码的难度。对于大多数参数 \((n, k, d)\),实际存在的码的性能介于 GV 界和汉明界之间。

    GV 界在理论上很重要,因为它证明了具有一定性能的码是存在的,即使我们可能不知道如何显式地构造它们。

    6.4 其他界限简介

    除了上述三个基本界限之外,编码理论中还有许多其他更复杂的界限,它们在特定的参数范围或针对特定的码类型时可能提供更紧密的限制。这里简要介绍几个:

    ⚝ Plotkin 界(Plotkin Bound):对于 \(q\) 元码,如果最小距离 \(d > n(q-1)/q\),则码字数量 \(M\) 有一个上界。当 \(d\) 接近 \(n\) 时,Plotkin 界通常比 Singleton 界更紧。
    ⚝ Johnson 界(Johnson Bound):Johnson 界是 Plotkin 界的一个推广,它考虑了码的最小距离 \(d\) 和码字之间的最大距离。它对于理解码的覆盖半径(Covering Radius)和打包半径(Packing Radius)之间的关系很有用。
    ⚝ Elias-Bassalygo 界(Elias-Bassalygo Bound):这是一个存在性界限,它改进了 GV 界,表明存在码率高于 GV 界预测的码,尤其是在码率较低时。
    ⚝ McEliece-Rodemich-Rumsey-Tilborg (MRRT) 界:这是一族更复杂的上界,通常通过线性规划技术导出,可以为码的参数提供更紧密的限制。

    这些高级界限的推导和理解通常需要更深入的数学工具。对于初学者来说,掌握汉明界、Singleton 界和 Gilbert-Varshamov 界是理解码的性能限制的基础。它们为我们提供了一个框架,来评估一个码在给定参数下是“好”还是“坏”,以及理论上最好的码能达到什么程度。

    理解码的界限,有助于我们认识到在设计纠错码时所面临的权衡:增加码字长度 \(n\) 可以提高纠错能力 \(d\),但可能会降低码率 \(R=k/n\);增加码字数量 \(M\)(或信息位数 \(k\))可以提高码率,但可能会减小最小距离 \(d\)。各种界限正是量化了这些参数之间的基本制约关系。

    7. chapter 7:卷积码(Convolutional Codes)

    欢迎来到本书关于信道编码(Channel Coding)的第七章。在前几章中,我们深入探讨了线性分组码(Linear Block Codes)及其重要子类,如循环码(Cyclic Codes)、BCH 码(Bose-Chaudhuri-Hocquenghem Codes)和 Reed-Solomon (RS) 码。这些码的特点是编码过程不依赖于之前的输入分组,每个分组独立编码。然而,今天我们要介绍一种具有“记忆”的编码方式——卷积码(Convolutional Codes)。

    卷积码是一种广泛应用于通信系统中的前向纠错(Forward Error Correction, FEC)码,尤其在无线通信、卫星通信和深空通信等对性能要求极高的领域。与分组码不同,卷积码的编码输出不仅取决于当前的输入比特(或符号),还取决于之前若干个输入比特的状态。这种“卷积”特性使得码字之间具有更强的关联性,从而在相同码率(Code Rate)下通常能提供比简单分组码更好的纠错性能。本章将系统地介绍卷积码的定义、结构、表示方法以及最重要的译码算法——维特比(Viterbi)算法。

    7.1 定义与编码器结构

    卷积码(Convolutional Codes)由其编码器(Encoder)的结构来定义。一个典型的二进制卷积码编码器可以看作是一个有限状态机(Finite State Machine, FSM),由移位寄存器(Shift Registers)和模 2 加法器(Modulo-2 Adders)组成。

    一个 \((n, k, m)\) 卷积码通常表示:
    ⚝ \(k\):输入比特数(每次输入 \(k\) 个比特)。
    ⚝ \(n\):输出比特数(每次输出 \(n\) 个比特)。
    ⚝ \(m\):编码器的记忆长度(Memory Length),表示当前输出依赖于当前输入以及之前 \(m\) 个输入比特。有时也用约束长度(Constraint Length) \(K = m+1\) 来表示,即当前输出依赖于当前输入和之前 \(m\) 个输入,共 \(m+1\) 个输入比特。

    码率(Code Rate)为 \(R = k/n\)。对于二进制卷积码,通常 \(k\) 和 \(n\) 是小整数,例如 \(k=1, n=2\) 或 \(k=1, n=3\)。

    考虑一个最简单的 \((2, 1, 2)\) 卷积码,其约束长度 \(K=3\)。这意味着每次输入 1 个比特,输出 2 个比特,当前输出依赖于当前输入和前 2 个输入。其编码器结构可以由生成多项式(Generator Polynomials)或生成序列(Generator Sequences)来描述。

    假设输入序列为 \(u = (u_0, u_1, u_2, \dots)\),其中 \(u_i \in \{0, 1\}\)。
    编码器有 \(m=2\) 个移位寄存器单元,存储 \(u_{i-1}\) 和 \(u_{i-2}\)(假设 \(u_{-1}=u_{-2}=0\))。
    输出序列为 \(v = (v_0^{(1)}, v_0^{(2)}, v_1^{(1)}, v_1^{(2)}, \dots)\),其中 \(v_i^{(j)} \in \{0, 1\}\)。

    生成多项式 \(g^{(j)}(D)\) 描述了第 \(j\) 个输出比特如何由当前和过去的输入比特通过模 2 加法组合而成。\(D\) 表示一个单位延迟。
    对于 \((2, 1, 2)\) 码,假设生成多项式为:
    \(g^{(1)}(D) = 1 + D^2\)
    \(g^{(2)}(D) = 1 + D + D^2\)

    这意味着:
    \(v_i^{(1)} = u_i + u_{i-2}\) (模 2 加)
    \(v_i^{(2)} = u_i + u_{i-1} + u_{i-2}\) (模 2 加)

    在硬件实现上,这对应于一个 2 级移位寄存器,输入 \(u_i\) 进入寄存器,寄存器的输出(当前输入 \(u_i\),延迟 1 位的 \(u_{i-1}\),延迟 2 位的 \(u_{i-2}\))通过模 2 加法器连接到输出端。

    例如,输入序列 \(u = (1, 0, 1, 1, \dots)\):
    ⚝ \(i=0\): \(u_0=1\). 寄存器内容 \((0, 0)\). \(v_0^{(1)} = u_0+0 = 1\), \(v_0^{(2)} = u_0+0+0 = 1\). 输出 \((1, 1)\). 寄存器更新为 \((1, 0)\).
    ⚝ \(i=1\): \(u_1=0\). 寄存器内容 \((1, 0)\). \(v_1^{(1)} = u_1+0 = 0\), \(v_1^{(2)} = u_1+1+0 = 0\). 输出 \((0, 0)\). 寄存器更新为 \((0, 1)\).
    ⚝ \(i=2\): \(u_2=1\). 寄存器内容 \((0, 1)\). \(v_2^{(1)} = u_2+1 = 0\), \(v_2^{(2)} = u_2+0+1 = 0\). 输出 \((0, 0)\). 寄存器更新为 \((1, 0)\).
    ⚝ \(i=3\): \(u_3=1\). 寄存器内容 \((1, 0)\). \(v_3^{(1)} = u_3+0 = 1\), \(v_3^{(2)} = u_3+1+0 = 0\). 输出 \((1, 0)\). 寄存器更新为 \((1, 1)\).
    ...以此类推。

    卷积码的编码过程是连续的,不像分组码那样将输入分成固定长度的块。这使得卷积码特别适合处理连续的数据流。

    7.2 状态图(State Diagram)与网格图(Trellis Diagram)

    由于卷积码编码器是一个有限状态机,其行为可以用状态图(State Diagram)或网格图(Trellis Diagram)来描述和可视化。这些图对于理解编码过程和设计译码算法至关重要。

    对于一个 \(k=1, m\) 的卷积码,编码器有 \(2^m\) 个状态。每个状态由移位寄存器中的 \(m\) 个比特决定。例如,对于 \((2, 1, 2)\) 码,\(m=2\),有 \(2^2=4\) 个状态,可以用寄存器内容 \((u_{i-1}, u_{i-2})\) 来表示:状态 00, 01, 10, 11。

    状态图(State Diagram)
    状态图是一个有向图,节点表示编码器的状态,边表示输入比特引起的从一个状态到另一个状态的转移。每条边上标记了输入比特和对应的输出比特。
    对于 \((2, 1, 2)\) 码:
    ⚝ 状态由 \((u_{i-1}, u_{i-2})\) 表示。
    ⚝ 输入 \(u_i\)。
    ⚝ 新状态由 \((u_i, u_{i-1})\) 决定。
    ⚝ 输出由 \(u_i, u_{i-1}, u_{i-2}\) 决定。

    例如,从状态 00 \((u_{i-1}=0, u_{i-2}=0)\):
    ⚝ 输入 \(u_i=0\): 新状态 \((0, 0)\),输出 \(v_i^{(1)}=0+0=0\), \(v_i^{(2)}=0+0+0=0\)。转移到状态 00,输出 00。
    ⚝ 输入 \(u_i=1\): 新状态 \((1, 0)\),输出 \(v_i^{(1)}=1+0=1\), \(v_i^{(2)}=1+0+0=1\)。转移到状态 10,输出 11。

    从状态 01 \((u_{i-1}=0, u_{i-2}=1)\):
    ⚝ 输入 \(u_i=0\): 新状态 \((0, 0)\),输出 \(v_i^{(1)}=0+1=1\), \(v_i^{(2)}=0+0+1=1\)。转移到状态 00,输出 11。
    ⚝ 输入 \(u_i=1\): 新状态 \((1, 0)\),输出 \(v_i^{(1)}=1+1=0\), \(v_i^{(2)}=1+0+1=0\)。转移到状态 10,输出 00。

    状态图清晰地展示了所有可能的状态转移和对应的输出。

    网格图(Trellis Diagram)
    网格图是状态图在时间轴上的展开。它由一系列垂直排列的节点(表示不同时刻的状态)和连接这些节点的边(表示状态转移)组成。网格图的结构像一个“网格”或“格状”。
    对于一个长度为 \(L\) 的输入序列,网格图有 \(L+m+1\) 列(或 \(L+1\) 列,取决于定义),每列有 \(2^m\) 个节点。从一列到下一列的边表示一个时间步长的状态转移。每条边上标记了引起转移的输入比特和编码器产生的输出比特。

    网格图的优点在于它直观地展示了所有可能的编码序列路径。从初始状态(通常是全零状态)开始,任何合法的输入序列都对应于网格图中的一条从左到右的路径。每条路径上的输出比特序列就是对应的码字。

    例如,对于 \((2, 1, 2)\) 码,初始状态 00。
    时刻 0 (输入 \(u_0\)):从状态 00 出发,根据 \(u_0\) 转移到新状态。
    时刻 1 (输入 \(u_1\)):从时刻 0 达到的状态出发,根据 \(u_1\) 转移。
    ...
    时刻 \(L-1\) (输入 \(u_{L-1}\)):从时刻 \(L-2\) 达到的状态出发,根据 \(u_{L-1}\) 转移。
    通常在输入序列结束后,会附加 \(m\) 个零比特(称为尾比特 Tail Bits)将编码器强制回到全零状态,这有助于译码。

    网格图是理解和实现维特比译码算法的基础。译码问题可以转化为在接收序列对应的网格图上寻找一条“最优”路径。

    7.3 维特比(Viterbi)译码算法

    维特比(Viterbi)算法是一种用于寻找有限状态隐马尔可夫模型(Hidden Markov Model, HMM)中最有可能的状态序列的动态规划算法。在卷积码的译码中,维特比算法被用来寻找网格图上与接收序列“最接近”的路径,这条路径对应的输入序列就是译码结果。它是最大似然(Maximum Likelihood, ML)译码的一种实现,尤其适用于约束长度较小的卷积码。

    维特比算法的核心思想是:在网格图的每个时刻(列)的每个状态,只保留到达该状态的具有最小累积度量(Cumulative Metric)的路径,这条路径称为幸存路径(Survivor Path)。这是因为根据动态规划原理,如果一条路径在某个中间状态不是到达该状态的最优路径,那么它也不可能是到达最终状态的最优路径的一部分。

    算法步骤:
    ① 初始化:在网格图的起始时刻(通常是时刻 0),将初始状态(如全零状态)的累积度量设为 0,其他状态的累积度量设为无穷大。
    ② 迭代:对于网格图的每一列(每个时刻),考虑从前一列的每个状态出发到达当前列的每个可能状态的路径。
    ▮▮▮▮ⓒ 计算每条进入当前状态的路径的度量(Path Metric)。度量通常是接收到的符号与该路径对应的编码器输出符号之间的距离。
    ▮▮▮▮ⓓ 对于当前状态,比较所有进入该状态的路径的累积度量(前一状态的累积度量 + 当前路径度量)。
    ▮▮▮▮ⓔ 选择累积度量最小的那条路径作为该状态的幸存路径,并记录其累积度量。如果有多条路径具有相同的最小累积度量,则随机选择一条(或根据特定规则选择)。
    ⑥ 终止:当到达网格图的最后一列时,选择具有最小累积度量的状态,回溯其幸存路径,得到最可能的编码序列。该路径对应的输入序列即为译码结果。

    度量(Metric)的计算方式取决于接收信号的类型,这引出了硬判决(Hard-Decision)和软判决(Soft-Decision)维特比译码。

    7.3.1 硬判决维特比译码(Hard-Decision Viterbi Decoding)

    硬判决(Hard-Decision)意味着信道解调器(Demodulator)将接收到的模拟信号直接判决为离散的二进制比特(0 或 1)。例如,对于 BPSK 调制,接收到正电压判为 1,负电压判为 0。

    在这种情况下,接收序列 \(r\) 是一个二进制序列。路径度量通常使用汉明距离(Hamming Distance)。
    对于网格图中的一条边,对应于输入 \(k\) 比特和输出 \(n\) 比特。假设编码器输出为 \(c = (c_1, c_2, \dots, c_n)\),接收到的对应比特为 \(r = (r_1, r_2, \dots, r_n)\)。这条边的路径度量就是 \(c\) 和 \(r\) 之间的汉明距离:
    \(d_H(c, r) = \sum_{i=1}^n (c_i \oplus r_i)\) (其中 \(\oplus\) 是异或运算)

    累积度量(Cumulative Metric)就是从起始点到当前状态的幸存路径上所有边的汉明距离之和。维特比算法的目标是找到一条具有最小累积汉明距离的路径。

    硬判决译码的优点是简单,计算量小。缺点是它丢弃了解调器输出的模拟信号中的重要信息(如信号的幅度或可靠性),导致性能损失。

    7.3.2 软判决维特比译码(Soft-Decision Viterbi Decoding)

    软判决(Soft-Decision)意味着信道解调器输出的是模拟值或量化后的多级值,这些值包含了接收信号可靠性的信息。例如,对于 BPSK 调制,解调器输出的电压值越大(正或负),对应的比特判决就越可靠。

    软判决译码利用了这些可靠性信息,通常能获得比硬判决译码约 2-3 dB 的性能增益。

    路径度量通常使用平方欧氏距离(Squared Euclidean Distance)或对数似然比(Log-Likelihood Ratio, LLR)。

    平方欧氏距离(Squared Euclidean Distance)
    假设编码器输出的 \(n\) 比特 \(c = (c_1, \dots, c_n)\) 经过调制(如 BPSK,将 0 映射到 \(-1\),1 映射到 \(+1\))得到发送符号 \(x = (x_1, \dots, x_n)\),其中 \(x_i \in \{-1, +1\}\)。接收到的软判决值为 \(y = (y_1, \dots, y_n)\),其中 \(y_i\) 是实数值。
    这条边的路径度量是 \(x\) 和 \(y\) 之间的平方欧氏距离:
    \(d_E^2(x, y) = \sum_{i=1}^n (x_i - y_i)^2\)

    维特比算法寻找具有最小累积平方欧氏距离的路径。最小欧氏距离准则等价于最大似然准则,假设信道是加性高斯白噪声(AWGN)信道。

    对数似然比(Log-Likelihood Ratio, LLR)
    LLR 度量在迭代译码(Iterative Decoding)中更为常用(如 Turbo 码和 LDPC 码),但也可以用于维特比译码。对于 AWGN 信道和 BPSK 调制,接收值 \(y_i\) 的 LLR 定义为:
    \(LLR(y_i) = \log \frac{P(y_i | x_i = +1)}{P(y_i | x_i = -1)}\)
    对于编码器输出比特 \(c_i\),如果 \(c_i=0\) 对应 \(x_i=+1\),\(c_i=1\) 对应 \(x_i=-1\),则路径度量可以定义为:
    \(\sum_{i=1}^n c_i \cdot LLR(y_i)\)
    维特比算法寻找具有最大累积 LLR 度量的路径(因为 LLR 越大表示对应比特越可靠)。或者,更常见的做法是将度量定义为 \(\sum_{i=1}^n (1-2c_i) y_i\),寻找最大值;或者定义为 \(\sum_{i=1}^n (2c_i-1) y_i\),寻找最小值。这些定义在 AWGN 信道下是等价于最大似然的。

    软判决维特比译码的计算复杂度高于硬判决,因为它需要处理实数值。然而,其显著的性能提升使得它在许多实际系统中成为首选。

    维特比算法的计算复杂度与网格图的节点数和边数成正比。对于长度为 \(L\) 的输入序列和 \(m\) 级记忆的 \(k=1\) 卷积码,网格图有约 \(L \times 2^m\) 个状态节点。每个时刻需要计算 \(2^m \times 2^k\) 条边的度量并进行比较。因此,复杂度大致与 \(L \cdot 2^{m+k}\) 成正比。当 \(m\) 较大时,复杂度会呈指数增长,这限制了维特比算法在长约束长度码上的应用。

    7.4 其他卷积码译码算法(如序列译码 Sequential Decoding)

    尽管维特比算法是卷积码最常用的译码算法,尤其对于中短约束长度的码,但当约束长度 \(K=m+1\) 较大时,维特比算法的复杂度会变得难以承受。为了解决这个问题,人们提出了其他译码算法,其中序列译码(Sequential Decoding)是重要的一类。

    序列译码算法不像维特比算法那样同时处理所有可能的路径,而是在网格图上进行深度优先或广度优先的搜索,试图找到一条高似然度的路径。它不保留所有幸存路径,而是根据某种度量(如 Fano 度量或计算度量)来扩展最有希望的路径,并在度量下降时回溯。

    Fano 算法(Fano Algorithm)
    一种经典的序列译码算法。它沿着一条路径前进,计算路径度量。如果度量增加(表示与接收序列更匹配),则继续前进;如果度量下降超过某个阈值,则回溯到之前的节点,尝试其他分支。

    Stack 算法(Stack Algorithm)/ ZJ 算法(Z+J Algorithm)
    另一种序列译码算法。它维护一个栈(Stack),存储当前最有希望的路径。每次迭代,从栈顶取出最优路径,扩展其分支,计算新路径的度量,并将新路径按度量排序后插入栈中。

    序列译码的优点是其计算复杂度平均而言与约束长度呈多项式关系,而不是指数关系,因此适用于长约束长度的卷积码。然而,序列译码的计算量是可变的,取决于信道噪声水平。在高噪声环境下,算法可能需要进行大量的回溯和搜索,导致计算量急剧增加,甚至可能发生计算堵塞(Computation Cutoff)。

    总的来说,维特比算法提供了最大似然性能,适用于中短约束长度码,计算量固定;序列译码适用于长约束长度码,平均计算量较低但可变。在现代通信系统中,随着计算能力的提升和对更高性能的需求,维特比算法的应用范围有所扩大,同时,迭代译码技术(如 Turbo 码和 LDPC 码的译码)的兴起也为卷积码的译码带来了新的思路,有时会将卷积码作为分量码(Component Code)并采用软输入软输出(Soft-Input Soft-Output, SISO)的译码模块进行迭代译码。

    本章我们重点介绍了卷积码的基本概念、表示方法和核心的维特比译码算法。理解卷积码及其网格图结构是掌握现代迭代译码技术的基础。在后续章节中,我们将看到卷积码如何作为构建更强大编码方案(如 Turbo 码)的基本单元。

    8. chapter 8:信道容量与香农限(Channel Capacity and Shannon Limit)

    欢迎同学们来到信息论的又一个重要章节!📚 在前面的课程中,我们学习了如何设计编码来检测和纠正信道传输过程中引入的错误。我们看到了各种编码方案,从简单的线性分组码到更复杂的循环码和卷积码。然而,一个核心问题始终萦绕在我们心头:对于一个给定的信道,我们究竟能以多高的速率可靠地传输信息?是否存在一个理论上的极限?

    本章,我们将深入探讨信息论的基石之一——香农信道编码定理(Shannon's Channel Coding Theorem),以及与之紧密相关的信道容量(Channel Capacity)概念。这将为我们理解通信系统的根本限制以及现代编码技术为何如此重要提供深刻的洞察。准备好了吗?让我们一起揭开可靠通信速率的神秘面纱!✨

    8.1 互信息(Mutual Information)与信道容量(Channel Capacity)

    在信息论中,我们用熵(Entropy)来衡量随机变量的不确定性。对于一个离散随机变量 \(X\),其概率分布为 \(p(x)\),熵定义为:
    \[ H(X) = - \sum_{x} p(x) \log_2 p(x) \]
    单位通常是比特(bits)。熵 \(H(X)\) 表示在得知 \(X\) 的值之前,我们平均需要多少比特来描述 \(X\)。

    当信息通过信道传输时,输入 \(X\) 会受到噪声干扰,产生输出 \(Y\)。输入 \(X\) 和输出 \(Y\) 都是随机变量。我们可以用联合熵(Joint Entropy)\(H(X, Y)\) 来衡量一对随机变量 \(X\) 和 \(Y\) 的不确定性:
    \[ H(X, Y) = - \sum_{x, y} p(x, y) \log_2 p(x, y) \]
    其中 \(p(x, y)\) 是 \(X\) 和 \(Y\) 的联合概率分布。

    我们还可以定义条件熵(Conditional Entropy)\(H(Y|X)\),它表示在已知 \(X\) 的值之后,\(Y\) 的剩余不确定性:
    \[ H(Y|X) = - \sum_{x, y} p(x, y) \log_2 p(y|x) \]
    类似地,\(H(X|Y)\) 表示在已知 \(Y\) 的值之后,\(X\) 的剩余不确定性。

    现在,我们引入一个关键概念:互信息(Mutual Information),记为 \(I(X; Y)\)。互信息衡量的是通过观察 \(Y\) 获得关于 \(X\) 的信息量,或者说 \(X\) 和 \(Y\) 之间的相互依赖程度。它可以定义为 \(X\) 的不确定性 \(H(X)\) 在已知 \(Y\) 之后减少了多少:
    \[ I(X; Y) = H(X) - H(X|Y) \]
    同样,它也可以表示为 \(Y\) 的不确定性 \(H(Y)\) 在已知 \(X\) 之后减少了多少:
    \[ I(X; Y) = H(Y) - H(Y|X) \]
    互信息还与联合熵和边缘熵有关:
    \[ I(X; Y) = H(X) + H(Y) - H(X, Y) \]
    互信息 \(I(X; Y)\) 是非负的,当且仅当 \(X\) 和 \(Y\) 完全独立时,\(I(X; Y) = 0\)。当 \(X\) 和 \(Y\) 之间存在强关联时,互信息较大。

    对于一个通信信道,输入是随机变量 \(X\),输出是随机变量 \(Y\)。信道的特性由条件概率分布 \(p(y|x)\) 描述。我们希望通过信道传输尽可能多的信息,这意味着我们希望输入 \(X\) 和输出 \(Y\) 之间的互信息 \(I(X; Y)\) 尽可能大。互信息的大小取决于输入信号的概率分布 \(p(x)\) 以及信道的特性 \(p(y|x)\)。信道特性是固定的,但我们可以选择不同的输入分布 \(p(x)\)。

    信道容量(Channel Capacity),记为 \(C\),被定义为在所有可能的输入概率分布 \(p(x)\) 下,互信息 \(I(X; Y)\) 的最大值:
    \[ C = \max_{p(x)} I(X; Y) \]
    信道容量 \(C\) 代表了该信道每使用一次(例如,每传输一个符号)所能传输的最大平均信息量,单位是比特/符号(bits/symbol)。它是该信道在理论上能够实现的最高可靠传输速率。

    理解信道容量的意义至关重要:
    ⚝ 它是信道的固有属性,只取决于信道的转移概率 \(p(y|x)\)。
    ⚝ 它是一个上限,任何编码方案的可靠传输速率都不能超过信道容量。
    ⚝ 香农信道编码定理告诉我们,存在一种编码方案,其传输速率可以任意接近信道容量,同时错误概率可以任意小(只要码长足够长)。

    8.2 离散无记忆信道容量的计算

    对于离散无记忆信道(Discrete Memoryless Channels, DMC),输入字母表 \(\mathcal{X}\) 和输出字母表 \(\mathcal{Y}\) 都是有限的。信道由转移概率矩阵 \(P = [p(y|x)]\) 描述,其中 \(x \in \mathcal{X}, y \in \mathcal{Y}\)。信道容量的计算需要找到使 \(I(X; Y)\) 最大的输入概率分布 \(p(x)\)。

    互信息 \(I(X; Y)\) 可以写为:
    \[ I(X; Y) = \sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log_2 \frac{p(x, y)}{p(x) p(y)} \]
    由于 \(p(x, y) = p(y|x) p(x)\) 且 \(p(y) = \sum_{x'} p(y|x') p(x')\),我们可以将 \(I(X; Y)\) 表示为只依赖于 \(p(x)\) 和 \(p(y|x)\) 的函数:
    \[ I(X; Y) = \sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(y|x) p(x) \log_2 \frac{p(y|x)}{\sum_{x'} p(y|x') p(x')} \]
    计算信道容量 \(C = \max_{p(x)} I(X; Y)\) 是一个凸优化问题,通常可以通过迭代算法(如 Blahut-Arimoto 算法)来求解。然而,对于一些简单的信道模型,我们可以直接计算或推导出容量。

    8.2.1 二元对称信道(Binary Symmetric Channel, BSC)

    二元对称信道(BSC)是最简单的信道模型之一。输入和输出都是二元的(0或1)。信道以概率 \(p\) 翻转比特(0变成1,1变成0),以概率 \(1-p\) 保持比特不变。转移概率为:
    \(p(0|0) = 1-p\), \(p(1|0) = p\)
    \(p(1|1) = 1-p\), \(p(0|1) = p\)

    对于 BSC,对称性使得输入分布 \(p(0) = p(1) = 1/2\) 能够最大化互信息。在这种情况下,输出的概率分布也是 \(p(0) = p(1) = 1/2\)。
    输入熵 \(H(X) = H(1/2, 1/2) = 1\) 比特。
    条件熵 \(H(Y|X)\) 表示已知输入 \(X\) 后输出 \(Y\) 的不确定性,这正是由信道噪声引起的。对于 BSC,无论输入是0还是1,输出翻转的概率都是 \(p\)。因此,\(H(Y|X) = H_b(p)\),其中 \(H_b(p) = -p \log_2 p - (1-p) \log_2 (1-p)\) 是二元熵函数。
    信道容量 \(C = \max_{p(x)} I(X; Y) = \max_{p(x)} (H(X) - H(X|Y))\)。由于 BSC 的对称性,\(H(X|Y) = H(Y|X)\) 在 \(p(0)=p(1)=1/2\) 时成立。
    所以,对于 BSC,容量为:
    \[ C = 1 - H_b(p) \]
    单位是比特/符号。
    ⚝ 当 \(p=0\) 时(无噪声),\(H_b(0)=0\),\(C=1\) 比特/符号。我们可以可靠地传输1比特信息。
    ⚝ 当 \(p=1/2\) 时(完全随机),\(H_b(1/2)=1\),\(C=0\) 比特/符号。输出与输入完全无关,无法传输信息。
    ⚝ 当 \(p=1\) 时(比特总是翻转),\(H_b(1)=0\),\(C=1\) 比特/符号。我们可以通过将0编码为1,1编码为0来实现可靠传输。

    8.2.2 二元删除信道(Binary Erasure Channel, BEC)

    二元删除信道(BEC)是另一种重要的信道模型。输入是二元的(0或1)。信道以概率 \(1-\epsilon\) 正确传输比特,以概率 \(\epsilon\) 将比特删除(输出一个特殊的“删除”符号 '?')。
    转移概率为:
    \(p(0|0) = 1-\epsilon\), \(p(?|0) = \epsilon\), \(p(1|0) = 0\)
    \(p(1|1) = 1-\epsilon\), \(p(?|1) = \epsilon\), \(p(0|1) = 0\)

    对于 BEC,同样地,输入分布 \(p(0) = p(1) = 1/2\) 可以最大化互信息。
    输入熵 \(H(X) = 1\) 比特。
    条件熵 \(H(X|Y)\) 表示在收到输出 \(Y\) 后,输入 \(X\) 的剩余不确定性。
    ⚝ 如果收到 \(Y=0\),则确定输入 \(X=0\),不确定性为0。
    ⚝ 如果收到 \(Y=1\),则确定输入 \(X=1\),不确定性为0。
    ⚝ 如果收到 \(Y=?\),则输入 \(X\) 可能是0或1,且概率各为1/2(因为我们假设 \(p(0)=p(1)=1/2\))。在这种情况下,剩余不确定性为 \(H(1/2, 1/2) = 1\) 比特。
    收到 \(Y=?\) 的概率是 \(\epsilon p(0) + \epsilon p(1) = \epsilon(1/2) + \epsilon(1/2) = \epsilon\)。
    所以,\(H(X|Y) = p(Y=0) H(X|Y=0) + p(Y=1) H(X|Y=1) + p(Y=?) H(X|Y=?)\)
    \(H(X|Y) = (1-\epsilon)/2 \cdot 0 + (1-\epsilon)/2 \cdot 0 + \epsilon \cdot 1 = \epsilon\)
    信道容量 \(C = \max_{p(x)} I(X; Y) = \max_{p(x)} (H(X) - H(X|Y))\). 在 \(p(0)=p(1)=1/2\) 时,\(H(X)=1\),\(H(X|Y)=\epsilon\)。
    所以,对于 BEC,容量为:
    \[ C = 1 - \epsilon \]
    单位是比特/符号。
    ⚝ 当 \(\epsilon=0\) 时(无删除),\(C=1\) 比特/符号。
    ⚝ 当 \(\epsilon=1\) 时(全部删除),\(C=0\) 比特/符号。

    BEC 的容量公式非常直观:容量等于未被删除的比特比例。这反映了 BEC 的一个特性:收到的非删除符号是完全可靠的。

    8.3 加性高斯白噪声信道(Additive White Gaussian Noise Channel, AWGN)

    加性高斯白噪声信道(AWGN)是连续时间或离散时间通信系统中最重要的信道模型之一。它假设噪声是加性的、功率谱密度是均匀的(“白”),且服从高斯分布。
    对于离散时间 AWGN 信道,输入 \(X\) 是一个实数(或复数),输出 \(Y\) 是一个实数(或复数),它们之间的关系是:
    \[ Y = X + Z \]
    其中 \(Z\) 是与 \(X\) 独立的、均值为0、方差为 \(N\) 的高斯随机变量(噪声)。我们通常假设输入信号的平均功率(或能量)受到限制,例如 \(E[X^2] \le S\)。

    对于连续随机变量,我们使用微分熵(Differential Entropy)的概念,但互信息的定义 \(I(X; Y) = H(X) - H(X|Y)\) 仍然成立,只是这里的熵是微分熵。微分熵可以为负值,但互信息始终是非负的。

    AWGN 信道的容量公式由香农在1948年推导得出:
    \[ C = \frac{1}{2} \log_2\left(1 + \frac{S}{N}\right) \]
    单位是比特/符号(或比特/二维实信号)。这里的 \(S\) 是信号平均功率,\(N\) 是噪声功率。\(S/N\) 通常被称为信噪比(Signal-to-Noise Ratio, SNR)。

    如果考虑连续时间 AWGN 信道,带宽为 \(B\),信号功率为 \(S\),噪声功率谱密度为 \(N_0/2\),则噪声功率 \(N = N_0 B\)。此时,信道容量为:
    \[ C = B \log_2\left(1 + \frac{S}{N_0 B}\right) \]
    单位是比特/秒(bits/sec)。这个公式被称为香农-哈特利定理(Shannon-Hartley Theorem)。

    这个公式揭示了几个重要信息:
    ① 信道容量随着带宽 \(B\) 和信噪比 \(S/N\) 的增加而增加。
    ② 在带宽 \(B\) 固定时,提高信号功率 \(S\) 可以增加容量。
    ③ 在信号功率 \(S\) 固定时,增加带宽 \(B\) 也可以增加容量,但容量的增长速度会变慢(对数关系)。当 \(B \to \infty\) 时,容量趋近于一个有限值 \(S/(N_0 \ln 2)\)。这意味着无限带宽并不能带来无限容量。
    ④ 容量 \(C\) 是在给定功率限制 \(S\) 下,通过选择最佳输入信号分布(高斯分布)所能达到的最大互信息。

    AWGN 信道容量公式是通信系统设计的基准。它告诉我们在给定带宽和信噪比条件下,理论上最高能达到的传输速率。

    8.4 香农信道编码定理(Shannon's Channel Coding Theorem)

    现在,我们将互信息和信道容量的概念与可靠通信的可能性联系起来。这就是著名的香农信道编码定理(Shannon's Channel Coding Theorem),也称为香农第二定理。

    定理(非正式表述):
    对于一个具有容量 \(C\) 的信道,
    ① 如果信息传输速率 \(R\) 小于信道容量 \(C\)(即 \(R < C\)),那么存在一种编码方案,通过使用足够长的码字,可以使接收端译码错误的概率任意小。
    ② 如果信息传输速率 \(R\) 大于信道容量 \(C\)(即 \(R > C\)),那么无论使用何种编码方案,接收端译码错误的概率都将大于某个正值(即不可能实现任意小的错误概率)。

    定理(正式表述):
    对于任意离散无记忆信道,其容量为 \(C\)。
    ① 对于任意速率 \(R < C\) 和任意 \(\epsilon > 0\),存在一个足够大的码长 \(n\) 和一个 \( (2^{nR}, n) \) 码(包含 \(2^{nR}\) 个长度为 \(n\) 的码字),以及一个译码函数,使得最大可能的码字错误概率(maximum probability of codeword error)小于 \(\epsilon\)。
    ② 对于任意速率 \(R > C\),对于任意码长 \(n\),任何 \( (2^{nR}, n) \) 码在最大可能的码字错误概率上都有一个下界,该下界不随 \(n\) 趋于无穷而趋于零。

    这个定理的意义极其深远,它为通信理论奠定了基石:
    存在性证明: 它证明了在速率低于容量时,可靠通信是可能实现的。这是一个存在性定理,它没有告诉我们如何构造这样的“好”码,但它保证了它们的存在。
    容量是极限: 它确定了信道容量 \(C\) 是可靠通信速率的严格上限。任何试图以高于容量的速率传输信息的尝试都注定会失败,错误率无法降至任意低。
    长码字的威力: 定理的关键在于“足够长的码字”。这意味着通过增加码字的长度(即增加编码的复杂度),我们可以将错误概率推向零,前提是速率低于容量。

    香农最初证明这个定理时,使用了随机编码(Random Coding)的思想。他证明了随机选择的大多数码本都是“好”码本,能够实现接近容量的速率。虽然随机码本身不具有实际可操作的编码和译码算法,但这个证明方法揭示了长码字的强大纠错潜力。

    8.5 可达性(Achievability)与反向定理(Converse)

    香农信道编码定理包含两个部分:可达性(Achievability)和反向定理(Converse)。

    可达性(Achievability):
    这部分证明了对于任何速率 \(R < C\),确实存在一种编码方案,使得错误概率可以任意小。香农的原始证明使用了随机编码论证。其基本思想是:
    ① 随机地从输入字母表中独立同分布地选择 \(2^{nR}\) 个长度为 \(n\) 的序列作为码字,构成一个码本。
    ② 当发送端发送某个码字时,接收端收到一个序列。
    ③ 译码器采用联合典型性译码(Joint Typicality Decoding):如果收到的序列与发送的码字联合典型(即它们的联合概率分布接近于真实的联合概率分布 \(p(x, y)\)),则译码为该码字。
    ④ 对于足够大的 \(n\),如果 \(R < I(X; Y)\)(对于某个输入分布),那么发送的码字与收到的序列是联合典型的概率很高,而收到的序列与 其他 码字联合典型的概率很低。通过选择使 \(I(X; Y)\) 达到最大的输入分布,并选择速率 \(R < C\),可以证明错误概率随着 \(n \to \infty\) 趋于零。

    虽然随机编码证明了可达性,但它不是一个实用的编码方法,因为随机码的编码和译码通常非常复杂。现代编码理论(如 Turbo 码和 LDPC 码)的目标就是找到具有高效编码和译码算法的、能够接近香农极限的码。

    反向定理(Converse):
    这部分证明了对于任何速率 \(R > C\),不可能实现任意小的错误概率。这意味着 \(C\) 是可靠通信的硬性上限。反向定理的证明通常基于 Fano 不等式或数据处理不等式,它们表明信息在通过信道和译码过程后不可能增加。如果传输速率 \(R\) 超过了信道能传输的最大信息量 \(C\),那么必然会丢失信息,导致不可忽略的错误。

    综合可达性和反向定理,我们得出结论:信道容量 \(C\) 正是可靠通信的最高速率。

    8.6 香农限的意义与编码的挑战

    香农信道编码定理和信道容量的概念具有极其重要的意义:

    理论基准: 香农限(Shannon Limit)为通信系统的性能设定了一个理论上的终极目标。任何实际通信系统的性能都可以与香农限进行比较,以衡量其效率。
    指导方向: 它告诉我们,要实现接近理论极限的可靠通信,必须使用具有足够复杂度的编码方案(长码字)。
    速率-可靠性权衡: 定理表明,在速率 \(R < C\) 时,可以通过增加码长来提高可靠性;而在 \(R > C\) 时,无论如何增加码长,都无法保证可靠性。

    然而,香农定理也带来了巨大的挑战:

    非构造性: 香农的证明是存在性的,没有提供构造“好”码的具体方法。寻找能够接近香农限且具有可行编码和译码算法的码成为了编码理论的核心任务。
    无限码长: 定理的结论是在码长趋于无穷时成立的。在实际系统中,码长是有限的,这会导致与香农限之间存在一定的差距(有限长效应)。
    译码复杂度: 随机码的联合典型性译码复杂度随着码长呈指数增长,在实际中不可行。设计具有多项式复杂度甚至线性复杂度译码算法的容量逼近码是巨大的挑战。

    在香农定理提出后的几十年里,编码理论的研究主要集中在构造具有高效算法的码,如汉明码、BCH 码、RS 码和卷积码。这些码在各自的应用领域取得了巨大成功,但它们通常距离香农限还有一定的差距。

    直到20世纪90年代,Turbo 码和 LDPC 码的出现,才真正意义上构造出了性能非常接近香农限的码。这些码通常采用迭代译码(Iterative Decoding)技术,通过在码的各个部分之间传递“软信息”来逼近最优译码性能。它们是现代通信系统(如 4G、5G、Wi-Fi 标准)中广泛使用的核心技术。

    总而言之,香农信道编码定理是信息论中最深刻的结论之一。它不仅为通信系统的性能设定了理论极限,也指明了通向这个极限的道路——通过巧妙的编码设计来对抗信道噪声。理解香农限,是理解现代通信系统设计原理的关键一步。🚀

    9. chapter 9:现代编码理论 I:Turbo 码(Turbo Codes)

    欢迎来到本书关于现代编码理论的第一个重要章节。在前面的章节中,我们学习了经典的线性分组码、循环码和卷积码,以及信道容量和香农信道编码定理。香农定理告诉我们,在低于信道容量的任何码率下,原则上存在一种编码方案,可以实现任意低的误码率(Error Rate)。然而,香农定理并没有告诉我们如何构造这样的码,也没有告诉我们如何对其进行有效的译码。长期以来,构造能够逼近香农限(Shannon Limit)的编码方案一直是编码理论和实践领域的圣杯。

    在 20 世纪 90 年代初,由 Claude Berrou、Alain Glavieux 和 Punya Thitimajshima 在法国电信研究院(Télécom Bretagne)提出的 Turbo 码(Turbo Codes)为这一难题提供了一个突破性的解决方案。Turbo 码以其在相对简单的译码复杂度下,能够获得接近香农限的性能而震惊了整个通信领域。它们的名字“Turbo”来源于其迭代译码(Iterative Decoding)过程,这个过程类似于涡轮增压器(Turbocharger)通过循环利用废气来提高发动机效率。

    本章将深入探讨 Turbo 码的起源、结构、核心原理以及其分量译码器。我们将看到,Turbo 码的成功在于巧妙地结合了并行级联(Parallel Concatenation)、交织(Interleaving)和迭代“软”信息交换(Iterative "Soft" Information Exchange)的思想。

    9.1 Turbo 码的起源与结构

    Turbo 码的诞生源于对构造能够逼近香农限的实用编码方案的持续探索。在 Turbo 码出现之前,虽然卷积码配合维特比译码(Viterbi Decoding)在性能上有所提升,但其复杂度随码长呈指数增长,限制了其逼近香农限的能力。而分组码虽然可以构造出性能优异的长码,但其最大似然译码(Maximum Likelihood Decoding)的复杂度同样是指数级的。

    Turbo 码的核心思想是将两个或多个相对简单的分量码(Component Codes)通过交织器(Interleaver)并行级联(Parallel Concatenation)起来,并通过一个迭代的、基于“软”信息(Soft Information)交换的译码算法来实现接近最优的性能。

    一个典型的二元 Turbo 码(Binary Turbo Code)编码器结构如图所示(此处无法直接绘制图,请读者自行想象或参考相关文献):

    它主要包含以下几个关键组成部分:

    ① 两个递归系统卷积码(Recursive Systematic Convolutional, RSC)编码器:通常使用两个相同的或不同的 RSC 编码器作为分量码。RSC 编码器是一种特殊的卷积码编码器,它将输入的信息比特(Information Bits)直接作为编码输出的一部分(系统位),同时通过反馈结构生成校验位(Parity Bits)。递归结构对于迭代译码的性能至关重要。
    ② 一个伪随机交织器(Pseudorandom Interleaver):位于第一个 RSC 编码器和第二个 RSC 编码器之间。它对输入信息比特序列进行置换(Permutation),打乱其顺序。
    ③ 打孔器(Puncturer):为了获得期望的码率(Code Rate),通常需要对两个 RSC 编码器产生的校验位进行打孔,即只传输其中的一部分。系统位通常不被打孔。

    编码过程如下:
    原始信息比特序列 \( \mathbf{u} \) 首先直接输入到第一个 RSC 编码器。第一个 RSC 编码器输出系统位 \( \mathbf{u} \) 和第一组校验位 \( \mathbf{p}_1 \)。
    同时,信息比特序列 \( \mathbf{u} \) 经过交织器置换后得到序列 \( \mathbf{u}' \), \( \mathbf{u}' \) 输入到第二个 RSC 编码器。第二个 RSC 编码器输出系统位 \( \mathbf{u}' \) 和第二组校验位 \( \mathbf{p}_2 \)。注意,由于 RSC 编码器是系统的,输出的系统位就是输入序列本身,即 \( \mathbf{u}' \)。
    最终传输的码字(Codeword)通常由系统位 \( \mathbf{u} \)、打孔后的校验位 \( \mathbf{p}_1' \) 和打孔后的校验位 \( \mathbf{p}_2' \) 组成。系统位 \( \mathbf{u}' \) 通常不单独传输,因为它可以从 \( \mathbf{u} \) 和交织规则中恢复。

    这种结构的关键在于并行级联和交织器的使用,它们共同作用,使得整体码具有非常好的距离特性,尤其是在长码长时。

    9.2 并行级联卷积码(Parallel Concatenated Convolutional Codes, PCCC)

    并行级联卷积码(PCCC)是 Turbo 码的正式名称。其核心思想是将信息序列并行地输入到两个(或更多)分量编码器中。与串行级联(Serial Concatenation)不同,并行级联的输出是各个分量编码器输出的组合。

    考虑一个最简单的 PCCC 结构,使用两个 \( (n_1, k_1) \) 和 \( (n_2, k_2) \) 的分量码。对于 Turbo 码,分量码通常是卷积码,且输入信息比特数相同。假设输入信息序列长度为 \( K \)。
    第一个分量编码器(通常是 RSC)接收 \( K \) 个信息比特,产生 \( K \) 个系统比特和 \( P_1 \) 个校验比特。
    第二个分量编码器(通常是 RSC)接收经过交织的 \( K \) 个信息比特,产生 \( K \) 个系统比特和 \( P_2 \) 个校验比特。
    最终的码字通常包含原始的 \( K \) 个系统比特,以及从 \( P_1 \) 和 \( P_2 \) 中选取(打孔)的校验比特。

    例如,一个码率为 \( R = 1/3 \) 的 Turbo 码,可以使用两个码率 \( 1/2 \) 的 RSC 编码器。输入 \( K \) 个信息比特,第一个 RSC 产生 \( K \) 系统位和 \( K \) 校验位,第二个 RSC 产生 \( K \) 系统位和 \( K \) 校验位。为了达到 \( 1/3 \) 的码率,总输出比特数为 \( 3K \)。这通常通过传输 \( K \) 个系统位,以及第一个 RSC 的 \( K \) 个校验位和第二个 RSC 的 \( K \) 个校验位中的各一半来实现(例如,交替传输)。

    PCCC 的优点在于其结构相对简单,并且通过交织器可以有效地生成具有大最小距离(Minimum Distance)的长码字。交织器的作用是确保输入到第二个编码器的信息序列与输入到第一个编码器的信息序列在结构上是“不相关的”。这意味着,如果一个信息序列在第一个编码器中产生了一个低重量(Low Weight)的码字(即信息序列本身重量低,或者信息序列导致编码器输出的校验位重量低),经过交织后输入到第二个编码器的序列很可能不会在第二个编码器中也产生低重量的码字。通过组合两个编码器的输出,可以避免整体码字出现低重量的情况,从而提高码的纠错能力。

    9.3 交织器(Interleaver)的作用

    交织器是 Turbo 码成功的关键组成部分之一。它的主要作用是将输入信息序列的顺序进行伪随机(Pseudorandom)置换。

    为什么需要交织器?
    考虑一个没有交织器的并行级联系统。如果一个信息序列 \( \mathbf{u} \) 本身重量很低(例如,大部分是零,只有少数几个一),那么它输入到两个 RSC 编码器后,都可能产生重量较低的校验序列 \( \mathbf{p}_1 \) 和 \( \mathbf{p}_2 \)。最终的码字 \( (\mathbf{u}, \mathbf{p}_1', \mathbf{p}_2') \) 的重量也会较低。低重量的码字意味着码的最小距离可能较小,从而限制了码的纠错性能。

    交织器的作用就是打破这种相关性。当低重量的信息序列 \( \mathbf{u} \) 输入到第一个编码器时,它可能产生低重量的 \( \mathbf{p}_1 \)。但是,经过交织器置换后的序列 \( \mathbf{u}' \) 对于第二个编码器来说,其“结构”已经被打乱。即使 \( \mathbf{u} \) 重量低,\( \mathbf{u}' \) 中的“一”的位置也可能被分散开。对于递归卷积码,输入序列中“一”的位置分布会显著影响输出校验位的重量。一个精心设计的交织器可以确保,当 \( \mathbf{u} \) 在第一个编码器中产生低重量校验位时,\( \mathbf{u}' \) 在第二个编码器中产生高重量校验位的概率很高。反之亦然。

    通过这种方式,交织器使得整体码字 \( (\mathbf{u}, \mathbf{p}_1', \mathbf{p}_2') \) 很难具有非常低的重量,从而有效地增加了码的最小距离,尤其是在长码长的情况下。这对于逼近香农限至关重要,因为香农限与码的最小距离(或更准确地说,码的距离谱)密切相关。

    常用的交织器类型包括:
    ⚝ 随机交织器(Random Interleaver):生成一个随机的置换表。性能通常很好,但需要存储置换表。
    ⚝ 伪随机交织器(Pseudorandom Interleaver):使用一个确定的算法生成看似随机的置换,可以避免存储整个表。
    ⚝ 代数交织器(Algebraic Interleaver):基于代数结构(如多项式或有限域)设计的交织器,具有一些可分析的特性,例如二次多项式交织器(Quadratic Permutation Polynomial, QPP)在 3GPP LTE 标准中被采用。

    交织器的长度(即信息比特序列的长度 \( K \)) 对 Turbo 码的性能有显著影响。通常,交织器越长,Turbo 码的性能越接近香农限,但译码延迟也越大。

    9.4 迭代译码(Iterative Decoding)原理

    Turbo 码的另一个革命性贡献在于其迭代译码算法。传统的译码算法(如维特比算法)是为单个码设计的,而 Turbo 码的结构需要一种能够利用其并行级联特性的译码方法。迭代译码正是为此而生。

    迭代译码的核心思想是:两个分量译码器(对应于两个分量编码器)通过交换“软”信息(Soft Information)来协同工作,逐步提高对原始信息比特的估计精度。这个过程是迭代进行的,每一轮迭代,译码器都利用前一轮获得的更可靠的信息来改进自己的译码结果。

    一个典型的 Turbo 译码器结构如图所示(此处无法直接绘制图,请读者自行想象或参考相关文献):

    它主要包含:
    ① 两个“软输入/软输出”(Soft-Input/Soft-Output, SISO)分量译码器:分别对应于两个 RSC 编码器。这些译码器接收信道输出的软信息,并输出关于每个信息比特的软信息(通常是对数似然比 LLR)。
    ② 一个交织器和一个解交织器(Deinterleaver):交织器与编码器中的交织器相同,用于将第一个译码器的输出软信息按照编码时的顺序打乱后输入给第二个译码器。解交织器是交织器的逆操作,用于将第二个译码器的输出软信息恢复到原始顺序后输入给第一个译码器。

    译码过程概述:
    1. 初始化: 第一个分量译码器接收来自信道的关于系统位和第一个校验位的软信息。关于信息位的先验信息(A Priori Information)通常初始化为零(表示等概率)。
    2. 译码器 1 运行: 第一个分量译码器利用接收到的信道软信息和关于信息位的先验信息,计算出关于每个信息位的后验信息(A Posteriori Information)。然后,它从中减去先验信息,得到“外信息”(Extrinsic Information)。这个外信息是第一个译码器基于其分量码结构和接收信号独立产生的新信息。
    3. 信息传递与交织: 第一个译码器产生的外信息被视为关于信息位的新的先验信息。这些先验信息经过交织器置换后,传递给第二个分量译码器。
    4. 译码器 2 运行: 第二个分量译码器接收来自信道的关于系统位(经过交织后)和第二个校验位的软信息,以及来自第一个译码器(经过交织)的外信息作为其先验信息。它同样计算出关于信息位的后验信息,并从中减去先验信息,得到自己的外信息。
    5. 信息传递与解交织: 第二个译码器产生的外信息经过解交织器恢复原始顺序后,传递给第一个分量译码器,作为下一轮迭代的先验信息。
    6. 迭代: 重复步骤 2-5 多次(通常 10-20 次)。在每次迭代中,两个译码器都利用来自对方的更可靠的外信息来改进自己的估计。
    7. 最终判决: 在达到预设的迭代次数或满足某个停止条件后,最后一个译码器(通常是第二个)输出的后验信息被用于进行硬判决(Hard Decision),恢复出最终的估计信息序列。

    迭代译码的关键在于“软”信息的交换和“外信息”的概念。每个译码器不仅输出对信息位的硬判决,更重要的是输出关于信息位可靠性的软信息。外信息确保了传递给对方的是“新”的信息,避免了信息在循环中被重复利用而导致的性能下降或收敛问题。随着迭代次数的增加,关于信息位的软信息会越来越可靠,最终使得译码性能逼近香农限。

    9.5 分量译码器(Component Decoders):MAP(Maximum A Posteriori)与 SOVA(Soft-Output Viterbi Algorithm)

    迭代译码要求分量译码器能够接收软输入并产生软输出(SISO)。最常用的两种 SISO 译码算法是 MAP 算法和 SOVA 算法。

    9.5.1 MAP(Maximum A Posteriori)译码

    MAP 译码算法的目标是计算每个信息比特 \( u_k \) 的后验概率(A Posteriori Probability),即在接收到整个序列 \( \mathbf{y} \) 的情况下, \( u_k \) 取某个特定值(例如 0 或 1)的概率 \( P(u_k | \mathbf{y}) \)。通常,在迭代译码中,我们更关心的是对数似然比(Log-Likelihood Ratio, LLR):
    \[ L(u_k) = \log \frac{P(u_k=1 | \mathbf{y})}{P(u_k=0 | \mathbf{y})} \]
    这个 LLR 的符号表示最可能的比特值(正表示 1,负表示 0),其绝对值表示估计的可靠性(绝对值越大越可靠)。

    对于卷积码,计算 MAP LLR 的标准算法是 BCJR 算法,以其发明者 Bahl, Cocke, Jelinek, 和 Raviv 命名。BCJR 算法是一种前向-后向(Forward-Backward)算法,它在码的网格图(Trellis Diagram)上进行计算。

    BCJR 算法的核心思想是:要计算 \( L(u_k) \),需要考虑所有通过网格图上时刻 \( k-1 \) 和时刻 \( k \) 之间对应于 \( u_k \) 的那条边的路径。每条路径都对应一个可能的发送序列,其概率可以通过接收序列和信道模型计算。BCJR 算法通过递归地计算“前向概率”(Alpha)和“后向概率”(Beta)来高效地计算所有相关路径的概率贡献。

    ① 前向概率 \( \alpha_k(s) \):表示在时刻 \( k \) 处于状态 \( s \),并且接收到前 \( k \) 个符号 \( \mathbf{y}_1^k \) 的概率密度(或概率)。
    ② 后向概率 \( \beta_k(s) \):表示在时刻 \( k \) 处于状态 \( s \),并且接收到后 \( N-k \) 个符号 \( \mathbf{y}_{k+1}^N \) 的概率密度(或概率)。
    ③ 分支概率 \( \gamma_k(s', s) \):表示从时刻 \( k-1 \) 的状态 \( s' \) 转移到时刻 \( k \) 的状态 \( s \),并且接收到时刻 \( k \) 的符号 \( \mathbf{y}_k \) 的概率密度(或概率)。这取决于输入比特 \( u_k \) 和对应的编码输出。

    利用 \( \alpha \)、\( \beta \) 和 \( \gamma \),可以计算通过特定分支(对应于某个 \( u_k \) 值)的所有路径的概率,进而计算出 \( P(u_k | \mathbf{y}) \) 或其 LLR。

    BCJR 算法计算的 LLR 是真正的 MAP LLR,它提供了关于每个信息比特最准确的软信息。因此,基于 BCJR 算法的分量译码器通常能使 Turbo 码达到最好的性能。然而,BCJR 算法的计算复杂度相对较高。

    9.5.2 SOVA(Soft-Output Viterbi Algorithm)

    SOVA 是对标准维特比算法(Viterbi Algorithm)的改进,使其能够产生软输出。标准维特比算法找到的是具有最大似然(Maximum Likelihood)的路径,即最可能的发送序列。它输出的是硬判决结果。

    SOVA 的基本思想是:在维特比算法寻找最优路径的同时,也记录下与最优路径“竞争”的次优路径的信息。对于每个信息比特 \( u_k \),SOVA 比较通过网格图上对应于 \( u_k=0 \) 的最优路径和对应于 \( u_k=1 \) 的最优路径的度量(Metric)。这两条路径在时刻 \( k \) 之前和之后可能与全局最优路径不同,但在时刻 \( k \) 处的分支选择是相反的。

    SOVA 计算的软输出(LLR)通常是这两条竞争路径的路径度量之差。这个差值反映了选择 \( u_k=0 \) 或 \( u_k=1 \) 的相对似然性。
    \[ L(u_k) \approx \frac{1}{2} \min_{\text{paths through } u_k=1} (\text{path metric}) - \frac{1}{2} \min_{\text{paths through } u_k=0} (\text{path metric}) \]
    (这里的具体公式取决于度量的定义,例如使用对数域或概率域)。

    SOVA 的优点是其计算复杂度低于 BCJR 算法,并且可以基于现有的维特比译码器进行修改。然而,SOVA 计算的软信息是近似的,不如 BCJR 算法准确。因此,使用 SOVA 作为分量译码器的 Turbo 码性能通常略逊于使用 BCJR 算法的 Turbo 码,尤其是在低信噪比(Signal-to-Noise Ratio, SNR)区域。但在许多实际应用中,SOVA 提供的性能和复杂度之间的权衡是可以接受的。

    9.6 外信息(Extrinsic Information)的交换

    在迭代译码过程中,分量译码器之间传递的信息被称为“外信息”(Extrinsic Information)。理解外信息的概念对于理解 Turbo 码的译码原理至关重要。

    每个 SISO 分量译码器接收三种类型的信息来计算关于信息比特 \( u_k \) 的后验 LLR \( L(u_k | \mathbf{y}) \):
    ① 来自信道的系统信息(Systematic Information):这是直接从接收到的系统位 \( y_k^s \) 中提取的关于 \( u_k \) 的软信息。对于 AWGN 信道,这通常与 \( y_k^s \) 的值成正比。
    ② 先验信息(A Priori Information):这是来自 另一个 分量译码器在前一轮迭代中计算出的关于 \( u_k \) 的软信息。在第一轮迭代中,先验信息通常被初始化为零(表示对 \( u_k \) 是 0 还是 1 没有先验偏好)。
    ③ 外信息(Extrinsic Information):这是当前分量译码器基于其分量码的结构、接收到的校验位信息以及来自信道的系统信息和先验信息,通过译码算法(如 BCJR 或 SOVA)“生成”的关于 \( u_k \) 的新信息。

    后验 LLR 可以分解为这三部分之和(在对数域):
    \[ L(u_k | \mathbf{y}) = L(u_k | y_k^s) + L_{a,i}(u_k) + L_{e,i}(u_k) \]
    其中,\( L(u_k | y_k^s) \) 是来自信道的系统信息 LLR,\( L_{a,i}(u_k) \) 是第 \( i \) 轮迭代中输入到当前译码器的先验信息 LLR,\( L_{e,i}(u_k) \) 是当前译码器在第 \( i \) 轮迭代中计算出的外信息 LLR。

    传递给 下一个 分量译码器(或下一轮迭代中传递给 另一个 译码器)的,正是这个外信息 \( L_{e,i}(u_k) \)。
    \[ L_{e,i}(u_k) = L(u_k | \mathbf{y}) - L(u_k | y_k^s) - L_{a,i}(u_k) \]
    (注意:在某些实现中,系统信息 \( L(u_k | y_k^s) \) 可能被包含在先验信息或外信息中,但核心思想是传递“新”生成的信息)。

    为什么只传递外信息?
    如果一个译码器将其计算出的整个后验 LLR 传递给另一个译码器,那么这个后验 LLR 中包含了它自己接收到的先验信息。当这个信息被传递给另一个译码器,再经过处理后又传回来时,原始的先验信息就被重复利用了。这会导致信息在迭代过程中被过度加权,使得译码器对自己的估计过于自信,可能导致收敛到错误的判决结果,或者在“瀑布区”(Waterfall Region)之后出现性能平台(Error Floor)。

    通过只传递外信息,每个译码器都只向对方提供它基于自己的分量码结构和接收到的校验位信息所产生的“独立”见解。这些独立见解作为对方的先验信息,帮助对方在下一轮迭代中做出更准确的估计。这种信息交换方式确保了迭代过程的有效性和稳定性,使得 Turbo 码能够在低信噪比下获得优异的性能。

    迭代译码过程可以看作是一个消息传递(Message Passing)过程,在由两个分量码和交织器构成的图上进行。随着迭代的进行,关于信息位的软信息在两个译码器之间来回传递,可靠性不断增强,直到达到收敛或最大迭代次数。

    Turbo 码的出现极大地推动了编码理论和实践的发展,开启了“迭代译码”和“图码”(Codes on Graphs)研究的新篇章,并直接催生了 LDPC 码的复兴和广泛应用。

    10. chapter 10:现代编码理论 II:LDPC 码(Low-Density Parity-Check Codes)

    欢迎来到本书关于现代编码理论的第二部分。在上一章中,我们深入探讨了 Turbo 码(Turbo Codes),了解了它们如何通过并行级联和迭代译码逼近香农限(Shannon Limit)。本章,我们将聚焦于另一种同样具有强大性能的现代编码技术——低密度奇偶校验码(Low-Density Parity-Check Codes),简称 LDPC 码。LDPC 码与 Turbo 码一起,是当前通信和数据存储领域最前沿、应用最广泛的纠错编码技术之一。

    10.1 LDPC 码的起源与定义

    LDPC 码并非一项全新的发明。它们最早由 Robert G. Gallager 在其 1960 年的博士论文中提出。然而,由于当时计算能力的限制,实现 LDPC 码的有效译码算法非常困难,因此在随后的几十年里,LDPC 码并未受到广泛关注,甚至一度被遗忘。直到 1990 年代中期,随着计算机技术的飞速发展以及迭代译码思想的重新兴起(部分得益于 Turbo 码的研究),LDPC 码才被重新发现并证明其强大的性能。David J. C. MacKay 等人对 LDPC 码进行了深入研究,并展示了它们在逼近香农限方面的潜力。

    那么,什么是 LDPC 码呢?从定义上看,LDPC 码是一类线性分组码(Linear Block Codes),其核心特征在于它们的奇偶校验矩阵(Parity-Check Matrix)\(H\) 是一个低密度的矩阵。所谓“低密度”,是指矩阵中非零元素的数量相对于矩阵的总元素数量来说非常少。对于一个 \(m \times n\) 的奇偶校验矩阵 \(H\),其中 \(m\) 是校验方程的数量(或冗余位的数量),\(n\) 是码字长度,如果 \(n\) 很大,那么 \(H\) 中绝大多数元素都是零。

    形式上,一个 \( (n, k) \) 的 LDPC 码是一个 \(k\) 维的线性子空间,它是 \(GF(q)^n\) 空间中所有满足 \(H \mathbf{c}^T = \mathbf{0}^T\) 的向量 \(\mathbf{c}\) 的集合,其中 \(H\) 是一个 \(m \times n\) 的低密度矩阵,且 \(m = n-k\)。这里的 \(GF(q)\) 通常是二元域 \(GF(2)\),即码字元素和矩阵元素都是 0 或 1,运算是模 2 加法。

    低密度特性是 LDPC 码的关键。它带来了两个主要优势:
    ① 编码和译码算法可以基于图结构实现,且计算复杂度相对较低。
    ② 迭代译码算法在低密度矩阵上表现出色,能够逼近信道容量。

    与传统的线性分组码(如汉明码(Hamming Codes)、BCH 码(Bose-Chaudhuri-Hocquenghem Codes)、RS 码(Reed-Solomon Codes))相比,LDPC 码通常具有更大的码长,并且其性能随着码长的增加而提升,能够更接近香农限。

    10.2 校验矩阵(Parity-Check Matrix)与 Tanner 图(Tanner Graph)

    理解 LDPC 码的关键在于其低密度的校验矩阵 \(H\) 以及与之对应的图表示——Tanner 图。

    一个 \(m \times n\) 的校验矩阵 \(H\) 定义了 \(m\) 个线性方程,每个方程都约束了码字 \(\mathbf{c} = (c_1, c_2, \dots, c_n)\) 中的某些位。对于二元 LDPC 码,这些方程是模 2 加法:
    \[ \sum_{j=1}^n H_{ij} c_j = 0 \pmod 2, \quad \text{for } i = 1, \dots, m \]
    低密度意味着 \(H\) 的每一行(对应一个校验方程)和每一列(对应一个码字位)中非零元素的数量都很少。如果 \(H\) 的每一列的非零元素个数固定为 \(d_v\),每一行的非零元素个数固定为 \(d_c\),则称该 LDPC 码是正则(Regular)的。如果 \(d_v\) 和 \(d_c\) 不固定,则称其为非正则(Irregular)的。研究表明,非正则 LDPC 码在某些情况下可以获得比正则 LDPC 码更好的性能。

    Tanner 图是一种二部图(Bipartite Graph),它提供了一种直观的方式来表示校验矩阵 \(H\) 以及码字位和校验方程之间的关系。Tanner 图包含两类节点:
    ① 变量节点(Variable Nodes):对应于码字向量 \(\mathbf{c}\) 的 \(n\) 个分量 \(c_1, c_2, \dots, c_n\)。通常用圆圈表示。
    ② 校验节点(Check Nodes):对应于校验矩阵 \(H\) 的 \(m\) 个行,即 \(m\) 个校验方程。通常用方块表示。

    在 Tanner 图中,变量节点 \(v_j\) 与校验节点 \(u_i\) 之间存在一条边,当且仅当校验矩阵 \(H\) 中的元素 \(H_{ij} = 1\)。

    例如,考虑一个 \(H\) 矩阵:
    \[ H = \begin{pmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 1 \end{pmatrix} \]
    这是一个 \(5 \times 6\) 的矩阵,对应一个 \( (6, 1) \) 的码(因为 \(n=6, m=5\),秩可能小于 5)。它的 Tanner 图将有 6 个变量节点 \(v_1, \dots, v_6\) 和 5 个校验节点 \(u_1, \dots, u_5\)。边连接如下:
    ⚝ \(v_1\) 连接 \(u_1, u_3\)
    ⚝ \(v_2\) 连接 \(u_1, u_4\)
    ⚝ \(v_3\) 连接 \(u_1, u_5\)
    ⚝ \(v_4\) 连接 \(u_2, u_3\)
    ⚝ \(v_5\) 连接 \(u_2, u_4\)
    ⚝ \(v_6\) 连接 \(u_2, u_5\)

    这个 \(H\) 矩阵是低密度的,因为非零元素很少。Tanner 图的结构直接反映了 \(H\) 的稀疏性。变量节点的度(Degree)对应于 \(H\) 矩阵列的权重(Weight),校验节点的度对应于 \(H\) 矩阵行的权重。低密度意味着图中节点的度都很低。

    Tanner 图不仅是表示 LDPC 码的一种方式,更是设计和分析其译码算法(特别是迭代译码算法)的基础。图中的边表示信息传递的路径,节点执行信息处理。

    10.3 LDPC 码的编码

    LDPC 码的编码过程是将 \(k\) 个信息位(Information Bits)映射为 \(n\) 个码字位(Codeword Bits)。对于一个线性分组码,这通常通过生成矩阵 \(G\) 来实现:\(\mathbf{c} = \mathbf{u} G\),其中 \(\mathbf{u}\) 是 \(1 \times k\) 的信息向量,\(G\) 是 \(k \times n\) 的生成矩阵。生成矩阵 \(G\) 与校验矩阵 \(H\) 满足 \(G H^T = \mathbf{0}\)。

    理论上,可以通过对 \(H\) 矩阵进行行变换和列变换,将其转换为系统形式(Systematic Form):
    \[ H = \begin{pmatrix} P & I_{n-k} \end{pmatrix} \]
    其中 \(I_{n-k}\) 是 \( (n-k) \times (n-k) \) 的单位矩阵,\(P\) 是 \( (n-k) \times k \) 的矩阵。在这种系统形式下,对应的生成矩阵为:
    \[ G = \begin{pmatrix} I_k & P^T \end{pmatrix} \]
    此时,编码过程变得简单:信息位 \(\mathbf{u}\) 直接构成码字的前 \(k\) 位,而校验位由 \(\mathbf{p} = \mathbf{u} P^T\) 计算得出,码字为 \(\mathbf{c} = (\mathbf{u} | \mathbf{p})\)。

    然而,对于一般的低密度校验矩阵 \(H\),将其转换为系统形式可能非常复杂,甚至可能破坏其低密度特性。因此,对于大型的非正则 LDPC 码,直接使用 \(G\) 矩阵进行编码可能效率不高。

    实际中,LDPC 码的编码通常采用基于 \(H\) 矩阵的方法。一种常见的方法是利用 \(H\) 的稀疏性,通过求解线性方程组来进行编码。如果 \(H\) 可以通过列置换和行变换转换为以下形式:
    \[ H = \begin{pmatrix} A & B \\ C & D \end{pmatrix} \]
    其中 \(B\) 是一个可逆矩阵,那么可以将信息位和校验位进行划分,并通过求解涉及 \(B^{-1}\) 的方程来计算校验位。为了保持低密度,通常会寻找一种特殊的 \(H\) 矩阵结构,使得编码过程简化。例如,准循环 LDPC (Quasi-Cyclic LDPC, QC-LDPC) 码具有循环移位矩阵块构成的结构,可以利用快速傅里叶变换(FFT)等技术实现高效编码。

    总的来说,LDPC 码的编码不像其译码那样具有统一的、基于图的通用算法。编码的效率和复杂度很大程度上取决于 LDPC 码的构造方式和 \(H\) 矩阵的结构。

    10.4 LDPC 码的译码算法

    LDPC 码的强大性能主要体现在其译码算法上。与许多经典码的代数译码不同,LDPC 码通常采用迭代译码算法,特别是基于图模型的置信传播(Belief Propagation, BP)算法或其变种。这些算法利用了 Tanner 图的结构,在变量节点和校验节点之间传递“软信息”(Soft Information),通过多次迭代来逼近最大后验概率(Maximum A Posteriori, MAP)译码性能。

    迭代译码的核心思想是在图上进行消息传递。变量节点接收来自信道的观测值(通常是软信息,如对数似然比 LLR),并从连接的校验节点接收消息。校验节点接收来自连接的变量节点的消息。节点根据接收到的消息和自身信息更新其对相应码字位的“置信度”(Belief),并将更新后的消息发送给其他连接的节点。这个过程反复进行,直到满足某个停止条件(例如,计算出的码字满足所有校验方程,或者达到最大迭代次数)。

    10.4.1 置信传播(Belief Propagation, BP)算法

    置信传播(BP)算法,也称为和积算法(Sum-Product Algorithm, SPA),是一种在图模型上进行概率推断的通用算法。对于 LDPC 码的 Tanner 图,BP 算法的目标是计算每个码字位 \(c_j\) 的后验概率 \(P(c_j | \mathbf{y})\),其中 \(\mathbf{y}\) 是接收到的信号向量。

    BP 算法在 Tanner 图上进行迭代的消息传递。主要有两种类型的消息:
    ① 从变量节点到校验节点的消息:表示变量节点根据信道观测值和从其他校验节点收到的消息,对该变量取某个值的“信念”。
    ② 从校验节点到变量节点的消息:表示校验节点根据连接的变量节点发来的消息,对该变量取某个值需要满足校验方程的“约束”。

    在每次迭代中,节点根据收到的消息更新并发送新的消息。消息通常以对数似然比(LLR)的形式表示,这简化了乘法运算(在对数域变为加法)。

    BP 算法的理论基础是,如果在对应的图(这里是 Tanner 图)中没有环(Cycles),那么 BP 算法可以在有限次迭代内收敛到精确的后验概率。然而,LDPC 码的 Tanner 图通常包含环。环的存在使得消息传递过程中信息会循环,可能导致算法无法收敛到精确的后验概率,但实践证明,对于具有大周长(Girth,图中最小环的长度)的 LDPC 码,BP 算法的性能非常接近最优的 MAP 译码。

    10.4.2 和积算法(Sum-Product Algorithm, SPA)

    和积算法(SPA)是 BP 算法在 LDPC 码译码中的具体实现。它在 Tanner 图上进行软信息的传递和更新。消息通常表示为 LLR。

    设 \(L(c_j)\) 是信道提供的关于码字位 \(c_j\) 的初始 LLR。
    设 \(L_{u_i \to v_j}\) 是从校验节点 \(u_i\) 发送给变量节点 \(v_j\) 的 LLR 消息。
    设 \(L_{v_j \to u_i}\) 是从变量节点 \(v_j\) 发送给校验节点 \(u_i\) 的 LLR 消息。

    迭代过程如下:

    初始化:
    对于连接到校验节点 \(u_i\) 的每个变量节点 \(v_j\),初始化从 \(u_i\) 到 \(v_j\) 的消息为 0:
    \(L_{u_i \to v_j}^{(0)} = 0\)

    迭代(重复进行直到收敛或达到最大迭代次数):

    变量节点更新(Variable Node Update):
    每个变量节点 \(v_j\) 根据信道 LLR \(L(c_j)\) 和从所有连接的校验节点 \(u_i\) 收到的消息,计算发送给校验节点 \(u_k\) 的消息 \(L_{v_j \to u_k}\)。
    发送给 \(u_k\) 的消息是变量节点 \(v_j\) 的总信息减去从 \(u_k\) 收到的信息(这是为了避免信息在环中重复累积)。
    \[ L_{v_j \to u_k} = L(c_j) + \sum_{u_i \in N(v_j) \setminus \{u_k\}} L_{u_i \to v_j} \]
    其中 \(N(v_j)\) 是与变量节点 \(v_j\) 相连的校验节点集合。

    校验节点更新(Check Node Update):
    每个校验节点 \(u_i\) 根据从所有连接的变量节点 \(v_j\) 收到的消息,计算发送给变量节点 \(v_k\) 的消息 \(L_{u_i \to v_k}\)。
    校验节点执行一个“校验”操作。对于二元 LDPC 码,校验方程是模 2 加法。在 LLR 域,这个操作对应于一个非线性函数。
    发送给 \(v_k\) 的消息是校验节点 \(u_i\) 根据所有连接的变量节点(除了 \(v_k\))的信息计算出的对 \(v_k\) 的约束。
    \[ L_{u_i \to v_k} = \text{sign} \left( \prod_{v_j \in N(u_i) \setminus \{v_k\}} \text{sign}(L_{v_j \to u_i}) \right) \cdot \text{arctanh} \left( \prod_{v_j \in N(u_i) \setminus \{v_k\}} \text{tanh} \left( \frac{|L_{v_j \to u_i}|}{2} \right) \right) \]
    其中 \(N(u_i)\) 是与校验节点 \(u_i\) 相连的变量节点集合,\(\text{sign}(x)\) 是 \(x\) 的符号函数,\(\text{arctanh}(x) = \frac{1}{2} \ln \left( \frac{1+x}{1-x} \right)\)。
    这个复杂的公式可以近似简化,例如使用 Min-Sum 算法,牺牲少量性能换取计算复杂度降低。

    判决(Decision):
    在每次迭代结束时(或者在达到最大迭代次数后),每个变量节点 \(v_j\) 计算其最终的后验 LLR:
    \[ L(c_j | \mathbf{y}) = L(c_j) + \sum_{u_i \in N(v_j)} L_{u_i \to v_j} \]
    如果 \(L(c_j | \mathbf{y}) \ge 0\),则判决 \(\hat{c}_j = 0\),否则判决 \(\hat{c}_j = 1\)。
    将所有判决的 \(\hat{\mathbf{c}}\) 组成向量,检查是否满足 \(H \hat{\mathbf{c}}^T = \mathbf{0}^T\)。如果满足,则译码成功,停止迭代。否则,继续下一轮迭代,直到达到最大迭代次数。

    SPA 算法是一种软判决译码(Soft-Decision Decoding)算法,它利用了信道输出的软信息,因此性能优于硬判决译码。其迭代特性使得它能够有效地利用码字的全局约束信息。

    10.5 LDPC 码的构造方法

    LDPC 码的性能很大程度上取决于其校验矩阵 \(H\) 的结构,特别是对应的 Tanner 图的性质。好的 LDPC 码应该具有:
    ① 低密度:这是定义。
    ② 大周长:Tanner 图中的最小环长度应该尽可能大,以使 BP/SPA 算法更接近最优性能。
    ③ 良好的度分布(对于非正则码):变量节点和校验节点的度分布会影响译码阈值和“错误地板”(Error Floor)现象。

    LDPC 码的构造方法主要分为两大类:

    随机构造法(Random Construction):
    这是 Gallager 最初提出的方法。随机构造的 LDPC 码通常具有良好的性能,特别是对于非常大的码长,其性能可以非常接近香农限。构造方法通常是随机生成一个稀疏的 \(H\) 矩阵,满足每列和每行的非零元素个数要求(对于正则码)或度分布要求(对于非正则码)。
    ⚝ 优点:性能好,特别是对于大码长。
    ⚝ 缺点:编码和译码硬件实现可能比较复杂,难以保证特定的图结构(如大周长),可能存在错误地板问题。

    结构化构造法(Structured Construction):
    为了克服随机构造的缺点,人们提出了各种结构化的 LDPC 码构造方法。这些方法通过引入特定的代数或组合结构来生成 \(H\) 矩阵,从而简化编码和译码的实现,并可能保证一定的图性质。
    ⚝ 常见的结构化构造方法包括:
    ▮▮▮▮⚝ 阵列码(Array Codes): 基于二维阵列结构构造 \(H\) 矩阵。
    ▮▮▮▮⚝ 准循环 LDPC (QC-LDPC) 码(Quasi-Cyclic LDPC Codes): \(H\) 矩阵由循环移位矩阵块构成。QC-LDPC 码具有高效的编码算法,并且易于硬件实现,因此在实际应用中非常流行(例如在 4G/5G 通信标准中)。
    ▮▮▮▮⚝ 差集循环码(Difference Set Cyclic Codes): 利用差集理论构造循环 LDPC 码。
    ▮▮▮▮⚝ 基于图的构造(Graph-Based Construction): 直接构造具有良好性质的 Tanner 图,然后导出 \(H\) 矩阵。例如,利用有限几何(Finite Geometry)或组合设计(Combinatorial Designs)来构造具有大周长的图。

    结构化构造的 LDPC 码虽然性能可能略逊于最优的随机 LDPC 码,但其实现上的优势使其成为工业界的首选。例如,在 IEEE 802.11n/ac/ax (Wi-Fi)、DVB-S2 (卫星电视)、WiMAX (IEEE 802.16) 和 3GPP LTE/5G 等标准中,都采用了 QC-LDPC 码。

    错误地板(Error Floor)是 LDPC 码在低误码率区域(高信噪比)出现性能下降的现象,此时误码率曲线变得平坦,下降缓慢。这通常是由于 Tanner 图中存在特定的局部结构(如短环或“捕获集” Trapping Sets)导致的。结构化构造方法有时可以帮助避免或减轻错误地板问题。

    总而言之,LDPC 码凭借其逼近香农限的优异性能和基于图的迭代译码算法,成为了现代通信系统和数据存储领域的基石。对 LDPC 码的研究仍在继续,新的构造方法和译码算法不断涌现,以进一步提升性能和降低实现复杂度。

    11. chapter 11:高级译码技术与迭代译码原理(Advanced Decoding Techniques and Iterative Decoding Principles)

    欢迎来到本书的第十一章。在前几章中,我们已经系统地学习了多种经典的纠错编码技术,包括线性分组码、循环码、BCH 码、RS 码以及卷积码。我们也探讨了信道容量和香农信道编码定理,了解到在理论上存在能够以任意低的错误概率实现可靠通信的编码方案,前提是码率低于信道容量。然而,香农定理并没有告诉我们如何构造这样的码,也没有提供实用的译码算法。

    传统的硬判决译码方法,如线性分组码的伴随式译码或卷积码的硬判决维特比译码,虽然实现相对简单,但在噪声较大的信道环境下性能往往距离香农限有较大差距。这是因为硬判决译码在接收端直接将模拟信号量化为离散的符号(例如,将电压高于某个阈值的判为 1,低于的判为 0),在这个过程中丢失了宝贵的关于接收信号可靠性的信息。

    进入 20 世纪 90 年代,随着 Turbo 码和 LDPC 码的出现,以及迭代译码(Iterative Decoding)技术的兴起,我们看到了逼近香农限的实际编码方案和高效译码算法。这些现代编码技术和译码方法是当前通信系统(如 4G、5G、Wi-Fi 等)和数据存储系统(如固态硬盘)中不可或缺的核心技术。

    本章将深入探讨这些高级译码技术背后的原理。我们将首先讨论软判决译码(Soft-Decision Decoding)的优势,理解为什么保留接收信号的可靠性信息至关重要。接着,我们将介绍最大后验概率(Maximum A Posteriori, MAP)译码,这是一种在理论上最优的软判决译码准则。然后,我们将阐述迭代译码的通用框架,揭示 Turbo 码和 LDPC 码等现代码如何通过迭代过程逼近最优性能。最后,我们将引入图模型(Graphical Models),特别是因子图(Factor Graphs),作为理解和分析迭代译码算法的强大工具。

    通过本章的学习,您将能够:
    ⚝ 理解软判决信息在译码中的价值。
    ⚝ 掌握 MAP 译码的基本原理。
    ⚝ 理解迭代译码的核心思想和通用结构。
    ⚝ 学习如何使用图模型来表示编码和译码过程。
    ⚝ 为理解 Turbo 码和 LDPC 码的译码算法打下坚实基础。

    让我们开始探索这些强大的高级译码技术吧!🚀

    11.1 软判决译码(Soft-Decision Decoding)的优势

    在数字通信系统中,信息通常以二进制符号(0 或 1)的形式传输。然而,在经过物理信道时,由于噪声、干扰等因素的影响,发送的信号会发生畸变。接收端接收到的是带有噪声的模拟信号。

    传统的硬判决(Hard-Decision)译码方法在接收到模拟信号后,会立即对其进行判决(例如,与一个阈值进行比较),将其量化为最可能的二进制符号(0 或 1)。例如,在一个二元对称信道(Binary Symmetric Channel, BSC)模型中,我们只关心接收到的符号是否与发送的符号相同,而忽略了接收信号的强度信息。

    考虑一个简单的例子:发送端发送一个代表 0 的信号 \(s_0\) 和一个代表 1 的信号 \(s_1\)。在加性高斯白噪声(AWGN)信道中,接收到的信号 \(r\) 可以表示为 \(r = s_i + n\),其中 \(n\) 是高斯噪声。如果采用硬判决,接收端会设置一个阈值(例如,对于 BPSK 调制,阈值可能是 \((s_0 + s_1)/2\)),如果 \(r\) 大于阈值,则判决为 1;如果小于阈值,则判决为 0。

    硬判决的问题在于,它丢弃了接收信号的“可靠性”信息。例如,一个接收到的信号 \(r_1\) 距离判决阈值非常远,被判决为 0,我们对这个判决非常有信心;而另一个接收到的信号 \(r_2\) 距离判决阈值非常近,也被判决为 0,但我们对这个判决的信心较低,它很有可能是由于噪声导致的一个错误判决。硬判决译码器无法区分这两种情况,它只知道接收到了一个“硬”的 0。

    软判决(Soft-Decision)译码则保留了这种可靠性信息。接收端不直接将模拟信号量化为硬符号,而是输出一个表示该符号是 0 或 1 的“概率”或“似然度”。例如,对于 AWGN 信道,接收到的信号 \(r\) 可以提供关于发送符号 \(x \in \{0, 1\}\) 的条件概率密度函数 \(p(r|x)\)。软判决译码器会利用这些概率信息进行译码。

    常用的软信息表示方式包括:
    ① 对数似然比(Log-Likelihood Ratio, LLR):对于一个二元符号 \(x\),其 LLR 定义为 \(L(x) = \ln \frac{P(x=0|r)}{P(x=1|r)}\)。正的 LLR 值表示更倾向于 0,负的 LLR 值表示更倾向于 1,LLR 的绝对值越大表示可靠性越高。
    ② 接收到的模拟值本身(例如,AWGN 信道中的 \(r\))。

    软判决译码的优势在于:
    更高的译码增益(Coding Gain):利用可靠性信息可以更准确地判断哪些接收符号更可能是错误的,从而在译码过程中做出更明智的决策。研究表明,相比于硬判决译码,软判决译码通常可以带来 2-3 dB 的编码增益,这意味着在相同的误码率(Bit Error Rate, BER)下,软判决译码所需的信噪比(Signal-to-Noise Ratio, SNR)可以降低 2-3 dB。这对于无线通信等对功率效率要求高的系统至关重要。
    更接近香农限:现代的逼近香农限的编码方案(如 Turbo 码和 LDPC 码)都依赖于软判决译码和迭代处理。软信息在迭代过程中不断更新和传递,使得译码器能够从接收信号中提取更多的信息。

    例如,考虑一个简单的重复码(Repetition Code),将信息位 \(m\) 重复三次发送,得到码字 \((m, m, m)\)。假设发送 0 对应信号 -1,发送 1 对应信号 +1,AWGN 信道。
    如果发送 0,码字是 \((-1, -1, -1)\)。接收到 \((r_1, r_2, r_3)\)。
    硬判决:如果 \(r_i > 0\) 判为 1,\(r_i < 0\) 判为 0。如果接收到 (0, 1, 0),多数判决为 0。
    软判决:计算每个接收值的 LLR。例如,对于 AWGN 信道,发送 \(x \in \{-1, +1\}\),接收 \(r = x + n\),噪声方差为 \(\sigma^2\)。接收到 \(r_i\) 时,发送 \(x_i\) 的 LLR 为 \(L(x_i) = \ln \frac{p(r_i|x_i=-1)}{p(r_i|x_i=+1)} = \ln \frac{\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(r_i - (-1))^2}{2\sigma^2}}}{\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(r_i - 1)^2}{2\sigma^2}}} = \frac{(r_i - 1)^2 - (r_i + 1)^2}{2\sigma^2} = \frac{r_i^2 - 2r_i + 1 - (r_i^2 + 2r_i + 1)}{2\sigma^2} = \frac{-4r_i}{2\sigma^2} = -\frac{2r_i}{\sigma^2}\)。
    对于重复码,三个接收值的 LLR 可以简单相加:\(L(m) = L(x_1) + L(x_2) + L(x_3) = -\frac{2}{\sigma^2}(r_1 + r_2 + r_3)\)。如果 \(L(m) > 0\),判决为 0;如果 \(L(m) < 0\),判决为 1。这相当于对接收到的模拟值进行求和再判决,这正是 AWGN 信道下重复码的最优译码方法。这个简单的例子说明了利用软信息可以实现更优的译码性能。

    因此,软判决译码是现代纠错编码技术的基础,它通过保留和利用接收信号的可靠性信息,显著提高了通信系统的性能。

    11.2 最大后验概率(MAP)译码

    在软判决译码的框架下,一个重要的译码准则是最大后验概率(Maximum A Posteriori, MAP)准则。MAP 译码的目标是找到最有可能在发送端发送的信息序列(或码字)。

    假设发送了一个信息序列 \(\mathbf{m}\),它被编码成码字 \(\mathbf{c}\)。在信道传输后,接收端收到一个序列 \(\mathbf{r}\)。MAP 译码器试图找到那个信息序列 \(\hat{\mathbf{m}}\)(或对应的码字 \(\hat{\mathbf{c}}\)),使得在接收到 \(\mathbf{r}\) 的条件下,发送 \(\hat{\mathbf{m}}\) 的后验概率(Posterior Probability)最大。

    数学上,MAP 译码准则可以表示为:
    \[ \hat{\mathbf{m}} = \arg \max_{\mathbf{m}} P(\mathbf{m}|\mathbf{r}) \]
    根据贝叶斯定理,后验概率 \(P(\mathbf{m}|\mathbf{r})\) 可以写成:
    \[ P(\mathbf{m}|\mathbf{r}) = \frac{P(\mathbf{r}|\mathbf{m}) P(\mathbf{m})}{P(\mathbf{r})} \]
    由于 \(P(\mathbf{r})\) 对于所有的 \(\mathbf{m}\) 都是常数,并且通常假设所有信息序列 \(\mathbf{m}\) 是等概率的(即 \(P(\mathbf{m})\) 是常数),所以最大化 \(P(\mathbf{m}|\mathbf{r})\) 等价于最大化 \(P(\mathbf{r}|\mathbf{m})\)。
    \[ \hat{\mathbf{m}} = \arg \max_{\mathbf{m}} P(\mathbf{r}|\mathbf{m}) \]
    最大化 \(P(\mathbf{r}|\mathbf{m})\) 的准则被称为最大似然(Maximum Likelihood, ML)译码。如果信息序列不是等概率的,那么 MAP 译码和 ML 译码是不同的。在大多数编码理论的讨论中,我们通常假设信息是等概率的,此时 MAP 译码和 ML 译码是等价的。

    对于离散无记忆信道(DMC),接收序列 \(\mathbf{r} = (r_1, r_2, \dots, r_n)\) 的概率取决于发送码字 \(\mathbf{c} = (c_1, c_2, \dots, c_n)\) 的每个符号,且各符号之间相互独立。因此,
    \[ P(\mathbf{r}|\mathbf{c}) = \prod_{i=1}^n P(r_i|c_i) \]
    其中 \(P(r_i|c_i)\) 是信道的转移概率(Channel Transition Probability)。对于 AWGN 信道,如果发送符号 \(c_i\) 对应信号 \(s(c_i)\),接收到 \(r_i\),则 \(P(r_i|c_i)\) 正比于 \(e^{-\frac{(r_i - s(c_i))^2}{2\sigma^2}}\)。最大化 \(P(\mathbf{r}|\mathbf{c})\) 等价于最小化 \(\sum_{i=1}^n (r_i - s(c_i))^2\),这对应于最小化欧氏距离(Euclidean Distance)。

    MAP 译码可以应用于整个码字或信息序列,也可以应用于单个信息位或码字位。
    码字 MAP 译码:找到整个码字 \(\hat{\mathbf{c}}\) 使得 \(P(\hat{\mathbf{c}}|\mathbf{r})\) 最大。这与 ML 译码等价(假设码字等概率),目标是最小化码字错误率(Codeword Error Rate, CER)。
    符号 MAP 译码:对于码字中的每一个符号 \(c_i\)(或信息序列中的每一个信息位 \(m_j\)),找到最可能的取值。例如,对于 \(c_i\),找到 \(\hat{c}_i\) 使得 \(P(c_i=\hat{c}_i|\mathbf{r})\) 最大。目标是最小化符号错误率(Symbol Error Rate, SER)或误码率(Bit Error Rate, BER)。

    在许多应用中,我们更关心误码率(BER),因此符号 MAP 译码更为重要。符号 MAP 译码的目标是对于每一个信息位 \(m_j\),计算其后验概率 \(P(m_j=0|\mathbf{r})\) 和 \(P(m_j=1|\mathbf{r})\),然后选择概率较大的那个作为译码结果。

    对于卷积码等具有网格图(Trellis Diagram)结构的码,可以利用动态规划(Dynamic Programming)的思想来实现符号 MAP 译码。著名的 BCJR 算法(由 Bahl, Cocke, Jelinek, Raviv 于 1974 年提出)就是一种计算符号后验概率的有效算法。BCJR 算法通过前向递归(Forward Recursion)和后向递归(Backward Recursion)计算在给定接收序列 \(\mathbf{r}\) 下,通过网格图某条边(对应一个码字符号)或某个状态(对应编码器的内部状态)的概率,进而计算出每个信息位或码字位的后验概率。

    BCJR 算法的输出是每个信息位(或码字位)的对数后验概率比(Log-Posterior Probability Ratio, LPR),也称为软输出(Soft Output)。对于二元信息位 \(m_j\),其 LPR 为:
    \[ L(m_j) = \ln \frac{P(m_j=0|\mathbf{r})}{P(m_j=1|\mathbf{r})} \]
    这个 LPR 值包含了关于 \(m_j\) 的软信息。正值表示更倾向于 0,负值表示更倾向于 1,绝对值表示可靠性。当 \(L(m_j) > 0\) 时,判决 \(\hat{m}_j = 0\);当 \(L(m_j) < 0\) 时,判决 \(\hat{m}_j = 1\)。当 \(L(m_j) = 0\) 时,可以任意判决。

    BCJR 算法的计算复杂度与网格图的状态数呈指数关系,与码字长度呈线性关系。对于状态数较多的码,BCJR 算法的复杂度可能很高。然而,对于卷积码等具有合理状态数的码,BCJR 算法是可行的。

    除了 MAP 译码,还有最大似然序列(Maximum Likelihood Sequence, MLS)译码,其目标是找到整个信息序列 \(\hat{\mathbf{m}}\) 使得 \(P(\mathbf{r}|\mathbf{m})\) 最大。对于卷积码,维特比(Viterbi)算法就是一种实现 MLS 译码的有效算法。维特比算法通过在网格图上寻找具有最大累积概率(或最小路径度量)的路径来实现。维特比算法通常输出硬判决结果,但也可以修改为输出软信息(例如,Soft-Output Viterbi Algorithm, SOVA),尽管 SOVA 输出的软信息不如 BCJR 算法精确。

    总结来说,MAP 译码是一种最优的软判决译码准则,旨在最小化符号错误率。BCJR 算法是实现 MAP 译码的一种经典方法,尤其适用于具有网格图结构的码,其输出的软信息对于后续的迭代译码至关重要。

    11.3 迭代译码的通用框架

    迭代译码(Iterative Decoding)是现代编码技术(如 Turbo 码和 LDPC 码)能够逼近香农限的关键技术之一。其核心思想是将一个复杂的译码问题分解为多个简单的子问题,并通过在这些子问题之间反复交换软信息来逐步提高译码的可靠性。

    迭代译码通常应用于由多个相对简单的分量码(Component Codes)组合而成的码,或者可以被表示为图结构的码。最典型的例子是 Turbo 码(由并行级联卷积码构成)和 LDPC 码(由稀疏校验矩阵定义的线性码)。

    迭代译码的通用框架可以描述如下:
    分量译码器(Component Decoders):整个译码器由多个分量译码器组成,每个分量译码器负责对码的某一部分或某个分量码进行译码。这些分量译码器通常是软输入软输出(Soft-Input Soft-Output, SISO)模块,它们接收软信息作为输入,并输出更新后的软信息。
    信息交换(Information Exchange):分量译码器之间通过一个“消息传递”机制交换软信息。这种软信息通常是关于某个信息位或码字位的对数似然比(LLR)。
    外信息(Extrinsic Information):在迭代译码中,一个关键概念是外信息。当一个分量译码器处理输入信息并产生输出信息时,它必须确保输出信息中不包含其输入信息中已有的成分。输出信息中“新产生”的、关于某个变量的软信息被称为外信息。外信息是驱动迭代过程收敛的关键,因为它提供了其他分量译码器尚未利用的独立信息。
    迭代过程(Iteration Process):译码过程是迭代进行的。在每次迭代中,分量译码器接收来自信道(第一次迭代)或其他分量译码器的软信息,进行处理,计算并输出新的外信息。这些外信息被传递给其他分量译码器作为输入,用于下一轮的译码。这个过程反复进行,直到满足某个停止准则(例如,译码结果形成一个合法的码字,或者达到预设的最大迭代次数)。

    以 Turbo 码为例,它通常由两个并行级联的递归系统卷积码(Recursive Systematic Convolutional, RSC)分量译码器组成,中间通过一个交织器(Interleaver)连接。
    ▮▮▮▮⚝ 第一次迭代:第一个分量译码器(Decoder 1)接收来自信道的原始软信息,对其进行处理(例如,使用 BCJR 算法),计算并输出关于信息位的软信息。这些软信息被分成两部分:一部分是根据信道信息计算的先验信息,另一部分是根据编码约束计算的外信息。
    ▮▮▮▮⚝ 信息传递:Decoder 1 输出的外信息经过交织器重新排列后,作为第二个分量译码器(Decoder 2)的输入。
    ▮▮▮▮⚝ 第二次迭代:Decoder 2 接收经过交织的外信息和来自信道的原始软信息(也经过相应的交织),进行处理,计算并输出其关于信息位的外信息。
    ▮▮▮▮⚝ 信息传递:Decoder 2 输出的外信息经过解交织器恢复原始顺序后,作为 Decoder 1 在下一轮迭代中的先验信息输入。
    ▮▮▮▮⚝ 后续迭代:这个过程反复进行。Decoder 1 和 Decoder 2 轮流接收来自信道和对方的外信息,计算并输出新的外信息。在每次迭代中,关于信息位的软信息会越来越可靠。
    ▮▮▮▮⚝ 最终判决:在最后一次迭代后,通常由其中一个分量译码器(或一个额外的模块)根据累积的软信息进行硬判决,输出最终的译码结果。

    LDPC 码的迭代译码通常基于其校验矩阵或 Tanner 图,采用消息传递算法,如置信传播(Belief Propagation, BP)或和积算法(Sum-Product Algorithm, SPA)。在这种框架下,消息在图的变量节点(Variable Nodes)和校验节点(Check Nodes)之间传递。变量节点接收来自信道和校验节点的消息,更新关于对应码字位的后验概率信息,并将外信息发送给连接的校验节点。校验节点接收来自变量节点的消息,根据校验方程的约束更新信息,并将外信息发送给连接的变量节点。这个过程也是迭代进行的。

    迭代译码的性能分析通常比较复杂,因为它涉及非线性的迭代过程。然而,对于某些码(如 LDPC 码),在图结构是“无环”的假设下,消息传递算法可以达到 MAP 译码的性能。在实际应用中,码图通常存在短环,这会导致消息传递算法的性能有所下降,但通过精心设计码的结构,可以使短环的影响最小化。

    迭代译码的收敛性是一个重要的研究课题。迭代过程并不总是保证收敛到最优解,有时可能会陷入局部最优。然而,在较高的信噪比下,迭代译码通常能够快速收敛到正确的码字。在较低的信噪比下,可能会出现收敛失败的情况,导致译码错误。

    总而言之,迭代译码是一种强大的译码范式,它通过分解问题和反复交换软信息,使得对复杂码的译码变得可行且高效,是现代通信系统实现高性能的关键技术。

    11.4 图模型(Graphical Models)与因子图(Factor Graphs)

    图模型(Graphical Models)是一种利用图来表示变量之间概率依赖关系的数学框架。在编码理论和信息处理领域,图模型被广泛用于表示码的结构以及描述基于消息传递的译码算法。其中,因子图(Factor Graphs)是一种特别有用的图模型,它可以清晰地表示一个全局函数(例如,联合概率分布)如何分解为局部函数的乘积。

    一个因子图是一个二部图(Bipartite Graph),包含两种类型的节点:
    变量节点(Variable Nodes):代表系统中的变量,例如码字中的每个比特。
    因子节点(Factor Nodes):代表这些变量之间的约束或局部函数。

    边连接变量节点和因子节点,表示该变量参与了该因子所代表的函数。

    在纠错编码的背景下,因子图可以用来表示码的校验方程。考虑一个由校验矩阵 \(\mathbf{H}\) 定义的线性分组码。校验矩阵的每一行代表一个校验方程,每一列代表一个码字位。一个校验方程要求某些码字位的模 2 和为 0。

    对于一个码字 \(\mathbf{c} = (c_1, c_2, \dots, c_n)\) 和校验矩阵 \(\mathbf{H}_{m \times n}\),校验方程组为 \(\mathbf{H}\mathbf{c}^T = \mathbf{0}\)。第 \(j\) 个校验方程可以写为 \(\sum_{i=1}^n H_{ji} c_i \equiv 0 \pmod 2\)。

    对应的因子图包含 \(n\) 个变量节点(代表 \(c_1, \dots, c_n\))和 \(m\) 个因子节点(代表 \(m\) 个校验方程)。在因子图中,变量节点 \(c_i\) 与因子节点 \(f_j\) 之间存在一条边,当且仅当校验矩阵中 \(H_{ji} = 1\),即码字位 \(c_i\) 参与了第 \(j\) 个校验方程。

    这种表示码结构的因子图也被称为 Tanner 图(Tanner Graph),由 R. Michael Tanner 在 1981 年提出。Tanner 图是 LDPC 码的自然表示方式,因为 LDPC 码的校验矩阵是稀疏的,对应的 Tanner 图也是稀疏的。

    除了表示码的结构,因子图更重要的作用是为消息传递译码算法提供了一个直观的框架。迭代译码算法(如 LDPC 码的和积算法)可以在因子图上进行描述。消息在变量节点和因子节点之间沿着边传递。

    在和积算法中,传递的消息是概率或对数概率(LLR)。消息传递过程如下:
    变量节点到因子节点的消息:变量节点 \(v_i\) 发送给因子节点 \(f_j\) 的消息,是变量 \(c_i\) 的当前信念(belief)中,排除来自 \(f_j\) 的信息后的结果。这个信念通常基于信道观测值和来自其他因子节点的消息。
    因子节点到变量节点的消息:因子节点 \(f_j\) 发送给变量节点 \(v_i\) 的消息,是基于校验方程 \(f_j\) 的约束以及来自除 \(v_i\) 之外的所有连接变量节点的消息,计算出的关于 \(c_i\) 的软信息。

    这些消息在图上反复传递,直到收敛。在每次迭代结束时,每个变量节点会根据来自信道和所有连接因子节点的消息,更新其关于对应码字位的后验概率信念。

    因子图的优势在于:
    通用性:许多不同的码和译码算法都可以用因子图来表示和分析,例如 LDPC 码、Turbo 码、甚至一些分组码和卷积码。
    直观性:图结构清晰地展示了变量之间的依赖关系和约束,有助于理解译码算法的工作原理。
    模块化:消息传递算法可以被分解为在不同节点类型上执行的简单计算,这使得算法的实现更加模块化。
    分析工具:因子图为分析译码算法的收敛性和性能提供了工具,例如通过分析图的环结构。

    例如,对于一个简单的 LDPC 码,其校验矩阵为:
    \[ \mathbf{H} = \begin{pmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 1 \end{pmatrix} \]
    对应的 Tanner 图有 6 个变量节点 \(c_1, \dots, c_6\) 和 5 个校验节点 \(f_1, \dots, f_5\)。
    ▮▮▮▮⚝ \(f_1\) 连接 \(c_1, c_2, c_3\) (因为 \(c_1+c_2+c_3=0\))
    ▮▮▮▮⚝ \(f_2\) 连接 \(c_4, c_5, c_6\) (因为 \(c_4+c_5+c_6=0\))
    ▮▮▮▮⚝ \(f_3\) 连接 \(c_1, c_4\) (因为 \(c_1+c_4=0\))
    ▮▮▮▮⚝ \(f_4\) 连接 \(c_2, c_5\) (因为 \(c_2+c_5=0\))
    ▮▮▮▮⚝ \(f_5\) 连接 \(c_3, c_6\) (因为 \(c_3+c_6=0\))

    在和积算法中,变量节点 \(c_i\) 会接收来自信道的初始软信息(例如,LLR),并与来自连接的校验节点的消息结合,更新其信念。校验节点 \(f_j\) 会接收来自连接的变量节点的消息,并根据校验方程的约束计算发送回变量节点的消息。

    因子图和消息传递算法是理解和实现现代迭代译码技术的强大工具。它们不仅为 LDPC 码的译码提供了基础,也为理解 Turbo 码的迭代译码提供了另一种视角(尽管 Turbo 码通常用分量译码器和交织器框架来描述)。掌握图模型和因子图的概念,对于深入理解现代编码理论至关重要。

    12. chapter 12:编码的应用与未来展望(Applications and Future Perspectives)

    欢迎回到我们的信息论与纠错编码课程。在前面的章节中,我们系统地学习了信道编码的基本原理、经典编码方法(如线性分组码、循环码、卷积码)以及现代编码理论(如 Turbo 码和 LDPC 码)。我们还探讨了信道容量与香农限,理解了编码的理论极限。现在,是时候将这些理论知识与实际应用联系起来了。本章将深入探讨纠错编码在各个领域的广泛应用,并展望未来的发展方向。理解这些应用场景,能帮助我们更好地 appreciating 编码理论的价值,并激发我们进一步探索的热情。

    12.1 编码在无线通信系统中的应用(如 4G/5G 中的 Turbo/LDPC)

    无线通信系统是纠错编码最重要的应用领域之一。由于无线信道固有的衰落、干扰和噪声,信号在传输过程中极易发生错误。纠错编码是确保无线通信可靠性的关键技术。

    ① 早期无线通信系统:
    ▮▮▮▮ⓑ 在 2G (GSM) 时代,主要使用了卷积码(Convolutional Codes)和分组码(Block Codes),例如用于控制信道的卷积码和用于数据信道的循环冗余校验(Cyclic Redundancy Check, CRC)结合重传机制。
    ▮▮▮▮ⓒ 3G (WCDMA, cdma2000) 引入了 Turbo 码(Turbo Codes),显著提高了通信系统的性能,使其更接近香农限(Shannon Limit)。Turbo 码的迭代译码(Iterative Decoding)思想是其成功的关键。

    ② 4G (LTE) 系统:
    ▮▮▮▮ⓑ 4G 沿用了 Turbo 码作为其主要的数据信道编码方案。Turbo 码在提供接近香农限的性能的同时,其迭代译码算法也相对成熟且易于实现。
    ▮▮▮▮ⓒ LTE 的物理层设计充分利用了 Turbo 码的强大纠错能力,使得在复杂的无线环境下也能实现高速可靠的数据传输。

    ③ 5G (NR) 系统:
    ▮▮▮▮ⓑ 5G 时代,LDPC 码(Low-Density Parity-Check Codes)取代了 Turbo 码,成为数据信道(Data Channel)的主要编码方案。
    ▮▮▮▮ⓒ 为什么选择 LDPC 码?
    ▮▮▮▮▮▮▮▮❹ LDPC 码在高速率下性能更优,且随着码长的增加,其性能可以非常接近香农限。
    ▮▮▮▮▮▮▮▮❺ LDPC 码的译码算法(如和积算法 Sum-Product Algorithm)具有高度并行性,更适合硬件实现,尤其是在高吞吐量要求的场景下。
    ▮▮▮▮▮▮▮▮❻ LDPC 码的设计灵活性更高,可以方便地支持不同的码率和码长,以适应 5G 多样化的业务需求(如 eMBB, mMTC, URLLC)。
    ▮▮▮▮ⓖ 对于控制信道(Control Channel),5G 采用了极化码(Polar Codes)。极化码是第一个被证明可以达到离散无记忆信道(Discrete Memoryless Channel, DMC)信道容量的编码方案,尤其在短码长下性能优异,适合对可靠性要求极高的控制信息传输。

    ④ 未来展望:
    ▮▮▮▮ⓑ 6G 及未来的无线通信系统将继续探索更先进的编码技术,可能包括对现有 LDPC 码和极化码的改进,或者新的编码范式。
    ▮▮▮▮ⓒ 面向特定应用场景的定制化编码,例如超高可靠低时延通信(Ultra-Reliable Low-Latency Communication, URLLC)可能需要更短的码长和更快的译码算法。
    ▮▮▮▮ⓓ 结合机器学习(Machine Learning)的编码与译码技术也是一个研究热点。

    总的来说,纠错编码是现代无线通信系统的基石,从早期的卷积码到现在的 Turbo 码、LDPC 码和极化码,编码技术的发展极大地推动了无线通信性能的提升。

    12.2 编码在数据存储中的应用(如硬盘、SSD、内存 ECC)

    数据存储系统,包括硬盘驱动器(Hard Disk Drive, HDD)、固态硬盘(Solid State Drive, SSD)以及计算机内存(Memory),都面临着数据可能因物理缺陷、电荷泄漏、干扰等原因发生错误的风险。纠错编码在数据存储中扮演着至关重要的角色,用于检测和纠正这些错误,确保数据的完整性和可靠性。

    ① 硬盘驱动器(HDD):
    ▮▮▮▮ⓑ 早期 HDD 使用简单的奇偶校验(Parity Check)或 CRC 进行检错。
    ▮▮▮▮ⓒ 随着存储密度的不断提高,对纠错能力的要求也越来越高。现代 HDD 广泛使用强大的纠错码,特别是 Reed-Solomon (RS) 码。
    ▮▮▮▮ⓓ RS 码是一种非二元码,非常适合处理突发错误(Burst Errors),这在磁存储介质中很常见。
    ▮▮▮▮ⓔ 近年来,LDPC 码也开始应用于 HDD,尤其是在高密度存储中,因为 LDPC 码在迭代译码下能提供更强的纠错性能。

    ② 固态硬盘(SSD):
    ▮▮▮▮ⓑ SSD 使用闪存(Flash Memory)存储数据。闪存单元会随着擦写次数的增加而磨损,导致存储的电荷状态不稳定,更容易发生错误。
    ▮▮▮▮ⓒ 温度、读干扰等因素也会导致闪存错误。
    ▮▮▮▮ⓓ SSD 控制器中集成了强大的纠错码引擎。早期 SSD 使用 RS 码,但随着闪存技术的进步(如 MLC, TLC, QLC),每个存储单元存储的比特数增加,对纠错能力提出了更高的要求。
    ▮▮▮▮ⓔ 现代高性能 SSD 普遍采用 LDPC 码。LDPC 码的软判决译码(Soft-Decision Decoding)能力使其能够从闪存单元读取的模拟信号中提取更多信息,从而纠正更多的错误。
    ▮▮▮▮ⓕ LDPC 码在 SSD 中的应用是其商业成功的典范之一。

    ③ 内存(Memory):
    ▮▮▮▮ⓑ 计算机内存(如 DRAM)也可能发生错误,例如由于宇宙射线、电压波动或硬件故障导致的单比特或多比特翻转。
    ▮▮▮▮ⓒ 为了提高系统的可靠性,服务器和工作站通常使用带有错误检查和纠正(Error Checking and Correcting, ECC)功能的内存模块。
    ▮▮▮▮ⓓ ECC 内存通常使用汉明码(Hamming Codes)或其扩展(如 SECDED - Single Error Correction, Double Error Detection)。这些码可以检测并纠正单个比特错误,并检测双比特错误。
    ▮▮▮▮ⓔ 对于更高可靠性要求的系统,可能会使用更强的码,例如基于 BCH 码(Bose-Chaudhuri-Hocquenghem Codes)的 ECC 方案。

    ④ 总结:
    ▮▮▮▮ⓑ 数据存储中的纠错编码是保障数据长期可靠性的关键技术。
    ▮▮▮▮ⓒ 从简单的奇偶校验到强大的 RS 码和 LDPC 码,编码技术的发展与存储密度的提升相辅相成。
    ▮▮▮▮ⓓ 软判决译码在闪存存储中的应用是现代纠错码在存储领域的重要进展。

    12.3 编码在深空通信与卫星通信中的应用

    深空通信(Deep Space Communication)和卫星通信(Satellite Communication)是纠错编码的另一个关键应用领域。在这些场景下,信号需要传输极远的距离(从地球到其他行星甚至更远),导致信号衰减严重,信噪比(Signal-to-Noise Ratio, SNR)极低。同时,由于距离遥远,重传的代价极高甚至不可能。因此,强大的前向纠错(Forward Error Correction, FEC)能力是必不可少的。

    ① 深空通信:
    ▮▮▮▮ⓑ 美国国家航空航天局(NASA)的深空网络(Deep Space Network, DSN)是深空通信的典型代表。
    ▮▮▮▮ⓒ 早期的深空探测任务(如 Voyager)使用了卷积码(Convolutional Codes)与 RS 码的级联码(Concatenated Codes)。这种级联结构结合了卷积码在低信噪比下的增益和 RS 码处理突发错误的能力,提供了强大的纠错性能。
    ▮▮▮▮ⓓ 随着技术发展,更先进的编码方案被引入。例如,火星探测任务(如 Mars Exploration Rovers)使用了 Turbo 码。
    ▮▮▮▮ⓔ 近期的深空任务(如 Curiosity, Perseverance)以及未来的任务,越来越多地采用 LDPC 码,因为 LDPC 码在极低信噪比下能提供更好的性能,更接近香农限。
    ▮▮▮▮ⓕ 深空通信对编码的要求是极致的性能,即使以增加译码复杂度为代价。

    ② 卫星通信:
    ▮▮▮▮ⓑ 卫星通信包括地球同步轨道卫星(Geostationary Orbit, GEO)、中地球轨道卫星(Medium Earth Orbit, MEO)和低地球轨道卫星(Low Earth Orbit, LEO)通信系统。
    ▮▮▮▮ⓒ 广播卫星(如数字电视直播)通常使用 RS 码或 BCH 码,有时与卷积码级联。
    ▮▮▮▮ⓓ 互联网接入卫星和移动卫星通信系统则广泛采用 Turbo 码和 LDPC 码,以支持更高的数据速率和更可靠的服务。
    ▮▮▮▮ⓔ 例如,Starlink 等 LEO 卫星星座为了提供高速互联网服务,其通信链路大量依赖于高性能的 LDPC 编码和译码技术。

    ③ 特点与挑战:
    ▮▮▮▮ⓑ 长距离传输导致信号极弱,需要编码提供巨大的编码增益(Coding Gain)。
    ▮▮▮▮ⓒ 延迟高,重传效率低下,FEC 是主要手段。
    ▮▮▮▮ⓓ 硬件实现需要在性能、功耗和成本之间进行权衡,尤其对于星载设备。
    ▮▮▮▮ⓔ 未来,随着通信速率的提升和对可靠性要求的提高,深空和卫星通信将继续推动编码理论和技术的发展。

    12.4 编码在光通信与网络中的应用

    光通信系统利用光纤作为传输介质,具有带宽极高、传输距离远的优点。然而,光信号在传输过程中也会受到衰减、色散、非线性效应以及放大器噪声等影响,导致信号失真和错误。纠错编码在光通信系统中同样不可或缺,用于提高传输距离、降低误码率(Bit Error Rate, BER)并减少对昂贵光器件性能的要求。

    ① 光传输系统:
    ▮▮▮▮ⓑ 早期光通信系统主要依赖于高品质的光器件来保证低误码率,编码的应用相对较少或使用简单的码。
    ▮▮▮▮ⓒ 随着传输速率从 Gbps 提升到 10Gbps, 40Gbps, 100Gbps 甚至 Tbps 级别,以及传输距离的增加,光信号的损伤越来越严重,强大的 FEC 成为必需。
    ▮▮▮▮ⓓ 第一代光通信 FEC 主要采用 RS 码(通常是 RS(255,239))。
    ▮▮▮▮ⓔ 第二代 FEC 采用了更强的级联码或 Turbo 码。
    ▮▮▮▮ⓕ 第三代 FEC,也是目前主流的高性能 FEC,广泛采用 LDPC 码或 Turbo 码的变种,通常结合软判决译码技术,可以提供超过 10 dB 的编码增益。
    ▮▮▮▮⚝ 前向纠错(FEC)在光传输系统中的应用,使得在不增加光放大器数量或不升级光纤的情况下,可以显著延长传输距离或提高传输速率。

    ② 光网络:
    ▮▮▮▮ⓑ 在光网络层面,虽然大部分纠错在物理层(光传输)完成,但在数据链路层或网络层也可能使用 CRC 或其他检错码来验证数据包的完整性。
    ▮▮▮▮ⓒ 例如,以太网(Ethernet)帧就包含 CRC 校验码。

    ③ 数据中心互联:
    ▮▮▮▮ⓑ 数据中心内部以及数据中心之间的短距离高速光互联也越来越多地采用 FEC。
    ▮▮▮▮ⓒ 例如,100GbE 和 400GbE 标准中就包含了基于 RS 码的 FEC(如 RS(528,514) FEC)。
    ▮▮▮▮ⓓ 这些 FEC 主要用于补偿高速电信号和光信号转换过程中的损伤以及连接器等引入的损耗和串扰。

    ④ 挑战与趋势:
    ▮▮▮▮ⓑ 高速光通信要求 FEC 译码器具有极高的吞吐量(Terabits per second 级别),这对硬件实现提出了巨大挑战。
    ▮▮▮▮ⓒ 低延迟应用(如金融交易、实时游戏)对 FEC 的译码延迟有严格要求。
    ▮▮▮▮ⓓ 未来,可能会出现针对特定光信道特性设计的编码方案,或者将机器学习应用于光信号处理和 FEC 译码优化。

    12.5 极化码(Polar Codes)简介

    极化码(Polar Codes)是由土耳其科学家 Erdal Arıkan 于 2008 年提出的一种新型线性分组码。它的重要意义在于,它是第一个被数学证明可以在二进制输入对称离散无记忆信道(Binary-Input Symmetric Discrete Memoryless Channel, BI-DMC)下达到信道容量(Channel Capacity)的编码方案。这一突破性成果在理论上解决了长期以来寻找容量可达码的难题。

    ① 基本思想:信道极化(Channel Polarization)
    ▮▮▮▮ⓑ 极化码的核心思想是“信道极化”效应。通过对多个独立的并行信道进行特定的组合和变换,可以将这些信道“极化”成两类极端信道:一类是无噪声的“好”信道,其容量趋近于 1;另一类是纯噪声的“坏”信道,其容量趋近于 0。
    ▮▮▮▮ⓒ 随着组合信道数量的增加,信道极化效应越发明显。
    ▮▮▮▮ⓓ 编码时,我们将需要传输的信息比特(Information Bits)放在“好”信道上传输,而将固定的、预先知道的比特(称为冻结比特 Frozen Bits)放在“坏”信道上传输。

    ② 编码过程:
    ▮▮▮▮ⓑ 极化码的编码基于一个生成矩阵 \(G_n = F_2^{\otimes n}\),其中 \(F_2 = \begin{bmatrix} 1 & 0 \\ 1 & 1 \end{bmatrix}\),\(n\) 是极化变换的层数,码长 \(N = 2^n\)。
    ▮▮▮▮ⓒ 待编码的信息比特向量 \(u\) 包含信息比特和冻结比特。编码后的码字 \(x = u G_n\)。
    ▮▮▮▮ⓓ 关键在于选择哪些位置放置信息比特(即确定哪些是“好”信道)。这通常通过计算每个合成信道的可靠性(如 Bhattacharyya 参数或互信息)来确定。

    ③ 译码算法:
    ▮▮▮▮ⓑ 极化码的经典译码算法是逐次消除(Successive Cancellation, SC)译码。这是一种低复杂度的硬判决或软判决译码算法。
    ▮▮▮▮ⓒ SC 译码的复杂度为 \(O(N \log N)\)。
    ▮▮▮▮ⓓ 为了提高性能,特别是接近最大似然(Maximum Likelihood, ML)译码的性能,出现了改进的 SC 译码算法,如逐次消除列表(Successive Cancellation List, SCL)译码。SCL 译码通过保留多个可能的译码路径来提高性能,其性能可以非常接近 ML 译码,尤其当列表大小增加时。
    ▮▮▮▮ⓔ 结合循环冗余校验(CRC)辅助的 SCL (CRC-SCL) 译码是目前实现高性能极化码的常用方法。

    ④ 意义与应用:
    ▮▮▮▮ⓑ 极化码的理论意义重大,它证明了容量可达码的存在性,并提供了一种显式的构造方法。
    ▮▮▮▮ⓒ 尽管 SC 译码性能略逊于 SCL 译码,但其低复杂度使其在某些场景下仍有吸引力。
    ▮▮▮▮ⓓ 极化码已被 5G NR 标准采纳,用于控制信道(Control Channel)的编码。这是极化码从理论走向实际应用的重要一步。
    ▮▮▮▮ⓔ 极化码在短码长下的优异性能和可证明的容量可达性使其成为未来通信系统和数据存储等领域的研究热点。

    极化码的出现为编码理论注入了新的活力,它不仅具有深远的理论意义,也在实际应用中展现出巨大的潜力。

    12.6 编码理论的未来研究方向

    纠错编码理论是一个充满活力且不断发展的领域。尽管我们已经取得了巨大的成就,但仍有许多开放性问题和新的研究方向值得探索。

    ① 逼近香农限的编码方案:
    ▮▮▮▮ⓑ 虽然 LDPC 码和极化码在理论上可以逼近香农限,但在有限码长和实际译码复杂度限制下,如何设计性能更优、更接近理论极限的码仍然是一个重要的研究方向。
    ▮▮▮▮ⓒ 研究新的编码结构和构造方法,以获得更好的最小距离特性或更优的迭代译码性能。

    ② 低复杂度、低延迟译码:
    ▮▮▮▮ⓑ 许多新兴应用(如 URLLC、自动驾驶、工业自动化)对通信延迟有极高的要求。设计具有超低译码延迟的编码方案和译码算法是未来的关键挑战。
    ▮▮▮▮ⓒ 研究更高效的硬件实现架构,以满足高速率和低延迟的需求。

    ③ 面向特定信道的编码:
    ▮▮▮▮ⓑ 传统的编码理论主要关注理想化的信道模型(如 BSC, AWGN)。未来的研究将更多地关注实际信道的复杂特性,例如带有记忆的信道、突发噪声信道、干扰信道等。
    ▮▮▮▮ⓒ 设计能够有效应对特定信道损伤(如非线性失真、相位噪声)的编码方案。

    ④ 编码与其他技术的融合:
    ▮▮▮▮ⓑ 编码与调制(Modulation)的联合优化(如格码调制 Trellis-Coded Modulation, TCM 和空时码 Space-Time Codes)。
    ▮▮▮▮ⓒ 编码与信号处理、机器学习的结合。例如,利用深度学习(Deep Learning)进行信道建模、编码设计或译码优化。这被称为“端到端通信系统”或“神经网络编码器/译码器”。
    ▮▮▮▮ⓓ 编码在物理层安全(Physical Layer Security)中的应用,例如利用编码来隐藏信息或抵抗窃听。

    ⑤ 量子计算对编码理论的影响:
    ▮▮▮▮ⓑ 量子计算的出现对经典的密码学构成了威胁,同时也为纠错编码带来了新的挑战和机遇。
    ▮▮▮▮ⓒ 研究量子纠错码(Quantum Error Correction Codes),以保护量子信息免受噪声干扰。
    ▮▮▮▮ⓓ 研究后量子密码学(Post-Quantum Cryptography)中对编码的需求,例如基于格(Lattice)的密码学和基于编码(Code-based)的密码学。

    ⑥ 编码在新兴领域的应用:
    ▮▮▮▮ⓑ 除了传统的通信和存储领域,编码理论在生物信息学(如 DNA 存储)、分布式计算、区块链、隐私保护等领域也展现出应用潜力。
    ▮▮▮▮ⓒ 研究适用于这些新兴应用场景的编码方案和理论。

    总而言之,编码理论不仅在不断解决现有通信和存储系统面临的挑战,也在积极探索新的理论前沿和应用领域。未来的编码理论将更加注重实际系统的需求,与其他技术深度融合,并在新兴领域发挥关键作用。

    希望本章能够帮助大家了解纠错编码在现实世界中的广泛应用,并对未来的发展方向有所启发。纠错编码是信息时代不可或缺的基石技术,其重要性将随着信息技术的不断发展而日益凸显。

    13. chapter 13:附录(Appendices)

    本附录旨在为读者提供一些常用的数学参考信息和符号定义,以便于查阅和理解书中各章节的内容。

    13.1 常用有限域表(Common Finite Field Tables)

    有限域(Finite Field),也称为伽罗瓦域(Galois Field, GF(q)),是代数编码理论(Algebraic Coding Theory)的基石。本节提供一些常用的有限域的结构和运算示例。一个有限域 GF(q) 必须满足 q 是一个素数(prime number)p 或一个素数的幂 \(p^m\)。

    13.1.1 GF(2)

    GF(2) 是最简单的有限域,包含两个元素:0 和 1。其加法和乘法运算定义如下:

    ⚝ 加法(Addition):对应于二进制的异或(XOR)运算。
    \[ 0 + 0 = 0 \\ 0 + 1 = 1 \\ 1 + 0 = 1 \\ 1 + 1 = 0 \]
    ⚝ 乘法(Multiplication):对应于二进制的与(AND)运算。
    \[ 0 \times 0 = 0 \\ 0 \times 1 = 0 \\ 1 \times 0 = 0 \\ 1 \times 1 = 1 \]
    GF(2) 在二元码(Binary Codes)中广泛应用,因为码字(codeword)的元素通常取自 GF(2)。

    13.1.2 GF(\(2^m\))

    对于 \(m > 1\),GF(\(2^m\)) 包含 \(2^m\) 个元素。GF(\(2^m\)) 的构造通常基于 GF(2) 上的多项式环(Polynomial Ring) \(GF(2)[x]\) 对一个 \(m\) 次不可约多项式(Irreducible Polynomial) \(p(x)\) 取模。GF(\(2^m\)) 的元素可以表示为 GF(2) 上次数小于 \(m\) 的多项式:
    \[ a_{m-1}x^{m-1} + a_{m-2}x^{m-2} + \dots + a_1x + a_0 \]
    其中 \(a_i \in GF(2)\)。共有 \(2^m\) 个这样的多项式。

    ⚝ 加法:两个元素的加法就是对应多项式的系数在 GF(2) 上进行加法(即异或)。
    ⚝ 乘法:两个元素的乘法是对应多项式的乘积在 GF(2)[x] 中进行,然后对不可约多项式 \(p(x)\) 取模。

    选择不同的不可约多项式 \(p(x)\) 会得到同构(Isomorphic)的 GF(\(2^m\)) 域,但运算细节会不同。下面列出一些常用的不可约多项式:

    ⚝ GF(\(2^2\)) 的一个不可约多项式:\(p(x) = x^2 + x + 1\)
    ⚝ GF(\(2^3\)) 的一个不可约多项式:\(p(x) = x^3 + x + 1\)
    ⚝ GF(\(2^4\)) 的一个不可约多项式:\(p(x) = x^4 + x + 1\)
    ⚝ GF(\(2^5\)) 的一个不可约多项式:\(p(x) = x^5 + x^2 + 1\)
    ⚝ GF(\(2^6\)) 的一个不可约多项式:\(p(x) = x^6 + x + 1\)
    ⚝ GF(\(2^7\)) 的一个不可约多项式:\(p(x) = x^7 + x^3 + 1\)
    ⚝ GF(\(2^8\)) 的一个不可约多项式:\(p(x) = x^8 + x^4 + x^3 + x^2 + 1\) (用于 Reed-Solomon 码等)

    示例:GF(\(2^2\)) 的运算

    基于不可约多项式 \(p(x) = x^2 + x + 1\)。GF(\(2^2\)) 的元素可以表示为 \(a_1x + a_0\),其中 \(a_1, a_0 \in \{0, 1\}\)。这四个元素是:
    \(0x + 0 = 0\)
    \(0x + 1 = 1\)
    \(1x + 0 = x\)
    \(1x + 1 = x+1\)

    加法表(对应系数异或):
    | + | 0 | 1 | x | x+1 |
    |-------|-----|-----|-----|-----|
    | 0 | 0 | 1 | x | x+1 |
    | 1 | 1 | 0 | x+1 | x |
    | x | x | x+1 | 0 | 1 |
    | x+1 | x+1 | x | 1 | 0 |

    乘法表(多项式乘法后对 \(x^2+x+1\) 取模):
    例如:\(x \times x = x^2\)。由于 \(x^2+x+1 = 0\) 在该域中,所以 \(x^2 = x+1\)。
    例如:\(x \times (x+1) = x^2 + x\)。由于 \(x^2 = x+1\),所以 \(x^2 + x = (x+1) + x = 1\) (在 GF(2) 中 \(1+1=0\))。
    | \(\times\) | 0 | 1 | x | x+1 |
    |------------|-----|-----|-----|-----|
    | 0 | 0 | 0 | 0 | 0 |
    | 1 | 0 | 1 | x | x+1 |
    | x | 0 | x | x+1 | 1 |
    | x+1 | 0 | x+1 | 1 | x |

    对于更大的有限域,通常使用计算机代数系统进行运算。理解其构造原理和运算规则对于理解 BCH 码(BCH Codes)和 Reed-Solomon 码(RS Codes)等代数码至关重要。

    13.2 常用符号表(Common Symbol Table)

    下表列出了本书中常用的符号及其含义,方便读者查阅。

    通用符号(General Symbols)
    ▮▮▮▮⚝ \(q\): 有限域 GF(q) 的大小。
    ▮▮▮▮⚝ \(n\): 码字(codeword)的长度,即码字中包含的符号数。
    ▮▮▮▮⚝ \(k\): 消息(message)的长度,即原始信息比特或符号数。
    ▮▮▮▮⚝ \(m\): 对于 GF(\(q^m\)),表示域的扩展次数。
    ▮▮▮▮⚝ \(R = k/n\): 码率(Code Rate),表示编码效率。
    ▮▮▮▮⚝ \(d\): 码的最小距离(Minimum Distance),通常指汉明距离(Hamming Distance)或欧氏距离(Euclidean Distance)。
    ▮▮▮▮⚝ \(d_{min}\): 码的最小汉明距离。
    ▮▮▮▮⚝ \(t\): 码的纠错能力,即可以纠正的错误符号数,对于线性码 \(t = \lfloor (d_{min}-1)/2 \rfloor\)。
    ▮▮▮▮⚝ \(P_e\): 符号错误概率(Symbol Error Probability)。
    ▮▮▮▮⚝ \(P_b\): 比特错误概率(Bit Error Probability)。
    ▮▮▮▮⚝ \(C\): 信道容量(Channel Capacity)。
    ▮▮▮▮⚝ \(I(X;Y)\): 随机变量 X 和 Y 之间的互信息(Mutual Information)。
    ▮▮▮▮⚝ \(H(X)\): 随机变量 X 的熵(Entropy)。
    ▮▮▮▮⚝ \(H(X|Y)\): 在给定 Y 的条件下 X 的条件熵(Conditional Entropy)。

    信道模型符号(Channel Model Symbols)
    ▮▮▮▮⚝ \(p\): 二元对称信道(BSC)中的交叉概率(crossover probability)。
    ▮▮▮▮⚝ \(\epsilon\): 二元删除信道(BEC)中的删除概率(erasure probability)。
    ▮▮▮▮⚝ \(N_0\): 加性高斯白噪声(AWGN)信道中的噪声功率谱密度(Noise Power Spectral Density)。
    ▮▮▮▮⚝ \(E_b\): 每比特能量(Energy per bit)。
    ▮▮▮▮⚝ \(E_s\): 每符号能量(Energy per symbol)。
    ▮▮▮▮⚝ \(E_b/N_0\): 每比特能量与噪声功率谱密度之比,衡量通信系统性能的重要参数。

    线性分组码符号(Linear Block Code Symbols)
    ▮▮▮▮⚝ \(\mathcal{C}\): 码(Code),一个码字集合。
    ▮▮▮▮⚝ \(\mathbf{u}\): 消息向量(message vector),长度为 k。
    ▮▮▮▮⚝ \(\mathbf{c}\): 码字向量(codeword vector),长度为 n。
    ▮▮▮▮⚝ \(\mathbf{v}\): 接收向量(received vector),长度为 n。
    ▮▮▮▮⚝ \(\mathbf{e}\): 错误向量(error vector),长度为 n。
    ▮▮▮▮⚝ \(\mathbf{G}\): 生成矩阵(Generator Matrix),大小为 \(k \times n\)。
    ▮▮▮▮⚝ \(\mathbf{H}\): 校验矩阵(Parity-Check Matrix),大小为 \((n-k) \times n\)。
    ▮▮▮▮⚝ \(\mathbf{s}\): 伴随式向量(Syndrome vector),长度为 \(n-k\),\(\mathbf{s} = \mathbf{vH}^T\)。
    ▮▮▮▮⚝ \(w(\mathbf{v})\): 向量 \(\mathbf{v}\) 的汉明重量(Hamming Weight),即非零元素的个数。
    ▮▮▮▮⚝ \(d(\mathbf{v}_1, \mathbf{v}_2)\): 向量 \(\mathbf{v}_1\) 和 \(\mathbf{v}_2\) 之间的汉明距离(Hamming Distance)。

    循环码符号(Cyclic Code Symbols)
    ▮▮▮▮⚝ \(g(x)\): 循环码的生成多项式(Generator Polynomial)。
    ▮▮▮▮⚝ \(h(x)\): 循环码的校验多项式(Parity-Check Polynomial)。
    ▮▮▮▮⚝ \(u(x)\): 消息多项式(message polynomial)。
    ▮▮▮▮⚝ \(c(x)\): 码字多项式(codeword polynomial)。
    ▮▮▮▮⚝ \(v(x)\): 接收多项式(received polynomial)。
    ▮▮▮▮⚝ \(e(x)\): 错误多项式(error polynomial)。
    ▮▮▮▮⚝ \(s(x)\): 伴随式多项式(syndrome polynomial)。

    卷积码符号(Convolutional Code Symbols)
    ▮▮▮▮⚝ \(k\): 编码器的输入比特数(通常指每次输入的比特数)。
    ▮▮▮▮⚝ \(n\): 编码器的输出比特数(通常指每次输出的比特数)。
    ▮▮▮▮⚝ \(R = k/n\): 卷积码的码率。
    ▮▮▮▮⚝ \(L\): 约束长度(Constraint Length),表示一个输出符号受多少个输入符号影响。
    ▮▮▮▮⚝ \(v\): 记忆长度(Memory Length),\(L = v+1\)。
    ▮▮▮▮⚝ \(g^{(i)}\): 编码器的第 i 个生成序列(generator sequence)。
    ▮▮▮▮⚝ \(G(D)\): 编码器的生成矩阵多项式(generator matrix polynomial)。

    现代码符号(Modern Code Symbols)
    ▮▮▮▮⚝ \(PCCC\): 并行级联卷积码(Parallel Concatenated Convolutional Codes),即 Turbo 码。
    ▮▮▮▮⚝ \(SCCC\): 串行级联卷积码(Serial Concatenated Convolutional Codes)。
    ▮▮▮▮⚝ \(LDPC\): 低密度奇偶校验码(Low-Density Parity-Check Codes)。
    ▮▮▮▮⚝ \(\mathbf{H}\): LDPC 码的稀疏校验矩阵。
    ▮▮▮▮⚝ \(V\): Tanner 图中的变量节点(Variable Node)。
    ▮▮▮▮⚝ \(C\): Tanner 图中的校验节点(Check Node)。
    ▮▮▮▮⚝ \(L(x_i)\): 变量节点 \(x_i\) 的对数似然比(Log-Likelihood Ratio, LLR)。
    ▮▮▮▮⚝ \(L(c_j)\): 校验节点 \(c_j\) 的 LLR。
    ▮▮▮▮⚝ \(L_{ext}\): 外信息(Extrinsic Information)。
    ▮▮▮▮⚝ \(MAP\): 最大后验概率(Maximum A Posteriori)译码算法。
    ▮▮▮▮⚝ \(SOVA\): 软输出维特比算法(Soft-Output Viterbi Algorithm)。
    ▮▮▮▮⚝ \(BP\): 置信传播(Belief Propagation)算法。
    ▮▮▮▮⚝ \(SPA\): 和积算法(Sum-Product Algorithm)。
    ▮▮▮▮⚝ \(Polar Code\): 极化码。

    此符号表并非详尽无遗,但包含了本书中出现的大部分关键符号。在阅读过程中遇到不熟悉的符号时,可以查阅此表。

    14. chapter 14:参考文献(References)

    本章列出了撰写本书时参考的重要文献,并为读者提供了进一步深入学习和研究信道编码(Channel Coding)与纠错编码(Error Correction Coding)领域的资源指引。无论是初学者希望巩固基础,还是有经验的读者寻求前沿知识,这些文献都将是宝贵的财富。我们鼓励读者在学习本书内容的同时,积极查阅这些原始或经典的文献,以获得更全面和深入的理解。

    14.1 书籍(Books)

    书籍通常提供系统性的知识框架和深入的理论推导,是构建扎实基础的基石。以下是一些经典和重要的相关书籍类型或示例(请注意,此处仅为示例,实际书籍列表会更详尽):

    信息论经典教材(Classic Information Theory Textbooks)
    ▮▮▮▮⚝ 涵盖信息论基础、信源编码(Source Coding)和信道编码(Channel Coding)的综合性著作。
    ▮▮▮▮⚝ 适合初学者和希望建立完整知识体系的读者。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ Cover, T. M., & Thomas, J. A. (Year). Elements of Information Theory. (Publisher).
    ▮▮▮▮▮▮▮▮⚝ Gallager, R. G. (Year). Information Theory and Reliable Communication. (Publisher).

    纠错编码专业书籍(Specialized Error Correction Coding Books)
    ▮▮▮▮⚝ 专注于纠错编码的理论、构造和译码算法。
    ▮▮▮▮⚝ 涵盖线性分组码(Linear Block Codes)、循环码(Cyclic Codes)、卷积码(Convolutional Codes)、Turbo 码(Turbo Codes)、LDPC 码(Low-Density Parity-Check Codes)等。
    ▮▮▮▮⚝ 适合希望深入研究特定编码技术的读者。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ Lin, S., & Costello Jr, D. J. (Year). Error Control Coding: Fundamentals and Applications. (Publisher).
    ▮▮▮▮▮▮▮▮⚝ Wicker, S. B. (Year). Turbo Code Applications: A Journey to Realization. (Publisher).
    ▮▮▮▮▮▮▮▮⚝ Richardson, T., & Urbanke, R. (Year). Modern Coding Theory. (Publisher).

    数学基础类书籍(Mathematical Foundation Books)
    ▮▮▮▮⚝ 补充本书第二章所需的代数、概率论等数学知识。
    ▮▮▮▮⚝ 适合需要加强数学背景的读者。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ 关于有限域(Finite Fields)的代数教材。
    ▮▮▮▮▮▮▮▮⚝ 关于线性代数(Linear Algebra)的教材。

    14.2 期刊论文(Journal Papers)

    期刊论文通常代表了领域的最新研究成果和理论突破。阅读经典和前沿的期刊论文是了解领域发展脉络和深入特定主题的重要途径。

    经典论文(Classic Papers)
    ▮▮▮▮⚝ 奠定信息论和编码理论基础的开创性工作。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ Shannon, C. E. (Year). A Mathematical Theory of Communication. Bell System Technical Journal, Vol(Issue), Pages. (香农的开山之作)
    ▮▮▮▮▮▮▮▮⚝ Gallager, R. G. (Year). Low-density parity-check codes. IRE Transactions on Information Theory, Vol(Issue), Pages. (LDPC 码的提出)

    现代编码理论论文(Modern Coding Theory Papers)
    ▮▮▮▮⚝ 关于 Turbo 码、LDPC 码、极化码(Polar Codes)等现代编码技术的关键论文。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ Berrou, C., Glavieux, A., & Thitimajshima, P. (Year). Near Shannon limit error-correcting coding and decoding: Turbo-codes. Proceedings of ICC'93, Vol, Pages. (Turbo 码的提出)
    ▮▮▮▮▮▮▮▮⚝ Arikan, E. (Year). Channel polarization: A method for constructing capacity-achieving codes. IEEE Transactions on Information Theory, Vol(Issue), Pages. (极化码的提出)

    特定主题研究论文(Specific Topic Research Papers)
    ▮▮▮▮⚝ 针对某种特定编码的构造、译码算法改进、性能分析或应用研究。
    ▮▮▮▮⚝ 适合希望深入了解某一具体研究方向的读者。

    14.3 会议论文(Conference Papers)

    会议论文通常比期刊论文更快地反映领域的最新进展和初步研究成果。重要的国际会议是获取前沿信息的重要来源。

    主要会议(Major Conferences)
    ▮▮▮▮⚝ IEEE International Symposium on Information Theory (ISIT)
    ▮▮▮▮⚝ IEEE Global Communications Conference (GLOBECOM)
    ▮▮▮▮⚝ IEEE International Conference on Communications (ICC)
    ▮▮▮▮⚝ International Symposium on Turbo Codes and Iterative Information Processing (ISTC)

    会议论文示例(Example Conference Papers)
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ Author(s). (Year, Month). Title of paper. In Proceedings of Conference Name (Pages). (Location).

    14.4 标准文档(Standard Documents)

    许多编码技术被纳入国际通信或存储标准的规范中,这些标准文档提供了编码的具体实现细节和参数。

    通信标准(Communication Standards)
    ▮▮▮▮⚝ 蜂窝通信标准(如 3GPP LTE/5G 中的 Turbo/LDPC 编码规范)。
    ▮▮▮▮⚝ 无线局域网标准(如 Wi-Fi 中的编码)。
    ▮▮▮▮⚝ 卫星通信标准。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ 3GPP TS 36.212: Evolved Universal Terrestrial Radio Access (E-UTRA); Multiplexing and channel coding.
    ▮▮▮▮▮▮▮▮⚝ 3GPP TS 38.212: NR; Multiplexing and channel coding.

    存储标准(Storage Standards)
    ▮▮▮▮⚝ 硬盘、固态硬盘(SSD)的纠错码标准。
    ▮▮▮▮⚝ 内存(Memory)的 ECC(Error Correction Code)标准。
    ▮▮▮▮⚝ 示例:
    ▮▮▮▮▮▮▮▮⚝ 关于 NAND Flash 存储的纠错码规范。

    查阅这些标准文档对于理解编码技术在实际系统中的应用至关重要。