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

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

Введение

Этот пример показывает эффективность демодуляции EPDCCH/PCFICH в терминах вероятности misdetection предоставления планирования нисходящего канала (Pm-dsg), как задано в Разделе TS 36.101 [1] 8,8 "Демодуляций EPDCCH". EPDCCH и PCFICH тестируются совместно, и misdetection PCFICH подразумевает misdetection EPDCCH. Этот пример работает над подкадром базисом подкадра при симуляции в конкретном ОСШ. Сетка ресурса, заполненная с EPDCCH, EPDCCH DM-RS и PCFICH, сгенерирована, и OFDM модулируется, чтобы создать форму волны передачи. Сгенерированная форма волны передается через шумный канал Расширенного автомобильного A (EVA). Оценка канала, эквализация, демодуляция и декодирование выполняются в приемнике. Среднее значение misdetection вероятность 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 из таблицы 8.8.1.1-2 TS 36.101 [1]. Для Теста 1, целевой ОСШ для вероятности пропущенного предоставления планирования нисходящего канала (Pm-dsg)$<=$ 1% 2.6 дБ. Для Теста 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) соответствует тестовой полосе пропускания (10 МГц), заданных в таблице 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 сконфигурированы, как отмечено в таблице 8.8.1.1-1 TS 36.101 [1]. EPDCCHTypeList и EPDCCHPRBSetList дайте типы EPDCCH и пары EPDCCH PRB для каждого набора EPDCCH. Обратите внимание на то, что наборы EPDCCH должны быть сконфигурированы в распоряжении, данном EPDCCHPRBSetList. Несмотря на то, что таблица 8.8.1.1-1 TS 36.101 указывает, что первый набор имеет 4 пары PRB, и второй набор имеет 8 пар PRB, определение количества пар PRB в наборах кандидата EPDCCH в 9.1.4-3a таблице TS 36.213 [3] имеет запись для 8 пар в наборе 1 и 4 пары в наборе 2, но не наоборот.

Установите ControlChannelType к 'EPDCCH', так, чтобы lteDCIInfo сообщают правильные размеры сообщения DCI для сообщений DCI, переданных на EPDCCH. Формат DCI DCIFormat также установлен как описано в таблице 8.8.1.1-1 TS 36.101

Формат EPDCCH EPDCCHFormat установлен для конкретного Тестового номера согласно "Уровню агрегации", отмеченному в таблице 8.8.1.1-2 TS 36.101. Отношение между форматом EPDCCH и уровнем агрегации дано таблицей 6.8A.1-2 TS 36.211 [2], где уровень агрегации описан как "Количество ECCEs для одного 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, согласно таблице 8.8.1.1-2 TS 36.101 [1]. Эта конфигурационная структура будет использоваться функциональным 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.

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 тестируются совместно, и misdetection PCFICH подразумевает misdetection EPDCCH. Поэтому элемент mdsg установлен в 1, если или PCFICH или EPDCCH не могли бы демодулироваться. Для удобства, отдельного матричного mcfi создается, чтобы записать misdetections 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), таким образом, только 2 физических антенны потребуются, чтобы поддерживать передачу EPDCCH.

epdcchports = 2;
portcounts = [enb.CellRefP epdcchports];
if (isfield(enb,'CSIRefP'))
    portcounts = [portcounts enb.CSIRefP];
end
ntxants = max(portcounts);

Распечатайте сводные данные параметра

Распечатайте сводные данные параметров симуляции для списка параметров в приложении A.3.10 TS 36.101 [1] "Ссылочные Каналы Измерения для требований к производительности EPDCCH". Обратите внимание на то, что уровень агрегации (количество ECCEs на 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 создание: 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 beamforming: символы/индексы EPDCCH конкатенированы с символами/индексами EPDCCH DM-RS, чтобы упростить beamforming. Beamforming выполняется согласно приложению B.4.4 TS 36.101 [1] для Распределенного типа и Приложению 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 (приложение A.5.1.7 TS 36.101 [1]) добавляется, состоя из одного PDSCH во всех блоках ресурса, не используемых EPDCCH. Область управления канал ссылки OCNG (приложение A.5 TS 36.101) также добавляется, включая PDCCH и местоположения PHICH, но предотвращение местоположений PCFICH, чтобы позволить CFI быть переданным.

  • Модуляция OFDM: сетка ресурса подкадра является OFDM, модулируемым с помощью lteOFDMModulate.

  • Модель Канала распространения: модулируемая форма волны OFDM передается через канал распространения. Выход канала rxwaveform имеет два столбца, один на получают антенну.

  • Добавьте Шум Канала: шум канала моделируется AWGN.

  • Синхронизация приемника и Демодуляция OFDM: Определите задержку, перенесенную во время распространения. Это вычисляется путем вызова lteDLFrameOffset, который использует PSS и SSS. Демодуляция OFDM выполняется после синхронизации.

  • Оценка канала для приема PCFICH: основанная на CRS оценка канала (или совершенная оценка канала) выполняются, чтобы обеспечить оценку канала для эквализации PCFICH и демодуляции

  • PCFICH / прием CFI: PCFICH демодулируется (включая эквализацию), и CFI декодируется. Если декодируемый CFI не совпадает с переданным CFI, misdetection предоставления планирования нисходящего канала отмечен (как misdetection 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 в протоколе TS 36.331 [4] Радио-управления ресурсами (RRC).

  • Оценка канала для приема EPDCCH: Если совершенная оценка канала используется, совершенная оценка канала, ранее полученная для приема PCFICH, является beamformed согласно передаче beamforming используемый для EPDCCH, чтобы создать оценку канала для приема EPDCCH. В противном случае, если практическая оценка канала используется, ОСНОВАННАЯ НА DM-RS оценка канала EPDCCH выполняется.

  • Демодуляция EPDCCH: lteEPDCCHDecode используется, чтобы демодулировать EPDCCH для всех возможных местоположений кандидата EPDCCH, возвращая мягкие битные оценки для всех возможных кандидатов.

  • Поиск вслепую EPDCCH: lteEPDCCHSearch используется, чтобы искать сообщения DCI путем попытки декодирования сообщений DCI во всех возможных местоположениях кандидата, данных lteEPDCCHSpace, для всех возможных форматов DCI. Если поиску не удается декодировать сообщение формата, данного настройкой передатчика в тесте, misdetection предоставления планирования нисходящего канала отмечен.

Для более подробного описания шагов, вовлеченных в передачу 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);

Постройте результаты

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

plotResults(SNRIn,targetSNR,nFrames,Pmdsg);

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

Выбранная библиография

  1. 3GPP TS 36.101 "Передача радио оборудования пользователя (UE) и прием"

  2. 3GPP TS 36.211 "Физические каналы и модуляция"

  3. 3GPP TS 36.213 "Процедуры физического уровня"

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

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

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

  • beamformPerfectChannelEstimate: примените EPDCCH beamforming к совершенной оценке канала

  • 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