Генерация сигналов LTE-M нисходящего канала

В этом примере показано, как создать нисходящую передачу 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

  • Повторы - Чтобы обеспечить значительно расширенное покрытие для устройств 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 с равными интервалами по узким полосам.

Обработка и процедуры физического слоя PDSCH

Передача данных 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

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 в каждом скачкообразном узкополосном диапазоне, остаются неизменными.

Обработка и процедуры физического слоя PBCH

Подобно 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;

Кодировка сообщений DCI

Вектор бит 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);

Кодирование DL-SCH

% 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

В этом примере мы используем локализованный тип с форматами 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 BL/CE

Для 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 BL/CE

Генерация символов 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

Создайте Временной интервал Baseband Waveform

Создайте форму полосы частот во временном интервале путем 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

Избранная библиография

  1. 3GPP ТС 36.211 «Физические каналы и модуляция»

  2. 3GPP TS 36.212 «Мультиплексирование и канальное кодирование»

  3. 3GPP TS 36.213 «Процедуры физического слоя»

  4. 3GPP TS 36.331 «Протокол управления радиоресурсами (RRC) спецификации»

  5. О. Либерг, М. Сундберг, Я.-П. Wang, J. Bergman and J. Sachs, Cellular Internet of Things: Technologies, Standards and Performance, Elsevier, 2018.

  6. Э. Дальман, С. Парквалл и 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