Архитектура канального кодирования 5G NR
Архитектура канального кодирования 5G NR: LDPC и Polar
Внедрение пятого поколения мобильных сетей (5G NR) потребовало фундаментального пересмотра физических технологий передачи данных. Одной из ключевых инноваций стал переход от универсального Turbo-кодирования, использовавшегося в LTE, к гибридной архитектуре, сочетающей LDPC-коды для пользовательских данных и Polar-коды для управляющей информации.
Канальное кодирование обеспечивает надежность цифровой связи, защищая передаваемые данные от ошибок, вызванных шумами и помехами. В стандарте LTE эта задача решалась с помощью Turbo-кодов. Однако требования 5G — гигабитные скорости (eMBB), сверхнизкие задержки (URLLC) и массовое подключение устройств (mMTC) — выявили ограничения Turbo-кодов: их высокая вычислительная сложность и итеративная природа становились «бутылочным горлышком» для пропускной способности.
Стандартизация 3GPP привела к созданию гибридной системы: LDPC (Low-Density Parity-Check) коды для обработки высокоскоростных пользовательских данных благодаря высокой распараллеливаемости декодирования, и Polar коды для надежной доставки коротких управляющих сообщений, теоретически достигающие пропускной способности канала для малых блоков.
В данной статье проводится практический анализ двух функциональных моделей, реализованных в среде Engee:
-
DataChannel_LDPC_EncodingChain: цепочка кодирования для пользовательских данных (каналы PDSCH/PUSCH)
-
ControlChannel_Polar_EncodingChain: цепочка кодирования для управляющей информации (каналы PDCCH/PUCCH, PBCH)
Эти модели представляют собой две взаимодополняющие части архитектуры 5G NR, демонстрируя на практике гибридный подход к канальному кодированию. Исследование фокусируется на анализе архитектурных различий, параметров обработки и характеристик потоков данных каждой технологии. Следующая таблица суммирует ключевые различия между исследованными цепочками, иллюстрируя логику гибридного подхода в 5G NR:
| Параметр | LDPC цепочка | Polar цепочка |
|---|---|---|
| Тип кода | LDPC (Low-Density Parity-Check) | Polar codes |
| Назначение | Пользовательские данные (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 Encoder реализует кодирование по схеме LDPC, используя разреженную порождающую матрицу, соответствующую выбранному базовому графу. Параметр targetcoderate определяет начальную кодовую скорость. Ключевое преимущество — возможность высокопараллельного декодирования.
Блок Rate Matching адаптирует закодированные данные к доступным физическим ресурсам (Resource Elements). Используются методы выкалывания (puncturing), повторения (repetition) или сокращения (shortening). Блок конфигурируется параметрами планирования ресурсов (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];
Представленный ниже код выполняет комплексный анализ LDPC цепочки кодирования 5G NR. Методика включает определение базового графа LDPC, вычисление размерности данных на каждом этапе обработки, расчет параметров сегментации (количество и размер кодблоков), оценку финальной кодовой скорости и анализ плотности единиц в выходном сигнале.
Для визуализации трансформации данных строится график эволюции размера, который последовательно отображает изменение объема информации: от исходных входных данных через CRC кодирование, сегментацию, LDPC кодирование до финального этапа Rate Matching.
Данный подход позволяет количественно оценить преобразование данных в соответствии со стандартом 5G NR, проанализировать эффективность каждого этапа обработки и проверить корректность реализации цепочки кодирования.
println("1. Базовый граф LDPC (BGN): $CRC_BGN")
println("\n2. Размерности данных:")
println(" Входные данные (Constant.1): $(length(Constant_1)) бит")
println(" После CRC кодирования: $(size(CRC_CRCEn))")
println(" После сегментации (CB-CRC.SEG): $(size(CB_CRC_SEG))")
println(" После LDPC кодирования: $(size(LDPC_1))")
println(" После Rate Matching: $(length(Rate_Matching_1)) бит")
println("\n3. Расчет параметров 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 строк × $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 = ["Входные\nданные", "После\nCRC", "После\nсегментации", "После\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 — Доставка критических команд
.png)
Цепочка ControlChannel_Polar_EncodingChain предназначена для сверхнадежной доставки коротких управляющих сообщений, критичных для работы сессии связи (например, grants для выделения ресурсов, квитанции ACK/NACK).
Архитектура и обработка данных:
Блок CRC добавляет контрольную сумму к управляющему сообщению (DCI). Как и в LDPC цепочке, размер CRC может варьироваться в зависимости от конкретной реализации.
Блок Polar Encoder реализует кодирование по схеме Арикана, основанной на концепции «поляризации» каналов. В процессе кодирования часть каналов становится высоконадежной, а другая часть — полностью зашумленной. Информационные биты вместе с CRC размещаются в наиболее надежных позициях. Параметр output_length задает длину полярного кода после кодирования (N). На выходе формируются вектор закодированных битов (ENC) и параметр ML, который, вероятно, содержит информацию о длине исходного сообщения (K) или шаблон надежных каналов для последующей обработки.
Блок Rate Matching Polar адаптирует закодированные данные к доступным физическим ресурсам (CORESET) с учетом особенностей структуры полярного кода. Как и в случае LDPC, используются методы выкалывания, повторения или сокращения, но с дополнительными ограничениями для сохранения надежности кода. Параметр output_length определяет финальный размер блока после согласования.
Вывод: Архитектура ControlChannel_Polar_EncodingChain ориентирована на обеспечение предельной надежности (Ultra-Reliable) при минимальной задержке для коротких блоков управления. Отсутствие сегментации упрощает структуру цепочки, но математическая основа 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];
Представленный ниже код выполняет комплексный анализ Polar цепочки кодирования 5G NR. Методика включает определение параметра ML и длины вектора ENC, анализ размерности данных на различных этапах обработки — от исходного входа через CRC кодирование и Polar кодирование до финального Rate Matching. Вычисляются финальная кодовая скорость и плотность единиц в выходном сигнале.
Для визуализации трансформации данных строится график эволюции размера, который последовательно отображает изменение объема информации через все этапы обработки Polar кодирования. Данный подход позволяет количественно оценить эффективность обработки коротких управляющих сообщений и проверить соответствие реализации требованиям стандарта 5G NR.
println("1. Параметры Polar кодирования:")
println(" ML параметр: $Polar_Encoding_ML")
println(" Длина ENC вектора: $(length(Polar_Encoding_ENC))")
println("\n2. Размерности данных:")
println(" Входные данные: $(length(Constant_1_control)) бит")
println(" После CRC кодирования: $(size(CRC_CRCEn_control))")
println(" После Polar кодирования: $(length(Polar_Encoding_ENC)) бит")
println(" После Rate Matching: $(length(Rate_Matching_Polar_1)) бит")
polar_final_rate = length(Constant_1_control) / length(Rate_Matching_Polar_1)
println("\n3. Расчет параметров Polar:")
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 = ["Входные\nданные", "После\nCRC", "После\nPolar", "После\nRate\nMatching"]
p2 = plot(polar_sizes,
marker=:square,
linewidth=2,
label="Polar цепочка",
xlabel="Этап обработки",
ylabel="Количество бит",
title="Эволюция размера данных (Polar)",
xticks=(1:length(polar_stages), polar_stages),
legend=:topleft,
grid=true,
color=:red,
size=(800, 400))
display(p2)
Представленный код выполняет сравнительный анализ LDPC и Polar цепочек кодирования 5G NR. Методика включает вычисление ключевых метрик: избыточности, плотности единиц и кодовых скоростей для обеих технологий. Результаты структурируются в таблицу сравнения с использованием библиотеки DataFrames, где представлены сопоставимые параметры цепочек, включая размеры входных и выходных данных, характеристики кодирования и основные выводы.
Для наглядной визуализации различий строятся два сравнительных графика: гистограмма кодовых скоростей, демонстрирующая стратегии эффективности передачи данных, и гистограмма избыточности, показывающая степень защиты от ошибок для каждой технологии.
Такой подход позволяет комплексно проанализировать специализацию LDPC и Polar кодов в рамках гибридной архитектуры 5G NR, оценить их взаимодополняющие характеристики и подтвердить обоснованность разделения функций между пользовательскими данными и управляющей информацией в современных сетях связи.
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 = ["$(length(Constant_1)) бит",
"$(length(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)) бит",
"$(length(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 цепочка обрабатывает 176 бит с использованием базового графа 2 (для малых блоков), обеспечивая высокую избыточность (772.7%) и низкую кодовую скорость (0.115), что ориентировано на помехоустойчивость пользовательских данных.
Polar цепочка обрабатывает 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 является технически обоснованным компромиссом, обеспечивающим одновременное выполнение разнородных требований к скорости, надежности и задержкам в условиях современных беспроводных систем.