5G NR信道编码架构:LDPC和Polar
第五代移动网络(5G NR)的引入需要对物理数据传输技术进行根本性的修改。 其中一项关键创新是从LTE中使用的通用Turbo编码过渡到混合架构,该架构结合了用于用户数据的LDPC码和用于控制信息的Polar码。
信道编码通过保护传输数据免受噪声和干扰引起的错误,确保可靠的数字通信。 在LTE标准中,这项任务是使用Turbo码解决的。 然而,5g千兆速度(eMBB)、超低延迟(URLLC)和大容量设备连接(mMTC)的要求揭示了Turbo码的局限性:它们的高计算复杂度和迭代性成为带宽的瓶颈。
3GPP的标准化导致了混合系统的创建:由于解码的高度并行性,用于处理高速用户数据的LDPC(低密度奇偶校验)代码和用于可靠传递短控制消息的Polar代码,理论上达到了小块的信道容量。
本文提供了在Engee环境中实现的两个功能模型的实际分析。:
*DataChannel_LDPC_EncodingChain:用户数据的编码链(PDSCH/PUSCH通道)
*ControlChannel_Polar_EncodingChain:控制信息的编码链(通道PDCCH/PUCCH,PBCH)
这些模型代表了5G NR架构的两个互补部分,在实践中展示了一种混合信道编码方法。 该研究的重点是分析每种技术的架构差异,处理参数和数据流特征。 下表总结了研究链之间的关键差异,说明了5g NR中混合方法的逻辑:
/参数/LDPC链/极性链|
|:---|:---|:---|
/码型/LDPC(低密度奇偶校验)/Polar码|
/目的/用户数据(eMBB)/控制信息(URLLC)|
/块大小/大(100+位)/短(<200位|/
/码率/宽范围/优化可靠性|
|5G通道NR/PDSCH,PUSCH/PDCCH,PUCCH,PBCH|
function run_model(name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()]
model_output = engee.run((engee.open(name_model)), verbose=true)
else
model_output = engee.run((engee.load(Path, force=true)), verbose=true)
engee.close(name_model, force=true)
end
sleep(0.1)
return model_output
end
模型#1: DataChannel_LDPC_EncodingChain —高速数据处理
链子,链子 DataChannel_LDPC_EncodingChain 它专为高效处理大量用户数据(eMBB流量)而设计,并针对可变大小的传输块进行了优化。
架构和数据处理:
CRC块向传输块添加校验和以检测错误。 主要参数 targetcoderate 影响CRC的大小。 块输出CRC数据(CRCEn)并定义基础LDPC图的索引(BGN=1 或 2),这是传递下来的链。
CB-CRC块执行数据分割成码块,因为LDPC编码器对输入块的最大大小有限制。 每个码块都有自己的CRC。 代码块的大小和数量取决于接收到的 BGN. 在输出处形成分段块的序列(SEG).
LDPC编码器块使用对应于所选基图的稀疏生成矩阵实现LDPC编码。 参数 targetcoderate 定义初始码率。 关键优势是高度并行解码的可能性。
速率匹配块使编码数据适应可用的物理资源(资源元素)。 使用穿刺,重复或缩短的方法。 块配置有资源规划参数(ncellid, nsizegrid, modulation),以及 targetcoderate 设置最终目标速度。
**输出:**架构 DataChannel_LDPC_EncodingChain 它是一种在通过分段、噪声容忍编码和动态资源适配处理大量数据时,专注于最大化频谱效率和吞吐量的管道。
run_model("DataChannel_LDPC_EncodingChain") # 启动模型。
CRC_BGN = collect(simout["DataChannel_LDPC_EncodingChain/CRC.BGN"]).value[end]
CRC_CRCEn = collect(simout["DataChannel_LDPC_EncodingChain/CRC.CRCEn"]).value[end]
CB_CRC_GI = collect(simout["DataChannel_LDPC_EncodingChain/CB-CRC.GI"]).value[end]
LDPC_1 = collect(simout["DataChannel_LDPC_EncodingChain/LDPC.1"]).value[end]
CB_CRC_SEG = collect(simout["DataChannel_LDPC_EncodingChain/CB-CRC.SEG"]).value[end]
Rate_Matching_1 = collect(simout["DataChannel_LDPC_EncodingChain/Rate Matching.1"]).value[end]
Constant_1 = collect(simout["DataChannel_LDPC_EncodingChain/Constant.1"]).value[end];
下面的代码对5G NR编码链进行了全面的LDPC分析。 所述方法学包括确定基本LDPC图、计算每个处理阶段的数据维数、计算分割参数(码块的数量和大小)、估计最终码率以及分析输出信号中的单元密度。
为了可视化数据变换,构建了尺寸演变的图形,其顺序显示信息量的变化:从初始输入数据通过CRC编码,分割,LDPC编码到速率匹配的最终阶段。
这种方法使得能够按照5G NR标准量化数据转换,分析每个处理阶段的有效性,并验证编码链实现的正确性。
println("1. 基本LDPC图(BGN):$CRC_BGN")
println("2. 数据的维度:")
println(" 输入数据(常数。1):$(length(Constant_1))位")
println(" CRC编码后:$(size(CRC_CRCEn))")
println(" 分割后(CB-CRC.SEG):$(大小(CB_CRC_SEG))")
println(" LDPC编码后:$(size(LDPC_1))")
println(" 速率匹配后:$(length(Rate_Matching_1))bit")
println("3. LDPC参数的计算:")
if ndims(CB_CRC_SEG) == 2
num_codeblocks = size(CB_CRC_SEG, 1)
cb_size = size(CB_CRC_SEG, 2)
println(" 代码块数:$num_codeblocks")
println(" 代码块大小:$cb_size位")
println(" 分割后的总大小:$(num_codeblocks*cb_size)位")
end
if ndims(LDPC_1) == 2
ldpc_rows = size(LDPC_1, 1)
ldpc_cols = size(LDPC_1, 2)
println(" LDPC输出:$ldpc_rows行×l ldpc_cols列")
println(" 总LDPC大小:$(ldpc_rows*ldpc_cols)位")
end
ldpc_final_rate = length(Constant_1) / length(Rate_Matching_1)
println(" 最终码率:$(round(ldpc_final_rate,digits=3))")
if typeof(Rate_Matching_1) <: AbstractVector{Int8}
rm1_int = Int64.(Rate_Matching_1)
ldpc_ones_density = sum(rm1_int) / length(Rate_Matching_1) * 100
println(" 单位密度:$(round(ldpc_ones_density,digits=1))%")
end
ldpc_sizes = [
length(Constant_1),
size(CRC_CRCEn, 2),
size(CB_CRC_SEG, 1) * size(CB_CRC_SEG, 2),
size(LDPC_1, 1) * size(LDPC_1, 2),
length(Rate_Matching_1)
]
ldpc_stages = ["输入数据", "后\nCRC", "后\psegmentation", "后\nLDPC", "后\nRate\nMatching"]
p1 = plot(ldpc_sizes,
marker=:circle,
linewidth=2,
label="LDPC链",
xlabel="处理阶段",
ylabel="位数",
title="数据大小(LDPC)的演变",
xticks=(1:length(ldpc_stages), ldpc_stages),
legend=:topleft,
grid=true,
size=(800, 400))
模型#2: ControlChannel_Polar_EncodingChain -关键命令的传递
链子,链子 ControlChannel_Polar_EncodingChain 它被设计用于超可靠地传递对通信会话的操作至关重要的短控制消息(例如,资源分配的授予,ACK/NACK收据)。
架构和数据处理:
CRC块向控制消息(DCI)添加校验和。 如在LDPC链中一样,CRC的大小可根据具体实现而变化。
Polar编码器块基于通道的"极化"概念实现Arikan编码。 在编码过程中,一些信道变得高度可靠,而另一部分变得完全噪声。 信息位与CRC一起被放置在最可靠的位置。 参数 output_length 指定编码(N)后polar码的长度。 在输出处生成编码比特的向量(ENC)和参数 ML,其可能包含关于原始消息(K)的长度或用于后续处理的可靠信道的模式的信息。
速率匹配Polar块使编码数据适应可用物理资源(CORESET),同时考虑到polar码结构的特征。 与LDPC的情况一样,使用穿孔,重复或缩短的方法,但有额外的限制以保持代码的可靠性。 参数 output_length 确定批准后的最终块大小。
**输出:**架构 ControlChannel_Polar_EncodingChain 它专注于为短控制单元提供极高的可靠性(超可靠)和最小的延迟。 分割的缺乏简化了链结构,但Polar编码的数学基础更加复杂,旨在达到抗噪性的理论极限,这对于5G NR网络中的控制消息至关重要。
run_model("ControlChannel_Polar_EncodingChain") # 启动模型。
Rate_Matching_Polar_1 = collect(simout["ControlChannel_Polar_EncodingChain/Rate Matching Polar.1"]).value[end]
CRC_CRCEn_control = collect(simout["ControlChannel_Polar_EncodingChain/CRC.CRCEn"]).value[end]
Polar_Encoding_ML = collect(simout["ControlChannel_Polar_EncodingChain/Polar Encoding.ML"]).value[end]
Constant_1_control = collect(simout["ControlChannel_Polar_EncodingChain/Constant.1"]).value[end]
Polar_Encoding_ENC = collect(simout["ControlChannel_Polar_EncodingChain/Polar Encoding.ENC"]).value[end];
下面的代码对5g NR的Polar编码链进行了全面的分析。该技术包括确定ML参数和ENC向量的长度,分析数据在不同处理阶段的维度--从初始输入到CRC编码和Polar编码到最终的速率匹配。 输出信号中的最终码率和单元密度进行计算。
为了可视化数据的变换,构建了尺寸演变的图,该图一致地显示通过Polar编码处理的所有阶段的信息量的变化。 这种方法使得量化处理短控制消息的效率并验证实现是否满足5G NR标准的要求成为可能。
println("1. Polar编码参数:")
println(" ML参数:$Polar_Encoding_ML")
println(" ENC向量的长度:$(length(Polar_Encoding_ENC))")
println("2. 数据的维度:")
println(" 输入数据:$(length(Constant_1_control))bit")
println(" CRC编码后:$(size(CRC_CRCEn_control))")
println(" Polar编码后:$(length(Polar_Encoding_ENC))bit")
println(" 速率匹配后:$(length(Rate_Matching_Polar_1))bit")
polar_final_rate = length(Constant_1_control) / length(Rate_Matching_Polar_1)
println("3. 极参数的计算:")
println(" 最终码率:$(round(polar_final_rate,digits=3))")
if typeof(Rate_Matching_Polar_1) <: AbstractVector{Int64}
polar_ones_density = sum(Rate_Matching_Polar_1) / length(Rate_Matching_Polar_1) * 100
println(" 单位密度:$(round(polar_ones_density,digits=1))%")
end
polar_sizes = [
length(Constant_1_control),
size(CRC_CRCEn_control, 2),
length(Polar_Encoding_ENC),
length(Rate_Matching_Polar_1)
]
polar_stages = ["输入数据", "后\nCRC", "在\nPolar之后", "后\nRate\nMatching"]
p2 = plot(polar_sizes,
marker=:square,
linewidth=2,
label="极地链",
xlabel="处理阶段",
ylabel="位数",
title="数据大小的演变(Polar)",
xticks=(1:length(polar_stages), polar_stages),
legend=:topleft,
grid=true,
color=:red,
size=(800, 400))
display(p2)
本文对5G NR的LDPC和Polar编码链进行了比较分析。该方法包括计算两种技术的关键指标:冗余度、单元密度和码率。 使用DataFrames库将结果结构化为对照表,该对照表呈现可比链参数,包括输入和输出数据大小,编码特征和关键结论。
为了直观地显示差异,构建了两个比较图:代码速率直方图(演示数据传输效率策略)和冗余直方图(显示每种技术的错误保护程度)。
这种方法使得在5g NR混合架构框架内全面分析LDPC和Polar码的专业化成为可能,评估它们的互补特性并确认现代通信网络中用户数据和控制信息之间
using DataFrames
ldpc_redundancy = (length(Rate_Matching_1) - length(Constant_1)) / length(Constant_1) * 100
polar_redundancy = (length(Rate_Matching_Polar_1) - length(Constant_1_control)) / length(Constant_1_control) * 100
ldpc_ones_density = typeof(Rate_Matching_1) <: AbstractVector{Int8} ? round(sum(Int64.(Rate_Matching_1))/length(Rate_Matching_1)*100, digits=1) : 0
polar_ones_density = typeof(Rate_Matching_Polar_1) <: AbstractVector{Int64} ? round(sum(Rate_Matching_Polar_1)/length(Rate_Matching_Polar_1)*100, digits=1) : 0
comparison_df = DataFrame(
Параметр = ["输入数据的大小",
"输出数据的大小",
"码率",
"冗余",
"单位密度",
"基本图/ML"],
LDPC = ["$(长度(Constant_1))位",
"$(长度(Rate_Matching_1))位",
"$(round(ldpc_final_rate, digits=3))",
"$(round(ldpc_redundancy, digits=1))%",
"$ldpc_ones_density%",
"BGN=$(CRC_BGN)"],
Polar = ["$(length(Constant_1_control))位",
"$(长度(Rate_Matching_Polar_1))位",
"$(round(polar_final_rate, digits=3))",
"$(round(polar_redundancy, digits=1))%",
"$polar_ones_density%",
"ML=$(Polar_Encoding_ML)"],
Вывод = ["大数据的LDPC",
"结垢;结垢",
"不同的策略",
"LDPC更冗余",
"平衡权力",
"不同的编码参数"]
)
show(comparison_df, allrows=true, allcols=true)
p3 = bar(["LDPC", "Polar"],
[ldpc_final_rate, polar_final_rate],
label="",
ylabel="码率",
title="码率比较",
color=[:blue :red],
alpha=0.7,
legend=false,
grid=true,
size=(600, 400))
hline!([1/2], linestyle=:dash, color=:gray, label="目标1/2")
p4 = bar(["LDPC", "Polar"],
[ldpc_redundancy, polar_redundancy],
label="",
ylabel="冗余(%)",
title="编码冗余比较",
color=[:blue :red],
alpha=0.7,
legend=false,
grid=true,
size=(600, 400))
display(plot(p3, p4, layout=(1, 2), size=(1200, 400)))
编码链分析 DataChannel_LDPC_EncodingChain 和 ControlChannel_Polar_EncodingChain 确认了5g NR混合架构中技术的专业化。
LDPC链使用base graph2(用于小块)处理176位,提供高冗余(772.7%)和低码率(0.115),其重点是用户数据的抗噪性。
Polar chain处理122位,冗余度适中(109.8%),码率更高(0.477),为控制消息提供效率和可靠性的平衡。
结论:
*LDPC码与数据分段是最佳的为用户流量(PDSCH/PUSCH)
*具有高效编码的Polar码专为控制信息(PDCCH/PUCCH)而设计
*不同的冗余和码率策略满足不同的eMBB和URLLC场景需求
结果证明了混合方法的实际实现,其中每种技术都解决了特定的任务,确保了5G NR通信系统的整体效率。
结论
在Engee环境中对信道编码链的分析证实了5g标准NR.LDPC码采用的混合方法的有效性,证明了其高冗余性和优化分割,证明了其适合处理用户数据,强调抗噪性和频谱效率。 反过来,Polar代码显示了代码速度和可靠性的平衡组合,使其成为交付关键任务控制信息的最佳解决方案。
模型的实际实施 DataChannel_LDPC_EncodingChain 和 ControlChannel_Polar_EncodingChain 它不仅可以验证理论原理与工程解决方案的一致性,还可以量化这两种技术的关键参数。 所获得的结果-各种冗余策略,代码速率和数据处理方法-清楚地说明了现代通信网络中用户流量和控制消息之间分离功能的逻辑。
该研究证实,5g NR信道编码的混合架构在技术上是一个合理的折衷方案,可确保同时满足现代无线系统对速度、可靠性和延迟的异构要求。