exponenta event banner

Расширенное тестирование соответствия физического канала управления нисходящей линии связи (EPDCCH)

В этом примере показано, как измерить производительность демодуляции 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;

Конфигурация eNeyB

Создание структуры 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, указанные для теста.

Для этих тестов сконфигурированы два аппарата 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

Набор 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)

Общая вероятность пропущенного разрешения на планирование нисходящей линии связи (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, дало результаты, показанные ниже.

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

  1. 3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»

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

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

  4. 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