exponenta event banner

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

Этот пример показывает, как создать передачу 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

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

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

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

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

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

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

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

Битовый вектор 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);

Кодирование 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). Для всех остальных случаев форматы приведены в таблице 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 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 сетки ресурсов. 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

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

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

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

  3. 3GPP ТС 36.213 «Процедуры физического уровня»

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

  5. О. Либерг, М. Сундберг, Я. -П. Ван, Дж. Бергман и Дж. Сакс, Сотовый интернет вещей: технологии, стандарты и производительность, Elsevier, 2018.

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