В этом примере показано, как создать нисходящую передачу 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).
Существует два режима работы улучшения покрытия (CE) для устройств Cat-M (также называемы BL/CE UEs в 3GPP стандартные документы), режим A и CE режима CE B. Режим CE цели скромное улучшение покрытия максимум с 32 повторениями, тогда как режим CE B предназначается для обширного улучшения покрытия максимум с 2 048 повторениями для канала данных. Режим CE A сообщен через формат DCI, 6-0A/6-1A обменивается сообщениями и режим CE B с помощью 6-0B/6-1B сообщений. MPDCCH обработка цепи, создания DM-RS и отображения почти идентичен тому из Расширенного Физического Нисходящего Канала Управления (EPDCCH) плюс сложение повторений и поведения скачкообразного движения частоты. Этот пример делает определенное использование функциональности LTE Toolbox™ EPDCCH, чтобы реализовать модель MPDCCH. Канал данных LTE-M является LTE PDSCH со сложением скачкообразного движения частоты и повторений. Канал телевизионного вещания LTE-M состоит из двух частей; 'базовая' часть, соответствующая LTE PBCH и LTE-M определенная часть 'повторения', где символы и сигналы ячейки RS в 'базовой' части повторяются.
LTE-M может быть развернут в стандартных ячейках LTE, поэтому не, все подкадры обязательно используются для передачи BL/CE. Подкадры BL/CE обозначаются битовым массивом, отправленным в сообщении MIB-M (похожий на механизм в NB-IoT). Для простоты, в этом примере, мы принимаем, что все подкадры заданы, чтобы быть BL/CE. MPDCCH/PDSCH, начинающие символ OFDM для передач LTE-M, специфичны для ячейки, и широковещательно передан в Информации о системе (SI).
Основной выход этого примера MATLAB® является мультиподкадром Cat-M1/Cat-M2, сетка ресурса, содержащая Элементы ресурса (RE) MPDCCH, сопоставила DM-RS, LTE-M PDSCH REs, PBCH REs (и 'ядро' и части 'повторения' наряду с соответствующими сигналами ссылки на ячейку) и другие опорные сигналы, как сконфигурировано для полной последовательности передачи. Этой сеткой является также OFDM, модулируемый, чтобы сгенерировать связанную основополосную форму волны временного интервала. Графики создаются, чтобы обеспечить визуализацию присвоения RE в сетке и величины сгенерированного модулированного сигнала.
Повторения - Чтобы включить значительно расширенное покрытие для устройств LTE-M, повторения для MPDCCH, PDSCH и PBCH были введены для устройств Cat-M в Релизе 13. Это обеспечило бы повышение производительности на по крайней мере 15 дБ по предварительному выпуску 13 устройств. MPDCCH может быть повторен максимум до 256 раз, PDSCH до 2 048 и PBCH до 5 включая 'базовую' часть.
Узкополосная связь - LTE-M использует концепцию узкополосной связи, чтобы выделить поднесущие в широкополосной несущей LTE для каналов управления и данных. Каждая узкополосная связь состоит из 6 последовательных PRBs, но не весь PRBs обязательно часть узкополосной связи (зависящий от полного BW несущей).
Widebands - Релиз 14 LTE-M использует концепцию widebands, чтобы выделить более высокую полосу пропускания для канала данных. Может быть один или несколько widebands, каждый состоящий из 4 узкополосной связи или сингла, широкополосного состоящий из 1,2 или 3 узкополосной связи. Для устройства Cat-M2, сконфигурированного в режиме CE (6-1A формат DCI), канал данных передается на сингле, широкополосном если ce-pdsch-maxBandwidth-config
установлен в 5 МГц или resource block assignment flag
установлен в 1 или через полную полосу пропускания несущей LTE через битовый массив RBG в случае resource block assignment flag
установлен в 0. resource block assignment flag
только присутствует если ce-pdsch-maxBandwidth-config
установлен в 20 МГц. Для устройства Cat-M2, сконфигурированного в режиме CE B (6-1B формат DCI), канал данных передается на сингле, широкополосном если ce-pdsch-maxBandwidth-config
установлен в 5 МГц и до 4 widebands если ce-pdsch-maxBandwidth-config
установлен в 20 МГц.
Скачкообразное движение частоты - Несмотря на то, что Релиз 13 eMTC устройство имеет мгновенную полосу пропускания 1.4 МГц (самые простые устройства LTE-M имеют максимальную полосу пропускания 1.4 МГц), она может получить доступ к более широкой несущей LTE через различную узкополосную связь между подкадрами. Если передача включает повторение по нескольким подкадрам, дополнительное скачкообразное движение частоты межподкадра может быть применено. Скачкообразное движение частоты происходит между различной узкополосной связью и в блоках 1 - 16 подкадров в зависимости от режима CE. Скачкообразно двигающаяся длина блока и скачкообразное движение смещения являются специфичными для ячейки параметрами. В нисходящем канале, и для управления и для данных, скачкообразное движение частоты может быть более чем 2 узкополосной связью или 4 равномерно распределенной узкополосной связью.
Передача данных LTE-M использует тот же физический канал (PDSCH) в качестве в случае LTE. Различие однако - то, что LTE-M включает дополнительные повторения и скачкообразное движение частоты.
Режимы передачи - допустимые режимы передачи для PDSCH для LTE-M равняются 1 (одна антенна), 2 (разнообразие передачи), 6 (замкнутый цикл основанное на книге шифров предварительное кодирование) и 9 (основанное на некниге шифров предварительное кодирование, единственный слой). Режим Transmission 6 только поддерживается в режиме CE A, тогда как 1, 2 и 9 поддерживаются в обоих режимах A и CE режима CE B. В отличие от 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 и до 2 048 повторений в режиме CE B. Количество повторений PDSCH задано комбинацией полустатической настройки и динамического выбора для особой передачи.
Narrowbands и Widebands - PRBs, используемый для передач LTE-M PDSCH, должен принадлежать узкополосной связи (связи) (и широкополосный (s) если Cat-M2). Устройства Cat-M1 имеют мгновенную полосу пропускания передачи 1.4 МГц в узкополосной связи. Устройства Cat-M2 имеют полосу пропускания 5 МГц или 20 МГц, как обозначено более высоким параметром слоя ce-pdsch-maxBandwidth-config
, в этом случае передача PDSCH может быть в широкополосном (s), где каждый широкополосный состоит максимум из 4 неперекрывающейся узкополосной связи.
Скачкообразное движение частоты - Если PDSCH повторяется по нескольким подкадрам, скачкообразное движение частоты межподкадра, может быть опционально применено, где скачкообразное движение происходит для блоков подкадров длины 1,2,4,8 для устройств в режиме CE A и 2,4,8,16 в режиме CE B. Скачкообразно двигающаяся длина блока и скачкообразное движение смещения являются специфичными для ячейки параметрами. Скачкообразное движение частоты может быть более чем 2 узкополосной связью или 4 равномерно распределенной узкополосной связью. Относительные позиции RBS, несущего PDSCH в рамках каждого скачкообразного движения узкополосная связь, остаются то же самое.
MPDCCH несет нисходящую управляющую информацию (DCI) LTE-M. MPDCCH и соответствующие Опорные сигналы Демодуляции (DM-RS) передаются на одном или нескольких портах от набора (107,108,109,110). Этапы обработки физического уровня и операции MPDCCH и EPDCCH очень похожи, с различиями, являющимися повторениями, дополнительным скачкообразным движением частоты и как скремблирование применяется.
Повторения и борющиеся блоки - MPDCCH передаются с помощью агрегации одного или нескольких последовательных Расширенных Элементов Канала Управления (ECCEs) в 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 RBS в одной узкополосной связи в каждом подкадре. MPDCCH PRB установил, состоит из ECCEs, пронумерованного от 0... N'ECCEpk, где N'ECCEpk является количеством ECCEs в MPDCCH-PRB-set p подкадра k. Количество ECCEs, используемого для одного MPDCCH, дано таблицей 6.8A.1-2 [1] TS 36.211 для 2 или 4 PRBs, если повторение не сконфигурировано и Таблица 6.8B.1-2 для всех других случаев.
Скачкообразное движение частоты - Если MPDCCH повторяется по нескольким подкадрам, скачкообразное движение частоты межподкадра, может быть опционально применено, где скачкообразное движение происходит для блоков подкадров длины 1,2,4,8 для устройств в режиме CE A и 2,4,8,16 в режиме CE B. Скачкообразно двигающаяся длина блока и скачкообразное движение смещения являются специфичными для ячейки параметрами. Скачкообразное движение частоты может быть более чем 2 узкополосной связью или 4 равномерно распределенной узкополосной связью. Относительные позиции RBS, несущего MPDCCH в рамках каждого скачкообразного движения узкополосная связь, остаются то же самое.
Подобно PDSCH LTE-M использует тот же физический канал телевизионного вещания (PBCH) в качестве в случае LTE, но с дополнительными повторениями.
Базовый PBCH и Неосновной - LTE-M PBCH PBCH разделены на две части; 'базовый' PBCH, который является нормальным LTE PBCH и передается в первом подкадре каждой системы координат с периодичностью на 40 мс. Неосновной частью является LTE-M определенные повторения, где 'базовые' символы PBCH повторяются до 5 раз в зависимости от дуплексного режима и длины циклического префикса.
Повторения - повторения PBCH происходят в подкадре 9 из предыдущей системы координат и подкадра 0 из текущей радио-системы координат для FDD, как дано таблицей 6.6.4-1 [1] TS 36.211. Для TDD повторения происходят в подкадрах 0 и 5 из той же радио-системы координат, как дано Таблицей 6.6.4-2. Поднесущие остаются то же самое для базовой части и повторений. Обратите внимание на то, что различающийся базовая часть, повторения PBCH не должны сопоставлять с REs, используемым опорными сигналами 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, и сопоставьте их в элементы ресурса сетки ресурса мультиподкадра
Сгенерируйте символы для последовательности подкадра LTE-M PDSCH, сопоставьте их в элементы ресурса сетки ресурса мультиподкадра
Сгенерируйте символы для последовательности подкадра LTE-M PBCH, сопоставьте их в элементы ресурса сетки ресурса мультиподкадра
Примените модуляцию CP-OFDM к итоговой сетке, чтобы создать связанную основополосную форму волны
Отобразите графики сетки ресурса и формы волны timeseries
В этом первом разделе мы задаем параметры симуляции, которые будут использоваться в более поздних разделах для DCI, MPDCCH и создания DM-RS. Этот пример использует LTE несущая FDD с полосой пропускания 5 МГц и нормальным циклическим префиксом. Настройки всей ячейки содержатся в структуре 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 - (начальный) набор PRBs, используемого для передачи MPDCCH, задан вектором из индексов PRB на основе 0, задающих абсолютные положения PRB в широкополосной несущей. Эти PRBs должны находиться в пределах допустимой узкополосной связи. Если скачкообразное движение частоты будет отключено для MPDCCH, кандидат MPDCCH будет всегда передаваться в PRBs, заданном параметром 'InitPRBSet'. Если скачкообразное движение частоты будет включено для MPDCCH, кандидат MPDCCH будет передан в тех же относительных положениях PRBs, но в различной узкополосной связи, как задано в разделе TS 36.211 6.8B.5. Для несущей LTE на 5 МГц, используемой в этом примере, существует четыре узкополосной связи, как дано разделом TS 36.211 6.2.7 [1]. Первая узкополосная связь имеет PRBs 0... 5, второй имеет PRBs 6... 11, треть имеет PRBs 13... 18 и четвертое имеет PRBs 19... 24. Все другие PRBs в полосе на 5 МГц выходят за пределы узкополосной связи и не могут использоваться для передачи LTE-M. В этом примере мы используем формат 2 MPDCCH, где 8 ECCEs используются для передачи MPDCCH. Каждая пара паза PRB состоит из 4 ECCEs поэтому, мы должны задать минимальное выделение 2 PRB. В этом примере мы выбираем 3-й и 4-й PRBs в первой узкополосной связи
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) и зафиксированный в случае режима CE B (сообщенный через 6-1B формат DCI). В режиме CE A, выделение может быть на 1 - 6 PRBs в одной или нескольких узкополосной связи, как задано типом 2 распределения ресурсов или для целой полосы пропускания несущей LTE через тип 0 распределения ресурсов. В режиме CE B, выделение охватывает или целые 6 PRBs или первые 4 PRBs сконфигурированной узкополосной связи (связи). Для устройств Cat-M1 передача находится в одной узкополосной связи. Для устройств Cat-M2, если более высокий параметр слоя ce-pdsch-maxBandwidth-config
установлен в 20 МГц в режиме CE B, передача может охватить несколько узкополосной связи, и полное выделение может быть максимум до 96 PRBs (сгруппированный в widebands, где каждый широкополосный состоит из 4 узкополосной связи). Используемые widebands сообщены через широкополосное поле индекса комбинации в DCI как описано в таблице 7.1.6-2 [3] TS 36.213. Если ce-pdsch-maxBandwidth-config
установлен в 5 МГц, передача происходит на сингле, широкополосном состоящий из 1,2,3 или 4 узкополосной связи в зависимости от полосы пропускания несущей LTE (NDLRB).
В этом примере мы задаем выделение с помощью InitPRBSet
параметр и InitNarrowbandIndex
. Если скачкообразное движение частоты будет отключено, LTE-M PDSCH будет всегда передаваться в PRBs, заданном InitPRBSet
и InitNarrowbandIndex
параметры. Если скачкообразное движение частоты будет включено, PDSCH будет передан в тех же относительных положениях PRBs, но в различной узкополосной связи, как задано в разделе TS 36.211 6.4.1 [1]. Если выделение охватывает больше чем одну узкополосную связь или один или несколько widebands, InitNarrowbandIndex
должен быть вектор, задающий составляющие узкополосные индексы. Как пример, если ce-pdsch-maxBandwidth-config
20 МГц, и передача LTE-M в несущей LTE на 20 МГц, существует 4 widebands (0,1,2,3) доступны для передачи LTE-M PDSCH с соответствующими узкополосными индексами {(0 1 2 3) (4 5 6 7) (8 9 10 11) (12 13 14 15)}. Если желаемое выделение является widebands 2 & 3, то InitNarrowbandIndex
должен быть затем установлен в [8 9 10 11 12 13 14 15].
pdsch.InitPRBSet = (1:2)'; % 0-based PRB index pdsch.InitNarrowbandIndex = 0; % 0-based wideband index % In this example, we disable frequency hopping when transmission is over 2 % or more narrowbands if numel(pdsch.InitNarrowbandIndex) > 1 pdsch.Hopping = false; mpdcch.Hopping = false; end
Включите или отключите повторения PBCH
enb.RepPBCHEnable = true; % Specify the power scaling in dB for MPDCCH, MPDCCH DM-RS, PDSCH and % reference signals (Cell RS or DM-RS) mpdcch.MPDCCHPower = 30; mpdcch.MPDCCHDMRSPower = 32; pdsch.Rho = 25; pdsch.RSPower = 80; % Power levels for the PBCH core and reps parts enb.PBCHPower = 33; enb.PBCHRepsPower = 36; % Power level for the PBCH Cell RS reps enb.PBCHCellRSRepsPower = 28;
Общие подкадры, чтобы симулировать (все нисходящие подкадры являются подкадрами BL/CE) и MPDCCH и PDSCH передаются без любых разрывов подкадра
totmtcSubframes = mpdcch.InitNSubframe+mpdcch.NRepMPDCCH+2+pdsch.NRepPDSCH; % Identify all downlink subframes in a frame info = arrayfun(@(x)lteDuplexingInfo(setfield(enb,'NSubframe',x)),0:9); dlsfs = arrayfun(@(x)strcmpi(x.SubframeType,'Downlink'),info); % Total absolute subframes to simulate sfsnumlastFrame = getlastabsSF(dlsfs,totmtcSubframes); totSubframes = floor(totmtcSubframes/sum(dlsfs)) *10 + sfsnumlastFrame; % Absolute subframe number of first PDSCH subframe, this would be two % subframes after the MPDCCH subframes (assuming no non BL/CE subframes) lastSfForMPDCCHPlus2 = getlastabsSF(dlsfs,mpdcch.NRepMPDCCH + 2); % Last subframe number in last frame for MPDCCH+2 pdsch.InitNSubframe = mpdcch.InitNSubframe + floor((mpdcch.NRepMPDCCH + 2)/sum(dlsfs)) *10 + lastSfForMPDCCHPlus2; % Find the last absolute subframe for MPDCCH transmission lastSfForMPDCCH = getlastabsSF(dlsfs,mpdcch.NRepMPDCCH); % Last subframe number in last frame for MPDCCH mtclastabsSfForMPDCCH = mpdcch.InitNSubframe + floor((mpdcch.NRepMPDCCH)/sum(dlsfs)) *10 + lastSfForMPDCCH;
Битовый вектор dciBits
передается функциональному lteDCIEncode
который выполняет маскирование CRC и вставку, кусающее хвост сверточное соответствие кодирования и уровня, после TS 36.212 разделяет 5.3.3.2 к 5.3.3.4. Обратите внимание на то, что третий аргумент к lteDCIEncode
задает соответствие уровня выходной размер, равный способности бита данных MPDCCH в подкадре. Здесь мы используем фиктивное сообщение DCI на 26 битов из всех единиц, соответствуя Формату DCI 6-1A сообщение, как задано в разделе TS 36.212 5.3.3.1.12.
% Find the MPDCCH data bit capacity [~,info] = lteEPDCCHIndices(enb,setfield(mpdcch,'EPDCCHPRBSet',mpdcch.InitPRBSet)); %#ok<SFLD> % Define DCI message bits dciBits = ones(26,1); % Create the coded DCI bits codedDciBits = lteDCIEncode(mpdcch,dciBits,info.EPDCCHG);
% Find the LTE-M PDSCH data bit capacity, this should not include the PBCH, % PSS, SSS and CSI-RS REs. So we select the subframe 9 which is a DL % subframe in both FDD and TDD duplex modes (Note: subframe 9 is not DL for % TDDConfig 0, TDDConfig 0 does not have a 'normal' DL subframe) fullPDSCHsf = 9; [~,fullInfo] = ltePDSCHIndices(setfield(enb,'NSubframe',fullPDSCHsf),pdsch,getPDSCHAllocation(enb,pdsch)); %#ok<SFLD> % Define DL-SCH message bits trData = ones(pdsch.TrBlkSizes(1),1); % Create the coded DL-SCH bits codedTrBlock = lteDLSCH(enb,pdsch,fullInfo.G,trData);
В этом примере мы используем локализованный тип с форматом 2 и 2 MPDCCH PRBs. MPDCCH с 2 или 4 PRBs и никакими повторениями используют ту же таблицу формата в качестве EPDCCH (таблица 6.8A.1-2 TS 36.211). Для всех других случаев форматы даны таблицей 6.8B.1-2 TS 36.211. Также с режимом CE A, никакие повторения и все подкадры LTE-M, скремблирование инициализируется каждый подкадр что касается EPDCCH и cinit
то же самое (потому что Nacc
= 1 для CEmodeA
и NabsMPDCCH
= 1). Все другие этапы обработки i.e. модуляция символа, отображение слоя, предварительное кодирование и отображение с элементами ресурса являются тем же самым для 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
Для LTE-M PDSCH 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 и сопоставляющий на REs сетки ресурса. LTE-M PBCH состоит из нормальной части 'ядра' 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
- Вычислите узкополосную связь и сопоставленный PRBs
getHoppingAllocation
- Вычислите выделение подкадра
getPDSCHAllocation
- Вычислите выделение PDSCH
getPBCHCore
- Вычислите базовые символы PBCH и индексы
getPBCHCoreCellRS
- Вычислите базовые символы PBCH и индексы
getPBCHRep
- Вычислите часть повторения PBCH
3GPP TS 36.211 "Физические каналы и модуляция"
3GPP TS 36.212 "Мультиплексирование и кодирование канала"
3GPP TS 36.213 "Процедуры физического уровня"
3GPP TS 36.331 "Спецификация Протокола Радио-управления ресурсами (RRC)"
О. Либерг, М. Зундберг, Y.-P. Ван, Дж. Бергман и Дж. Сакс, сотовый Интернет вещей: технологии, стандарты и эффективность, Elsevier, 2018.
Э. Дэхлмен, С. Парквол и 4G Дж Сколда, усовершенствованная LTE Pro и дорога к 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