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

В этом примере показано, как 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);

Демодуляция 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

Нисходящая форма волны при анализе может нести информацию для многих UEs. Этот раздел пытается найти их RNTIs. Подход, примененный здесь, использует то, что для допустимого сообщения DCI, биты CRC маскируются с RNTI. Поэтому принятие там не является никакими ошибками (CRC = 0), последние 16 декодируемых битов соответствуют RNTI. Этот подход описан в Разделе 5 из [2].

Этот пример реализует следующий алгоритм:

  • Рассмотрите все форматы PDCCH в пространстве поиска UE-specific (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) управлять, сколько ошибок позволено в сравнении между полученными битами кандидата и повторно закодированными битами кандидата.

Два шага последующей обработки применяются к списку обнаруженного UEs для того, чтобы сократить количество ложных обнаружений:

  • Сообщения DCI, получавшие символы кандидата, степень которых (в дБ) меньше порога minPDCCHPower исключены. Без этого шага полученные биты кандидата, состоящие только из шума (даже в малой мощности), могут инициировать ложные обнаружения.

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

Обратите внимание на то, что для полноты, общее пространство поиска также разыскивается сообщения формата 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.01       {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.17       {1x1 struct}
    10        3          "9397"           0        "Format0"          1         289     432      -0.11       {1x1 struct}
    11        3          "96C1"           0        "Format2A"         1         577     720       3.28       {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.58       {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.67       {1x1 struct}
    20        6          "717A"           0        "Format2A"         2           1     288       2.95       {1x1 struct}
    21        6          "9397"           0        "Format0"          1         289     432       0.26       {1x1 struct}
    22        6          "077B"           0        "Format0"          1         433     576       6.17       {1x1 struct}
    23        7          "FFFF"           0        "Format1A"         2           1     288       0.13       {1x1 struct}
    24        7          "9397"           1        "Format0"          1         289     432       1.38       {1x1 struct}
    25        7          "4C87"           0        "Format2A"         1         577     720        6.2       {1x1 struct}
    26        8          "4C87"           0        "Format2A"         2           1     288       3.03       {1x1 struct}
    27        8          "717A"           0        "Format2A"         2         577     864       3.04       {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.26       {1x1 struct}
    31       10          "9397"           0        "Format2A"         1         721     864       2.99       {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.71       {1x1 struct}
    36       12          "4C87"           0        "Format2A"         2         865    1152       3.85       {1x1 struct}
    37       14          "717A"           1        "Format0"          1           1     144       2.64       {1x1 struct}
    38       14          "B073"           2        "Format2"          0         145     216       3.02       {1x1 struct}
    39       14          "717A"           0        "Format2A"         2         577     864       3.59       {1x1 struct}

График обнаруженный RNTIs

График производится, показывая обнаруженный 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

Наконец, сводные данные обнаруженного 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"        1        "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

Наблюдения относительно обнаруженного RNTIs

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

  • Информация о системе (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 является "ложным положительным" обнаружением.

Приложение

Этот пример использует функцию помощника:

Выбранная библиография

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

  2. Кумар, Хамед, Katabi и Li. "Аналитика радио LTE, сделанная легкий и доступный", 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