Обнаружение UE с использованием сигналов нисходящего канала

Этот пример показывает, как LTE Toolbox™ могут использоваться, чтобы обнаружить присутствие UE, сопоставленных с eNodeB. Это достигается путем поиска нисходящего сигнала для сообщений DCI и установления набора уникальных идентификаторов (C-RNTI), используемых.

Введение

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

Целью этого примера является декодирование PDCCH и поиск сообщений DCI кандидата. Затем C-RNTI получают из действительных сообщений, давая указание на количество адресованных UE и их шаблон с течением времени. Обратите внимание, что в этом примере возвращаются все обнаруженные RNTI, а не только RNTI в области значений C-RNTI, заданном в TS 36.321 Таблица 7.1-1 [1]. Сохранение этих других RNTI позволяет использовать этот пример для идентификации вхождений сообщений DCI, сопоставленных с системной информацией (SI-RNTI) или пейджингом (P-RNTI).

Анализируемая форма волны

В этом примере анализируемая форма волны сохранена в файле ueDetectionWaveform.mat как переменная rxWaveform. Принято, что полоса пропускания, режим дуплекса, длина циклического префикса, тождества камеры, количество портов опорного сигнала для конкретной ячейки и строение PHICH все известны, и соответствующая переменная строения eNodeB enb также загружается из файла. Также возможно использовать форму волны, чьё строение eNodeB не известно, в этом случае строение eNodeB должна быть декодирована, как показано на примере Камеры Search, MIB и SIB1 Recovery.

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);

Демодуляция OFDM

Форма волны 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

Анализируемая нисходящая форма волны может нести информацию для ряда 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 исключены. Без этого шага полученные биты, состоящие исключительно из шума (даже при низкой степени), могут вызывать ложные обнаружения.

  • В случае перекрытия результатов (т.е. когда индексы кандидата одного результата являются подмножеством другого), будет выбран результат с самым низким количеством битовых ошибок.

Обратите внимание, что для полноты, общее пространство поиска также ищется для 1A формата DCI и 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 могут иметь одинаковую длину для одного и того же строения eNodeB. Эта неоднозначность устраняется при нормальной операции системы каждым 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 Blind Search и DCI Decoding.

  • 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}

График обнаруженных RNTI

Создается график, показывающий обнаруженные RNTI в зависимости от номера субкадра. Полученная нисходящая ресурсная сетка отображается, и RNTI используются для маркировки ресурсов PDSCH, сигнализированных соответствующими сообщениями DCI. Также отображается пустая ресурсная сетка восходящей линии связи, и отображаются ресурсы PUSCH, сигнализируемые любыми сообщениями формата 0 или формата 4 DCI, которые маркируются соответствующими RNTI. Вопросительный знак появляется после любого RNTI, для которого количество битовых ошибок между перекодированными битами кандидата и принятыми битами кандидата NumErrors, больше нуля (и меньше или равно maxErrors). Используемые здесь системные номера систем координат (SFN) используют целые числа для представления SFN и десятичных чисел (десятых) для представления подрамника в SFN.

enb.NFrame = startFrame;
enb.NSubframe = startSubframe;
enb.CFI = CFIs;
summary = hPlotDetectedRNTIs(results,enb,rxgrid);

Отображение сводных данных обнаруженных выделений ресурсов PDSCH или PUSCH

Наконец, отображаются сводные данные обнаруженных выделений ресурсов 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

Наблюдения за обнаруженными RNTI

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

  • Информация о системе (СИ): RNTI, используемый для системной информации (СИ-RNTI), является FFFF hex. Сообщения DCI, сопоставленные с блоками системной информации (SIBs), можно увидеть в 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.

  • Ложный позитив: Наблюдайте выделение PDSCH с B073 RNTI в конечном подкадре формы волны. Он перекрывается с 717A выделения PDSCH. Учитывая, что 717A RNTI часто происходят в течение всей формы волны и что RNTI B073 декодируется с 2 ошибками, вероятно, что B073 RNTI является «ложноположительным» обнаружением.

Приложение

В этом примере используется функция helper:

Избранная библиография

  1. 3GPP TS 36.321 «Протокол управления средним доступом (MAC) спецификации»

  2. Кумар, Хамед, Катаби и Ли. «LTE Radio Analytics сделал легким и доступным», SIGCOMM '14 (2014): 211-222

  3. 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