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