В этом примере показано, как измерить производительность демодуляции EPDCCH/PCFICH с использованием Toolbox™ LTE в тестовых условиях, определенных в TS 36.101 [1] Раздел 8.8 «Демодуляция EPDCCH».
Этот пример показывает производительность демодуляции EPDCCH/PCFICH с точки зрения вероятности неправильного обнаружения разрешения планирования нисходящей линии связи (PM-dsg), как определено в TS 36.101 [1] Раздел 8.8 «Демодуляция EPDCCH». EPDCCH и PCFICH тестируются совместно, и неправильное обнаружение PCFICH подразумевает неправильное обнаружение EPDCCH. Этот пример работает на основе подкадра за подкадром при моделировании в конкретном SNR. Генерируют сетку ресурсов, заполненную EPDCCH, EPDCCH DM-RS и PCFICH, и модулируют OFDM для создания формы сигнала передачи. Сформированный сигнал пропускают через шумный канал расширенного транспортного средства А (EVA). Оценку, выравнивание, демодуляцию и декодирование канала выполняют в приемнике. Средняя вероятность неправильного обнаружения EPDCCH/PCFICH определяется с использованием комбинации принятого CFI и принятого сообщения DCI.
LTE Toolbox поддерживает передачу и прием EPDCCH через эти функции.
lteDCI и lteDCIEncodeСоздание и кодирование сообщений управляющей информации нисходящей линии связи (DCI)
lteEPDCCHSpaceСоздание кандидата в пространство поиска EPDCCH
lteEPDCCH и lteEPDCCHIndicesСоздание символов EPDCCH и сопоставление с элементами ресурсов
lteEPDCCHDMRS и lteEPDCCHDMRSIndicesСоздание опорного сигнала демодуляции EPDCCH (DM-RS) и отображение на элементы ресурсов
lteDLChannelEstimateОценка канала, включая поддержку оценки с использованием EPDCCH DM-RS
lteEPDCCHDecodeДекодирование символов EPDCCH
lteEPDCCHSearch: Выполнить слепой поиск EPDCCH DCI
Переменная Test позволяет выбрать номер теста 1 или 2 из TS 36.101 [1] Таблица 8.8.1.1-2. Для теста 1 целевой SNR для вероятности пропущенного разрешения планирования нисходящей линии связи (Pm-dsg), равного 1%
, является 2.6dB. Для теста 2 целевым SNR для Pm-dsg 1%
является -3.2dB. Код ниже устанавливает целевой SNR в зависимости от номера теста, а также выбирает диапазон точек SNR. SNRIn для моделирования, где диапазон охватывает целевой SNR. SNRIn может быть массивом значений или скаляром.
Test = 1; % Test number (1 or 2) if (Test==1) targetSNR = 2.6; SNRIn = [-1.5 1.0 3.5]; else targetSNR = -3.2; SNRIn = [-7.3 -4.8 2.3]; end
Пример выполняется для длины моделирования, равной 1 кадру, чтобы сохранить низкое время моделирования. Большое количество кадров, nFrames, должны использоваться для получения значимых результатов.
nFrames = 1;
Создание структуры enb представляет настройки для всей соты (eNeyB), указанные для теста. Количество блоков ресурсов нисходящей линии связи (50) соответствует тестовой полосе пропускания (10MHz), определенной в таблице 8.8.1.1-2 TS 36.101 [1]. Режим дуплексирования указан в таблице 8.8.1.1-2, в составе описания Опорного канала: «R.55 FDD» для Испытания 1 и «R.56 FDD» для Испытания 2. См. приложение A.3.10.1 TS 36.101 для дополнительных справочных параметров настройки канала R.55 FDD и R.56 FDD.
% eNodeB configuration according to TS 36.101 Table 8.8.1.1-2 enb = struct; enb.NDLRB = 50; enb.DuplexMode = 'FDD'; % eNodeB configuration according to TS 36.101 Table 8.8.1.1-1 enb.CyclicPrefix = 'Normal'; enb.CellRefP = 2; enb.CFI = 2 - (enb.NDLRB <= 10); % 2 symbols for PDCCH enb.NCellID = 0;
Создание структуры epdcch представляет настройки EPDCCH, указанные для теста.
Для этих тестов сконфигурированы два аппарата EPDCCH, как указано в TS 36.101 [1] Таблица 8.8.1.1-1. EPDCCHTypeList и EPDCCHPRBSetList задайте типы EPDCCH и пары PRB EPDCCH для каждого набора EPDCCH. Следует отметить, что аппараты EPDCCH должны быть сконфигурированы в порядке, заданном EPDCCHPRBSetList. Хотя в таблице 8.8.1.1-1 TS 36.101 указано, что первый набор имеет 4 пары PRB, а второй набор - 8 пар PRB, определение количества пар PRB в наборах кандидатов EPDCCH в TS 36.213 [3] Таблица 9.1.4-3a содержит запись для 8 пар в наборе 1 и 4 пар в наборе 2, но не наоборот.
Набор ControlChannelType кому 'EPDCCH', так что lteDCIInfo сообщает правильные размеры сообщений DCI для сообщений DCI, передаваемых по EPDCCH. Формат DCI DCIFormat также указано в TS 36.101 Таблица 8.8.1.1-1
Формат EPDCCH EPDCCHFormat устанавливается для конкретного номера испытания в соответствии с «уровнем агрегации», указанным в таблице 8.8.1.1-2 TS 36.101. Взаимосвязь между форматом EPDCCH и уровнем агрегирования приведена в таблице 6.8A.1-2 TS 36.211 [2], где уровень агрегирования описывается как «Количество ECCE для одного EPDCCH». Для теста 1 форматом EPDCCH является формат 1, соответствующий уровню агрегирования 4 элементов канала управления (ECCE), а для теста 2 форматом EPDCCH является формат 3, соответствующий уровню агрегирования 16 ECCE.
% EPDCCH configuration according to TS 36.101 Table 8.8.1.1-1 epdcch = struct; epdcch.EPDCCHTypeList = {'Distributed' 'Distributed'}; epdcch.EPDCCHPRBSetList = {[0; 7; 14; 21; 28; 35; 42; 49] [3; 17; 31; 45]}; epdcch.ControlChannelType = 'EPDCCH'; epdcch.DCIFormat = 'Format2A'; % EPDCCH configuration according to TS 36.101 Table 8.8.1.1-2 if (Test==1) epdcch.EPDCCHFormat = 1; % Aggregation level L = 4 ECCE else epdcch.EPDCCHFormat = 3; % Aggregation level L = 16 ECCE end % Configure the EPDCCH scrambling identity and RNTI. These values are not % mandated by the test configuration, but the parameters are required. epdcch.EPDCCHNID = 0; epdcch.RNTI = 1;
Создайте структуру конфигурации канала распространения, channel, согласно ТУ 36.101 [1] таблица 8.8.1.1-2. Эта структура конфигурации будет использоваться функцией lteFadingChannel.
channel = struct; channel.NRxAnts = 2; channel.DelayProfile = 'EVA'; channel.MIMOCorrelation = 'Low'; if (Test==1) channel.DopplerFreq = 5; else channel.DopplerFreq = 70; end
Логическая переменная perfectChannelEstimator управляет поведением оценщика канала. Если установлено значение true, используется совершенный блок оценки канала, иначе используется несовершенный блок оценки, основанный на значениях принятого EPDCCH DM-RS. Установить perfectStartEstimator в значение falseи создать структуру конфигурации оценки канала, cec, который lteDLChannelEstimate функция будет использовать для генерации несовершенной оценки канала.
perfectChannelEstimator = false; if (~perfectChannelEstimator) cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging cec.FreqWindow = 1; % Frequency window size in REs cec.TimeWindow = 2; % Time window size in REs cec.InterpType = 'linear'; % 2D interpolation type cec.InterpWindow = 'Centered'; % Interpolation window type cec.InterpWinSize = 1; % Interpolation window size cec.Reference = 'EPDCCHDMRS'; % EPDCCH DM-RS used as reference end
Набор EPDCCH для передачи txSetIndex конфигурируется в приведенном ниже коде как функция номера теста. Следует отметить, что поскольку приемник EPDCCH (оценка канала, демодуляция, поиск EPDCCH) работает по обоим наборам EPDCCH, приемник не нуждается в конфигурировании специально для теста 1 или теста 2, он автоматически декодирует переданное сообщение DCI в соответствующем наборе EPDCCH.
txSetIndex = 3-Test; % Test=1 -> 2nd set, Test=2 -> 1st set % Configure EPDCCH set for transmission from the two EPDCCH sets according % to 'txSetIndex' epdcch.EPDCCHType = epdcch.EPDCCHTypeList{txSetIndex}; epdcch.EPDCCHPRBSet = epdcch.EPDCCHPRBSetList{txSetIndex};
Рабочие характеристики приемника записываются в матрицу mdsg, представляя пропущенные разрешения на планирование нисходящей линии связи. Эта матрица имеет строку для каждой точки SNR и столбец для каждого моделируемого подкадра. Элементы будут установлены в 1 для точек/подкадров SNR, где было пропущено разрешение на планирование нисходящей линии связи. Как описано выше, EPDCCH и PCFICH тестируются совместно, и неправильное обнаружение PCFICH подразумевает неправильное обнаружение EPDCCH. Следовательно, элемент mdsg имеет значение 1, если не удалось демодулировать PCFICH или EPDCCH. Для удобства - отдельная матрица mcfi создается для записи ошибочных обнаружений только PCFICH.
% The 'mdsg' matrix will contain ones in the locations of missed downlink % scheduling grants; the 'mcfi' matrix will contain ones in the locations % of missed CFI decoding mdsg = zeros(numel(SNRIn),10*nFrames); mcfi = zeros(numel(SNRIn),10*nFrames);
Определение количества передающих антенн ntxants, который является максимальным количеством антенных портов, используемых для каждого набора опорных сигналов, сконфигурированных в примере. Следует отметить, что хотя EPDCCH имеет 4 порта опорного сигнала, только максимум 2 из них будут использоваться для любой заданной конфигурации (2 для распределенного типа EPDCCH, 1 для локализованного типа EPDCCH), поэтому для поддержки передачи EPDCCH требуются только 2 физические антенны.
epdcchports = 2; portcounts = [enb.CellRefP epdcchports]; if (isfield(enb,'CSIRefP')) portcounts = [portcounts enb.CSIRefP]; end ntxants = max(portcounts);
Распечатайте сводку параметров моделирования для перечня параметров в TS 36.101 [1] Приложение A.3.10 «Эталонные каналы измерения для требований к производительности EPDCCH». Обратите внимание, что уровень агрегации (количество ECCE на EPDCCH) может быть получен для данной конфигурации с помощью поля NECCEPerEPDCCH 2-го выхода lteEPDCCHSpace функция. enb.NSubframe установлен здесь, поскольку он является обязательным параметром lteEPDCCHSpace однако это влияет только на кандидатов (1-й выход), а не на информацию о размерности, полученную из 2-го вывода. (enb.NSubframe будет обновляться в цикле обработки основного подкадра, что означает, что со временем местоположения-кандидаты EPDCCH, используемые для передачи, могут изменяться.)
enb.NSubframe = 0; [~,candidateInfo] = lteEPDCCHSpace(enb,epdcch); fprintf('\n-- Parameter summary: --------------------------------------------\n'); fprintf(' Number of transmitter antennas: %d\n',ntxants); fprintf(' Channel bandwidth: %gMHz\n',hNRBToBandwidth(enb.NDLRB)); fprintf('Number of OFDM symbols for PDCCH: %d symbols\n',enb.CFI + (enb.NDLRB <= 10)); fprintf(' Aggregation level: %d ECCE \n',candidateInfo.NECCEPerEPDCCH); fprintf(' DCI format: %s\n',epdcch.DCIFormat); disp('------------------------------------------------------------------');
-- Parameter summary: --------------------------------------------
Number of transmitter antennas: 2
Channel bandwidth: 10MHz
Number of OFDM symbols for PDCCH: 2 symbols
Aggregation level: 4 ECCE
DCI format: Format2A
------------------------------------------------------------------
Для каждой точки SNR для каждого подкадра выполняются следующие операции:
Создание кандидата EPDCCH: lteEPDCCHSpace используется для создания возможных кандидатов EPDCCH, и выбирается кандидат для передачи.
Создание сообщения DCI: Создается набор случайных битов сообщения DCI длины, заданной lteDCIInfo для формата DCI, указанного в epdcch.DCIFormat.
Кодирование сообщения DCI: lteDCIEncode используется для кодирования битов сообщения DCI с кодированной пропускной способностью, заданной EPDCCHG поле вывода информации о размерности lteEPDCCHIndices. Индексы EPDCCH также сохраняются для последующего использования при отображении EPDCCH.
Модуляция EPDCCH: lteEPDCCH используется для создания символов модуляции для кодированного сообщения DCI.
Создание EPDCCH DM-RS: lteEPDCCHDMRS используется для создания последовательности EPDCCH DM-RS, и lteEPDCCHDMRSIndices используется для создания соответствующих индексов для использования при отображении EPDCCH DM-RS.
EPDCCH: Символы/индексы EPDCCH объединяются с символами/индексами EPDCCH DM-RS для облегчения формирования диаграммы направленности. Формирование луча выполняется в соответствии со стандартом TS 36.101 [1] Приложение B.4.4 для распределенного типа и Приложение B.4.5 для локализованного типа.
Кодирование CFI/модуляция PCFICH: lteCFIDecode, ltePCFICH и ltePCFICHIndices используются для кодирования CFI, модуляции PCFICH и отображения модулированных символов в сетку ресурсов субкадра.
Добавление Cell-Specific Reference Signal (CRS): lteCellRS и lteCellRSIndices используются для создания последовательности CRS и отображения ее в сетку ресурсов субкадра.
Добавление первичного сигнала синхронизации (PSS) и вторичного сигнала синхронизации (SSS): ltePSS, lteSSS, ltePSSIndices, и lteSSSIndices используются для создания последовательностей PSS и SSS и отображения их в сетку ресурсов субкадров.
Добавление OCNG: как указано в тесте, добавляется OP.7 OCNG (TS 36.101 [1] Приложение A.5.1.7), состоящий из одного PDSCH во всех блоках ресурсов, не используемых EPDCCH. Также добавляется опорный канал OCNG области управления (TS 36.101, Приложение A.5), включая местоположения PDCCH и PHICH, но избегая местоположений PCFICH, чтобы обеспечить возможность передачи CFI.
Модуляция OFDM: Сетка ресурсов субкадра модулируется OFDM с использованием lteOFDMModulate.
Модель канала распространения: Модулированный сигнал OFDM передается через канал распространения. Выход канала rxwaveform имеет два столбца, по одному на приемную антенну.
Добавить шум канала: Шум канала моделируется AWGN.
Синхронизация приемника и демодуляция OFDM: определение задержки, полученной во время распространения. Это вычисляется путем вызова lteDLFrameOffset, которая использует PSS и SSS. Демодуляция OFDM выполняется после синхронизации.
Оценка канала для приема PCFICH: оценка канала на основе CRS (или идеальная оценка канала) выполняется для обеспечения оценки канала для выравнивания и демодуляции PCFICH
PCFICH/CFI прием: PCFICH демодулируется (включая выравнивание), и CFI декодируется. Если декодированный CFI не соответствует переданному CFI, отмечается неправильное обнаружение разрешения на планирование нисходящей линии связи (как и неправильное обнаружение CFI), в противном случае прием переходит к приему EPDCCH.
Попытка слепого поиска EPDCCH/EPDCCH для каждого из двух аппаратов EPDCCH, сконфигурированных в этом тесте. Для каждого аппарата EPDCCH:
Конфигурирование приемника для аппарата EPDCCH: структура конфигурации EPDCCH epdcchRx создается путем копирования структуры, используемой в преобразователе, epdcch. epdcchRx.EPDCCHType и epdcchRx.EPDCCHPRBSet сконфигурированы для приема набора EPDCCH путем установки их в соответствующий элемент epdcchRx.EPDCCHTypeList и epdcchRx.EPDCCHPRBSetList соответственно. Итоговая структура конфигурации epdcchRx затем используется для конфигурирования этапов оценки канала, демодуляции EPDCCH и слепого поиска EPDCCH. Поля в epdcchRx может быть известно UE посредством сигнализации более высокого уровня информационного элемента (IE) EPDCCH-Config в протоколе управления радиоресурсами (RRC) TS 36.331 [4].
Оценка канала для приема EPDCCH: Если используется идеальная оценка канала, то оптимальная оценка канала, ранее полученная для приема PCFICH, формируется в соответствии с формированием луча передачи, используемым для EPDCCH, для создания оценки канала для приема EPDCCH. В противном случае, если используется практическая оценка канала, выполняется оценка канала на основе EPDCCH DM-RS.
Демодуляция EPDCCH: lteEPDCCHDecode используется для демодуляции EPDCCH для всех возможных местоположений кандидатов EPDCCH, возвращая оценки мягких битов для всех возможных кандидатов.
Слепой поиск EPDCCH: lteEPDCCHSearch используется для поиска сообщений DCI путем попытки декодирования сообщения DCI во всех возможных местоположениях-кандидатах, заданных lteEPDCCHSpace, для всех возможных форматов DCI. Если поиск не может декодировать сообщение формата, заданного конфигурацией передатчика в тесте, отмечается неправильное обнаружение разрешения на планирование нисходящей линии связи.
Для получения более подробного описания шагов, связанных с передачей EPDCCH, см. Усовершенствованное формирование физического канала управления нисходящей линии связи (EPDCCH).
% For each SNR point: for SNRIdx = 1:numel(SNRIn) % Set the random number generator to its default value rng('default'); % Get current SNR value SNRdB = SNRIn(SNRIdx); fprintf('\nSimulating at %gdB SNR for a total of %d Frame(s)\n',SNRdB,nFrames); % Initialize timing offset vector offsets = 0; % For each subframe: for sf = 0:(nFrames*10)-1 % Update frame and subframe numbers enb.NFrame = floor(sf/10); enb.NSubframe = mod(sf,10); % Configure EPDCCH candidate; the first candidate from the set of % search space candidates is used candidates = lteEPDCCHSpace(enb,epdcch); epdcch.EPDCCHECCE = candidates(1,:); % Create random DCI message bits from the configured DCI format dciInfo = lteDCIInfo(enb,epdcch); [dci,dciBits] = lteDCI(enb,epdcch,randi([0 1],dciInfo.(epdcch.DCIFormat),1)); % Create EPDCCH indices; the 2nd output contains the EPDCCH bit % capacity EPDCCHG [epdcchIndices,epdcchInfo] = lteEPDCCHIndices(enb,epdcch); % Encode the DCI message bits to match the bit capacity EPDCCHG codedDciBits = lteDCIEncode(epdcch,dciBits,epdcchInfo.EPDCCHG); % Modulate the coded DCI message on the EPDCCH epdcchSymbols = lteEPDCCH(enb,epdcch,codedDciBits); % Create EPDCCH Demodulation Reference Signal (DM-RS) epdcchDmrsSymbols = lteEPDCCHDMRS(enb,epdcch); epdcchDmrsIndices = lteEPDCCHDMRSIndices(enb,epdcch); % Create empty subframe resource grid subframe = lteDLResourceGrid(enb,ntxants); % Concatenate EPDCCH symbols/indices with EPDCCH DM-RS % symbols/indices to facilitate beamforming allSymbols = [epdcchSymbols; epdcchDmrsSymbols]; allIndices = [epdcchIndices; epdcchDmrsIndices]; % Perform EPDCCH beamforming according to TS 36.101 Annex B.4.4 for % Distributed type and Annex B.4.5 for Localized type [K,L,P] = size(subframe); [resubs,~,portsubs] = ind2sub([K L 4],allIndices); rbsubs = floor((resubs-1)/12)+1; rbs = unique(rbsubs); ports = unique(portsubs.'); if (strcmpi(epdcch.EPDCCHType,'Localized')) codebookIdx = randi([0 3],1); W = lteDLPrecode(1,ntxants,'SpatialMux',codebookIdx); end codebookIdxs = zeros(length(rbs),length(ports)); for p=1:length(ports) thisport = (portsubs==ports(p)); for r = 1:length(rbs) thisrb = (rbsubs==rbs(r)); if (strcmpi(epdcch.EPDCCHType,'Distributed')) unusedIdxs = setxor(0:3,codebookIdxs(r,1:p-1)); codebookIdx = unusedIdxs(randi(length(unusedIdxs),1)); W = lteDLPrecode(1,ntxants,'SpatialMux',codebookIdx); end codebookIdxs(r,p) = codebookIdx; bfSymbols = allSymbols(thisport & thisrb) * W; [~,bfIndices] = lteExtractResources(allIndices(thisport & thisrb),subframe); subframe(bfIndices) = subframe(bfIndices) + bfSymbols; end end % Transmit CFI on the PCFICH subframe(ltePCFICHIndices(enb)) = ltePCFICH(enb,lteCFI(enb)); % Transmit Cell-Specific Reference Signals (CRS) subframe(lteCellRSIndices(enb)) = lteCellRS(enb); % Transmit PSS and SSS subframe(ltePSSIndices(enb)) = ltePSS(enb); subframe(lteSSSIndices(enb)) = lteSSS(enb); % Add OCNG subframe = addOCNG(enb,epdcch,subframe); % Perform OFDM modulation [txwaveform,info] = lteOFDMModulate(enb,subframe); % Set sampling rate of channel to that of the OFDM modulation channel.SamplingRate = info.SamplingRate; % Set channel time to current subframe channel.InitTime = sf/1000; % Reinitialize channel seed for each subframe to increase % variability channel.Seed = sf + 1; % Pass data through the fading channel model. % An additional 25 samples are added to the end of the waveform. % These are to cover the range of delays expected from the channel % modeling (a combination of implementation delay and channel % delay spread). rxwaveform = lteFadingChannel(channel,[txwaveform; zeros(25,ntxants)]); % Linear SNR SNR = 10^(SNRdB/20); % Normalize noise power to take account of sampling rate, which is % a function of the IFFT size used in OFDM modulation, and the % number of antennas N0 = 1/(sqrt(2.0*ntxants*double(info.Nfft))*SNR); % Create additive white Gaussian noise noise = N0*complex(randn(size(rxwaveform)),randn(size(rxwaveform))); % Add AWGN to the received time domain waveform rxwaveform = rxwaveform + noise; % Perform receiver synchronization if (enb.NSubframe==0) offset = lteDLFrameOffset(enb,rxwaveform); % Determine if frame synchronization was successful if (offset > 25) offset = offsets(end); else offsets = [offsets offset]; %#ok end end if (offset>0) rxwaveform = rxwaveform(1+offset:end,:); end % Perform OFDM demodulation rxsubframe = lteOFDMDemodulate(enb,rxwaveform); % Perform CRS-based (or perfect) channel estimation for PCFICH / % CFI reception if (perfectChannelEstimator) % Perform perfect channel estimation assuming the number of % transmit antennas is CellRefP (i.e. for CRS-based reception) hest = lteDLPerfectChannelEstimate(enb,channel,offset); %#ok<UNRCH> noiseGrid = lteOFDMDemodulate(enb,noise(1+offset:end ,:)); nest = var(noiseGrid(:)); else % Perform channel estimation using the CRS. The channel % estimator averaging parameters are adjusted to use a % rectangular averaging window suited to the CRS, rather than % the 1-by-2 (frequency-by-time) window configured in 'cec' % which is suited to the EPDCCH DM-RS symbols (which are % adjacent in time). cec_crs = cec; cec_crs.Reference = 'CellRS'; cec_crs.FreqWindow = 31; cec_crs.TimeWindow = 15; [hest,nest] = lteDLChannelEstimate(enb,cec_crs,rxsubframe); end % Receive PCFICH / CFI pcfichIndices = ltePCFICHIndices(enb); [pcfichRx,pcfichHest] = lteExtractResources(pcfichIndices,rxsubframe,hest); rxCFI = lteCFIDecode(ltePCFICHDecode(enb,pcfichRx,pcfichHest,nest)); % If the CFI was incorrectly decoded: if (rxCFI~=enb.CFI) % Record a misdetection of the CFI as a misdetection of the DCI % message (in 'mdsg'), in accordance with the test definition % in TS 36.101 Section 8.8. It is also recorded separately as a % misdetection of the CFI (in 'mcfi'). 'mcfi' can be used to % establish the probability of misdetection of the CFI on its % own. At low SNRs and for robust EPDCCH configurations (high % aggregation level), misdetection of the CFI may dominate the % overall misdetection of the DCI message. mdsg(SNRIdx,sf+1) = 1; mcfi(SNRIdx,sf+1) = 1; else % Proceed to EPDCCH / DCI decoding if (perfectChannelEstimator) if (ntxants~=enb.CellRefP) %#ok<UNRCH> % Perform perfect channel estimation for 'ntxants' % antennas (i.e. for EPDCCH reception) if this differs % from CellRefP (used earlier for PCFICH/CFI reception) hest = lteDLPerfectChannelEstimate(enb,channel,offset,ntxants); end % Apply EPDCCH beamforming to the perfect channel estimate hest = beamformPerfectChannelEstimate(hest,rbs,ports,codebookIdxs); end % Initialize array for received DCI message rxDCI = {}; % Copy the structure 'epdcch' to 'epdcchRx' and remove fields % of 'epdcchRx' which are not required (they will be set during % decoding and search). This is not essential but provides % realism because |epdcchRx| then only contains system % information conveyed to the UE from the RRC epdcchRx = epdcch; epdcchRx = rmfield(epdcchRx,{'DCIFormat','EPDCCHFormat','EPDCCHECCE'}); % For each EPDCCH set: for rxSetIndex = 1:numel(epdcchRx.EPDCCHTypeList) % Configure reception for current set epdcchRx.EPDCCHType = epdcchRx.EPDCCHTypeList{rxSetIndex}; epdcchRx.EPDCCHPRBSet = epdcchRx.EPDCCHPRBSetList{rxSetIndex}; if (~perfectChannelEstimator) % Perform channel estimation using the EPDCCH DM-RS [hest,nest] = lteDLChannelEstimate(enb,epdcchRx,cec,rxsubframe); end % Perform EPDCCH demodulation [bits,symbols] = lteEPDCCHDecode(enb,epdcchRx,rxsubframe,hest,nest); % Perform EPDCCH blind search and DCI message decoding rxDCI = [rxDCI lteEPDCCHSearch(enb,epdcchRx,bits)]; %#ok<AGROW> end % Record if the DCI message was missed; specifically if no DCI % messages were decoded or if none of the decoded messages % matched the transmitted message mdsg(SNRIdx,sf+1) = (isempty(rxDCI) || ~any(cellfun(@(x)isequal(x,dci),rxDCI))); end end end
Simulating at -1.5dB SNR for a total of 1 Frame(s) Simulating at 1dB SNR for a total of 1 Frame(s) Simulating at 3.5dB SNR for a total of 1 Frame(s)
Общая вероятность пропущенного разрешения на планирование нисходящей линии связи (Pm-dsg) вычисляется путем усреднения mdsg матрица вдоль своей второй размерности, т.е. усреднение каждой строки, для создания вектора Pmdsg содержит значение Pm-dsg для каждой проверенной точки SNR.
Pmdsg = 100*mean(mdsg,2);
Наконец, строят график результатов испытаний. Вероятность пропущенного разрешения PM-dsg на планирование нисходящей линии связи строится для каждой точки SNR. При целевом SNR добавляют маркер и Pm-dsg 1%. Контрольная линия добавляется для PM-dsg в 1%, и наблюдение SNR, при котором моделируемая производительность пересекает эту линию, дает указание на запас SNR между моделируемой производительностью и тестовым требованием.
plotResults(SNRIn,targetSNR,nFrames,Pmdsg);

Сгенерированный график был получен с малым количеством кадров, поэтому показанные результаты не являются репрезентативными. Более длительное моделирование, полученное с 100 кадрами и включающее некоторые дополнительные точки SNR, дало результаты, показанные ниже.

3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»
3GPP ТС 36.211 «Физические каналы и модуляция»
3GPP ТС 36.213 «Процедуры физического уровня»
3GPP TS 36.331 «Спецификация протокола управления радиоресурсами (RRC)»
В этом примере используются следующие локальные функции:
beamformPerfectChannelEstimate: применить формирование диаграммы направленности EPDCCH к идеальной оценке канала
addOCNG: добавить OCNG EPDCCH в сетку ресурсов субкадров
plotResults: постройте график результатов теста
function hest = beamformPerfectChannelEstimate(hestperfect,rbs,ports,codebookIdxs) [K,L,nrxants,ntxants] = size(hestperfect); hest = zeros([K L nrxants 4]); for r = 1:length(rbs) resubs = (rbs(r)-1)*12 + (1:12).'; allportW = zeros(4,ntxants); activeportW = arrayfun(@(x)lteDLPrecode(1,ntxants,'SpatialMux',x),codebookIdxs(r,:),'UniformOutput',false); allportW(ports,:) = cat(1,activeportW{:}); hest(resubs,:,:,:) = reshape(reshape(hestperfect(resubs,:,:,:),[12*L*nrxants ntxants])*allportW.',[12 L nrxants 4]); end end function subframe = addOCNG(enb,epdcch,subframe) % Add OP.7 OCNG (TS 36.101 Annex A.5.1.7). Consists of a single PDSCH % in all resource blocks not used by the EPDCCH. ocngPdsch.Modulation = 'QPSK'; ocngPdsch.RNTI = 0; if (enb.CellRefP==1) ocngPdsch.TxScheme = 'Port0'; else ocngPdsch.TxScheme = 'TxDiversity'; end ocngPRBs = setdiff((0:enb.NDLRB-1).',epdcch.EPDCCHPRBSet); [ocngPdschInd,ocngPdschInfo] = ltePDSCHIndices(enb,ocngPdsch,ocngPRBs); ocngPdschData = randi([0 1],1,ocngPdschInfo.G); ocngPdschPower = -3.0; % rho + sigma = -3.0 + 0.0 ocngPdschSym = ltePDSCH(enb,ocngPdsch,ocngPdschData)*(10^(ocngPdschPower/20)); subframe(ocngPdschInd) = ocngPdschSym; % Add control region OCNG reference channel (TS 36.101 Annex A.5). % Includes PDCCH and PHICH locations but avoids PCFICH locations, to % allow the CFI to be transmitted pcfichRegInd = ltePCFICHIndices(enb,'reg'); enbPdcch = enb; enbPdcch.PHICHDuration = 'Normal'; enbPdcch.Ng = 'Sixth'; exreg = pcfichRegInd(:,1); ocngPdcchInd = ltePDCCHIndices(enbPdcch,exreg); NRE = size(ocngPdcchInd,1); ocngPdcchData = randi([0 1],1,NRE*2); ocngPdcchPower = -3.0; % rho + sigma = -3.0 + 0.0 ocngPdcchSym = ltePDCCH(enbPdcch,ocngPdcchData,NRE/4)*(10^(ocngPdcchPower/20)); subframe(ocngPdcchInd) = ocngPdcchSym; end function plotResults(SNRIn,targetSNR,nFrames,Pmdsg) figure; plot(SNRIn,Pmdsg,'-*') if (nFrames==1) frameStr = '1 frame'; else frameStr = [num2str(nFrames) ' frames']; end title(sprintf('Probability of missed downlink scheduling grant\nfor %s',frameStr)); xlabel('SNR (dB)'); ylabel('Pm-dsg (%)'); grid on; hold on; plot(targetSNR,1,'--r^','MarkerFaceColor','r') plot(SNRIn, ones(1,numel(SNRIn)),'--r'); legend('Simulation Result',sprintf('Target: 1%% Pm-dsg @ %0.1fdB SNR',targetSNR),'Location','NorthEast'); xlim([min(SNRIn)-0.5 max(SNRIn)+0.5]); ylim([fix(min(Pmdsg)-2) fix(max(Pmdsg)+2)]); end