5G PDSCH速率匹配:从LDPC编码到HARQ的比特装载艺术
2026/8/5 6:35:05 网站建设 项目流程

1. 从信道编码到空中接口:为什么需要速率匹配?

在无线通信系统里,物理下行共享信道(PDSCH)是承载用户数据的主力军。当我们谈论LDPC码时,通常聚焦于其强大的纠错能力,但一个更实际的问题是:经过LDPC编码器输出的那一长串比特流,如何严丝合缝地“装进”分配给它的那一段有限的物理资源里?这就是速率匹配要解决的核心矛盾。

想象一下,你有一个固定大小的集装箱(物理资源块),而你的货物(编码后的比特)体积可能比集装箱大,也可能比它小。直接硬塞会损坏货物(信息丢失),空着又浪费运力(频谱效率低下)。速率匹配,就是这个精密的“货物装载与裁剪”系统。它的任务是根据当前无线信道条件、调度器分配的资源量,对LDPC编码器输出的码字进行灵活的重复或打孔,生成一个长度恰好等于目标传输块大小的比特序列。这个过程不是简单的截断或填充,而是一套基于交织器和循环缓冲区的精巧算法,旨在最大化编码增益,同时确保接收端能够正确解码。

理解速率匹配,是理解从“编码理论”到“工程实现”的关键一步。它直接决定了最终打在无线电波上的每一个比特的“命运”,影响着我们手机屏幕上视频流的卡顿与否、文件下载的快慢。尤其在5G NR中,由于采用了更灵活的参数集和多样的业务类型,速率匹配机制比4G LTE时代更为复杂和动态。接下来,我们就深入这个“装载车间”,看看它是如何工作的。

2. LDPC编码基础与速率匹配的输入:母码与码块分割

在进入速率匹配本身之前,我们必须先弄清楚它处理的对象是什么。5G NR的LDPC编码并非直接对整个传输块进行编码,而是有一套前置处理流程。

2.1 LDPC母码:两种基本图样

5G NR标准定义了两种LDPC基础矩阵(Base Graph, BG),也称为母码:

  • BG1:较大,行数46,列数68。它适用于较大的码块和较高的码率(大致在1/3以上)。当传输块大小(TBS)大于某个门限(如292比特)且目标码率大于1/6时,通常选用BG1。它能为大数据块提供更优异的性能。
  • BG2:较小,行数42,列数52。它适用于较小的码块和较低的码率。当TBS较小或目标码率很低时(如控制信道或极高可靠性场景),BG2更高效。

选择BG1还是BG2,是速率匹配前的一个重要决策,它决定了后续交织和缓冲的维度。这个选择基于明确的公式和查表,并非随意。

2.2 码块分割与CRC添加

一个传输块(TB)可能非常大(比如几十K比特)。直接编码如此大的数据块,不仅编码器/解码器实现复杂,而且不利于并行处理和混合自动重传请求(HARQ)。因此,需要将TB分割成若干个大小合适的码块(Code Block, CB)。

分割过程大致如下:

  1. 计算码块数量:根据TB大小和所选BG支持的最大码块大小,计算出需要分割成多少个码块(C)。如果TB本身就不大,可能无需分割(C=1)。
  2. 添加CRC:首先为整个TB添加一个24位的CRC。然后,如果进行了码块分割(C>1),还需要为每一个码块单独添加一个24位的CRC(称为CB-CRC)。这个CB-CRC至关重要,它为接收端提供了每个码块独立的检错能力。在HARQ进程中,接收端可以准确反馈哪个码块解码失败,从而请求重传特定的码块,而不是整个TB,这大大提升了重传效率。
  3. 分割:将添加了TB-CRC(和可能的填充比特以使长度均分)的数据,均匀分割成C个码块。

每个码块,才是独立进入LDPC编码器的单元。编码器根据选定的BG,对每个码块进行系统编码,生成一个包含系统比特(原始信息比特)校验比特的完整码字。这个码字的长度是固定的,由BG的维度决定(例如BG1,经过提升因子Z扩展后,其母码长度是固定的)。这个固定长度的编码输出,就是速率匹配模块的输入。

注意:这里容易混淆“码率”。编码器本身的母码码率是固定的(BG1约1/3,BG2约1/5)。但我们常说的“目标码率”(如1/3, 2/3)是指传输块大小 / 分配的物理资源总比特数。速率匹配正是通过从母码码字中选取特定数量的比特,来实现这个可变的目标码率。

3. 速率匹配的核心引擎:比特选择与循环缓冲区

现在,我们来到了最核心的部分。假设一个码块经过LDPC编码后,生成了长度为E的编码后比特流d0, d1, d2, ..., d_{N-1},其中N是母码码字长度。而物理层分配的资源只能承载E个比特(E可能小于、等于或大于N)。速率匹配算法需要从N个比特中选出E个比特进行传输。

这个过程并非随机选取,而是通过一个虚拟的循环缓冲区来实现。

3.1 构建循环缓冲区

首先,编码器输出的比特流被按特定顺序写入一个虚拟的循环缓冲区。这个顺序是精心设计的:

  1. 系统比特优先:所有系统比特被优先、连续地放入缓冲区。这是为了保证最重要的原始信息能被优先传输。
  2. 校验比特交织填入:校验比特不是简单追加,而是被分成若干组,并以一种交织的方式填入系统比特之后。具体来说,校验比特被分为多个“列”,这些列被交替写入缓冲区。这种交织方式使得在打孔(删除)时,被删除的校验比特能均匀分布,避免连续丢失同一类校验信息,从而增强解码器在恶劣信道下的恢复能力。

设最终缓冲区的长度为Ncb。在初次传输(新数据)时,Ncb通常就等于母码长度N。但对于重传(HARQ),Ncb可能会被设置为一个更大的值,以容纳冗余版本。

3.2 比特选择算法:确定起始点与顺序读取

速率匹配的输出比特,是通过从这个循环缓冲区中顺序读取E个比特得到的。关键在于这个起始读取位置k0

k0的计算是速率匹配算法的灵魂,它由以下因素共同决定:

  • 冗余版本:这是最重要的参数。RV(Redundancy Version)定义了传输的起始点,从而决定了本次传输包含的系统比特和校验比特的比例。标准定义了4个RV(0, 1, 2, 3),每个RV对应不同的k0
    • RV=0:起始位置靠近缓冲区开头,传输内容包含全部系统比特和少量校验比特。适用于初次传输,确保接收端能先拿到最核心的信息。
    • RV=1, 2, 3:起始位置逐渐向后偏移,传输内容中系统比特比例减少,校验比特比例增加。适用于重传,为解码器提供新的校验信息,与之前接收的比特合并(软合并)以提升解码成功率。
  • 当前码块索引:为了避免所有码块在同一时刻读取相同类型的比特(这会在信道条件突变时导致所有码块解码失败),k0的计算还引入了码块索引的偏移。这相当于为每个码块的缓冲区起点加了一个小小的、独特的扰动,实现了码块间的交织,增强了系统的鲁棒性。

确定了k0后,速率匹配器就从缓冲区索引k0处开始,顺序读取E个比特。如果读到缓冲区末尾还没读够E个比特,就绕回到缓冲区开头继续读(这就是“循环”缓冲区的含义)。最终,这E个比特就构成了用于调制和映射到物理资源上的比特序列。

3.3 打孔、缩短与重复

通过调整E相对于N的大小和k0的位置,速率匹配自然地实现了三种操作:

  • 打孔:当E < N时,相当于只读取了缓冲区的一部分,另一部分被“跳过”或“删除”了。这通常发生在目标码率较高时。通过RV的巧妙设计,可以确保被打孔的主要是某些校验比特,而系统比特得到保护。
  • 缩短:这是一种特殊的打孔,在编码之前就预设某些系统比特位置为“已知比特”(通常为0),并在速率匹配后不传输它们。接收端解码器知道这些位置的值,从而等效于降低了编码复杂度,提升了小码块的性能。在5G NR中,LDPC编码通过基图设计隐式支持缩短。
  • 重复:当E > N时,由于是循环读取,部分比特会被读取两次或更多次。这发生在目标码率很低时,通过重复发送某些比特来获得时间/频率分集增益。

4. 与HARQ的协同:冗余版本与增量冗余

速率匹配不是一次性的静态操作,它与HARQ机制深度耦合,构成了保证传输可靠性的核心。

初次传输:通常使用RV=0。发送端发送包含全部系统比特和部分校验比特的数据。接收端尝试解码。

解码失败,请求重传:接收端通过NACK反馈失败。发送端不会简单地重发完全相同的比特(那是Chase合并),而是选择另一个冗余版本,例如RV=2

增量冗余:RV=2 的起始点k0与 RV=0 不同,因此这次重传的内容是一批新的、之前没传过的校验比特(可能包含少量系统比特)。接收端将这次收到的软比特信息与上次接收的软比特信息在解码前进行合并,形成一个“更丰富、更完整”的软信息序列,再送入LDPC解码器。这相当于为解码器提供了更多线索,从而大大提高了第二次解码成功的概率。

如果再次失败,可以继续使用 RV=3 等进行重传。这种每次重传都提供新冗余信息的方式,称为增量冗余,它是5G高性能HARQ的基础。而灵活、精确地控制每次传输内容的能力,正是由速率匹配算法通过对k0和循环缓冲区的操控来实现的。

5. 实现中的关键细节与调试心得

在实际的物理层软件开发或FPGA实现中,速率匹配模块的验证和调试需要格外小心。以下是一些从工程实践中总结的点:

5.1 缓冲区索引计算的定点化与边界处理

k0的计算公式涉及乘法、取模等操作。在硬件或嵌入式DSP上实现时,必须使用定点数运算。需要仔细确定每个中间变量的位宽和定点精度,防止计算溢出或精度损失导致索引错误。一个比特的索引错位,就可能导致整个码块解码失败。

另外,循环读取时的“绕回”操作,在硬件中通常通过一个取模运算实现:read_index = (k0 + i) % Ncb。确保Ncb不是2的幂时,取模运算的逻辑要经过充分测试。一种常见的优化是,当Ncb为编译时常数时,可以使用 Barrett 约减等算法来避免昂贵的除法操作。

5.2 与调制器衔接的比特顺序

速率匹配输出的比特流,需要按照指定的调制阶数(如QPSK, 16QAM, 64QAM, 256QAM)进行分组,然后送入调制映射器。这里有一个关键的比特到符号的映射顺序问题。

标准规定了对于高阶调制,每个调制符号对应的多个比特中,哪个是最高有效位(MSB),哪个是最低有效位(LSB)。速率匹配输出的串行比特流,需要按顺序正确地填入这些位。例如,对于16QAM(每符号4比特),速率匹配输出的前4个比特构成第一个符号的 [b3, b2, b1, b0]。如果顺序弄反,解调时信噪比损失会非常大。在调试时,如果发现高阶调制性能异常差,而QPSK正常,首先应该检查的就是这个比特收集顺序。

5.3 性能验证:遍历RV与码率

单元测试不能只测一个典型场景。必须构建完整的测试向量,覆盖:

  • 所有冗余版本:RV=0,1,2,3。验证从不同起点读取的比特序列是否符合预期。
  • 多种码率:从高码率(如0.9,接近打孔极限)到低码率(如0.1,大量重复)。特别要测试E不是N整数倍的情况,这是循环读取最容易出错的边界条件。
  • 多个码块:测试码块分割和信道交织后的整体流程,确保多个码块的数据能正确拼接成最终的传输块。

一个有效的测试方法是,用软件参考模型(如MATLAB或C语言浮点模型)生成标准的测试输入和期望输出,与硬件或优化后的定点模型进行比特级对比。任何不一致都必须追查到底。

5.4 信道交织的额外层级

需要注意的是,在5G NR中,速率匹配之后、调制之前,还有一个信道交织步骤(有时称为“比特交织”)。这个交织器的作用是对单个码块内、即将映射到一个调制符号内的多个比特进行顺序重排。它的目的主要是解决一个实际问题:在衰落信道中,一个调制符号对应的几个比特可能经历不同的可靠性(例如,在非均匀星座图中)。通过交织,可以将一个码字中连续的比特分散到不同的符号位上,从而平均化错误,提升解码性能。在实现时,要明确区分速率匹配内部的“校验比特交织”和这个“信道交织”,它们是两个不同的概念和模块。

6. 从标准文本到代码:一个简化的算法流程梳理

为了更直观,这里梳理一个高度简化的速率匹配伪代码流程,帮助理解从编码输出到最终比特流的整个过程:

输入: - 编码后比特流 d[0...N-1] (N = 母码码字长度) - 目标输出长度 E - 冗余版本 rv_idx (0,1,2,3) - 码块索引 cbid 输出: - 速率匹配后比特流 e[0...E-1] 过程: 1. // 1. 构建循环缓冲区 v 2. 将 d[] 中的系统比特按顺序放入 v[] 3. 将 d[] 中的校验比特按标准规定的交织规则放入 v[] 中系统比特之后 4. 设缓冲区长度为 Ncb = N (对于初始传输) 5. // 2. 计算起始位置 k0 6. 根据 rv_idx, Ncb, Z (提升因子), cbid 等参数,按照标准公式计算 k0。 7. // 公式大致逻辑:k0 = RV偏移表[rv_idx] * Ncb / 某个常数 + 基于cbid的小偏移 8. // 3. 循环读取 9. for i = 0 to E-1: 10. read_index = (k0 + i) % Ncb 11. e[i] = v[read_index] 12. end for

这个流程省略了很多细节,如对于打孔比特的特殊处理、对于重传时缓冲区长度Ncb可能的变化等,但它勾勒出了最核心的“循环缓冲区+起始偏移”的思想。

理解并正确实现PDSCH的速率匹配,是打通物理层基带处理链路的关键一环。它一端连着抽象的编码理论,另一端连着具体的无线电资源。每一次成功的下载、每一帧流畅的视频背后,都有这套精密算法在无声地工作。调试它可能充满挑战,但当你看到误块率曲线随着RV切换而完美下降时,那种对系统掌控感的确立,正是无线通信工程师的乐趣所在。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询