Пространство вокруг нас заполнено радиоволнами: телефоны, роутеры и тысячи других устройств непрерывно обмениваются данными по воздуху. Каждый раз, когда телефон получает сообщение, загружает видео или картинку, где-то рядом базовая станция раскладывает поток бит по времени и частотам, превращая данные в радиосигнал.
Меня зовут Иван Щербина, я старший инженер-программист в YADRO. Спецификации LTE и 5G обычно написаны «для своих». Чтобы разобраться в них, приходится глубоко погружаться в физику, математику и обработку сигналов. Но мир телекома слишком красив, чтобы прятать его за этой сложностью. В этой статье попробуем шаг за шагом разобраться, как современные сети превращают данные в радиосигнал и передают их через пространство и время.
Базовые принципы передачи данных, или как данные путешествуют по радиоэфир
Любая беспроводная связь начинается с такой идеи: одно устройство пытается что-то сообщить другому через радиоэфир. В мобильной сети роль «говорящего» обычно выполняет базовая станция (БС). Она непрерывно передает в пространство управляющую информацию, синхросигналы и пользовательские данные для тысяч устройств вокруг.
Чтобы понять, как данные доходят до базовой станции, сначала нужно разобраться с главным элементом всей системы — gNB (Next Generation Node B).

gNB на схеме — это базовая станция 5G NR. Она передает данные в радиоэфир и координирует работу устройств внутри соты. На другой стороне находится пользовательское устройство — UE (user equipment). Это может быть телефон, модем, датчик, камера или любое другое устройство, подключающееся к сети.
С точки зрения программной архитектуры внутри базовой станции существует несколько уровней обработки данных. Их можно представить как конвейер, где информация последовательно проходит через набор строго определенных этапов. Внутри стандарта существует большое количество каналов разных уровней. На схеме показана полная картина, но дальше для простоты будем говорить только о нескольких главных физических каналах.

Физический уровень (PHY) передает не только пользовательские данные. Ему нужно помочь устройству найти сеть, синхронизироваться с базовой станцией, получить управляющую информацию и понять, в каких временных и частотных позициях передаются нужные данные. Поэтому в эфире одновременно существуют разные типы физических каналов:
PBCH (broadcast channel) — широковещательный канал, через который UE получает базовую информацию о соте после первичной синхронизации с сигналом базовой станции.
PDCCH (physical downlink control channel) — канал управления. Через него UE получает информацию, где именно в эфире искать предназначенные ему данные и как их правильно декодировать.
PDSCH (physical downlink shared channel) — пользовательские данные: сообщения, видео, картинки с котиками и остальное полезное содержимое.
За пределами gNB находится множество компонентов сети: серверы, транспортная инфраструктура и системы обработки данных. На схеме все это скрыто внутри «облачка», потому что в рамках текущего разговора нас интересует только происходящее на базовой станции и то, как данные превращаются в сигнал.
Путь данных до радиоэфира
Прежде чем разбираться, как устройство ищет информацию в эфире, нужно понять, как обычное сообщение превращается в радиосигнал. Представим простую ситуацию, где жена пишет мужу в мессенджере: «Купи хлеба!». Прежде чем попасть в радиоэфир, данные проходят через серверы, стек протоколов и внутренние уровни обработки базовой станции. На физическом уровне они уже представлены как поток бит, который нужно передать устройству.
На верхних уровнях системы сообщение еще никак не связано с физическим сигналом. Текст, картинка или видео сначала существуют как содержимое приложения: их нужно закодировать, упаковать и подготовить к отправке. Упрощенно этот этап можно отнести к уровням Application и Presentation.
Затем начинается сетевая часть маршрута. Транспортный и сетевой уровни (Transport и Network layers) разбивают информацию на сегменты и пакеты, чтобы ее можно было провести через разные узлы: серверы, маршрутизаторы и, в конце концов, базовую станцию. Для нас сейчас важен не весь сетевой стек, а момент, когда поток данных уже добрался до базовой станции и начинает превращаться в радиосигнал.
Ниже показана сильно упрощенная схема этого процесса. Реальные реализации базовых станций гораздо сложнее и могут отличаться у разных производителей, но для понимания общей логики такой детализации будет достаточно.

Когда поток информации попадает в gNB на уровне RLC, он дополнительно разбивается и подготавливается для передачи по радиоканалу.
Следующий этап — планировщик передачи внутри базовой станции. Он решает, какие устройства и в какой момент времени получат доступ к радиоэфиру. В реализации БС этот функционал обычно относят к MAC-уровню.
Внутри базовой станции этот компонент часто называют scheduler или MAC-PS. Это одна из главных частей базовой станции, которая отвечает за:
распределение радиоресурсов между устройствами,
определение, когда и какие данные попадут в эфир,
планирование передачи данных от устройства обратно к базовой станции.
Результат работы MAC-PS — набор транспортных блоков (Transport Block). Можно считать transport block «единицей полезной нагрузки», которая целиком проходит через цепочку обработки физического уровня (кодирование, перемежение, модуляцию и отображение в радиоресурсы), после чего превращается в радиосигнал.
Превратить набор бит в сигнал, который можно надежно передать через шумный и нестабильный радиоэфир, — отдельная и сложная задача. Просто отправить данные в антенну недостаточно: сигнал должен пережить помехи, многолучевое распространение, затухание и при этом остаться понятным для приемника. Этим и занимается PHY-уровень.
Обработка на PHY
Конвейер PHY — набор математических операций над битами, которые нужны для надежной передачи данных и их корректного восстановления на приемной стороне, независимо от того, принимает ли сигнал пользовательское устройство (UE) или БС. Подробно эти блоки описаны в стандартах 3GPP (TS 38.211, 38.212), но это огромная тема для отдельной статьи. Для общего понимания коротко разберем каждый.
CRC (Circular Redundancy Check). На первом этапе добавляются контрольные биты, позволяющие проверить корректность декодирования. Если данные восстановлены с ошибкой, приемник сообщает о ней, после чего инициируется повторная передача HARQ.

Coding. Для повышения надежности к данным добавляется избыточность с помощью кодирования (LDPC или Polar). Это позволяет восстановить исходные биты даже при частичных искажениях. В NR используются:
Polar-коды — для небольших сообщений, например данные канала PDCCH.
LDPC-коды — для больших блоков данных, обычно пользовательского трафика, тех самых картинок с котиками.
Rate Matching. У блока две цели: привести количество закодированных бит к объему, который реально можно передать в текущем радиоресурсе, а также сформировать разные версии информационной избыточности (redundancy versions) для процесса HARQ.
Здесь появляется важная идея из теории связи — теорема Шеннона. Она связывает пропускную способность канала с шириной полосы и отношением сигнал/шум (SNR). Полоса уже ограничена выделенным радиоресурсом, а качество сигнала определяется условиями радиоэфира: расстоянием до базовой станции, помехами, затуханием и множеством других факторов. Поэтому системе остается подбирать скорость кодирования и объем избыточности так, чтобы передать максимально возможное количество данных, но при этом сохранить возможность их корректного восстановления на приемной стороне.
Scrambling. Закодированные биты побитово комбинируются (XOR) с псевдослучайной последовательностью, зависящей от идентификатора устройства или соты. Это делает сигнал «уникальным»: после дескремблирования полезный сигнал восстанавливается, а интерференция превращается в шум, что позволяет декодеру эффективно ее подавлять.
Modulation. На этом этапе биты преобразуются в комплексные символы. Последние кодируют информацию в амплитуде и фазе несущей, что позволяет передавать данные через радиоканал. В LTE/NR используются схемы модуляции QPSK или QAM. От выбранной схемы зависит количество бит, передаваемых одним символом (спектральная эффективность). С увеличением порядка модуляции растет пропускная способность, но одновременно повышаются требования к качеству радиоканала (SNR).
С точки зрения UE используется тот же конвейер, но в обратном порядке: сначала происходит демодуляция и декодирование, а проверка CRC выполняется в конце.
Несмотря на большое количество этапов, вся PHY-цепочка решает довольно простую задачу: передать как можно больше данных через шумный и ограниченный радиоканал так, чтобы принимающая сторона смогла корректно их восстановить.
Одни блоки повышают устойчивость к ошибкам, другие помогают эффективнее использовать доступные радиоресурсы, а третьи адаптируют передачу под текущее качество сигнала.
Пространство внутри радиоэфира
Теперь, когда у нас есть символы нужно определиться, где где именно передавать. Вся передача происходит на определенных частотах. Вокруг нас одновременно существует огромное количество сигналов. Чтобы они не мешали друг другу, спектр строго структурируют.
Для этого вводится понятие ресурсной сетки (resource grid). Ее можно представить как таблицу:
по вертикали — частота,
по горизонтали — время.
Минимальный элемент этой сетки — resource element (RE). Это комплексное число, полученное на этапе PHY, привязанное к конкретному времени и частоте.
Весь доступный спектр делится на диапазоны. Их параметры определяются стандартом 3GPP, например в TS 38.104, а распределение между операторами выполняется государством, в России этим занимается Государственная комиссия по радиочастотам. В итоге у базовой станции есть четкое ограничение, в каком диапазоне частот ей разрешено передавать сигнал.

В стандартах определены несколько ширин пропускающей полосы. Для LTE — 1.4/5/10/15/20 МГц. Для NR зависит от диапазона частот. Если частота до 6 ГГц, то ширина полос варьируется от 5 до 100 МГц, для миллиметровых волн 24 ГГц (FR2) может достигать 400 МГц. Центр этой полосы называется несущей частотой.
Если передавать сигнал только на одной частоте, мы можем передавать очень ограниченный объем данных. Поэтому полоса разбивается на множество ортогональных поднесущих (subcarriers) — частот, расположенных рядом друг с другом с фиксированным шагом. Данный подход называется ортогональным мультиплексированием с разделением по частоте — OFDM.
Определение ортогональности
Под ортогональностью понимается такое расположение поднесущих, при котором они не мешают друг другу, несмотря на очень близкое расположение по частоте. Интуитивно это можно представить так: максимумы одной поднесущей попадают в нули соседних.
Если говорить чуть строже, ортогональность означает, что за время одного OFDM-символа интеграл от произведения двух разных поднесущих равен нулю:

Где a0 и a1 — это QAM-символы, или полезная информация, передаваемая на поднесущей. А f0 — частота первой поднесущей. Благодаря этому приемник может выделять нужную поднесущую, а вклад остальных взаимно компенсируется. Именно на этом принципе и строится OFDM.
Каждая такая поднесущая несет свой поток символов, и вместе они позволяют передавать данные параллельно. Так формируется «частотная» часть ресурсной сетки — «столбец».
Для примера возьмем пропускную полосу 100 МГц и поднесущие на 30 КГц. Математически это 100 МГц / 0.03 МГц = 3333 поднесущих. Но дополнительно вводят защитные полосы, чтобы не было помех на краях между диапазонами, поэтому сверху и снизу количество поднесущих «срезается». И в итоге остается 3276 поднесущих. Точные цифры можно найти в таблицах стандарта TS 38.104.
Как в NR устроено время
Мы разобрали частоту, теперь добавим вторую ось — время. Столбец, описанный выше, называется OFDM-символ — набор значений по всем поднесущим в фиксированный момент времени. Он излучается определенное время, потом система начинает передавать следующий.
Как и частотная область, время в NR тоже разбито на несколько уровней. Четырнадцать OFDM-символов формируют один слот. Несколько слотов образуют субкадр длительностью 1 мс, а десять субкадров объединяются в кадр длительностью 10 мс.
Количество слотов внутри субкадра определяется нумерологией μ (mu) и рассчитывается как 2μ. Чем выше нумерология, тем короче слот и быстрее отклик системы.
В итоге получается «матрешка»: кадр → субкадр → слот → OFDM-символ.

В примере выше это первая нумерология и, соответственно, 21 = 2 слота. В этом случае внутри каждого субкадра располагаются два слота, а значит, за тот же интервал времени передается уже 28 OFDM-символов.
Сказки древних времен
В LTE временная структура была значительно проще и жестко фиксирована. Четырнадцать OFDM-символов образовывали субкадр длительностью 1 мс, а каждый субкадр всегда делился на два слота.
Такой подход хорошо решал задачу передачи максимального количества данных, но ограничивал гибкость настройки и минимальную задержку передачи данных. Ко времени разработки NR стало понятно, что подход LTE не единственно возможный, и от сети иногда требуется не только максимальная скорость передачи, но и другие сценарии. Для беспилотного транспорта, промышленной автоматизации или удаленных операций важна минимальная задержка. А для IoT — энергоэффективность передачи, чтобы батарейка дольше жила.
Поэтому в NR появилась нумерология — механизм, позволяющий изменять расстояние между поднесущими и длительность слотов под разные сценарии работы сети.
Телеграфируем!
Соединив пространство и время, получается ресурсная сетка, которая в ПО для базовых станций обычно представляется в виде таблицы. Чтобы перейти к классическому представлению сигнала во временной области исходя из того, что мы формируем OFDM-сигнал, мы можем применить посимвольное обратное преобразование Фурье.
Давайте представим, что у нас есть базовая станция, которую настроили на работу в первой нумерологии и всю полосу в 100 МГц отдали одному пользователю. Еще у пользовательского устройства хорошие радиоусловия: он стоит в поле, где нет преград, видит станцию и облучается (обязательно в шапочке из фольги!), поэтому мы можем применить QAM1024 (10 бит на один элемент).
В 100 МГц помещается 3276 элементов в одном символе. Тогда передача одной картинки с арктическими корабликами размером 1 Мб будет занимать примерно 12 мс.
Ниже ресурсная сетка, заполненная полностью одним «магическим» каналом. Чтобы не усложнять, биты изображения разбились на равные части, чтобы уместиться в один символ. Напомню, что внутри комплексные числа.

Далее каждый символ последовательно надо передать волной. Данная математика происходит на радиоюните и включает в себя обратное преобразование Фурье, формирование сигнала из комплексных чисел, полученных после Фурье, и DPD.
В целом, мы молодцы — телеграфировали!
Вместо заключения
Чтобы было веселее, я написал небольшую Python-поделку, в которую можно добавить картинку и посмотреть, как она будет разложена. В программе много упрощений: биты берутся из изображения напрямую и бьются на блоки (в них нет множества важных заголовков, передача не распланирована), нет полноценной PHY-цепочки. Но это сделано намеренно, чтобы показать базис передачи данных на физическом уровне.
С точки зрения передачи в реальной жизни появятся нюансы: пользователю выделят только небольшую часть полосы и времени, и часть элементов будут сервисными. Для корректной и эффективной передачи будет использовано множество дополнительных ухищрений вроде слоев, MIMO, агрегации поднесущих, но они надстраиваются над базовой концепцией OFDM.
И напоследок, телефон ведь не знает абсолютно ничего о слотах, времени и частотах, на которых необходимо искать свои данные. Он знает, что где-то может быть частота и где-то есть базовая станция, которая может вещать. И первый шаг — найти эту самую станцию, потом подключиться. Но это совершенно другая история про SSB, MIB, SIB0 и множество других увлекательных аббревиатур.
Дополнительные источники
Если упрощений было мало и хочется окунуться глубже, то можно заглянуть в эти материалы:
Лекция МГУ, Свертка / Фурье — сложными словами о Фурье.
NR Frame — как пространство и время разделяется на каналы в NR.
LTE resource grid — как пространство и время разделяется на каналы в NR.
Подробнее про модуляцию.
5G NR: The Next Generation Wireless Access Technology.
Конформанс-тестирование: как мы сертифицировали базовую станцию YADRO — подробнее об устройстве базовой станции.
mozg37
Самое интересное и не написали. Как именно осуществляется поиск начала пакета. Для чего именно нужны защитный интервал и циклический префикс. Для чего пилоты нужны, и почему их несколько на символ. Ofdm настолько вездесущ, но и настолько много заблуждений касательно модуляций - особенно если пытаться с нуля вьехать во всю эту мешанину частотно-временного ресурса.
Jester92 Автор
Про сложность въезжания с нуля понимаю полностью. Поэтому в этой статье специально сузил тему до ресурсной сетки, чтобы не перегружать. А уже в следующих планирую дать ответ на часть из ваших вопросов. Как минимум, как именно осуществляется поиск и соединение с сотой, и как ищутся данные. Возможно в процессе выйду и на дополнительные сигналы для оценки канала простым языком.
По теме защитного интервала не планировал ничего писать отдельного. Но если вы про частотную составляющую, то его основное предназначение - уменьшать помехи соседним каналам.
bashkirtsevich
Пилоты осуществляют эквализацию (интерполяция) и коррекцию фазы остальных несущих.
Циклический префикс предотвращает эффект многолучевого распространения, при переходе на новый символ начало символа из-за этого искажатеся; приемник этот символ просто отбрасывает, дополнительно еще может осуществлять по немуоценку качества сигнала.
Поиск начала пакета осуществляется через CAZAC-преамбулы (сигнал с постоянной амплитудой и нулевой автокорреляцией), кросс-корреляция такого сигнала -- дельта-функция (то есть сигнал коррелирует только сам с собой), потому она достаточно шумоустойчивая, и позволяет определить начало сигнала с точностью до одного отсчета.
Возможно защитный интервал (во временной области) выполняет ту же роль, что и префикс; в частотной области скорее всего работает как полосовой фильтр; также в частотной области если символ формируется через одну несущую, то на выходе формируется несколько копий символа.
kuza2000
Да, интересно. Предположу, что там начальная синхропоследовательность есть. В свое время делал драйвер для магнитофона по алгоритму, применяемому в Радио-86РК. Там перепад с 0 на 1 кодировал 0, а с 1 на 0 - 1 (или наоборот). До сих пор помню синхробайт 0xE6 - начало синхронизации. Но это, конечно, совсем примитив, по сравнению с сотовой связью :)