主要内容

5G NR (New Radio) 极化编码

此示例重点介绍了为 5G NR (New Radio) 通信系统选择的新极化信道编码技术。3GPP 规定了两种主要代码构造,此示例对其中的 CRC 辅助极化 (CA-Polar) 编码方案进行了建模。此示例描述了极化编码方案的主要组件,以及用于代码构造、编码和解码以及码率匹配的各个组件。它对 AWGN 上的极化编码 QPSK 调制链路进行建模,并提供了该编码方案在不同消息长度和码率下的误块率结果。

简介

选择极化码作为 5G NR 通信系统控制信道的信道编码技术,证明了 Arikan 的 [1] 发现的优点,并将确立其在商业系统中的应用 [6]。根据信道极化的概念,采用这类新型的编码技术不仅仅是接近容量,而是能够达到容量。与 LDPC 和 turbo 码相比,极化码具有相当或更出色的性能,因此取代了 LTE 系统中用于控制信道的咬尾卷积码。它适用于增强型移动宽带 (eMBB) 用例的下行链路和上行链路控制信息 (DCI/UCI),以及广播信道 (BCH)。或者,将 eMBB 的数据信道的信道编码方案指定为适用于所有块大小的灵活 LDPC。

此示例重点介绍了在 AWGN 信道上使用 QPSK 调制实现极化编码下行链路仿真的组件。以下各节将进一步详细介绍各个极化编码组件。

s = rng(100);       % Seed the RNG for repeatability

指定用于仿真的代码参数。

% Code parameters
K = 54;             % Message length in bits, including CRC, K > 30
E = 124;            % Rate matched output length, E <= 8192

EbNo = 0.8;         % EbNo in dB
L = 8;              % List length, a power of two, [1 2 4 8]
numFrames = 10;     % Number of frames to simulate
linkDir = 'DL';     % Link direction: downlink ('DL') OR uplink ('UL')

极化编码

下面的原理图详细说明了下行链路的发送端处理,并突出显示了相关组件及其参数。

对于下行链路,在极化编码之前会对输入比特进行交错处理。因此,在 CA-Polar 方案中,将会合理排列在信息比特末尾追加的 CRC 比特。对于上行链路,没有规定此交错。

极化编码使用一种与 SNR 无关的方法,其中每个子信道的可靠性都是离线计算的,并且是为最大码长 [6] 存储的有序序列。极化码的嵌套特性使得此序列可用于任何码率,以及小于最大码长的所有码长。

此序列是由函数 nrPolarEncode 针对给定的码率匹配的输出长度 E 和信息长度 K 计算得出的,该函数可实现 K 比特输入的非系统编码。

if strcmpi(linkDir,'DL')
    % Downlink scenario (K >= 36, including CRC bits)
    crcLen = 24;      % Number of CRC bits for DL, Section 5.1, [6]
    poly = '24C';     % CRC polynomial
    nPC = 0;          % Number of parity check bits, Section 5.3.1.2, [6]
    nMax = 9;         % Maximum value of n, for 2^n, Section 7.3.3, [6]
    iIL = true;       % Interleave input, Section 5.3.1.1, [6]
    iBIL = false;     % Interleave coded bits, Section 5.4.1.3, [6]
else
    % Uplink scenario (K > 30, including CRC bits)
    crcLen = 11;
    poly = '11';
    nPC = 0;
    nMax = 10;
    iIL = false;
    iBIL = true;
end

下面的原理图详细说明了当有效负载大小大于 19 比特且未进行代码块分割时上行链路的发送端处理,并突出显示了相关组件及其参数。

码率匹配和码率恢复

极化编码的比特集 (N) 经过码率匹配,可输出指定数目 (E) 的比特,用于资源元素匹配 [7]。经编码的比特在接受子块交错处理后传递到长度为 N 的环形缓冲区。根据所需的码率和所选的 KEN 值,将通过从缓冲区中读取输出比特来实现重复 (E >= N)、删截或缩短 (E < N)。

  • 对于删截,将从末尾获取 E 比特

  • 对于缩短,将从开头获取 E 比特

  • 对于重复,将以 N 为模重复 E 比特。

对于下行链路,所选的比特传递给调制映射器,而对于上行链路,它们在映射之前接受进一步的交错处理。码率匹配处理是由函数 nrRateMatchPolar 实现的。

在接收机端,针对每种情况都实现了码率恢复

  • 对于删截,删除的比特的相应 LLR 设置为零

  • 对于缩短,删除的比特的相应 LLR 设置为一个较大的值

  • 对于重复,将选择与前 N 比特对应的 LLR 集。

码率恢复处理是由函数 nrRateRecoverPolar 实现的。

R = K/E;                          % Effective code rate
bps = 2;                          % bits per symbol, 1 for BPSK, 2 for QPSK
EsNo = EbNo + 10*log10(bps);
snrdB = EsNo + 10*log10(R);       % in dB
noiseVar = 1./(10.^(snrdB/10));

% Channel
chan = comm.AWGNChannel('NoiseMethod','Variance','Variance',noiseVar);

极化解码

下行链路(DCI 或 BCH)或上行链路 (UCI) 消息比特的隐式 CRC 编码要求使用 CRC 辅助连续消除列表解码 (CA-SCL) [3] 作为信道解码器算法。众所周知,CA-SCL 解码的性能优于 turbo 码或 LDPC 码 [4],这是 3GPP 采用极化码的主要因素之一。

Tal 和 Vardy [2] 从似然性(概率)的角度介绍了 SCL 解码算法。不过,由于下溢问题,固有的计算在数字方面不稳定。为了解决此问题,Stimming 等人 [5] 提议仅在对数似然比 (LLR) 域中使用 SCL 解码。列表解码的特征取决于 L 参数,该参数表示保留的最可能的解码路径的数量。在解码结束时,L 个路径中最可能的代码路径是解码器输出。随着 L 的增大,解码器的性能也会提高,但收益效应会递减。

对于与 CRC 串联在一起的输入消息,如果至少有一条路径具有正确的 CRC,则 CA-SCL 解码会删除 CRC 无效的任何路径。与 SCL 解码相比,在选择最终路径时引入额外的 CRC 校验进一步提高了性能。对于下行链路,将使用 24 比特的 CRC,而对于上行链路,将根据 K 值指定 6 比特或 11 比特的 CRC。

解码器由函数 nrPolarDecode 实现,该函数支持全部三种 CRC 长度。在输出解码的比特之前,该解码器函数还会考虑在发射机端为下行链路指定的输入比特交错。

% Error meter
ber = comm.ErrorRate;

帧处理循环

本节说明了如何在误块率 (BLER) 仿真中使用前面介绍的极化编码组件。下面的原理图中突出显示了仿真链路。

对于处理的每一帧,将执行以下步骤:

  • 生成 K-crcLen 个随机比特

  • 计算 CRC 并将其追加到这些比特

  • CRC 追加比特被极化编码为母代码块长度

  • 执行码率匹配来发送 E 个比特

  • E 个比特进行 QPSK 调制

  • 添加指定功率的高斯白噪声

  • 对噪声信号进行软 QPSK 解调以输出 LLR 值

  • 针对删截、缩短或重复中的任何一种情况执行码率恢复

  • 使用 CA-SCL 算法对恢复的 LLR 值进行极化解码,包括去交错

  • 在解码的 K 个比特中,将前 K-crcLen 个比特与已发送的比特进行比较,以更新 BLER 和误码率 (BER) 度量

在仿真结束时,会报告两个性能指标,即 BLER 和 BER。

numferr = 0;
for i = 1:numFrames

    % Generate a random message
    msg = randi([0 1],K-crcLen,1);

    % Attach CRC
    msgcrc = nrCRCEncode(msg,poly);

    % Polar encode
    encOut = nrPolarEncode(msgcrc,E,nMax,iIL);
    N = length(encOut);

    % Rate match
    modIn = nrRateMatchPolar(encOut,K,E,iBIL);

    % Modulate
    modOut = nrSymbolModulate(modIn,'QPSK');

    % Add White Gaussian noise
    rSig = chan(modOut);

    % Soft demodulate
    rxLLR = nrSymbolDemodulate(rSig,'QPSK',noiseVar);

    % Rate recover
    decIn = nrRateRecoverPolar(rxLLR,K,N,iBIL);

    % Polar decode
    decBits = nrPolarDecode(decIn,K,E,L,nMax,iIL,crcLen);

    % Compare msg and decoded bits
    errStats = ber(double(decBits(1:K-crcLen)), msg);
    numferr = numferr + any(decBits(1:K-crcLen)~=msg);

end

disp(['Block Error Rate: ' num2str(numferr/numFrames) ...
      ', Bit Error Rate: ' num2str(errStats(1)) ...
      ', at SNR = ' num2str(snrdB) ' dB'])

rng(s);     % Restore RNG
Block Error Rate: 0, Bit Error Rate: 0, at SNR = 0.20002 dB

结果

为了获得有意义的结果,仿真必须运行较长的时间。通过将上述处理封装为支持 C 代码生成的函数的脚本,针对使用 QPSK 调制的两个链路方向,呈现对应于不同码率和消息长度的以下结果。

上述结果是通过仿真生成的,对于每个 SNR 点,最多 1000 帧错误或 100e3 帧,以先达者为准。

BLER 性能结果表明了极化码在通信链路中的适用性,以及它们在比特级粒度对码率兼容性的隐式支持。

对组件使用 C 代码生成工具可以减少执行时间,这是仿真的一个关键问题。C 代码生成由 MATLAB® Coder™ 提供支持。

总结与进一步探索

此示例重点介绍了 3GPP 为 NR (New Radio) 控制信道信息(DCI、UCI)和广播信道 (BCH) 指定的极化编码方案之一(CRC 辅助极化)。它说明了如何在各个处理阶段(编码、码率匹配、码率恢复和解码)使用组件,这些组件在采用 QPSK 的链路中通过 AWGN 信道使用。针对不同码率和消息长度重点介绍的结果表明,在参数和仿真假设变化范围内,性能与已发布的趋势一致。

请探索简单的参数变化(KEL)及其对 BLER 性能的影响。极化编码函数作为开放的 MATLAB 代码实现,这使其能够应用于下行链路/上行链路控制信息和广播信道。CA-Polar 方案同时适用于

  • 下行链路(针对所有消息长度);以及

  • 上行链路(针对 K > 30,且 crcLen = 11nPC = 0nMax = 10iIL = falseiBIL = true)。

请参阅对下行链路控制信息进行建模NR Cell Search and MIB and SIB1 Recovery示例,以了解如何分别在 DCI 和 BCH 函数中使用极化编码函数。

重点介绍的极化编码函数还支持奇偶校验极化编码构造和编码。这适用于 UCI 有效负载在 18 <= K <= 25 范围内的上行链路。这由上行链路控制编码函数 nrUCIEncodenrUCIDecode 提供支持,其中包括进行代码块分割以及选择合适的 KE 值。

选用的参考资料

  1. Arikan, E., "Channel Polarization:A Method for constructing Capacity-Achieving Codes for Symmetric Binary-Input Memoryless Channels," IEEE Transactions on Information Theory, vol. 55, No. 7, pp. 3051-3073, July 2009.

  2. Tal, I, and Vardy, A., "List decoding of Polar Codes", IEEE Transactions on Information Theory, vol. 61, No. 5, pp. 2213-2226, May 2015.

  3. Niu, K., and Chen, K., "CRC-Aided Decoding of Polar Codes," IEEE Communications Letters, vol. 16, No. 10, pp. 1668-1671, Oct. 2012.

  4. Niu, K., Chen, K., and Lin, J.R., "Beyond turbo codes: rate compatible punctured polar codes", IEEE International Conference on Communications, pp. 3423-3427, 2013.

  5. Stimming, A. B., Parizi, M. B., and Burg, A., "LLR-Based Successive Cancellation List Decoding of Polar Codes", IEEE Transaction on Signal Processing, vol. 63, No. 19, pp.5165-5179, 2015.

  6. 3GPP TS 38.212."NR; Multiplexing and channel coding" 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

  7. R1-1711729."WF on circular buffer of Polar Code", 3GPP TSG RAN WG1 meeting NR Ad-Hoc#2, Ericsson, Qualcomm, MediaTek, LGE.June 2017.

另请参阅

函数

主题