Этот пример показывает, как измерить уровень демодуляции 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 передают в нисходящем направлении поиск вслепую управляющей информации
Переменная 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;
Создайте структуру 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 сконфигурированы, как отмечено в таблице 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 для передачи 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: lteCFI, 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), вычисляется путем усреднения матрицы mdsg
вдоль ее второго измерения т.е. усреднения каждой строки, чтобы произвести векторный Pmdsg
, содержащий значение Pm-dsg для каждой протестированной точки ОСШ.
Pmdsg = 100*mean(mdsg,2);
Наконец, результаты испытаний построены. Вероятность пропущенного нисходящего канала, планируя предоставление Пополудни-dsg построена для каждой точки ОСШ. Маркер добавляется в целевом ОСШ и Pm-dsg 1%. Ссылочная строка добавляется для Pm-dsg 1% и наблюдения ОСШ, в котором пересекается моделируемая производительность, эта строка дает индикацию относительно поля ОСШ между моделируемой производительностью и тестовым требованием.
plotResults(SNRIn,targetSNR,nFrames,Pmdsg);
Сгенерированный график был получен с небольшим числом кадров, поэтому показанные результаты не являются представительными. Более длительная симуляция, полученная с 100 кадрами и включая некоторые дополнительные точки ОСШ, привела к результатам, показанным ниже.
3GPP TS 36.101 "Передача радио оборудования пользователя (UE) и прием"
3GPP TS 36.211 "Физические каналы и модуляция"
3GPP TS 36.213 "Процедуры физического уровня"
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