В этом примере показано, как создать нисходящую передачу LTE-M, состоящую из канала управления физическим нисходящим каналом MTC (MPDCCH), а также связанного с ним общего канала физического нисходящего канала (PDSCH) и физического широковещательного канала (PBCH), включая повторения и скачкообразное изменение частоты По сравнению с устройствами предварительной версии 13, устройства Cat-M обеспечивают более низкую стоимость и сложность, улучшенное покрытие за счет внедрения повторений и расширенного DRX для дальнейших степеней сохранения.
Введение LTE-M в стандарт LTE добавило поддержку, специально предназначенную для Machine-Type Communications (MTC). Начиная с Cat-0 устройств в релизе 12, это было расширено в более поздних релизах, чтобы определить отдельный класс устройств Cat-M. Теперь в LTE были добавлены две категории, Cat-M1 в релизе 13 (через рабочие элементы eMTC), а затем Cat-M2 в релизе 14 (feMTC).
Существует два режима работы для устройств Cat-M (также называемых UE BL/CE в 3GPP стандартных документах), CE mode A и CE mode B. CE mode A нацелен на скромное расширение покрытия с повторениями до 32, в то время как CE mode b Режим CE A сигнализируется через формат DCI 6-0A/6-1A сообщений и режим CE B через 6-0B/6-1B сообщения. Цепочка обработки MPDCCH, создание и отображение DM-RS почти идентичны цепи расширенного физического нисходящего канала управления (EPDCCH), плюс сложение повторений и изменения частоты. Этот пример специально использует функциональность LTE Toolbox™'s EPDCCH для реализации модели MPDCCH. Канал данных LTE-M является PDSCH LTE с сложением повторений и скачкообразного изменения частоты. Вещательный канал LTE-M состоит из двух частей; 'core' соответствует LTE PBCH и LTE-M специфической 'repetition' части, где символы и сигналы RS камеры в 'core' части повторяются.
LTE-M может быть развернут в стандартных камерах LTE, поэтому не все подкадры обязательно используются для передачи BL/CE. Подкадры BL/CE обозначаются растровым изображением, отправленным в сообщении MIB-M (подобном механизму в NB-IoT). Для простоты в этом примере мы принимаем, что все подкадры определены как BL/CE. MPDCCH/PDSCH, запускающий символ OFDM для передач LTE-M, является специфичным для ячеек и транслируется в системной информации (СИ).
Основным выходом этого примера MATLAB ® является сетка Cat-M1/Cat-M2 ресурсов с несколькими подкадрами, содержащая ресурсные элементы MPDCCH (RE), ассоциированные DM-RS, RE LTE-M PDSCH, RE PBCH (как 'core', так и 'repetition) Эта сетка также модулируется OFDM, чтобы сгенерировать связанную форму основной полосы частот временной области. Графики создаются, чтобы обеспечить визуализацию назначения RE в сетке и величины сигнала сгенерированного модулированного сигнала.
Повторы - Чтобы обеспечить значительно расширенное покрытие для устройств LTE-M, повторы для MPDCCH, PDSCH и PBCH были введены для устройств Cat-M в релизе 13. Это обеспечит по меньшей мере 15dB улучшение эффективности по сравнению с устройствами предварительной версии 13. MPDCCH может повторяться максимум до 256 раз, PDSCH до 2048 и PBCH до 5, включая часть 'core'.
Узкополосные - LTE-M использует концепцию узкополосных для выделения поднесущих в широкополосной несущей LTE для каналов данных и управления. Каждый узкополосный диапазон состоит из 6 последовательных PRB, но не все PRB обязательно являются частью узкополосных диапазонов (в зависимости от всей несущей BW).
Widebands - Release 14 LTE-M использует концепцию широкополосных диапазонов, чтобы выделить более высокую пропускную способность для канала данных. Может быть одна или несколько широкополосных, каждая из которых состоит из 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. The resource block assignment flag
присутствует только, если ce-pdsch-maxBandwidth-config
установлено в 20MHz. Для Cat-M2 устройства, сконфигурированного в режиме CE B (формат DCI 6-1B), канал данных передается на одной широкополосной полосе, если ce-pdsch-maxBandwidth-config
установлено на 5MHz и до 4 широкополосных диапазонов, если ce-pdsch-maxBandwidth-config
установлено в 20MHz.
Скачкообразная перестройка частоты - несмотря на то, что устройство eMTC релиза 13 имеет мгновенную пропускную способность 1.4MHz (простейшие устройства LTE-M имеют максимальную пропускную способность 1,4 МГц), оно может получить доступ к более широкой несущей LTE через различные узкие полосы между субкадрами. Если передача включает повторение по нескольким субкадрам, может быть применено опциональное межкадровое скачкообразное изменение частоты. Скачкообразное изменение частоты происходит между различными узкими полосами и в блоках от 1 до 16 субкадров в зависимости от режима CE. Длина блока скачкообразного изменения и смещение скачкообразного изменения являются параметрами, специфичными для ячеек. В нисходящей линии связи как для управления, так и для данных скачкообразное изменение частоты может быть по 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. В отличие от PDSCH LTE, операция нескольких входов с несколькими выходами (MIMO) не поддерживается в LTE-M, поскольку ожидается, что большинство устройств LTE-M являются недорогисточными устройствами
Повторения и блоки скремблирования - PDSCH передается в NRepPDSCH
(> = 1) последовательные подкадры нисходящего канала BL/CE. Эти NRepPDSCH
субкадры передаются в блоках Nacc
подкадры (см. раздел 6.8B.2 [1] TS 36.211) и та же последовательность скремблирования применяются ко всем подкадрам в блоке. Nacc
может быть 1 или 4 в дуплексном режиме FDD и 1 или 10 в дуплексном режиме TDD. В режиме А CE может быть до 32 повторений и до 2048 повторений в режиме В CE. Количество повторений PDSCH определяется комбинацией полустатического строения и динамического выбора для конкретной передачи.
Узкополосные и широкополосные - PRB, используемые для передач LTE-M PDSCH, должны принадлежать узкополосным (и) (и широкополосным (и), если Cat-M2). Cat-M1 устройства имеют мгновенную полосу пропускания передачи 1.4MHz в узкополосном диапазоне. Cat-M2 устройства имеют полосу пропускания 5MHz или 20MHz, как обозначено параметром
более высокого слоя ce-pdsch-maxBandwidth-config
в этом случае коробка передач PDSCH может быть в широкополосной (ых) полосе (ах), где каждая широкополосная полоса состоит до 4 неперекрывающихся узкополосных полос.
Скачкообразное изменение частоты - Если PDSCH повторяется по нескольким подкадрам, можно опционально применять скачкообразное изменение частоты между подкадрами, где скачкообразное изменение происходит для блоков подкадров длины 1,2,4,8 для устройств в режиме А CE и 2,4,8,16 в режиме В CE. Скачкообразное изменение частоты может быть на 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
подкадры (см. раздел 6.8B.2 [1] TS 36.211) и та же последовательность скремблирования применяются ко всем подкадрам в блоке. В качестве примера для MPDCCH, не сопоставленного с P-RNTI или SC-RNTI и сконфигурированного с CE mode A, Nacc
= 1, как описано в разделе 6.8B.2 TS 36.211 [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 в одном узкополосном диапазоне в каждом субкадре. Набор PRB MPDCCH состоит из ECCE, пронумерованных от 0... N 'ECCEpk, где N' ECCEpk - количество ECCE в MPDCCH-PRB-наборе p подрамника k. Количество ECCE, используемых для одного MPDCCH, определяется TS 36.211 Таблица 6.8A.1-2 [1] для 2 или 4 PRB, если повторение не сконфигурировано, и Таблица 6.8B.1-2 для всех других случаев.
Прыгающая частота - Если MPDCCH повторен по нескольким нижним рамам, прыгающая частота межнижней рамы, может быть произвольно применена, где прыгание происходит для блоков нижних рам длины 1,2,4,8 для устройств в способе A CE и 2,4,8,16 в методе B CE. Прыгающий размер блока и прыгание через смещение являются определенными для камеры параметрами. Скачкообразное изменение частоты может быть на 2 узких диапазона или 4 равномерно расположенных узких диапазона. Относительные положения RB, несущих MPDCCH в каждом скачкообразном узкополосном диапазоне, остаются неизменными.
Подобно PDSCH, LTE-M использует тот же физический широковещательный канал (PBCH), что и в случае LTE, но с необязательными повторениями.
Основной PBCH и неядерный PBCH - LTE-M PBCH разделены на две части; 'core' PBCH, который является нормальным LTE PBCH и передается в первом субкадре каждой системы координат с периодичностью 40 мс. Неосновная часть является специфическими повторениями LTE-M, где символы 'core' 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 и нормального циклического префикса основные символы PBCH 0 и 1 повторяются 5 раз, а символы 2 и 3 повторяются 3 раза.
Этот пример разделен на следующие шаги:
Сконфигурируйте параметры симуляции (для всей ячейки и MPDCCH/PDSCH)
Создайте и закодируйте полезную нагрузку сообщения DCI для передачи на MPDCCH
Создайте и закодируйте полезную нагрузку DL-SCH для передачи на PDSCH
Сгенерируйте символы для последовательности субкадров MPDCCH и DM-RS и сопоставьте их с ресурсными элементами ресурсной сетки с несколькими субкадрами
Сгенерируйте символы для последовательности подкадров PDSCH LTE-M, сопоставьте их с ресурсными элементами ресурсной сетки с несколькими подкадрами
Сгенерируйте символы для последовательности субкадров PBCH LTE-M, сопоставьте их с ресурсными элементами ресурсной сетки с несколькими субкадрами
Примените CP-OFDM модуляцию к конечной сетке, чтобы создать связанную форму волны основной полосы частот
Отобразите графики ресурсной сетки и волны timeseries
В этом первом разделе мы задаем параметры симуляции, которые будут использоваться в последующих разделах для создания 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, определяется вектором индексов PRB на основе 0, задающих абсолютные положения PRB в широкополосной несущей. Эти PRB должны подпадать под действительный узкополосный диапазон. Если переключение частот отключено для MPDCCH, кандидат MPDCCH всегда будет передан в PRB, заданных параметром 'InitPRBSet'. Если для MPDCCH включена скачкообразная перестройка частоты, кандидат MPDCCH будет передан в тех же относительных положениях PRB, но в разных узких диапазонах, как определено в разделе 6.8B.5 TS 36.211. Для несущей 5MHz LTE, используемой в этом примере, существует четыре узкополосных диапазона, как указано в разделе 6.2.7 TS 36.211 [1]. Первый узкополосный имеет PRB 0... 5, второй имеет PRB 6... 11, третий имеет PRB 13... 18, а четвертый имеет PRB 19... 24. Все другие PRB в 5MHz полосе выходят за пределы узких диапазонов и не могут использоваться для передачи LTE-M. В этом примере мы используем формат MPDCCH 2, где для передачи MPDCCH используются 8 ECCE. Каждая пара пазов 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 (сигнализируется через 6-1A формата DCI) и фиксированным в случае режима B CE (сигнализируется через формат 6-1B DCI). В режиме А CE выделение может быть на 1-6 PRB в одной или нескольких узких полосах, определяемых типом 2 выделения ресурсов, или для всей полосы пропускания LTE через тип 0 выделения ресурсов. В режиме B CE распределение охватывает либо все 6 PRB, либо первые 4 PRB сконфигурированного узкополосного (ых) диапазона (ов). Для Cat-M1 устройств коробка передач находится в одном узкополосном диапазоне. Для Cat-M2 устройств, если параметр более высокого слоя ce-pdsch-maxBandwidth-config
установлено на 20MHz в режиме B 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, но в разных узких диапазонах, как определено в разделе 6.4.1 TS 36.211 [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, сверточное кодирование с укусом хвоста и согласование скорости в соответствии с разделами 5.3.3.2 - 5.3.3.4 TS 36.212. Обратите внимание, что третий аргумент в lteDCIEncode
задает размер выхода соответствия скорости, равный пропускной способности бита данных MPDCCH в подкадре. Здесь мы используем фиктивное сообщение 26 бит DCI всех таковых, соответствующее сообщению 6-1A формата DCI, указанному в разделе 5.3.3.1.12 TS 36.212.
% 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). Для всех остальных случаев форматы приведены в TS 36.211 Таблица 6.8B.1-2. Кроме того, в режиме 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 ресурсной сетки. LTE-M PBCH состоит из нормальной LTE 'core' части и 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 TS 36.213 «Процедуры физического слоя»
3GPP TS 36.331 «Протокол управления радиоресурсами (RRC) спецификации»
О. Либерг, М. Сундберг, Я.-П. Wang, J. Bergman and J. Sachs, Cellular Internet of Things: Technologies, Standards and Performance, Elsevier, 2018.
Э. Дальман, С. Парквалл и J Skold 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