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

Этот пример показывает, как измерить эффективность демодуляции EPDCCH/PCFICH с помощью LTE Toolbox™ в условиях тестирования, определенных в TS 36.101 [1] Раздел 8.8 «Демодуляция EPDCCH».

Введение

Этот пример показывает эффективность демодуляции EPDCCH/PCFICH с точки зрения вероятности неправильного определения предоставления планирования нисходящей линии связи (Pm-dsg), как определено в TS 36.101 [1] раздел 8.8 «Демодуляция EPDCCH». EPDCCH и PCFICH проверяются совместно, и неправильное определение PCFICH подразумевает неправильное определение EPDCCH. Этот пример работает на субкадре по базису субкадров при симуляции в конкретном ОСШ. Ресурсная сетка, заполненная EPDCCH, EPDCCH DM-RS и PCFICH, генерируется и OFDM модулируется, чтобы создать форму волны передачи. Сгенерированная форма волны передается через шумный канал расширенного транспортного средства A (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 вслепую

Область Setup

Переменная Test позволяет выбрать контрольный номер 1 или 2 из ТУ 36.101 [1] таблица 8.8.1.1-2. Для теста 1 целевой ОСШ для вероятности пропущенного предоставления планирования нисходящей линии связи (Pm-dsg) 1%$<=$ является 2.6dB. Для теста 2 целевой ОСШ для Pm-dsg 1%$<=$ является -3.2dB. Приведенный ниже код настраивает целевой ОСШ в зависимости от тестового номера, а также выбирает область значений точек ОСШ SNRIn для симуляции, где область значений охватывает целевой ОСШ. 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;

Строение eNodeB

Создайте структуру enb , представляющих настройки всей ячейки (eNodeB), заданные для теста. Количество нисходящих ресурсных блоков (50) соответствует тестовой полосе пропускания (10MHz), определенной в TS 36.101 [1] Таблица 8.8.1.1-2. Режим дуплекса показан в таблице 8.8.1.1-2 в составе описания опорного канала «R.55 FDD» для теста 1 и «R.56 FDD» для теста 2. Дополнительные настройки каналов FDD и R.56 FDD см. R.55 Приложении A.3.10.1 TS 36.101.

% 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. Хотя TS 36.101 Таблица 8.8.1.1-1 указывает, что первый набор имеет 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 устанавливается для конкретного тестового номера в соответствии с «Уровнем агрегации», отмеченным в TS 36,101 таблице 8,8,1,1-2. Связь между форматом 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. Установите perfectChannelEstimator в 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 Transmission Set

Аппарат EPDCCH для txSetIndex передачи сконфигурировано в коде ниже как функция от тестового номера. Следует отметить, что, поскольку приемник EPDCCH (оценка канала, демодуляция, поиск EPDCCH) проходит через оба набора EPDCCH, приемник не должен быть сконфигурирован специально ни для теста 1, ни для теста 2, он автоматически декодирует переданное сообщение DCI в соответствующем наборе EPDCCH CH.

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, представляющий пропущенные гранты для планирования нисходящей линии связи. Эта матрица имеет строку для каждой точки ОСШ и столбец для каждого моделируемого подкадра. Элементы будут установлены на 1 для точек ОСШ, где было пропущено предоставление планирования нисходящей линии связи. Как описано выше, 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
------------------------------------------------------------------

Обработка

Для каждой точки ОСШ для каждого подкадра выполняются следующие операции:

  • Создание кандидатов EPDCCH: The 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 для облегчения формирования луча. Формирование луча осуществляется в соответствии с ТС 36.101 [1] Приложение B.4.4 для распределенного типа и Приложение B.4.5 для локализованного типа.

  • Кодирование CFI/модуляция PCFICH: lteCFIDecode, ltePCFICH и ltePCFICHIndices используются, чтобы кодировать CFI, модулировать PCFICH и сопоставить модулированные символы с ресурсной сеткой субкадров.

  • Сложение специфического для ячейки опорного сигнала (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 reception/EPDCCH blind search предпринимается попытка поиска. Для каждого аппарата EPDCCH:

  • Сконфигурируйте приемник для набора EPDCCH: структуры строения EPDCCH epdcchRx создается путем копирования структуры, используемой в датчике, epdcch. epdcchRx.EPDCCHType и epdcchRx.EPDCCHPRBSet сконфигурированы для приема набора EPDCCH путем установки их в соответствующий элемент epdcchRx.EPDCCHTypeList и epdcchRx.EPDCCHPRBSetList соответственно. Получившаяся структура строения epdcchRx затем используется, чтобы сконфигурировать шаги оценки канала, демодуляции EPDCCH и слепого поиска EPDCCH. Поля в epdcchRx будет известно UE посредством высокоуровневой сигнализации информационного элемента EPDCCH-Config (IE) в протоколе управления радиоресурсами (RRC) TS 36.331 [4].

  • Оценка канала для приема EPDCCH: Если прекрасная оценка канала используется, прекрасная оценка канала, ранее полученная для приема PCFICH, является beamformed согласно передаче beamforming используемый для 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 для каждой проверенной точки ОСШ.

Pmdsg = 100*mean(mdsg,2);

Графическое изображение результатов

Наконец, результаты теста построены. Вероятность пропущенного нисходящего планирования предоставления Pm-dsg строится для каждой точки ОСШ. Маркер добавляют при целевом ОСШ и Pm-dsg 1%. Строка ссылки добавляется для Pm-dsg 1%, и наблюдение ОСШ, при котором моделируемая эффективность пересекает эту строку, дает указание на запас ОСШ между моделируемой эффективностью и требованием теста.

plotResults(SNRIn,targetSNR,nFrames,Pmdsg);

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

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

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

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

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

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

Локальные функции

В этом примере используются следующие локальные функции:

  • beamformPerfectChannelEstimate: применить формирование луча EPDCCH к идеальной оценке канала

  • addOCNG: добавить EPDCCH OCNG в подрамник ресурсной сетки

  • 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