Cигналы PUCCH в 5G
Cигналы PUCCH в 5G
В статье представлена система генерации и обработки сигналов восходящей линии связи в стандарте 5G, а именно – канала управления PUCCH (Physical Uplink Control Channel). Этот пример позволяет наглядно исследовать различия в цепочках обработки сигналов для каждого формата, сравнивая их структурную сложность, используемые методы модуляции, кодирования и расширения спектра. PUCCH (Physical Uplink Control Channel) — физический канал восходящей линии связи в 5G NR, предназначенный исключительно для передачи управляющей информации UCI (Uplink Control Information) от пользовательского оборудования (UE) к базовой станции (gNB).
PUCCH обеспечивает передачу трёх основных типов управляющей информации (UCI):
- HARQ-ACK — подтверждение приема нисходящих данных (HARQ-ACK/NACK).
- CSI (Channel State Information) — отчеты о состоянии радиоканала (CQI, RI, PMI).
- SR (Scheduling Request) — запрос на выделение ресурсов для передачи данных.
В отличие от канала данных PUSCH, PUCCH оптимизирован под передачу малых объемов служебной информации с минимальной задержкой и высокой надежностью. В 5G NR канал реализован с повышенной гибкостью по сравнению с LTE: поддержка множества форматов (0–4), конфигурируемая длительность (1–14 символов OFDM), динамическое выделение ресурсов и частотное/временное мультиплексирование.

Модель реализует и сравнивает форматы PUCCH 1-4 (PUCCH 0 не реализован, т.к. предназначен для 1-2 бит со сверхкороткой длительностью). Каждый формат оптимизирован для передачи определённых типов управляющей информации (UCI – Uplink Control Information).
function run_model( name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()]
model = engee.open( name_model )
model_output = engee.run( model, verbose=true );
else
model = engee.load( Path, force=true )
model_output = engee.run( model, verbose=true );
engee.close( name_model, force=true );
end
sleep(0.1)
return model_output
end
run_model("PUCCH_model")
Сравнительный анализ форматов PUCCH, реализованных в модели:
Технические характеристики форматов PUCCH
| Формат | Назначение | Модуляция | Transform Precoding | Особенности |
|---|---|---|---|---|
| PUCCH1 | Короткая UCI (1-2 бита) | Низкий PAPR | Да | OCC |
| PUCCH2 | CSI | QPSK | Нет | - |
| PUCCH3 | HARQ-ACK, SR | QPSK + DFT | Да | - |
| PUCCH4 | Высокая ёмкость | QPSK + Spreading | Да | OCC + CDM |
using EngeeDSP
using Statistics, LinearAlgebra
using FFTW
using StatsBase
function unwrap(phase::Vector{Float64})
unwrapped = copy(phase)
for i in 2:length(phase)
diff = phase[i] - phase[i-1]
if diff > π
unwrapped[i] -= 2π
elseif diff < -π
unwrapped[i] += 2π
end
end
return unwrapped
end
function compute_papr(signal::AbstractArray{<:Complex})
power = abs2.(signal)
papr_db = 10 * log10(maximum(power) / mean(power))
return round(papr_db, digits=2)
end
function compute_spectrum(signal::AbstractArray{<:Complex}, fs=1.0)
N = length(signal)
fft_result = fft(signal)
freqs = fftfreq(N, fs)
pwr = abs2.(fft_result) / N
return freqs, pwr
end
function analyze_constellation(signal::AbstractArray{<:Complex}, title)
p = scatter(real.(signal), imag.(signal),
title=title, xlabel="In-phase (I)", ylabel="Quadrature (Q)",
legend=false, markersize=4, markerstrokewidth=0, alpha=0.7,
aspect_ratio=:equal)
return p
end
function compute_signal_stats(signal::AbstractArray{<:Complex}, name)
println("\n" * "═"^50)
println("СТАТИСТИКА: $name")
println("═"^50)
println(" Тип данных: $(eltype(signal))")
println(" Размер: $(size(signal))")
println(" PAPR: $(compute_papr(signal)) дБ")
println(" Энергия: $(round(sum(abs2.(signal)), digits=2))")
println(" Средняя амплитуда: $(round(mean(abs.(signal)), digits=4))")
println(" Средняя фаза: $(round(mean(angle.(signal)), digits=4)) рад")
end
PUCCH Формат 1: Моделирует передачу короткой управляющей информации (1-2 бита) с использованием последовательностей с низким PAPR (пик-фактором). Включает операции:
-
Генерацию низко-PAPR последовательностей (
nrLowPAPRS). -
Внешнее управление параметрами через пользовательские блоки (
Engee Function). -
Использование ортогональных покровных кодов (OCC – Orthogonal Cover Codes) через блоки
Spreading Formatдля разделения пользователей.
.png)
y = collect(simout["PUCCH_model/PUCCH1/# Parse and validate inputs.y"]).value[end]
oSeq1 = collect(simout["PUCCH_model/PUCCH1/Spreading Format-1.1"]).value[end]
final = collect(simout["PUCCH_model/PUCCH1/# Get the PUCCH format 1 sequence.Seq"]).value[end]
compute_signal_stats(y, "Сигнал y (после nrPUCCH1)")
compute_signal_stats(oSeq1, "Ортогональная последовательность 1")
compute_signal_stats(final, "Финальная последовательность")
p1 = analyze_constellation(y, "PUCCH1: Созвездие сигнала 'y'")
p2 = analyze_constellation(final, "PUCCH1: Финальное созвездие")
p3 = plot(abs.(final), title="PUCCH1: Огибающая амплитуды",
xlabel="Отсчеты", ylabel="Амплитуда", legend=false, grid=true)
display(plot(p1, p2, p3, layout=(1,3), size=(1200, 400)))
savefig("pucch1_analysis.png")
PUCCH Формат 2: Предназначен для передачи CSI (Channel State Information) большей длины. Цепочка обработки включает:
-
Скрамблирование с помощью генератора псевдослучайных последовательностей (
PUCCH PRBS). -
Модуляцию QPSK (
Symbol Modulate). -
Относительно простую структуру по сравнению с другими форматами.
.png)
prbs_bits = collect(simout["PUCCH_model/PUCCH2/PUCCH PRBS-1.1"]).value[end]
modulated = collect(simout["PUCCH_model/PUCCH2/Symbol Modulate-1.1"]).value[end]
println("\nСкремблированные биты (PRBS):")
println(" Кол-во бит: $(length(prbs_bits))")
println(" Баланс (1/0): $(sum(prbs_bits))/$(sum(.!prbs_bits))")
compute_signal_stats(modulated, "Модулированные QPSK символы")
unique_symbols = unique(round.(modulated, digits=6))
println("\nУникальные точки QPSK созвездия:")
for sym in unique_symbols
println(" I=$(round(real(sym), digits=4)), Q=$(round(imag(sym), digits=4))")
end
phase = angle.(modulated)
instant_freq = diff(unwrap(phase))
p1 = histogram(instant_freq, bins=30, title="PUCCH2: Мгновенная частота",
xlabel="Частота", ylabel="Частота встречаемости", legend=false)
p2 = analyze_constellation(modulated, "PUCCH2: Созвездие QPSK")
display(plot(p1, p2, layout=(1,2), size=(1200, 400)))
savefig("pucch2_analysis.png")
PUCCH Формат 3: Используется для передачи HARQ-ACK и SR средней ёмкости. Особенности:
-
Преобразование логических битов в целочисленные значения.
-
Символьная модуляция (QPSK).
-
Трансформное прекодирование (Transform Precoding), применяющее DFT (Дискретное Преобразование Фурье) перед OFDM-модуляцией, что характерно для поднесущей с DFT-s-OFDM (SC-FDMA) в восходящей линии связи.
.png)
converted = collect(simout["PUCCH_model/PUCCH3/Convert in Int.1"]).value[end]
final = collect(simout["PUCCH_model/PUCCH3/Transform Precoding-1.1"]).value[end]
println("\nПреобразованные целочисленные данные:")
println(" Диапазон: $(minimum(converted)) - $(maximum(converted))")
println(" Среднее: $(round(mean(converted), digits=2))")
compute_signal_stats(final, "Сигнал после Transform Precoding")
N = length(final)
fs = 1.0
fft_result = fft(final)
freqs = fftfreq(N, fs)
pwr = abs2.(fft_result) / N
p1 = plot(freqs, pwr, title="PUCCH3: Спектральная плотность мощности",
xlabel="Частота", ylabel="Мощность (дБ)", legend=false, grid=true,
xlim=(-0.5, 0.5))
p2 = analyze_constellation(final, "PUCCH3: Созвездие после DFT")
max_pwr = maximum(pwr)
half_pwr = max_pwr / 2
indices = findall(pwr .> half_pwr)
if !isempty(indices)
min_freq = minimum(freqs[indices])
max_freq = maximum(freqs[indices])
bandwidth = max_freq - min_freq
println("\nОценка ширины полосы:")
println(" Ширина полосы по уровню 3 дБ: $(round(bandwidth, digits=4))")
else
println("\nНе удалось оценить ширину полосы по уровню 3 дБ")
end
display(plot(p1, p2, layout=(1,2), size=(900, 400)))
savefig("pucch3_analysis.png")
PUCCH Формат 4: Предназначен для передачи управляющей информации высокой ёмкости для одного пользователя или с мультиплексированием с разделением по коду для нескольких пользователей. Имеет наиболее сложную структуру:
-
Последовательное скремблирование, модуляция QPSK.
-
Блочное расширение спектра (Block-wise Spreading), реализованное в отдельной подсистеме
Spreading. Этот процесс умножает модулированные символы на ортогональные покровные коды (OCC) для создания нескольких копий сигнала, что повышает надёжность и/или позволяет мультиплексировать пользователей. -
Трансформное прекодирование.
.png)
prbs = collect(simout["PUCCH_model/PUCCH4/PUCCH PRBS.1"]).value[end]
modulated = collect(simout["PUCCH_model/PUCCH4/Symbol Modulate.1"]).value[end]
after_spreading = collect(simout["PUCCH_model/PUCCH4/Spreading.Out1"]).value[end]
final = collect(simout["PUCCH_model/PUCCH4/Transform Precoding.1"]).value[end]
compute_signal_stats(modulated, "До Block-wise Spreading")
compute_signal_stats(after_spreading, "После Spreading")
compute_signal_stats(final, "После Transform Precoding")
gain_factor = mean(abs2.(after_spreading)) / mean(abs2.(modulated))
println("\nЭффективность Block-wise Spreading:")
println(" Коэффициент усиления мощности: $(round(gain_factor, digits=2))")
plots = []
push!(plots, analyze_constellation(modulated, "До Spreading"))
push!(plots, analyze_constellation(after_spreading, "После Spreading"))
push!(plots, analyze_constellation(final, "Финальный сигнал"))
p4 = plot(abs.(modulated), label="До Spreading", linewidth=1.5, alpha=0.8)
plot!(p4, abs.(after_spreading), label="После Spreading", linewidth=1, alpha=0.7)
plot!(p4, abs.(final), label="После Precoding", linewidth=1, alpha=0.7,
title="PUCCH4: Сравнение амплитуд", xlabel="Отсчеты", ylabel="Амплитуда", grid=true)
push!(plots, p4)
display(plot(plots..., layout=(2,2), size=(1000, 800)))
savefig("pucch4_analysis.png")
📊 Ключевые результаты моделирования
📈 PAPR (пик-фактор)
- PUCCH1: 0.0 дБ — low-PAPR последовательности, идеально для энергоэффективности UE
- PUCCH2: 0.0 дБ — QPSK с постоянной огибающей в модели
- PUCCH3: 13.8 дБ — высокий PAPR характерен для DFT-s-OFDM
- PUCCH4: 8.73 дБ — баланс между ёмкостью и энергопотреблением
🔧 Специфические особенности
- PUCCH1: low-PAPR + OCC — для коротких ACK/NACK и SR
- PUCCH2: Простая QPSK цепочка — для периодических CSI отчетов
- PUCCH3: DFT-s-OFDM — для HARQ-ACK + SR средней ёмкости
- PUCCH4: Block-wise Spreading + CDM — для высокой ёмкости и многопользовательских сценариев
💾 Объём данных
- PUCCH1: 84 символа (низкая эффективность, ~0.024 бит/символ)
- PUCCH2: 48 символов (1.0 бит/символ)
- PUCCH3: 48 символов (1.0 бит/символ)
- PUCCH4: 96 символов после расширения (1.0 бит/символ)
⚡ Сравнение с теорией
Все результаты соответствуют спецификациям 3GPP:
- PUCCH1: низкий PAPR как задумано для IoT-устройств
- PUCCH3: высокий PAPR (13.8 дБ) ожидаем для DFT-s-OFDM
- PUCCH4: spreading даёт коэффициент усиления мощности 1.0 — ортогональные коды для разделения пользователей, а не усиления
- Эффективность использования ресурсов возрастает от PUCCH1 к PUCCH4 пропорционально сложности обработки
Вывод
Все четыре формата PUCCH корректно реализованы в модели, их характеристики соответствуют спецификациям 3GPP 5G NR.
| Формат | Назначение | Преимущества |
|---|---|---|
| PUCCH1 | Короткая управляющая информация | Минимальное энергопотребление, низкий PAPR |
| PUCCH2 | Передача CSI (информация о состоянии канала) | Простота реализации, стабильная работа |
| PUCCH3 | HARQ-ACK и запросы планирования | Баланс ёмкости и надёжности |
| PUCCH4 | Высокая ёмкость, многопользовательский доступ | Поддержка CDM, расширенная функциональность |
Ключевые выводы по реализации PUCCH форматов в модели 5G NR:
-
Каждый из четырёх форматов PUCCH реализует чётко определённый компромисс между ёмкостью, задержкой и энергоэффективностью, что позволяет адаптивно подбирать конфигурацию под конкретные требования сетевого сценария.
-
Модель наглядно демонстрирует прямую зависимость между типом передаваемой управляющей информации (UCI) и сложностью сигнального тракта — от минималистичного PUCCH 0 для коротких подтверждений до высокоёмкого PUCCH 4 с поддержкой CDM для многопользовательской работы.
-
Все критические компоненты физического уровня — скремблирование, модуляция, трансформное прекодирование и расширение спектра — реализованы в строгом соответствии со спецификациями 3GPP TS 38.211, обеспечивая полную совместимость модели со стандартом.
-
Предложенная реализация служит не только учебным инструментом, но и валидной основой для прототипирования, тестирования и верификации реальных алгоритмов обработки сигналов PUCCH в системах связи пятого поколения.