主要内容

nrLDPCDecode

低密度奇偶校验 (LDPC) 解码

说明

[out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter) 返回输入数据矩阵 in、基图编号 bgn 和最大解码迭代次数 maxNumIter 的 LDPC 解码输出矩阵 out。该函数还返回实际迭代次数 actNumIter 和每个码字的最终奇偶校验次数 finalParityChecks

解码器使用和积消息传递算法。数据位必须按照 TS 38.212 第 5.3.2 节 [1] 中的定义进行 LDPC 编码。

除了先前语法中的输入参量之外,[out,actNumIter,finalParityChecks] = nrLDPCDecode(___,Name,Value) 还指定了可选的名称-值对组参量。

示例

示例

全部折叠

创建传输数据,该数据由两个长度为 2560 的代码块段和末尾的 36 个填充比特组成。

C = 2;          
K = 2560;       
F = 36;    
txcbs = ones(K-F,C);
fillers = -1*ones(F,C);
txcbs = [txcbs;fillers];                

为该传输数据生成 LDPC 码字。使用 2 号基图。

bgn = 2; 
txcodedcbs = nrLDPCEncode(txcbs,bgn);   

将传输数据转换为软比特。传输数据中的填充比特不包含对数似然比 (LLR) 软比特。

rxcodedcbs = double(1-2*txcodedcbs);    
FillerIndices = find(txcodedcbs(:,1) == -1);
rxcodedcbs(FillerIndices,:) = 0;        

通过最多 25 次迭代对编码后的码字进行解码。

[rxcbs,actualniters] = nrLDPCDecode(rxcodedcbs,bgn,25);  

将传输数据中的填充比特替换为零,并比较编码和解码的结果。

txcbs(end-F+1:end,:) = 0;    
isequal(rxcbs,txcbs)                
ans = logical
   1

actualniters
actualniters = 1×2

     1     1

输入参数

全部折叠

输入代码块段的速率恢复软比特,指定为实矩阵。in 中的列数等于调度的代码块段数。in 中的行数等于码字的长度,其中一些系统比特被删截。

数据类型: double | single

基图编号,指定为 12。该值用于选择 TS 38.212 第 5.3.2 节 [1] 中定义的两个基图之一。

数据类型: double

最大解码迭代次数,指定为正整数标量。当所有奇偶校验均通过,或者经过 maxNumIter 次迭代后,解码终止。

数据类型: double

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: [out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter,'DecisionType','hard')

输出格式,指定为以逗号分隔的对组,其中包含 'OutputFormat' 和以下值之一:

  • 'info' - out 中的行数等于信息比特的长度。

  • 'whole' - out 中的行数等于码字的长度。

数据类型: char | string

用于解码的决策方法,指定为以逗号分隔的对组,其中包含 'DecisionType' 和以下值之一:

  • 'hard' - out 的数据类型为 int8

  • 'soft' - 输出 out 包含数据类型与 in 相同的对数似然比。

数据类型: char | string

LDPC 解码算法,指定为以逗号分隔的对组,其中包含 'Algorithm' 和以下值之一:

  • 'Belief propagation' - 使用此选项可指定置信传播或消息传递算法。有关详细信息,请参阅置信传播解码

  • 'Layered belief propagation' - 使用此选项可指定分层置信传播算法,该算法适用于准循环奇偶校验矩阵 (PCM)。有关详细信息,请参阅分层置信传播解码

  • 'Normalized min-sum' - 使用此选项可指定采用归一化最小和逼近的分层置信传播算法。有关详细信息,请参阅归一化最小和解码

  • 'Offset min-sum' - 使用此选项可指定采用偏移最小和逼近的分层置信传播算法。有关详细信息,请参阅偏移最小和解码

注意

当您将此名称-值对组参量的值指定为 'Normalized min-sum''Offset min-sum' 时,该函数会在解码之前将输入(对数似然比)LLR 值裁剪到 [-1e10 1e10] 范围内。

数据类型: char | string

归一化最小和解码的缩放因子,指定为以逗号分隔的对组,其中包含 'ScalingFactor' 和 (0, 1] 范围内的实数标量。

依赖关系

要启用此名称-值对组参量,请将 'Algorithm' 名称-值对组参量设置为 'Normalized min-sum'

数据类型: double

偏移最小和解码的偏移量,指定为以逗号分隔的对组,其中包含 'Offset' 和非负有限实数标量。

依赖关系

要启用此名称-值对组参量,请将 'Algorithm' 名称-值对组参量设置为 'Offset min-sum'

数据类型: double

解码终止条件,指定为以逗号分隔的对组,其中包含 'Termination' 和以下值之一:

  • 'early' - 当所有奇偶校验均通过,或者经过 maxNumIter 次迭代后,解码终止。

  • 'max' - 解码在 maxNumIter 次迭代后终止。

数据类型: char | string

输出参量

全部折叠

解码后的 LDPC 码字或信息比特,以实矩阵的形式返回。out 中的列数等于调度的代码块段数。out 中的行数取决于名称-值对组参量 'OutputFormat'out 的数据类型取决于名称-值对组参量 'DecisionType'

数据类型: single | double | int8

实际迭代次数,以由正整数组成的行向量的形式返回。actNumIter 的长度等于 in 中的列数。actNumIter 中的第 i 个元素对应于 in 的第 i 列执行的实际迭代次数。

数据类型: double

最终奇偶校验结果,以矩阵形式返回。finalParityChecks 中的行数等于 LDPC 码字中的奇偶校验位数。finalParityChecks 中的第 i 列对应于第 i 个码字的最终奇偶校验结果。

数据类型: double

算法

全部折叠

nrLDPCDecode 函数支持以下四种 LDPC 解码算法。

参考

[1] 3GPP TS 38.212. “NR; Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[2] Gallager, Robert G. Low-Density Parity-Check Codes, Cambridge, MA, MIT Press, 1963.

[3] Hocevar, D.E. "A reduced complexity decoder architecture via layered decoding of LDPC codes." In IEEE Workshop on Signal Processing Systems, 2004. SIPS 2004. doi: 10.1109/SIPS.2004.1363033

[4] Chen, Jinghu, R.M. Tanner, C. Jones, and Yan Li. "Improved min-sum decoding algorithms for irregular LDPC codes." In Proceedings. International Symposium on Information Theory, 2005. ISIT 2005. doi: 10.1109/ISIT.2005.1523374

扩展功能

全部展开

版本历史记录

在 R2018b 中推出

全部展开