В этом примере показано, как LTE Toolbox™ может использоваться, чтобы обнаружить присутствие UEs, сопоставленного с eNodeB. Это достигается путем поиска нисходящего сигнала сообщения DCI и установления набора уникальных идентификаторов (C-RNTIs) в использовании.
В LTE Физический Нисходящий Канал Управления (PDCCH) несет управляющую информацию в форме сообщений Нисходящей управляющей информации (DCI). Сообщения DCI передают восходящий канал или информацию о планировании нисходящего канала от eNodeB до целевого UEs, чтобы UEs мог идентифицировать ресурсы, требуемые получить на Физическом Нисходящем Разделяемом Канале (PDSCH) или передать на Физическом Восходящем Разделяемом Канале (PUSCH). Каждый UE присвоен идентификатор, известный как C-RNTI (Радиосеть Ячейки Временный Идентификатор). C-RNTI используется, чтобы скремблировать биты CRC сообщения DCI для этого UE, и также определить местоположение сообщения DCI в PDCCH. Для получения дополнительной информации смотрите Поиск вслепую PDCCH и DCI Декодирование примера.
Цель этого примера состоит в том, чтобы декодировать PDCCH и искать кандидата сообщения DCI. C-RNTI затем получен из допустимых сообщений, дав индикацию относительно количества UEs быть обращенным и их шаблон в зависимости от времени. Обратите внимание на то, что в этом примере все обнаружили RNTIs, возвращены, не только RNTIs в области значений C-RNTI, заданной в таблице 7.1-1 [1] TS 36.321. Хранение этих других RNTIs позволяет этому примеру использоваться, чтобы идентифицировать случаи сообщений DCI, сопоставленных с информацией о Системе (SI-RNTI) или Разбивка на страницы (P-RNTI).
В этом примере форма волны при анализе хранится в файле ueDetectionWaveform.mat как переменная rxWaveform
. Это принято, что пропускная способность, режим дуплекса, длина циклического префикса, идентичность ячейки, количество специфичных для ячейки портов опорного сигнала и настройки PHICH все известны, и соответствующая eNodeB переменная enb
настройки также загружается из файла. Также возможно использовать форму волны, eNodeB настройка которой не известна, в этом случае eNodeB настройка должна была бы декодироваться как показано в Поиске Ячейки, MIB и примере Восстановления SIB1.
load ueDetectionWaveform.mat;
rxWaveform = double(rxWaveform) / 32768;
Частота возместила оценку, и коррекция и временная синхронизация выполняются.
% Perform frequency offset estimation and correction foffset = lteFrequencyOffset(enb,rxWaveform); rxWaveform = lteFrequencyCorrect(enb,rxWaveform,foffset); % Perform timing synchronization to the first whole subframe of the % waveform toffset = lteDLFrameOffset(enb,rxWaveform); ofdmInfo = lteOFDMInfo(enb); sfLength = ofdmInfo.SamplingRate * 1e-3; offsetSubframes = floor(toffset / sfLength); toffset = toffset - (offsetSubframes * sfLength); rxWaveform = rxWaveform(1+toffset:end,:); enb.NSubframe = mod(-offsetSubframes,10);
Форма волны I/Q rxWaveform
OFDM, демодулируемый, чтобы произвести полученную сетку ресурса rxgrid
.
rxgrid = lteOFDMDemodulate(enb,rxWaveform);
Оценка канала и эквализация будут необходимы для обработки полученного не воздуха формы волны I/Q, таким образом, параметры средства оценки канала будут сконфигурированы.
cec.PilotAverage = 'UserDefined'; % Type of pilot averaging cec.FreqWindow = 13; % Frequency window size cec.TimeWindow = 9; % Time window size cec.InterpType = 'cubic'; % 2D interpolation type cec.InterpWindow = 'Centered'; % Interpolation window type cec.InterpWinSize = 1; % Interpolation window size
Нисходящая форма волны при анализе может нести информацию для многих UEs. Этот раздел пытается найти их RNTIs. Подход, примененный здесь, использует то, что для допустимого сообщения DCI, биты CRC маскируются с RNTI. Поэтому принятие там не является никакими ошибками (CRC = 0), последние 16 декодируемых битов соответствуют RNTI. Этот подход описан в Разделе 5 из [2].
Этот пример реализует следующий алгоритм:
Рассмотрите все форматы PDCCH в пространстве поиска UE-specific (0... 3)
Для каждого формата PDCCH вычислите всех возможных кандидатов в области управления, которая может нести сообщение DCI.
Для каждого кандидата попытайтесь декодировать сообщение DCI (рассматривающий все возможные форматы DCI с уникальной длиной сообщения DCI).
Следующие шаги выполняются, чтобы проверять, составляют ли декодируемые биты допустимое сообщение DCI (графическое представление алгоритма также обеспечивается ниже):
Примите, что нет никаких ошибок в передаче, i.e. примите CRC = 0. Это означает, что последние 16 декодируемых битов составляют C-RNTI.
Разделите сообщение DCI от 16 битов C-RNTI.
Вычислите новые биты CRC и замаскируйте их с C-RNTI.
Повторно закодируйте сообщение DCI.
Сравните повторно закодированное сообщение с оригиналом закодировало кандидата DCI.
Отсутствие ошибок в сравнении на этом последнем шаге означает допустимое сообщение DCI, и C-RNTI (идентификатор UE) были обнаружены. В некоторых случаях, особенно с формами волны получил не воздух, некоторые ошибки могут произойти в DCI декодирование процесса. Поэтому этот пример использует порог (maxErrors
) управлять, сколько ошибок позволено в сравнении между полученными битами кандидата и повторно закодированными битами кандидата.
Два шага последующей обработки применяются к списку обнаруженного UEs для того, чтобы сократить количество ложных обнаружений:
Сообщения DCI, получавшие символы кандидата, степень которых (в дБ) меньше порога minPDCCHPower
исключены. Без этого шага полученные биты кандидата, состоящие только из шума (даже в малой мощности), могут инициировать ложные обнаружения.
В случае наложения результатов (i.e. где индексы кандидата одного результата являются подмножеством другого), результат с самым низким количеством битовых ошибок будет выбран.
Обратите внимание на то, что для полноты, общее пространство поиска также разыскивается сообщения формата 1A и 1C DCI, выделяющие ресурсы для получения информации о Системе, Разбивки на страницы или сообщений Ответа Произвольного доступа.
% Maximum number of bit errors allowed to consider a detection as valid maxErrors = 2; % Minimum PDCCH power in dB (relative to the cell-specific reference signal % used for channel estimation) to consider a detection as valid minPDCCHPower = -5.0; % Initialize results table results = table; % Get DCI formats and lengths for DCI messages in the common search space pdcchCommon = struct('SearchSpace','Common'); pdcchCommon.ControlChannelType = 'PDCCH'; CIF = 'Off'; % enable or disable Carrier Indicator Field pdcchCommon.EnableCarrierIndication = CIF; [dciInfoCommon,pdcchCommon] = getUniqueDCILengths(enb,pdcchCommon); % Get DCI formats and lengths for DCI messages in the UE-specific search % space. The length of a DCI message of a given format may be affected by % various UE-specific higher-layer parameters so the set of different % unique lengths across those parameters is recorded, along with the % corresponding parameter combinations pdcchUESpecific = struct('SearchSpace','UESpecific'); pdcchUESpecific.ControlChannelType = 'PDCCH'; pdcchUESpecific.EnableCarrierIndication = CIF; [dciInfoUESpecific,pdcchUESpecific] = getUniqueDCILengths(enb,pdcchUESpecific); % Establish the number of subframes in the waveform griddims = lteResourceGridSize(enb); L = griddims(2); nSubframes = floor(size(rxgrid,2) / L); % For each subframe in the waveform, attempt to decode the PDCCH startSubframe = enb.NSubframe; CFIs = zeros(1,nSubframes); for i = 0:nSubframes-1 % Extract the current subframe rxSubframe = rxgrid(:,(i*L) + (1:L),:); % Perform channel estimation [hest,nest] = lteDLChannelEstimate(enb,cec,rxSubframe); % If the current subframe contains the first occurrence of the MIB in % the waveform, decode the MIB to establish the frame number if (enb.NSubframe==0 && i<10) startFrame = decodeMIB(enb,rxSubframe,hest,nest,i); end % Get PCFICH indices, extract received PCFICH symbols and corresponding % channel estimate, demodulate PCFICH, decode and record CFI pcfichIndices = ltePCFICHIndices(enb); [pcfichRx,pcfichHest] = lteExtractResources(pcfichIndices,rxSubframe,hest); pcfichBits = ltePCFICHDecode(enb,pcfichRx,pcfichHest,nest); enb.CFI = lteCFIDecode(pcfichBits); CFIs(i+1) = enb.CFI; % Get PDCCH indices pdcchIndices = ltePDCCHIndices(enb); % Extract received PDCCH symbols and corresponding channel estimate [pdcchRx,pdcchHest] = lteExtractResources(pdcchIndices,rxSubframe,hest); % Perform PDCCH demodulation to obtain the received PDCCH bits, which % may contain encoded DCI messages for one or more users [pdcchBits,pdcchSymbols] = ltePDCCHDecode(enb,pdcchRx,pdcchHest,nest); % Initialize array of PDCCH format / candidate / DCI format % combinations, which represent possible UEs (i.e. possible locations % for DCI messages providing a downlink or uplink grant for a UE) possibleUEs = []; % PDCCH format for UE-specific search space can be 0, 1, 2, or 3 for pdcchFormat = 0:3 ue = struct(); % Get all PDCCH candidate indices and the number of candidates M % for the current PDCCH format ue.PDCCHFormat = pdcchFormat; candidates = getPDCCHCandidates(enb,ue); M = size(candidates,1); % For each candidate for m = 1:M % Record PDCCH candidate indices ue.Candidate = candidates(m,:); % For each DCI format in the UE-specific search space dciFormats = fieldnames(dciInfoUESpecific); for dciFormatIdx = 1:length(dciFormats) % Record DCI format ue.DCIFormat = dciFormats{dciFormatIdx}; % Record this PDCCH format / candidate / DCI format % combination as a possible "UE". For DCI formats that have % different lengths across the UE-specific higher-layer % parameters, each length is recorded as a different % possible UE dciLengths = dciInfoUESpecific.(ue.DCIFormat); for dciLengthIdx = 1:length(dciLengths) ue.DCILength = dciLengths(dciLengthIdx); ue.PDCCH = pdcchUESpecific.(ue.DCIFormat)(dciLengthIdx); possibleUEs = [possibleUEs ue]; %#ok<AGROW> end end % For PDCCH formats 2 or 3, record the possibility of a DCI % message in the common search space in this candidate location % with format 1A or 1C. Such DCI messages correspond to System % Information, Paging, or Random Access Response message rather % than uplink or downlink grants for a UE, but are searched for % in this example for completeness if (any(pdcchFormat==[2 3])) for dciFormat = {'Format1A' 'Format1C'} ue.DCIFormat = dciFormat{1}; ue.DCILength = dciInfoCommon.(ue.DCIFormat); ue.PDCCH = pdcchCommon.(ue.DCIFormat); possibleUEs = [possibleUEs ue]; %#ok<AGROW> end end end end % For each possible UE for ue = possibleUEs % Get the received candidate bits from the received PDCCH bits (for % DCI decoding) bitIdx = ue.Candidate; candidateBits = pdcchBits(bitIdx(1):bitIdx(2)); % Get the received candidate symbols from the received PDCCH % symbols (for PDCCH power estimation). The modulation order Qm = 2 % is used to convert candidate bit indices into candidate symbol % indices (QPSK modulation is always used for PDCCH) Qm = 2; symIdx = [((bitIdx(1) - 1) / Qm) + 1 bitIdx(2)/Qm]; candidateSymbols = pdcchSymbols(symIdx(1):symIdx(2)); % Decode the received candidate bits and get the RNTI. Assuming a % CRC pass (CRC = 0), the 2nd output from lteDCIDecode will % correspond to the RNTI [dciMessageBits,RNTI] = lteDCIDecode(ue.DCILength,candidateBits); % Re-encode the decoded DCI message bits (using the detected RNTI) % and establish the number of bit errors between the re-encoded % candidate bits and received candidate bits ue.RNTI = RNTI; reencodedCandidateBits = lteDCIEncode(ue,dciMessageBits); numErrors = sum(int8(candidateBits > 0) ~= reencodedCandidateBits); % If the number of bit errors is greater than maxErrors, continue % to the next possible UE (the rest of the loop body here is not % executed) if (numErrors > maxErrors) continue; end % Create DCI message structure from message bit payload. This is % performed because for some DCI formats (e.g. format 0 versus % format 1A), the true DCI format amongst DCI formats with % the same length can be determined by the value of a message bit dci = lteDCI(enb,ue.PDCCH,dciMessageBits); % Create table entry for the current DCI message result = struct(); result.Subframe = i; result.DetectedRNTI = string(dec2hex(ue.RNTI,4)); result.NumErrors = numErrors; result.DCIFormat = string(dci.DCIFormat); result.PDCCHFormat = ue.PDCCHFormat; result.Candidate = ue.Candidate; result.PDCCHPower = round(10*log10(var(candidateSymbols)),2); result.DCI = {dci}; result = struct2table(result); % Check if a DCI message has previously been successfully decoded % in this subframe with the same RNTI, DCI format and starting % candidate location as the current DCI message (but with a % different PDCCH format) if (~isempty(results)) match = (results.Subframe == result.Subframe); match = match & (results.DetectedRNTI == result.DetectedRNTI); match = match & strcmpi(results.DCIFormat,result.DCIFormat); match = match & (results.Candidate(:,1) == result.Candidate(1)); match = find(match~=0); else match = []; end % If a DCI message satisfies the criteria above, it must have been % for a smaller PDCCH format and therefore represents successful % decoding of part of the current message, i.e. decoding a subset % of the candidate Control Channel Elements (CCEs). Therefore the % previous result can be replaced with the current result. Note % that for larger PDCCH formats the number of bit errors will tend % to be bigger as there are more candidate bits, so at low SNRs the % detected PDCCH format here may be lower than the true PDCCH % format (i.e. the number of errors in the bits for the true PDCCH % format exceeds maxErrors) if (isempty(match)) results = [results; result]; %#ok<AGROW> else results(match,:) = result; end end % Update the subframe number enb.NSubframe = mod(enb.NSubframe + 1,10); end % Remove results whose estimated PDCCH power (in dB) is lower than the % minimum power threshold. Without this step, received candidate symbols % consisting solely of noise (even at a low power) can trigger false % detections if (~isempty(results)) results(results.PDCCHPower < minPDCCHPower,:) = []; end % Check if results are empty if (isempty(results)) disp('No RNTIs found.'); return; end % In any given subframe, in the case of overlapping results (i.e. where the % candidate indices of one result are a subset of another), the result with % the lowest number of bit errors will be selected overlapping = []; for i = unique(results.Subframe).' % Find result rows which correspond to the current subframe and extract % those results sf = find(results.Subframe == i).'; % For each pair of results in this subframe for a = sf for b = sf ca = results{a,'Candidate'}; cb = results{b,'Candidate'}; % If the first result's candidate indices are a subset of the % second result's candidate indices if (ca(1)>=cb(1) && ca(2)<=cb(2)) % If the first result has more errors if (results{a,'NumErrors'}>results{b,'NumErrors'}) % Mark the first result in the pair as overlapping % (i.e. mark it for removal) overlapping = [overlapping a]; %#ok<AGROW> end end end end end % Remove overlapping results results(overlapping,:) = []; % Add a label for each row of the results table results.Properties.RowNames = strsplit(num2str(1:height(results)));
Таблица обнаруженного RNTIs и другой информации, сопоставленной с обнаруженными сообщениями DCI, отображена. Каждая строка этой таблицы включает:
Subframe
: Номер подкадра (относительно запуска полученной формы волны), в котором происходит обнаруженный RNTI.
DetectedRNTI
: Обнаруженный RNTI.
NumErrors
: Количество битовых ошибок между повторно закодированными битами кандидата и полученными битами кандидата (меньше чем или равный maxErrors
).
DCIFormat
: Формат DCI сообщения DCI. Обратите внимание на то, что во время процесса обнаружения UE, только форматы DCI с уникальными длинами использовались, когда только длина сообщения выхода DCI влияет на процесс декодирования (а именно, уровень, соответствующий до сверточного декодирования). В системе LTE несколько сообщений DCI могут иметь ту же длину для той же eNodeB настройки. Эта неоднозначность разрешена в операции нормальной системы каждым UE быть присвоенным Режима передачи (TM). Таблица 7.1-5 [3] TS 36.213 показывает, какие форматы DCI применимы для данного TM, и все форматы для данного TM будут иметь уникальные длины. Поскольку этот пример действует без ведома UEs и их ТМ, истинный формат DCI, обнаруженный для UE, не может совпадать с форматом DCI здесь, но длина будет соответствовать. Функциональный lteDCIInfo
может использоваться, чтобы установить, который другие форматы DCI имеют ту же длину как формат DCI здесь.
PDCCHFormat
: Формат PDCCH полученных битов кандидата для сообщения DCI. Для получения дополнительной информации о форматах PDCCH, смотрите Поиск вслепую PDCCH и DCI Декодирование примера.
Candidate
: Содержащие [начинаются, конец], битные индексы (на основе 1) из местоположения кандидата PDCCH для сообщения DCI т.е. местоположения полученных битов кандидата в наборе полных, получили биты PDCCH. Полная группа кандидатов пространства поиска PDCCH на данную eNodeB настройку, формат PDCCH и RNTI может быть найдена с помощью ltePDCCHSpace
функция.
PDCCHPower
: Степень полученных символов кандидата (в дБ) сопоставленный с этим сообщением DCI.
DCI
: Декодируемые DCI передают структуру, принимая, что формат DCI, отмеченный выше, является истинным форматом DCI для сообщения.
disp(results);
Subframe DetectedRNTI NumErrors DCIFormat PDCCHFormat Candidate PDCCHPower DCI ________ ____________ _________ __________ ___________ ___________ __________ ____________ 1 0 "9397" 1 "Format0" 1 1 144 0.32 {1x1 struct} 2 0 "F24A" 0 "Format0" 2 289 576 3.24 {1x1 struct} 3 0 "717A" 0 "Format2A" 2 577 864 3.36 {1x1 struct} 4 1 "717A" 0 "Format2A" 2 1 288 2.99 {1x1 struct} 5 1 "717A" 0 "Format0" 2 289 576 3.02 {1x1 struct} 6 1 "9397" 0 "Format0" 1 577 720 -0.22 {1x1 struct} 7 2 "717A" 0 "Format2A" 2 1 288 3.19 {1x1 struct} 8 2 "9397" 0 "Format0" 1 289 432 0.52 {1x1 struct} 9 3 "4C87" 0 "Format2A" 2 1 288 3.16 {1x1 struct} 10 3 "9397" 0 "Format0" 1 289 432 -0.11 {1x1 struct} 11 3 "96C1" 0 "Format2A" 1 577 720 3.27 {1x1 struct} 12 4 "717A" 0 "Format0" 2 1 288 3.41 {1x1 struct} 13 4 "9397" 2 "Format0" 0 433 504 1.07 {1x1 struct} 14 4 "717A" 1 "Format2A" 1 577 720 3.57 {1x1 struct} 15 5 "9397" 0 "Format0" 0 1 72 2.42 {1x1 struct} 16 5 "96C1" 1 "Format0" 0 145 216 0.6 {1x1 struct} 17 5 "6C27" 2 "Format2C" 0 217 288 1.14 {1x1 struct} 18 5 "717A" 0 "Format0" 1 289 432 5.68 {1x1 struct} 19 5 "4C87" 2 "Format2A" 0 577 648 1.66 {1x1 struct} 20 6 "717A" 0 "Format2A" 2 1 288 2.95 {1x1 struct} 21 6 "9397" 0 "Format0" 1 289 432 0.27 {1x1 struct} 22 6 "077B" 0 "Format0" 1 433 576 6.17 {1x1 struct} 23 7 "FFFF" 0 "Format1A" 2 1 288 0.14 {1x1 struct} 24 7 "9397" 1 "Format0" 1 289 432 1.38 {1x1 struct} 25 7 "4C87" 0 "Format2A" 1 577 720 6.21 {1x1 struct} 26 8 "4C87" 0 "Format2A" 2 1 288 3.03 {1x1 struct} 27 8 "717A" 0 "Format2A" 2 577 864 3.05 {1x1 struct} 28 9 "717A" 0 "Format2A" 2 577 864 3.05 {1x1 struct} 29 10 "4C87" 0 "Format2A" 2 1 288 3.11 {1x1 struct} 30 10 "F24A" 0 "Format0" 2 289 576 3.25 {1x1 struct} 31 10 "9397" 0 "Format2A" 1 721 864 2.98 {1x1 struct} 32 11 "4C87" 0 "Format2A" 2 1 288 2.27 {1x1 struct} 33 11 "717A" 0 "Format0" 2 289 576 2.37 {1x1 struct} 34 11 "F24A" 0 "Format2A" 2 577 864 2.38 {1x1 struct} 35 12 "FFFF" 2 "Format1A" 1 1 144 0.7 {1x1 struct} 36 12 "4C87" 0 "Format2A" 2 865 1152 3.85 {1x1 struct} 37 14 "717A" 2 "Format0" 1 1 144 2.64 {1x1 struct} 38 14 "B073" 2 "Format2" 0 145 216 3.01 {1x1 struct} 39 14 "717A" 0 "Format2A" 2 577 864 3.58 {1x1 struct}
График производится, показывая обнаруженный RNTIs по сравнению с номером подкадра. Полученная нисходящая сетка ресурса отображена, и RNTIs используются, чтобы пометить ресурсы PDSCH сообщенными соответствующими сообщениями DCI. Пустая восходящая сетка ресурса также отображена и ресурсы PUSCH, сообщенные любым форматом 0 DCI, или сообщения формата 4 отображены и помечены соответствующим RNTIs. Вопросительный знак появляется после любого RNTI для который количество битовых ошибок между повторно закодированными битами кандидата и полученными битами кандидата, NumErrors
, больше нуля (и меньше чем или равный maxErrors
). Системные Числа Системы координат (SFNs), используемый здесь, используют целые числа, чтобы представлять SFN и десятичные числа (десятые части), чтобы представлять подкадр в SFN.
enb.NFrame = startFrame; enb.NSubframe = startSubframe; enb.CFI = CFIs; summary = hPlotDetectedRNTIs(results,enb,rxgrid);
Наконец, сводные данные обнаруженного PDSCH или выделений ресурса PUSCH отображены. Поскольку каждый обнаружил сообщение DCI, следующее отображено:
Системный номер системы координат (SFN)
RNTI
Количество ошибок
Формат DCI (и сопоставленное направление ссылки)
Выделенный PRBs
Оценка мощности приемника в выделенном PRBs
Обратите внимание на то, что, потому что никакая восходящая сетка ресурса не присутствует, степень, оцененная для восходящих сообщений DCI, будет-Inf. Обратите внимание на то, что, если сводные данные на RNTI требуются, сводная таблица может легко быть отсортирована, чтобы сгруппировать результаты для того же RNTI использование sortrows(summary,'RNTI')
.
disp(summary);
SFN RNTI NumErrors DCIFormat LinkDirection PRBSet Power _____ ______ _________ __________ _____________ _______________________________________ _____ 833.3 "9397" 1 "Format0" "Uplink" "[7 8]" -Inf 833.3 "F24A" 0 "Format0" "Uplink" "[9...23]" -Inf 833.3 "717A" 0 "Format2A" "Downlink" "[0...24]" 15.98 833.4 "717A" 0 "Format2A" "Downlink" "[0...24]" 16.24 833.4 "717A" 0 "Format0" "Uplink" "[22 23]" -Inf 833.4 "9397" 0 "Format0" "Uplink" "[20 21]" -Inf 833.5 "717A" 0 "Format2A" "Downlink" "[2 3 6 7 10 11 14 15 18 19 22 23]" 15.95 833.5 "9397" 0 "Format0" "Uplink" "[22 23]" -Inf 833.6 "4C87" 0 "Format2A" "Downlink" "[0 1 4 5 8 9 12 13 16 17 20...24]" 14.9 833.6 "9397" 0 "Format0" "Uplink" "[22 23]" -Inf 833.6 "96C1" 0 "Format2A" "Downlink" "[2 3 6 7 10 11 14 15 18 19]" 15.38 833.7 "717A" 0 "Format0" "Uplink" "[16 17]" -Inf 833.7 "9397" 2 "Format0" "Uplink" "[14 15]" -Inf 833.7 "717A" 1 "Format2A" "Downlink" "[0...24]" 13.96 833.8 "9397" 0 "Format0" "Uplink" "[16 17]" -Inf 833.8 "96C1" 1 "Format0" "Uplink" "[14 15]" -Inf 833.8 "6C27" 2 "Format2C" "Downlink" "[0...3 8 9 12...17 20 21 24]" 13.98 833.8 "717A" 0 "Format0" "Uplink" "[12 13]" -Inf 833.8 "4C87" 2 "Format2A" "Downlink" "[0...24]" 13.98 833.9 "717A" 0 "Format2A" "Downlink" "[0...24]" 15.32 833.9 "9397" 0 "Format0" "Uplink" "[20 21]" -Inf 833.9 "077B" 0 "Format0" "Uplink" "[18 19]" -Inf 834 "FFFF" 0 "Format1A" "Downlink" "[0...7]" 17.31 834 "9397" 1 "Format0" "Uplink" "[20 21]" -Inf 834 "4C87" 0 "Format2A" "Downlink" "[8...24]" 16.71 834.1 "4C87" 0 "Format2A" "Downlink" "[20 21]" 17.68 834.1 "717A" 0 "Format2A" "Downlink" "[0...19 22...24]" 18.11 834.2 "717A" 0 "Format2A" "Downlink" "[0...24]" 18.38 834.3 "4C87" 0 "Format2A" "Downlink" "[0 1 4...24]" 17.51 834.3 "F24A" 0 "Format0" "Uplink" "[22 23]" -Inf 834.3 "9397" 0 "Format2A" "Downlink" "[2]" 18.42 834.4 "4C87" 0 "Format2A" "Downlink" "[0...3 6 7 10 11 14 15 18 19 22...24]" 15.9 834.4 "717A" 0 "Format0" "Uplink" "[22 23]" -Inf 834.4 "F24A" 0 "Format2A" "Downlink" "[4]" 16.8 834.5 "FFFF" 2 "Format1A" "Downlink" "[0...13]" 14.12 834.5 "4C87" 0 "Format2A" "Downlink" "[14...24]" 10.18 834.7 "717A" 2 "Format0" "Uplink" "[16 17]" -Inf 834.7 "B073" 2 "Format2" "Downlink" "[7 11 15 19]" 14.08 834.7 "717A" 0 "Format2A" "Downlink" "[0...24]" 14.32
Следующие наблюдения могут быть сделаны с помощью сводных данных результатов и графика:
Информация о системе (SI): RNTI, используемый для получения информации о Системе (SI-RNTI), является шестнадцатеричным числом FFFF. Сообщения DCI, сопоставленные с Системными Блоками информации (РОДСТВЕННИКИ), видны в SFN = 834.0 (NFrame = 834, NSubframe = 0) и SFN = 834.5 (NFrame = 834, NSubframe = 5). SystemInformationBlockType1 (SIB1) происходит в подкадре 5 из даже систем координат, таким образом, вхождение в SFN = 834.5 является SIB1. Другие РОДСТВЕННИКИ динамически планируются с информацией о планировании, содержавшейся в SIB1.
RNTIs, происходящий в нескольких подкадрах: 717 А RNTIs и 4C87 часто происходят в форме волны, обычно с нулевыми ошибками, таким образом, они, вероятно, будут соответствовать активному UEs.
Процесс обнаружения может привести к ошибкам из-за шума и искажения в нисходящих сигналах. Существует два основных типа ошибок, они описаны ниже использования примеров:
Пропущенное обнаружение: Наблюдайте SFN 834.6. Существует энергия в блоках ресурса PDSCH от 0 до 7. Однако никакое сообщение DCI не было обнаружено. Повторно выполните установку maxErrors=3
симуляции. Теперь RNTI 4C87 обнаруживается в этой области. Этот RNTI присутствует в других подкадрах, что означает, что это, вероятно, будет подлинным UE.
Положительная ложь: Наблюдайте выделение PDSCH с RNTI B073 в итоговом подкадре формы волны. Это перекрывает с выделением PDSCH 717 А. Учитывая, что 717 А RNTI часто происходят в форме волны и который RNTI B073 декодирует с 2 ошибками, вероятно, что RNTI B073 является "ложным положительным" обнаружением.
Этот пример использует функцию помощника:
3GPP TS 36.321 "Спецификация протокола Среднего управления доступом (MAC)"
Кумар, Хамед, Katabi и Li. "Аналитика радио LTE, сделанная легкий и доступный", SIGCOMM '14 (2014): 211-222
3GPP TS 36.213 "Процедуры физического уровня"
Этот пример использует следующие локальные функции:
getUniqueDCILengths
: Получите информацию сообщения DCI для форматов DCI с уникальными длинами
decodeMIB
: Декодируйте Основной блок информации (MIB), чтобы получить номер системы координат
getPDCCHCandidates
: Получите всех кандидатов PDCCH
% Get DCI message information for DCI formats with unique lengths, across % all UE-specific higher-layer parameters function [infoOut,pdcchOut] = getUniqueDCILengths(enb,pdcchIn) infoOut = []; for EnableSRSRequest = {'Off' 'On'} pdcchIn.EnableSRSRequest = EnableSRSRequest{1}; for EnableMultipleCSIRequest = {'Off' 'On'} pdcchIn.EnableMultipleCSIRequest = EnableMultipleCSIRequest{1}; for NTxAnts = [1 2 4] pdcchIn.NTxAnts = NTxAnts; % Get the DCI message lengths for all formats, as a % structure info = lteDCIInfo(enb,pdcchIn); % Convert the structure into a cell array of field names % and values formats = fieldnames(info); sizes = struct2cell(info); % Remove DCI format 3 and 3A as these DCI formats are used % for conveying power control commands rather than resource % allocations dci3idx = ismember(formats,{'Format3','Format3A'}); formats(dci3idx) = []; sizes(dci3idx) = []; % Keep only DCI format 1A and 1C for the common search % space if (strcmpi(pdcchIn.SearchSpace,'Common')) commonidx = ismember(formats,{'Format1A','Format1C'}); formats = formats(commonidx); sizes = sizes(commonidx); end % Find the indices of the unique sizes, the first % occurrence of each unique size will be retained in the % original order [~,idxs] = unique(cat(2,sizes{:}),'stable'); % If the current UE-specific settings yield unique sizes % for any format (compared to all other formats and % UE-specific settings thus far), then record them if (isempty(infoOut)) infoOut = cell2struct(sizes(idxs),formats(idxs)); pdcchOut = cell2struct(repmat({pdcchIn},size(idxs)),formats(idxs)); else sizes_out = struct2cell(infoOut); sizes_out = cat(2,sizes_out{:}); for i = idxs.' if (~any(sizes_out==sizes{i})) format = formats{i}; infoOut.(format) = [infoOut.(format) sizes{i}]; pdcchOut.(format) = [pdcchOut.(format) pdcchIn]; end end end end end end end % Decode the Master Information Block (MIB) to get frame number function startFrame = decodeMIB(enb,rxSubframe,hest,nest,i) pbchIndices = ltePBCHIndices(enb); [pbchRx, pbchHest] = lteExtractResources(pbchIndices,rxSubframe,hest); [~,~,nfmod4,mibbits] = ltePBCHDecode(enb,pbchRx,pbchHest,nest); mib = lteMIB(mibbits); startFrame = double(mib.NFrame) + nfmod4; if (i>0) startFrame = mod(startFrame - 1,1024); end end % Get all PDCCH candidates for a given eNodeB configuration and UE % configuration, without having to evaluate all possible RNTIs function pdcchCandidates = getPDCCHCandidates(enb,ue) % PDCCH dimensionality information pdcchInfo = ltePDCCHInfo(enb); % Aggregation level L = 2 ^ ue.PDCCHFormat; % Number of candidates M = floor(double(pdcchInfo.NCCE)/L); % 1 CCE = 9 REGs = 36 REs = 72 bits bitsPerCCE = 72; % PDCCH candidate indices within PDCCH bits (1-based) pdcchCandidates = L*bitsPerCCE*(0:M-1).' + [1 L*bitsPerCCE]; end