В этом примере показано, как Toolbox™ LTE можно использовать для обнаружения присутствия UE, связанных с eNireB. Это достигается путем поиска сигнала нисходящей линии связи для сообщений DCI и установления набора используемых уникальных идентификаторов (C-RNTI).
В LTE физический канал управления нисходящей линии связи (PDCCH) несет управляющую информацию в виде сообщений управляющей информации нисходящей линии связи (DCI). Сообщения DCI передают информацию планирования восходящей линии связи или нисходящей линии связи от eNireB к целевым UE, чтобы UE могли идентифицировать ресурсы, необходимые для приема по физическому совместно используемому каналу нисходящей линии связи (PDSCH) или для передачи по физическому совместно используемому каналу восходящей линии связи (PUSCH). Каждому UE назначается идентификатор, известный как C-RNTI (временный идентификатор сотовой радиосети). C-RNTI используется для скремблирования битов CRC сообщения DCI для этого UE, а также для определения местоположения сообщения DCI в PDCCH. Для получения дополнительной информации см. пример слепого поиска PDCCH и декодирования DCI.

Целью этого примера является декодирование PDCCH и поиск сообщений DCI-кандидатов. Затем C-RNTI получают из действительных сообщений, давая указание количества адресуемых UE и их шаблона во времени. Следует отметить, что в этом примере возвращаются все обнаруженные RNTI, а не только RNTI в диапазоне C-RNTI, определенном в TS 36.321 Таблица 7.1-1 [1]. Сохранение этих других RNTI позволяет использовать этот пример для идентификации появлений сообщений DCI, связанных с системной информацией (SI-RNTI) или пейджингом (P-RNTI).
В этом примере анализируемая форма сигнала сохраняется в файле ue Detection Waveform.mat в качестве переменной. rxWaveform. Предполагается, что ширина полосы пропускания, режим дуплексирования, длина циклического префикса, идентификатор соты, количество портов опорного сигнала соты и конфигурация PHICH все известны, и соответствующая переменная конфигурации eNireB enb также загружается из файла. Также можно использовать форму сигнала, конфигурация eNireB которого неизвестна, и в этом случае конфигурацию eNireB необходимо декодировать, как показано в примере поиска ячеек, 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
Анализируемая форма сигнала нисходящей линии связи может нести информацию для нескольких UE. В этом разделе предпринимается попытка найти их RNTI. Применяемый здесь подход использует тот факт, что для действительного сообщения DCI биты CRC маскируются с помощью RNTI. Следовательно, при условии отсутствия ошибок (CRC = 0) последние 16 декодированных битов соответствуют RNTI. Этот подход описан в разделе 5 [2].
В этом примере реализован следующий алгоритм:
Рассмотрим все форматы PDCCH в пространстве поиска UE (0... 3)
Для каждого формата PDCCH вычисляют все возможные кандидаты в области управления, которые могут нести сообщение DCI.
Для каждого кандидата попытайтесь декодировать сообщение DCI (учитывая все возможные форматы DCI с уникальной длиной сообщения DCI).
Следующие шаги выполняются для проверки, составляют ли декодированные биты действительное сообщение DCI (графическое представление алгоритма также представлено ниже):
Предположим, что в передаче нет ошибок, т.е. предположим, что CRC = 0. Это означает, что последние 16 декодированных битов составляют C-RNTI.
Отделите сообщение DCI от 16 битов C-RNTI.
Вычислите новые биты CRC и маскируйте их с помощью C-RNTI.
Повторно закодируйте сообщение DCI.
Сравните повторно закодированное сообщение с исходным закодированным кандидатом DCI.
Отсутствие ошибок в сравнении на этом последнем этапе означает, что обнаружено действительное сообщение DCI и идентификатор C-RNTI (UE). В некоторых случаях, особенно в случае сигналов, захваченных вне эфира, некоторые ошибки могут возникать в процессе декодирования DCI. Поэтому в этом примере используется пороговое значение (maxErrors) для управления количеством ошибок, допускаемых при сравнении между принятыми битами-кандидатами и повторно закодированными битами-кандидатами.

К списку обнаруженных UE применяются два этапа последующей обработки, чтобы уменьшить количество ложных обнаружений:
Сообщения DCI, получившие символы-кандидаты, мощность которых (в дБ) меньше порогового значения minPDCCHPower исключаются. Без этого шага принятые биты-кандидаты, состоящие исключительно из шума (даже при низкой мощности), могут инициировать ложные обнаружения.
В случае перекрывающихся результатов (т.е. когда индексы-кандидаты одного результата являются подмножеством другого) будет выбран результат с наименьшим количеством битовых ошибок.
Следует отметить, что для полноты общего пространства поиска также осуществляется поиск DCI-формата 1A и 1C сообщений, распределяющих ресурсы для сообщений системной информации, пейджинга или ответа произвольного доступа.
% 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)));
Отображается таблица обнаруженных RNTI и другая информация, связанная с обнаруженными сообщениями DCI. Каждая строка этой таблицы включает в себя:
SubframeНомер субкадра (относительно начала принятого сигнала), в котором происходит обнаруженный RNTI.
DetectedRNTI: Обнаруженный RNTI.
NumErrors: Количество битовых ошибок между повторно закодированными битами-кандидатами и полученными битами-кандидатами (меньше или равно maxErrors).
DCIFormatФормат DCI сообщения DCI. Следует отметить, что во время процесса обнаружения UE использовались только форматы DCI с уникальными длинами, поскольку только длина выходного сообщения DCI влияет на процесс декодирования (в частности, согласование скорости до сверточного декодирования). В системе LTE несколько сообщений DCI могут иметь одинаковую длину для одной и той же конфигурации eNireB. Эта неоднозначность разрешается при нормальной работе системы каждым UE, которому назначается режим передачи (TM). TS 36.213 Таблица 7.1-5 [3] показывает, какие форматы DCI применимы для данного TM, и все форматы для данного TM будут иметь уникальную длину. Поскольку этот пример работает без знания UE и их TM, истинный формат DCI, обнаруженный для UE, может не совпадать с форматом DCI здесь, но длина будет совпадать. Функция lteDCIInfo может использоваться для определения того, какие другие форматы DCI имеют ту же длину, что и здесь формат DCI.
PDCCHFormatФормат PDCCH принятых битов-кандидатов для сообщения DCI. Для получения дополнительной информации о форматах PDCCH см. пример слепого поиска PDCCH и декодирования DCI.
CandidateИндексы [начала, конца] бита включения (на основе 1) местоположения кандидата PDCCH для сообщения DCI, т.е. местоположение принятых битов-кандидатов в наборе всех принятых битов PDCCH. Общий набор кандидатов пространства поиска PDCCH для данной конфигурации eNireB, формата 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}
Формируется график, показывающий обнаруженные RNTI в сравнении с номером субкадра. Отображается принятая сетка ресурсов нисходящей линии связи, и RNTI используются для маркировки ресурсов PDSCH, сигнализируемых соответствующими сообщениями DCI. Также отображается пустая сетка ресурсов восходящей линии связи, и ресурсы PUSCH, сигнализируемые любыми сообщениями формата DCI 0 или формата 4, отображаются и маркируются соответствующими RNTI. Вопросительный знак появляется после любого RNTI, для которого количество битовых ошибок между повторно закодированными битами-кандидатами и принятыми битами-кандидатами, NumErrors, больше нуля (и меньше или равно maxErrors). Используемые здесь номера системных кадров (SFN) используют целые числа для представления SFN и десятичные числа (десятые) для представления подкадра в SFN.
enb.NFrame = startFrame; enb.NSubframe = startSubframe; enb.CFI = CFIs; summary = hPlotDetectedRNTIs(results,enb,rxgrid);

Наконец, отображается сводка обнаруженных назначений ресурсов PDSCH или PUSCH. Для каждого обнаруженного сообщения DCI отображается следующее:
Номер системного кадра (SFN)
RNTI
Количество ошибок
Формат DCI (и соответствующее направление канала)
Назначенные PRB
Оценка принятой мощности в выделенных PRB
Следует отметить, что поскольку сетка ресурсов восходящей линии связи отсутствует, мощность, оцененная для сообщений 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, связанные с блоками системной информации (SIB), можно видеть в SFN = 834.0 (NFrame = 834, NSubframe = 0) и SFN = 834.5 (NFrame = 834, NSubframe = 5). SystemInformationBlockType1 (SIB1) происходит в подкадре 5 четных кадров, поэтому возникновение в SFN = 834.5 является SIB1. Другие SIB динамически планируются, причем информация планирования содержится в SIB1.
RNTI, происходящие во множестве подкадров: RNTI 717A и 4C87 происходят часто по всей форме сигнала, обычно с нулевыми ошибками, поэтому они, вероятно, соответствуют активным UE.
Процесс обнаружения может привести к ошибкам из-за шума и искажений в сигналах нисходящей линии связи. Существует два основных типа ошибок, которые описаны ниже на примерах:
Пропущенное обнаружение: см. SFN 834.6. В блоках ресурсов PDSCH имеется энергия от 0 до 7. Однако сообщение DCI не обнаружено. Повторно запустите настройку моделирования maxErrors=3. Теперь в этом регионе обнаружен 4C87 RNTI. Этот RNTI присутствует в других подкадрах, что означает, что это, вероятно, подлинное UE.
False positive: Наблюдайте распределение PDSCH с B073 RNTI в конечном подкадре формы сигнала. Он перекрывается с 717A распределения PDSCH. Учитывая, что 717A RNTI часто происходит на протяжении всей формы сигнала и что RNTI B073 декодируется с 2 ошибками, вероятно, что B073 RNTI является «ложноположительным» обнаружением.
В этом примере используется вспомогательная функция:
3GPP TS 36.321 «Спецификация протокола управления доступом к среде (MAC)»
Кумар, Хамед, Катаби и Ли. «Радиоаналитика LTE стала легкой и доступной», SIGCOMM '14 (2014): 211-222
3GPP ТС 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