Этот пример показывает, как создать передачу LTE-M нисходящей линии связи, состоящую из физического канала управления нисходящей линии связи MTC (MPDCCH), а также связанного с ним физического общего канала нисходящей линии связи (PDSCH) и физического широковещательного канала (PBCH), включая повторы и скачкообразную перестройку частоты. По сравнению с устройствами, выпускаемыми до выпуска 13, устройства Cat-M предлагают более низкую стоимость и сложность, расширенную покрытие за счет введения повторов и расширенного DRX для дальнейшего энергосбережения.
Введение LTE-M в стандарт LTE добавило поддержку, специально предназначенную для связи машинного типа (MTC). Начиная с Cat-0 устройств в выпуске 12, это было дополнительно расширено в более поздних выпусках, чтобы определить отдельный класс устройств Cat-M. В LTE добавлены две категории, Cat-M1 в версии 13 (через рабочие элементы eMTC), а затем Cat-M2 в версии 14 (feMTC).
Существует два режима работы расширения покрытия (CE) для устройств Cat-M (также называемых UE BL/CE в 3GPP стандартных документах), режим CE A и режим CE B. Режим CE A нацелен на скромное усиление покрытия с 32 повторениями, тогда как режим CE B нацелен на значительное расширение покрытия с 2048 повторениями для Сигнализация CE mode A осуществляется через DCI format 6-0A/6-1A сообщений, а CE mode B - через 6-0B/6-1B сообщения. Цепочка обработки MPDCCH, создание и отображение DM-RS почти идентичны цепочке расширенного физического канала управления нисходящей линии связи (EPDCCH), плюс добавление повторений и поведение скачкообразной перестройки частоты. В этом примере специально используются функциональные возможности LTE Toolbox™'s EPDCCH для реализации модели MPDCCH. Канал данных LTE-M является PDSCH LTE с добавлением повторов и скачкообразной перестройки частоты. Широковещательный канал LTE-M состоит из двух частей; часть «ядро», соответствующая PBCH LTE, и часть специфического «повторения» LTE-M, где символы и сигналы RS ячейки в части «ядро» повторяются.
LTE-M может быть развернут в стандартных ячейках LTE, поэтому не все подкадры обязательно используются для передачи BL/CE. Подкадры BL/CE обозначаются битовой картой, передаваемой в сообщении MIB-M (аналогично механизму в NB-IoT). Для простоты в этом примере предполагается, что все подкадры определены как BL/CE. Символ OFDM запуска MPDCCH/PDSCH для передач LTE-M специфичен для соты и передается широковещательно в системной информации (SI).
Основным выходом этого примера MATLAB ® является многокадровая сетка ресурсов Cat-M1/Cat-M2, содержащая элементы ресурсов MPDCCH (RE), связанные DM-RS, RE PDSCH LTE-M, RE PBCH (части «ядро» и «повторение» вместе с соответствующими опорными сигналами соты) и другие опорные сигналы, как Эта сетка также модулируется OFDM для генерации ассоциированной формы сигнала основной полосы частот временной области. Графики создаются для обеспечения визуализации назначения RE в сетке и величины сигнала основной полосы частот.
Повторы - Чтобы значительно расширить охват для устройств LTE-M, повторы для MPDCCH, PDSCH и PBCH были введены для устройств Cat-M в версии 13. Это обеспечит по меньшей мере 15dB повышение производительности по сравнению с устройствами предварительного выпуска 13. MPDCCH может повторяться максимум 256 раз, PDSCH до 2048 и PBCH до 5, включая «основную» часть.
Узкие полосы - LTE-M использует концепцию узких полос для выделения поднесущих в широкополосной несущей LTE для каналов данных и управления. Каждый узкополосный блок состоит из 6 последовательных PRB, но не все PRB обязательно являются частью узкополосных блоков (в зависимости от общей BW несущей).
Широкополосные сети - LTE-M версии 14 использует концепцию широкополосных сетей для выделения более высокой полосы пропускания для канала передачи данных. Может быть одна или более широкополосных полос, каждая из которых состоит из 4 узких полос или одной широкополосной полосы, состоящей из 1,2 или 3 узких полос. Для Cat-M2 устройства, сконфигурированного в режиме CE A (формат DCI 6-1A), канал данных передается по одной широкополосной полосе, если ce-pdsch-maxBandwidth-config имеет значение 5MHz или resource block assignment flag устанавливается равным 1 или по всей полосе пропускания несущей LTE через битовую карту RBG в случае resource block assignment flag имеет значение 0. resource block assignment flag присутствует только в том случае, если ce-pdsch-maxBandwidth-config имеет значение 20MHz. Для Cat-M2 устройства, сконфигурированного в режиме В CE (формат 6-1B DCI), канал данных передается по одной широкополосной полосе, если ce-pdsch-maxBandwidth-config имеет значение 5MHz и до 4 широкополосных, если ce-pdsch-maxBandwidth-config имеет значение 20MHz.
Скачкообразная перестройка частоты - хотя устройство eMTC версии 13 имеет мгновенную полосу пропускания 1.4MHz (самые простые устройства LTE-M имеют максимальную полосу пропускания 1,4 МГц), оно может получить доступ к более широкой несущей LTE через различные узкие полосы между подкадрами. Если передача включает в себя повторение по множеству подкадров, может быть применена необязательная скачкообразная перестройка частоты между подкадрами. Скачкообразная перестройка частоты происходит между различными узкими полосами и блоками от 1 до 16 подкадров в зависимости от режима СЕ. Длина блока скачкообразной перестройки и смещение скачкообразной перестройки являются специфичными для ячейки параметрами. В нисходящей линии связи как для управления, так и для данных скачкообразная перестройка частоты может быть более 2 узких полос или 4 равноотстоящих узких полос.
Передача данных LTE-M использует тот же физический канал (PDSCH), что и в случае LTE. Однако различие заключается в том, что LTE-M обеспечивает возможность необязательных повторений и скачкообразной перестройки частоты.
Режимы передачи - Допустимые режимы передачи для PDSCH для LTE-M - 1 (одиночная антенна), 2 (разнесение передачи), 6 (предварительное кодирование на основе кодовой книги с замкнутым контуром) и 9 (предварительное кодирование на основе некодовой книги, одиночный уровень). Метод 6 передачи только поддержан в способе A CE, тогда как 1, 2 и 9 поддержаны и в способе A CE и в методе B CE. В отличие от LTE PDSCH, операция по нескольким вводят несколько продукции (MIMO) не поддержана в LTE-M, потому что большинство устройств LTE-M, как ожидают, будет недорогими устройствами с синглом, получают антенну.
Повторы и скремблирование - PDSCH передается в NRepPDSCH (> = 1) последовательные подкадры BL/CE нисходящей линии связи. ОниNRepPDSCH подкадры передаются блоками Nacc подкадры (см. TS 36.211 раздел 6.8B.2 [1]) и одна и та же последовательность скремблирования применяется ко всем подкадрам в блоке. Nacc может быть 1 или 4 в дуплексном режиме FDD и 1 или 10 в дуплексном режиме TDD. Может быть до 32 повторений в режиме CE A и до 2048 повторений в режиме CE B. Количество повторений PDSCH определяется комбинацией полустатической конфигурации и динамического выбора для конкретной передачи.
Узкополосные и широкополосные - PRB, используемые для передач PDSCH LTE-M, должны принадлежать узкополосным (ам) (и широкополосным (ам), если Cat-M2). Cat-M1 устройства имеют мгновенную полосу пропускания передачи 1.4MHz в узком диапазоне. Cat-M2 устройства имеют ширину полосы пропускания 5MHz или 20MHz, как указано параметром более высокого уровняce-pdsch-maxBandwidth-configв этом случае передача PDSCH может быть в широкополосной полосе (полосах), где каждая широкополосная полоса состоит из до 4 неперекрывающихся узких полос.
Скачкообразная перестройка частоты - Если PDSCH повторяется по множеству подкадров, скачкообразная перестройка частоты между подкадрами может необязательно применяться, когда скачкообразная перестройка происходит для блоков подкадров длиной 1,2,4,8 для устройств в режиме СЕ А и 2,4,8,16 в режиме СЕ В. Длина блока скачкообразной перестройки и смещение скачкообразной перестройки являются специфичными для ячейки параметрами. Скачкообразная перестройка частоты может быть более 2 узких полос или 4 равноудаленных узких полос. Относительные позиции RB, несущих PDSCH в каждой узкой полосе скачкообразного изменения, остаются одинаковыми.
MPDCCH передает LTE-M управляющую информацию нисходящей линии связи (DCI). MPDCCH и соответствующие опорные сигналы демодуляции (DM-RS) передаются на одном или нескольких портах с аппарата (107 108 109 110). Этапы обработки на физическом уровне и операции MPDCCH и EPDCCH очень похожи, с различиями, являющимися повторениями, необязательной скачкообразной перестройкой частоты и тем, как применяется скремблирование.
Повторы и скремблирование - MPDCCH передается с использованием агрегирования одного или нескольких последовательных элементов расширенного канала управления (ECCE) в NRepMPDCCH (> = 1) последовательные подкадры BL/CE нисходящей линии связи. ОниNRepMPDCCH подкадры передаются блоками Nacc подкадры (см. TS 36.211 раздел 6.8B.2 [1]) и одна и та же последовательность скремблирования применяется ко всем подкадрам в блоке. Например, для MPDCCH, не связанного с P-RNTI или SC-RNTI и сконфигурированного с режимом CE A, Nacc = 1, как описано в TS 36.211, раздел 6.8B.2 [1], так что скремблирование инициализируется каждым подкадром BL/CE, как в случае EPDCCH. Nacc может быть 1 или 4 в дуплексном режиме FDD и 1 или 10 в дуплексном режиме TDD. Количество повторений MPDCCH определяется комбинацией полустатической конфигурации и динамического выбора для конкретной передачи. Сеть полустатически настраивает максимальное количество повторений Rmax из множества (1,2,4,8,16,32,64,128,256) затем динамически выбирает фактические повторения для конкретной передачи из множества (Rmax, Rmax/2, Rmax/4, Rmax/8).
Узкие полосы - MPDCCH передается в 2, 4 или 6 RB в одном узком диапазоне внутри каждого подкадра. Набор MPDCCH PRB состоит из ECCE, пронумерованных от 0... N 'ECCEpk, где N' ECCEpk - количество ECCE в наборе MPDCCH-PRB p подкадра k. Количество ECCE, используемых для одного MPDCCH, указывается в таблице 6.8A.1-2 [1] TS 36.211 для 2 или 4 PRB, если повторение не сконфигурировано, и таблице 6.8B.1-2 для всех остальных случаев.
Скачкообразная перестройка частоты - Если MPDCCH повторяется по множеству подкадров, скачкообразная перестройка частоты между подкадрами может быть применена, если скачкообразная перестройка происходит для блоков подкадров длиной 1,2,4,8 для устройств в режиме СЕ А и 2,4,8,16 в режиме СЕ В. Длина блока скачкообразной перестройки и смещение скачкообразной перестройки являются специфичными параметрами соты. Скачкообразная перестройка частоты может быть более 2 узких полос или 4 равноудаленных узких полос. Относительные позиции RB, несущих MPDCCH в каждой узкой полосе скачкообразного изменения, остаются одинаковыми.
Подобно PDSCH, LTE-M использует тот же физический широковещательный канал (PBCH), что и в случае LTE, но с необязательными повторениями.
Основной PBCH и неосновный PBCH - LTE-M PBCH разделен на две части; PBCH «ядра», который является обычным PBCH LTE и передается в первом подкадре каждого кадра с периодичностью 40 мс. Неосновной частью являются специфичные для LTE-M повторения, в которых символы PBCH «ядра» повторяются до 5 раз в зависимости от дуплексного режима и длины циклического префикса.
Повторы - повторы PBCH происходят в подкадре 9 предыдущего кадра и подкадре 0 текущего радиокадра для FDD в соответствии с TS 36.211 Таблица 6.6.4-1 [1]. Для TDD повторы происходят в подкадрах 0 и 5 того же кадра радиосвязи, что и в таблице 6.6.4-2. Поднесущие остаются одинаковыми для основной части и повторов. Следует отметить, что в отличие от основной части повторы PBCH не должны соответствовать RE, используемым опорными сигналами CSI. Повторы определяются в соответствии с дуплексным режимом и длиной циклического префикса. Для FDD все базовые символы PBCH повторяются 4 раза при обычном циклическом префиксе и 3 раза при расширенном циклическом префиксе. Для TDD, если расширенный циклический префикс, все символы повторяются 3 раза. Для TDD и нормального циклического префикса базовые символы 0 и 1 PBCH повторяются 5 раз, а символы 2 и 3 повторяются 3 раза.
Этот пример разделен на следующие этапы:
Конфигурирование параметров моделирования (для всей соты и для MPDCCH/PDSCH)
Создание и кодирование полезной нагрузки сообщения DCI для передачи по MPDCCH
Создание и кодирование полезной нагрузки DL-SCH для передачи по PDSCH
Создайте символы для последовательности подкадров MPDCCH и DM-RS и преобразуйте их в элементы ресурсов сетки ресурсов из нескольких подкадров.
Создайте символы для последовательности подкадров PDSCH LTE-M, сопоставьте их с элементами ресурсов сетки ресурсов из нескольких подкадров.
Создайте символы для последовательности подкадров PBCH LTE-M, сопоставьте их с элементами ресурсов сетки ресурсов из нескольких подкадров.
Применение модуляции CP-OFDM к конечной сетке для создания связанной формы сигнала основной полосы частот
Графики отображения сетки ресурсов и формы сигнала временного ряда
В этом первом разделе определяются параметры моделирования, которые будут использоваться в последующих разделах для создания DCI, MPDCCH и DM-RS. В этом примере используется несущая LTE FDD с полосой пропускания 5MHz и обычным циклическим префиксом. Параметры настройки для всей ячейки содержатся в структуре enb, конкретные параметры MPDCCH содержатся в структуре mpdcch и конкретные параметры PDSCH содержатся в структуре pdsch.
enb = struct(); enb.NDLRB = 25; % LTE carrier BW enb.NCellID = 1; % The cell ID enb.CellRefP = 1; % Number of cell-specific ports enb.CFI = 3; % CFI indicator enb.DuplexMode = 'FDD'; % Duplex mode enb.TDDConfig = 1; % Uplink/Downlink configuration (TDD) enb.CyclicPrefix = 'Normal'; % Cyclic prefix duration enb.NSubframe = 0; % Subframe number enb.NFrame = 0; % Frame number enb.CSIRSPeriod = 'Off'; % CSI-RS period control enb.CSIRSConfig = 0; % CSI-RS configuration enb.CSIRefP = enb.CellRefP; % Number of CSI-RS antenna ports enb.ZeroPowerCSIRSPeriod = 'Off'; % Zero power CSI-RS period control enb.ZeroPowerCSIRSConfig = 0; % Zero power CSI-RS configuration enb.Ng = 'Sixth'; % HICH group multiplier enb.PHICHDuration = 'Extended'; % PHICH duration % Set up hopping specific parameters enb.HoppingOffset = 1;% Hopping offset 1...maxAvailableNarrowbands (TS 36.331) enb.NChDLNBhop = 2; % Number of narrowbands over which MPDCCH/PDSCH hops (2 or 4) enb.NChDLNB = 2; % Number of subframes in one hop/hopping block length
% MPDCCH Configuration mpdcch = struct(); mpdcch.Hopping = true; % Enable/Disable frequency hopping (only for 1.4MHz) mpdcch.NRepMPDCCH = 8; % The total number of MPDCCH repetitions mpdcch.EPDCCHECCE = [0 7]; % ECCE range used for this MPDCCH (8 ECCE) mpdcch.EPDCCHType = 'Localized';% Transmission type ('Localized', 'Distributed') mpdcch.EPDCCHNID = 1; % Cell ID/MPDCCH ID depending on search space type mpdcch.EPDCCHStart = 4; % MPDCCH start OFDM symbol in each subframe mpdcch.RNTI = 1; % RNTI for use with 'Localized' transmission
Назначение MPDCCH - (начальный) набор PRB, используемых для передачи MPDCCH, определяется вектором из 0-основанных индексов PRB, задающих абсолютные позиции PRB в пределах широкополосной несущей. Эти PRB должны находиться в допустимом узком диапазоне. Если скачкообразная перестройка частоты отключена для MPDCCH, кандидат MPDCCH всегда будет передаваться в PRB, определенных параметром «InitPRASEet». Если для MPDCCH разрешена скачкообразная перестройка частоты, кандидат MPDCCH будет передаваться в тех же относительных позициях PRB, но в различных узких полосах, как определено в TS 36.211, раздел 6.8B.5. Для несущей 5MHz LTE, используемой в этом примере, существует четыре узких полосы, указанных в TS 36.211, раздел 6.2.7 [1]. Первый узкополосный имеет PRB 0... 5, второй - PRB 6... 11, третий - PRB 13... 18, а четвертый - PRB 19... 24. Все другие PRB в пределах 5MHz диапазона выходят за пределы узких полос и не могут использоваться для передачи LTE-M. В этом примере мы используем формат 2 MPDCCH, где 8 ECCE используются для передачи MPDCCH. Каждая пара слотов PRB состоит из 4 ECCE, поэтому необходимо определить минимальное распределение 2 PRB. В этом примере выбирается 3-я и 4-я PRB в первом узкополосном диапазоне.
mpdcch.InitPRBSet = (2:3)';
mpdcch.InitNSubframe = 0; % Absolute subframe number of first MPDCCH subframe
% PDSCH Configuration pdsch = struct(); pdsch.Hopping = true; % Enable/Disable frequency hopping (only for 1.4MHz) pdsch.NRepPDSCH = 16; % The total number of PDSCH repetitions pdsch.CEMode = 'A'; % A for CE mode A and B for CE mode B pdsch.TxScheme = 'Port0'; % Port 0 or TxDiversity or Spatial Mux or Port 7 pdsch.Modulation = 'QPSK';% Modulation scheme (QPSK/16QAM) pdsch.NLayers = 1; % Number of layers pdsch.RV = 0; % Redundancy version for DL-SCH processing pdsch.RNTI = 1; % RNTI used for the UE pdsch.NSCID = 0; % Scrambling identity pdsch.TrBlkSizes = 100; % Transport block size
Назначение PDSCH - назначение PRB является гибким в случае режима CE A (сигнализируется через формат DCI 6-1A) и фиксированным в случае режима CE B (сигнализируется через формат DCI 6-1B). В режиме А CE назначение может быть на 1-6 PRB в пределах одной или более узких полос, как определено типом 2 выделения ресурсов, или для всей полосы пропускания несущей LTE через тип 0 выделения ресурсов. В режиме CE B распределение охватывает либо все 6 PRB, либо первые 4 PRB сконфигурированных узкополосных (узкополосных) блоков. Для Cat-M1 устройств передача осуществляется в одном узком диапазоне. Для Cat-M2 устройств, если параметр верхнего уровняce-pdsch-maxBandwidth-config устанавливается на 20MHz в режиме В CE, передача может охватывать несколько узкополосных диапазонов, и общее распределение может быть максимум до 96 PRB (сгруппированных в широкополосные диапазоны, где каждый широкополосный диапазон состоит из 4 узкополосных диапазонов). Используемые широкополосные сигналы передаются через поле индекса широкополосной комбинации в DCI, как описано в TS 36.213 Таблица 7.1.6-2 [3]. Если ce-pdsch-maxBandwidth-config устанавливается в 5MHz, передача происходит в одной широкополосной полосе, состоящей из 1,2,3 или 4 узких полос в зависимости от полосы пропускания несущей LTE (NDLRB).
В этом примере присвоение определяется с помощью InitPRBSet параметр и InitNarrowbandIndex. Если скачкообразная перестройка частоты отключена, PDSCH LTE-M всегда будет передаваться в PRB, определенных InitPRBSet и InitNarrowbandIndex параметры. Если скачкообразная перестройка частоты активизирована, PDSCH будет передаваться в тех же относительных положениях PRB, но в различных узких полосах, как определено в TS 36.211 раздел 6.4.1 [1]. Если распределение охватывает более одного узкополосного диапазона или одного или нескольких широкополосных диапазонов, InitNarrowbandIndex должен быть вектором, определяющим составляющие узкополосные индексы. В качестве примера, если ce-pdsch-maxBandwidth-config 20MHz и передача LTE-M находится в пределах 20MHz несущей LTE, имеется 4 широкополосных (0,1,2,3), доступных для передачи LTE-M PDSCH с соответствующими узкополосными индексами {(0 1 2 3) (4 5 6 7) (8 9 10 11) (12 13 14 15)}. Если требуемое распределение является широкополосным 2 и 3, то InitNarrowbandIndex необходимо установить значение [8 9 10 11 12 13 14 15].
pdsch.InitPRBSet = (1:2)'; % 0-based PRB index pdsch.InitNarrowbandIndex = 0; % 0-based wideband index % In this example, we disable frequency hopping when transmission is over 2 % or more narrowbands if numel(pdsch.InitNarrowbandIndex) > 1 pdsch.Hopping = false; mpdcch.Hopping = false; end
Включение или отключение повторов PBCH
enb.RepPBCHEnable = true; % Specify the power scaling in dB for MPDCCH, MPDCCH DM-RS, PDSCH and % reference signals (Cell RS or DM-RS) mpdcch.MPDCCHPower = 30; mpdcch.MPDCCHDMRSPower = 32; pdsch.Rho = 25; pdsch.RSPower = 80; % Power levels for the PBCH core and reps parts enb.PBCHPower = 33; enb.PBCHRepsPower = 36; % Power level for the PBCH Cell RS reps enb.PBCHCellRSRepsPower = 28;
Суммарные подкадры для моделирования (все подкадры нисходящей линии связи являются подкадрами BL/CE), и MPDCCH и PDSCH передаются без каких-либо промежутков подкадров
totmtcSubframes = mpdcch.InitNSubframe+mpdcch.NRepMPDCCH+2+pdsch.NRepPDSCH; % Identify all downlink subframes in a frame info = arrayfun(@(x)lteDuplexingInfo(setfield(enb,'NSubframe',x)),0:9); dlsfs = arrayfun(@(x)strcmpi(x.SubframeType,'Downlink'),info); % Total absolute subframes to simulate sfsnumlastFrame = getlastabsSF(dlsfs,totmtcSubframes); totSubframes = floor(totmtcSubframes/sum(dlsfs)) *10 + sfsnumlastFrame; % Absolute subframe number of first PDSCH subframe, this would be two % subframes after the MPDCCH subframes (assuming no non BL/CE subframes) lastSfForMPDCCHPlus2 = getlastabsSF(dlsfs,mpdcch.NRepMPDCCH + 2); % Last subframe number in last frame for MPDCCH+2 pdsch.InitNSubframe = mpdcch.InitNSubframe + floor((mpdcch.NRepMPDCCH + 2)/sum(dlsfs)) *10 + lastSfForMPDCCHPlus2; % Find the last absolute subframe for MPDCCH transmission lastSfForMPDCCH = getlastabsSF(dlsfs,mpdcch.NRepMPDCCH); % Last subframe number in last frame for MPDCCH mtclastabsSfForMPDCCH = mpdcch.InitNSubframe + floor((mpdcch.NRepMPDCCH)/sum(dlsfs)) *10 + lastSfForMPDCCH;
Битовый вектор dciBits передается функции lteDCIEncode который выполняет маскирование и вставку CRC, сверточное кодирование и согласование скорости с хвостовым укусом, следуя разделам TS 36.212 5.3.3.2-5.3.3.4. Обратите внимание, что третий аргумент lteDCIEncode определяет размер выходного сигнала согласования скорости, равный емкости битов данных MPDCCH в субкадре. Здесь мы используем фиктивное 26-битное сообщение DCI из всех, соответствующее сообщению DCI Format 6-1A, как указано в TS 36.212 раздел 5.3.3.1.12.
% Find the MPDCCH data bit capacity [~,info] = lteEPDCCHIndices(enb,setfield(mpdcch,'EPDCCHPRBSet',mpdcch.InitPRBSet)); %#ok<SFLD> % Define DCI message bits dciBits = ones(26,1); % Create the coded DCI bits codedDciBits = lteDCIEncode(mpdcch,dciBits,info.EPDCCHG);
% Find the LTE-M PDSCH data bit capacity, this should not include the PBCH, % PSS, SSS and CSI-RS REs. So we select the subframe 9 which is a DL % subframe in both FDD and TDD duplex modes (Note: subframe 9 is not DL for % TDDConfig 0, TDDConfig 0 does not have a 'normal' DL subframe) fullPDSCHsf = 9; [~,fullInfo] = ltePDSCHIndices(setfield(enb,'NSubframe',fullPDSCHsf),pdsch,getPDSCHAllocation(enb,pdsch)); %#ok<SFLD> % Define DL-SCH message bits trData = ones(pdsch.TrBlkSizes(1),1); % Create the coded DL-SCH bits codedTrBlock = lteDLSCH(enb,pdsch,fullInfo.G,trData);
В этом примере используется локализованный тип с форматами MPDCCH 2 и 2 PRB. MPDCCH с 2 или 4 PRB и без повторов использует ту же таблицу формата, что и EPDCCH (TS 36.211 Таблица 6.8A.1-2). Для всех остальных случаев форматы приведены в таблице 6.8B.1-2 TS 36.211. Также в режиме CE A, без повторов и всех подкадров LTE-M скремблирование инициализируется для каждого подкадра, как для EPDCCH и cinit то же самое (потому что Nacc = 1 для CEmodeA и NabsMPDCCH = 1). Все другие этапы обработки, т.е. модуляция символов, отображение уровня, предварительное кодирование и отображение на элементы ресурсов, являются одинаковыми для EPDCCH и MPDCCH. Следовательно, мы используем функции EPDCCH для генерации символов и индексов MPDCCH.
% Number of subframes in a scrambling block Nacc = 1; if strcmpi(enb.DuplexMode,'FDD') && mpdcch.NRepMPDCCH >= 4 Nacc = 4; elseif strcmpi(enb.DuplexMode,'TDD') && mpdcch.NRepMPDCCH >= 10 Nacc = 10; end % Create a resource grid for the entire transmission. The MPDCCH, PDSCH and % DM-RS symbols will be mapped in this array. Note that we are creating the % grid for 4 antenna planes as the MPDCCH transmission can be sent on ports % selected from the set (107, 108, 109 and 110) subframeSize = lteDLResourceGridSize(enb,4); sfgrid = zeros([subframeSize(1) subframeSize(2)*totSubframes subframeSize(3:end)]); mpdcchSym = []; % Initialize MPDCCH symbols mpdschSym = []; % Initialize PDSCH symbols mpbchCoreSymFull = []; % Initialize PBCH symbols startSubframe = enb.NFrame*10+enb.NSubframe; % Initial absolute subframe number for sf = startSubframe + (0:totSubframes -1)
% Set current absolute subframe and frame numbers enb.NSubframe = mod(sf,10); enb.NFrame = floor((sf)/10); % Skip processing if this is not a downlink subframe duplexInfo = lteDuplexingInfo(enb); if ~strcmpi(duplexInfo.SubframeType,'Downlink') continue end % Transmitting the MPDCCH if (sf >= mpdcch.InitNSubframe) && (sf < mtclastabsSfForMPDCCH) % Calculate the PRBSet used in the current subframe prbset = getHoppingAllocation(enb,mpdcch); % Calculate the MPDCCH indices for the current subframe mpdcch.EPDCCHPRBSet = prbset; [mpdcchIndices,info] = lteEPDCCHIndices(enb,mpdcch); % Create an empty subframe grid subframe = lteDLResourceGrid(enb,4); % Encode MPDCCH symbols from DCI codeword % In the case of repetition, the same symbols are repeated in each of % a block of NRepMPDCCH subframes. Frequency hopping is applied as required if ~mod(sf,Nacc) || isempty(mpdcchSym) mpdcchSym = lteEPDCCH(enb,mpdcch,codedDciBits)*db2mag(mpdcch.MPDCCHPower); end % Map MPDCCH symbols to the subframe grid subframe(mpdcchIndices) = mpdcchSym; % Create MPDCCH DM-RS % The MPDCCH and its reference symbols are transmitted on the same % port(s) and is transmitted only on the PRBs in which the % corresponding MPDCCH is mapped. The DM-RS sequence is the same as for % the EPDCCH as given by the equations in TS 36.211 section 6.10.3A mpdcchDMRS = lteEPDCCHDMRS(enb,mpdcch)*db2mag(mpdcch.MPDCCHDMRSPower); % MPDCCH DM-RS symbols mpdcchDMRSIndices = lteEPDCCHDMRSIndices(enb,mpdcch); % MPDCCH DM-RS indices subframe(mpdcchDMRSIndices) = mpdcchDMRS; % Map DM-RS signals to the grid % Now assign the current subframe into the overall grid sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:) = subframe; end
Для PDSCH LTE-M местоположения PBCH, PSS, SSS и CSI-RS RE подсчитываются в отображении, но не используются в передаче. Это означает, что согласованная пропускная способность скорости должна включать в себя эти местоположения RE, но символы для этих местоположений не передаются. Таким образом, мы создаем кодовое слово соответственно и прокалываем символы, соответствующие конфликтующим местоположениям
if (sf >= pdsch.InitNSubframe) % Calculate the PRBSet used in the current subframe prbset = getPDSCHAllocation(enb,pdsch); % Calculate the PDSCH indices for the current subframe pdsch.PRBSet = prbset; mpdschIndices = ltePDSCHIndices(enb,pdsch,pdsch.PRBSet); % If the subframe contains PBCH, PSS, SSS, CSI-RS or Zero Power % CSI-RS REs, then we need to puncture the corresponding symbols % from the mapping but the rate matching should be to the full % PDSCH capacity ignoring the possible presence of these symbols. % This is done by setting the subframe and TDDConfig (if TDD mode) % to a subframe containing no PBCH, PSS and SSS and turning off the % CSI-RS and ZP CSI-RS. The full set of possible PDSCH indices are % recalculated every subframe as these can change when frequency % hopping enbTemp = enb; enbTemp.TDDConfig = 1; % TDDConfig 0 has no full PDSCH subframe enbTemp.NSubframe = fullPDSCHsf; % Set the subframe to a full PDSCH subframe enbTemp.CSIRSPeriod = 'Off'; % CSI-RS period control enbTemp.ZeroPowerCSIRSPeriod = 'Off'; % Zero power CSI-RS period control mpdschIndicesFull = ltePDSCHIndices(enbTemp,pdsch,pdsch.PRBSet); [~, txmpdschIndicesPositions] = intersect(mpdschIndicesFull,mpdschIndices); % Create an empty subframe grid subframe = lteDLResourceGrid(enb,4); % Encode PDSCH symbols from the codeword % In the case of repetition, the same symbols are repeated in each of % a block of NRepPDSCH subframes. Frequency hopping is applied as required if ~mod(sf,Nacc) || isempty(mpdschSym) mpdschSym = ltePDSCH(enb,pdsch,codedTrBlock)*db2mag(pdsch.Rho); end % Map punctured PDSCH symbols to the subframe grid subframe(mpdschIndices) = mpdschSym(txmpdschIndicesPositions); % Transmit UE-specific reference signal (DM-RS) if applicable if any(strcmpi(pdsch.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'})) ueRSIndices = lteDMRSIndices(enb,pdsch); ueRSSymbols = lteDMRS(enb,pdsch); subframe(ueRSIndices) = ueRSSymbols*db2mag(pdsch.RSPower); % Map symbols to the grid end % Now assign the current subframe into the overall grid sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:) = subframe; end
Формирование и отображение символов PBCH на RE сетки ресурсов. PBCH LTE-M состоит из обычной «основной» части LTE и специфических повторов LTE-M. Базовые символы PBCH присутствуют только в первом подкадре с периодичностью 4 кадра.
subframe = sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:);
if(mod(enb.NSubframe,10)==0)
% Generate symbols if its the first simulated frame or
% when mod(NFrame,4) is 0;
if ~mod(enb.NFrame,4) || isempty(mpbchCoreSymFull)
mpbchCoreSymFull = getMPBCHCore(enb);
end
mpbchCoreIndices = ltePBCHIndices(enb,{'1based'});
% Now extract out the core part for the Frame
mpbchCoreSym = mpbchCoreSymFull(:,mod(enb.NFrame,4)+1);
% Map the PBCH core symbols to the subframe
subframe(mpbchCoreIndices) = mpbchCoreSym*db2mag(enb.PBCHPower);
% Now assign the current subframe into the overall grid
sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:) = subframe;
% Get the cell RS symbols and indices to be repeated if PBCH
% repetitions are enabled
[mpbchCoreCellRSSymbols,mpbchCoreCellRSIndices] = getPBCHCoreCellRS(enb);
elseif enb.RepPBCHEnable && strcmpi(enb.DuplexMode,'FDD') && (mod(enb.NSubframe,10)==9)
% If this is the 9th subframe in FDD mode, then create the core
% symbols and indices for the next frame to be used for PBCH
% repetitions in this subframe
enbNext = enb;
enbNext.NSubframe = 0;
enbNext.NFrame = enbNext.NFrame+1; % Advance to the next frame
% if the current frame contained the last PBCH block, then we need
% the new set of PBCH symbols
if mod(enb.NFrame,4)==3
mpbchCoreSymFull = getMPBCHCore(enbNext);
end
% Now extract out the core part for the Frame
mpbchCoreSym = mpbchCoreSymFull(:,mod(enbNext.NFrame,4)+1);
mpbchCoreIndices = ltePBCHIndices(enbNext,{'1based'});
[mpbchCoreCellRSSymbols,mpbchCoreCellRSIndices] = getPBCHCoreCellRS(enbNext);
end
% PBCH repetition part if enabled
if (enb.RepPBCHEnable)
% Get the PBCH repetition part consisting of repeating PBCH symbols
% and repeating Cell RS signals and corresponding indices
[pbchrepSymbols, pbchrepIndices, pbchCellRSrepSymbols, pbchCellRSrepIndices] = getPBCHRep(enb,mpbchCoreSym,mpbchCoreIndices,mpbchCoreCellRSSymbols,mpbchCoreCellRSIndices);
% Map the PBCH repetitions to the grid
subframe(pbchrepIndices) = pbchrepSymbols*db2mag(enb.PBCHRepsPower);
% Map the Cell RS repetitions to the grid
subframe(pbchCellRSrepIndices) = pbchCellRSrepSymbols*db2mag(enb.PBCHCellRSRepsPower);
end
% Now assign the current subframe into the overall grid
sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:) = subframe;
end
Создайте форму сигнала основной полосы частот во временной области посредством OFDM-модуляции сетки ресурсов. Полученная матрица имеет четыре столбца; один из которых будет содержать комплексные выборки формы сигнала во временной области основной полосы для MPDCCH
waveform = lteOFDMModulate(enb,sfgrid);
Постройте график сигнала основной полосы частот сетки и временной области. Если передача использует более одного порта, отображается только первый порт. Обратите внимание, что график сетки ресурсов использует уровни мощности отдельных каналов и сигналов для назначения цветов элементам ресурса.
% Create an image of overall resource grid % Plot the port used by MPDCCH along with the first port for all other channels figure im = image(abs(sfgrid(:,:,info.EPDCCHPorts(1))+ sfgrid(:,:,1))); cmap = parula(64); colormap(im.Parent,cmap); axis xy; title(sprintf('LTE-M CEMode%s Downlink RE Grid (NRepMPDCCH = %d, NRepPDSCH = %d)',pdsch.CEMode,mpdcch.NRepMPDCCH,pdsch.NRepPDSCH)) xlabel('OFDM symbols') ylabel('Subcarriers') % Create the legend box to indicate the channel/signal types associated with the REs reNames = {'MPDCCH';'MPDCCH DRS';'PDSCH';'PBCH Core'; 'PBCH Reps'; 'Cell RS Reps'}; clevels = round(db2mag([mpdcch.MPDCCHPower mpdcch.MPDCCHDMRSPower pdsch.Rho enb.PBCHPower enb.PBCHRepsPower enb.PBCHCellRSRepsPower])); % If using DM-RS, include in legend if any(strcmpi(pdsch.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'})) reNames{end+1} = 'DMRS'; clevels(end+1) = pdsch.RSPower; end N = numel(reNames); L = line(ones(N),ones(N), 'LineWidth',8); % Generate lines % Set the colors according to cmap set(L,{'color'},mat2cell(cmap( min(1+clevels,length(cmap) ),:),ones(1,N),3)); % Set the colors according to cmap legend(reNames{:}); % Create separate plots of the control/data waveforms figure plot(abs(waveform(:,info.EPDCCHPorts(1)))) title('MPDCCH Time Domain Waveform') xlabel('Samples') ylabel('Amplitude') figure plot(abs(waveform(:,1))) title('PBCH and PDSCH time domain waveform') xlabel('Samples') ylabel('Amplitude')



В этом примере используются следующие локальные функции:
calcNarrowbandPRBSets - Расчет узких полос и связанных PRB
getHoppingAllocation - Расчет распределения субкадров
getPDSCHAllocation - Расчет распределения PDSCH
getPBCHCore - Расчет основных символов и индексов PBCH
getPBCHCoreCellRS - Расчет основных символов и индексов PBCH
getPBCHRep - Расчет части повторения PBCH
3GPP ТС 36.211 «Физические каналы и модуляция»
3GPP TS 36.212 «Мультиплексирование и канальное кодирование»
3GPP ТС 36.213 «Процедуры физического уровня»
3GPP TS 36.331 «Спецификация протокола управления радиоресурсами (RRC)»
О. Либерг, М. Сундберг, Я. -П. Ван, Дж. Бергман и Дж. Сакс, Сотовый интернет вещей: технологии, стандарты и производительность, Elsevier, 2018.
Э. Дальман, С. Парквалл и Дж. Сколд 4G LTE-Advanced Pro и The Road to 5G
% Calculate the widebands, narrowbands and PRBSets for the LTE carrier bandwidth function [prbsets,nNB,nWB] = calcNarrowbandPRBSets(NDLRB) % Narrowbands & Widebands (See 36.211 section 6.2.7) NDLNB = floor(NDLRB/6); nNB = 0:(NDLNB-1); % Narrowbands if NDLNB >= 4 NDLWB = floor(NDLNB/4); else NDLWB = 1; end nWB = 0:(NDLWB-1); % Widebands % PRBs in a narrowband ii = 0:5; ii0 = floor(NDLRB/2) - 6*(NDLNB/2); prbsets = zeros(6,numel(nNB)); for nb = 1:numel(nNB) if mod(NDLRB,2) && nNB(nb)>= (NDLNB/2) prbsets(:,nb) = 6*(nNB(nb))+ii0+ii + 1; else prbsets(:,nb) = 6*(nNB(nb))+ii0+ii; end end end % Calculate the resource blocks allocated in the hopping narrowband function prbset = getHoppingAllocation(enb,chs) % If frequency hopping is disabled, the allocation is same as initial if ~chs.Hopping prbset = chs.InitPRBSet; return end % Hopping narrowband calculation according to TS 36.211 section 6.8B.5 nNBi0ss = 0; % Get the possible narrowbands and associated PRBSets if strcmpi(enb.DuplexMode,'FDD') idelta = 0; else idelta = enb.NChDLNB-2; end j0 = floor((chs.InitNSubframe+idelta)/enb.NChDLNB); % Get the narrowbands and corresponding resources [prbsets,nNB] = calcNarrowbandPRBSets(enb.NDLRB); % Calculate the narrowband for this subframe enb.NSubframe = enb.NFrame*10+enb.NSubframe; % Get the absolute subframe number nnBi = mod( (nNBi0ss + (mod(floor((enb.NSubframe+idelta)/enb.NChDLNB - j0),enb.NChDLNBhop))*enb.HoppingOffset) ,numel(nNB)); % Calculate the PRBSet for this subframe, they are on the same RBs % within the narrowband [rbstartIndex,nbstartIndex] = find(prbsets == chs.InitPRBSet(1)); [rbendIndex,nbendIndex] = find(prbsets == chs.InitPRBSet(end)); if (isempty(rbstartIndex) || isempty(rbendIndex)) || (nbstartIndex ~= nbendIndex) error('Invalid PRBSet specified, must be resources within single narrowband'); end prbset = prbsets(rbstartIndex:rbstartIndex+numel(chs.InitPRBSet)-1,nnBi+1); end % Calculate the PDSCH allocation function prbset = getPDSCHAllocation(enb,PDSCH) if PDSCH.Hopping % Cat-M1 mode with hopping prbset = getHoppingAllocation(enb,PDSCH); else % Calculate the allocations in narrowband(s) [prbsets,nNB] = calcNarrowbandPRBSets(enb.NDLRB); % Calculate the PRBSet for this subframe, they are on the same RBs % within all narrowbands rbstartIndex = mod(find(prbsets == PDSCH.InitPRBSet(1))-1,6)+1; rbendIndex = mod(find(prbsets == PDSCH.InitPRBSet(end))-1,6)+1; if isempty(rbstartIndex) || isempty(rbendIndex) error('Invalid PRBSet specified, must be resources within narrowbands'); end if any(PDSCH.InitNarrowbandIndex > max(nNB)) error('Invalid InitNarrowbandIndex specified, must be from the set 0...%d',max(nNB)); end prbset = prbsets(rbstartIndex:rbendIndex,PDSCH.InitNarrowbandIndex+1); prbset = prbset(:); end end % Calculate the Cell RS REs and symbols corresponding to the 'core' PBCH % part function [pbchCoreCellRSSymbols,pbchCoreCellRSIndices] = getPBCHCoreCellRS(enb) % We need to repeat the cell reference signals within the (k,l) region NscRB = 12; k = (enb.NDLRB*NscRB)/2 -36 + (0:71) + 1; % 1-based full possible PBCH subcarrier locations if strcmpi(enb.CyclicPrefix,'Normal') NsymbDL = 7; else NsymbDL = 6; end l = NsymbDL+ (0:3)+ 1; % 1-based OFDM symbol numbers in the subframe corresponding to PBCH core part % NOTE: The cell RS symbols and indices can be looked up from the % grid if provided or can be created here as shown below cellRSIndices = lteCellRSIndices(enb); cellRSSymbols = lteCellRS(enb); rsgrid = lteDLResourceGrid(enb); rsgrid(cellRSIndices) = cellRSSymbols; % Now remove all RS symbols outside of the core PBCH band excludeSubs = setdiff(1:enb.NDLRB*NscRB,k); excludeofdmSymbols = setdiff(1:NsymbDL*2,l); % Now remove all the unwanted RE locations rsgrid(:,excludeofdmSymbols,:) = 0; rsgrid(excludeSubs,:,:) = 0; % What is in the grid is the RS symbols to be repeated pbchCoreCellRSIndices = find(rsgrid); pbchCoreCellRSSymbols = rsgrid(pbchCoreCellRSIndices); end % Calculate the PRBCH and Cell RS REs and symbols corresponding to the % repetition part function [pbchrepSymbols,pbchrepIndices, pbchCellRSrepSymbols, pbchCellRSrepIndices] = getPBCHRep(enb,pbchCoreSymbols,pbchCoreIndices,pbchCoreCellRSSymbols,pbchCoreCellRSIndices) pbchrepIndices = []; pbchrepSymbols = []; symMappings = {}; pbchCellRSrepIndices = []; pbchCellRSrepSymbols = []; % For both FDD and TDD modes, there is no repetition if NDLRB = 6 if enb.NDLRB==6 return end % Get the subcarriers for the PBCH core part [pbchCoreSubcarriers,ofdmSymbols,~] = ind2sub(lteDLResourceGridSize(enb),pbchCoreIndices); % Get the subcarriers for the Cell RS core part [pbchCellRSCoreSubcarriers,ofdmSymbolsCellRS,~] = ind2sub(lteDLResourceGridSize(enb),pbchCoreCellRSIndices); % FDD reps only in subframes 9 (frame n-1) and 0 (frame n) and TDD only % reps in subframes 0 and 5 in the same frame % Get the subframe symbol numbers in which the reps go onto if strcmpi(enb.DuplexMode,'FDD') if strcmpi(enb.CyclicPrefix,'Normal') NsymbDL = 7; if (mod(enb.NSubframe,10) == 0) symMappings = { 5 ; 12 ; 13 ; [4 14]}; elseif (mod(enb.NSubframe,10)==9) symMappings = { [4 8 12] ; [5 9 13] ; [6 10 14] ; [7 11]}; end else NsymbDL = 6; if (mod(enb.NSubframe,10) == 0) symMappings = {[] ; 4 ; 11 ; 12}; elseif (mod(enb.NSubframe,10)==9) symMappings = { [4 7] ; [5 8] ; [6 9] ; [10 11]}; end end else if strcmpi(enb.CyclicPrefix,'Normal') NsymbDL = 7; if (mod(enb.NSubframe,10) == 0) symMappings = { [4 12] ; [5 13] ; 6 ; 7}; elseif (mod(enb.NSubframe,10)==5) && enb.NDLRB>15 symMappings = { [4 8 12] ; [5 9 13] ; [6 10] ; [7 11]}; end else NsymbDL = 6; if (mod(enb.NSubframe,10) == 0) symMappings = {4 ; 5 ; 6 ; 11}; elseif (mod(enb.NSubframe,10)==5) && enb.NDLRB>15 symMappings = { [4 7] ; [5 8] ; [6 9] ; [10 11]}; end end end % If this is a repetition subframe, find the indices if ~isempty(symMappings) % Create an empty subframe grid sfgrid = lteDLResourceGrid(enb); sfgridRS = lteDLResourceGrid(enb); for osymb = 1:4 % For all 4 PBCH symbols % Extract out each core symbol to map to one or more OFDM % symbols coreOFDMsymb = pbchCoreSymbols(ofdmSymbols==(osymb+NsymbDL)); coreOFDMsymbRS = pbchCoreCellRSSymbols(ofdmSymbolsCellRS==(osymb+NsymbDL)); % Map to all new repetition OFDM symbols in the current % subframe for m = 1:numel(symMappings{osymb,1}) % create the indices for the current symbol (subcarriers % are the same as core symbols) symtoMap = symMappings{osymb,1}(m); sfgrid(pbchCoreSubcarriers(ofdmSymbols==(osymb+NsymbDL)),symtoMap,:) = coreOFDMsymb; sfgridRS(pbchCellRSCoreSubcarriers(ofdmSymbolsCellRS==(osymb+NsymbDL)),symtoMap,:) = coreOFDMsymbRS; end end % As per TS 36.211 section 6.6.4, the PBCH repetitions and cell RS % repetitions are punctured by CSI (& ZP CSI) RS signals. So clear % these positions csirsIndices = lteCSIRSIndices(enb); sfgrid(csirsIndices) = 0; sfgridRS(csirsIndices) = 0; % Now get the PBCH repeating symbols and indices pbchrepIndices = find(sfgrid); pbchrepSymbols = sfgrid(pbchrepIndices); % Now get the CellRS repeating symbols and indices pbchCellRSrepIndices = find(sfgridRS); pbchCellRSrepSymbols = sfgridRS(pbchCellRSrepIndices); end end % Get the MPBCH Core part symbols function mpbchCoreSym = getMPBCHCore(enb) bchBits = lteMIB(enb); pbchBits = lteBCH(enb,bchBits); mpbchCoreSym = ltePBCH(enb,pbchBits); % Reshape to the four parts to go on to 4 frames mpbchCoreSym = reshape(mpbchCoreSym,numel(mpbchCoreSym)/4,4); end % Get the absolute subframe number in a frame which is used for the last % transmission of a channel function sfsnumlastFrame = getlastabsSF(dlsfs,totmtcSubframes) sfslastFrame = mod(totmtcSubframes,sum(dlsfs)); % subframes to tx in the last frame if sfslastFrame % Find the subframe number corresponding to the last subframe to transmit sfsnumlastFrame = find(dlsfs,sfslastFrame); sfsnumlastFrame = sfsnumlastFrame(end); else % No partial frames required sfsnumlastFrame = 0; end end