5G тест обнаружения NR PRACH

То В этом примере показано, как смоделировать физический канал произвольного доступа (PRACH), пропустило тест соответствия обнаружения, как задано в TS 38.141-1 [1]. Можно изучить, как измерить вероятность правильного обнаружения преамбулы PRACH в присутствии сигнала преамбулы.

Введение

PRACH является восходящей передачей, используемой Оборудованием пользователя (UE), чтобы инициировать синхронизацию с gNodeB. TS 38.141-1 Разделов 8.4.1.5 задает вероятность обнаружения PRACH, чтобы быть больше или быть равным 99% в определенных значениях ОСШ для набора настроек PRACH и условий распространения. Существует несколько ошибочных случаев обнаружения:

  • Обнаружение неправильной преамбулы

  • Не обнаружение преамбулы

  • Обнаружение правильной преамбулы, но с неправильной оценкой синхронизации

TS 38.141-1 состояний, что правильное обнаружение достигается, когда ошибка расчета смещения синхронизации самого сильного пути меньше ошибочного допуска времени, данного в Таблице 8.4.1.1-1. Для условий распространения канала TDLC300-100 и формат 0 преамбулы PRACH, ошибочный допуск времени составляет 2,55 микросекунды.

В этом примере форма волны PRACH сконфигурирована и проходится соответствующий канал. В стороне приемника пример выполняет обнаружение PRACH и вычисляет вероятность обнаружения PRACH. Пример считает параметры заданными в TS 38.141-1 Таблиц 8.4.1.5-1 и Таблица A.6-1. Это: режим normal mode (i.e., неограниченный набор), 2 получают антенны, канал TDLC300-100, нормальный циклический префикс, пакетный формат 0, ОСШ-6.0 дБ. Если вы изменяете настройку PRACH, чтобы использовать один из других форматов преамбулы PRACH, перечисленных в Таблице A.6-1, необходимо обновить значения ошибочного допуска времени и ОСШ, согласно TS 38.141-1 Таблиц 8.4.1.1-1 и Таблицы 8.4.1.5-1 к 8.4.1.5-3, соответственно.

Настройка симуляции

Пример рассматривает 10 подкадров во многих SNRs. Необходимо использовать большое количество numSubframes приводить к значимым результатам. Можно установить SNRdB как массив значений или скаляра. Для объяснения определения ОСШ, что этот пример использует, см. Определение ОСШ, Используемое в Симуляциях Ссылки. Таблица 8.4.1.5-1 в TS 38.141-1 указывает, что частота возместила foffset это моделируется между передатчиком и приемником.

numSubframes = 10;               % Number of 1 ms subframes to simulate at each SNR
SNRdB = [-21, -16, -11, -6, -1]; % SNR range in dB
foffset = 400.0;                 % Frequency offset in Hz
timeErrorTolerance = 2.55;       % Time error tolerance in microseconds

Настройка несущей

Используйте nrCarrierConfig объект carrier настройки задавать настройки несущей. Пример считает несущую охарактеризованной расстоянием между поднесущими 15 кГц и полосой пропускания 5 МГц. Таким образом, несущая охватывает 25 блоков ресурса, согласно Таблице 5.3.2-1 в TS 38.104 [2].

carrier = nrCarrierConfig;
carrier.SubcarrierSpacing = 15;
carrier.NSizeGrid = 25;

Настройка PRACH

Таблица A.6-1 в TS 38.141-1 задает настройки PRACH, чтобы использовать для теста соответствия обнаружения PRACH.

Установите настройку PRACH при помощи nrPRACHConfig объект prach настройки, согласно Таблице A.6-1 и Разделу 8.4.1.4.2 в TS 38.141-1.

% Set PRACH configuration
prach = nrPRACHConfig;
prach.FrequencyRange = 'FR1';                    % Frequency range
prach.DuplexMode = 'FDD';                        % Frequency Division Duplexing (FDD)
prach.ConfigurationIndex = 27;                   % Configuration index for format 0
prach.SubcarrierSpacing = 1.25;                  % Subcarrier spacing
prach.SequenceIndex = 22;                        % Logical sequence index
prach.PreambleIndex = 32;                        % Preamble index
prach.RestrictedSet = 'UnrestrictedSet';         % Normal mode
prach.FrequencyStart = 0;                        % Frequency location

% Define the value of ZeroCorrelationZone using the NCS table stored in
% the nrPRACHConfig object
switch prach.Format
    case {'0','1','2'}
        ncsTable = nrPRACHConfig.Tables.NCSFormat012;
        ncsTableCol = (string(ncsTable.Properties.VariableNames) == prach.RestrictedSet);
    case '3'
        ncsTable = nrPRACHConfig.Tables.NCSFormat3;
        ncsTableCol = (string(ncsTable.Properties.VariableNames) == prach.RestrictedSet);
    otherwise
        ncsTable = nrPRACHConfig.Tables.NCSFormatABC;
        ncsTableCol = contains(string(ncsTable.Properties.VariableNames), num2str(prach.LRA));
end
NCS = 13;
zeroCorrelationZone = ncsTable.ZeroCorrelationZone(ncsTable{:,ncsTableCol}==NCS);
prach.ZeroCorrelationZone = zeroCorrelationZone; % Cyclic shift index

% Compute the OFDM-related information for this PRACH configuration
windowing = [];
ofdmInfo = nrPRACHOFDMInfo(carrier,prach,'Windowing',windowing);

Настройка канала распространения

Используйте nrTDLChannel объект сконфигурировать модель channel канала распространения коснувшейся линии задержки (TDL) как описано в TS 38.141-1 Таблиц 8.4.1.1-1.

channel = nrTDLChannel;
channel.DelayProfile = "TDL-C";             % Delay profile
channel.DelaySpread = 300e-9;               % Delay spread in seconds
channel.MaximumDopplerShift = 100.0;        % Maximum Doppler shift in Hz
channel.SampleRate = ofdmInfo.SampleRate;   % Input signal sample rate in Hz
channel.MIMOCorrelation = "Low";            % MIMO correlation
channel.TransmissionDirection = "Uplink";   % Uplink transmission
channel.NumTransmitAntennas = 1;            % Number of transmit antennas
channel.NumReceiveAntennas = 2;             % Number of receive antennas
channel.NormalizePathGains = true;          % Normalize delay profile power
channel.Seed = 42;                          % Channel seed. Change this for different channel realizations
channel.NormalizeChannelOutputs = true;     % Normalize for receive antennas

Цикл для значений ОСШ

Используйте цикл, чтобы запустить симуляцию для набора точек ОСШ, данных векторным SNRdB. Вектор ОСШ, сконфигурированный здесь, является областью значений точек ОСШ включая точку на уровне-6.0 дБ, ОСШ, в котором тестовое требование для процента раскрытых преступлений PRACH (99%) должно быть достигнуто для формата 0 преамбулы, как обсуждено в Таблице 8.4.1.5-1 в TS 38.141-1.

hNRPRACHWaveformGenerator генерирует выходной сигнал, нормированный к той же степени передачи что касается восходящей передачи данных в 5G Toolbox™. Поэтому та же нормализация должна произойти на шуме, добавленном к PRACH. Шум, добавленный перед демодуляцией OFDM, будет усилен ОБПФ фактором, равным квадратному корню из размера ОБПФ ($N_{FFT}$). Чтобы гарантировать, что степень добавленного шума нормирована после демодуляции, и таким образом достигнуть желаемого ОСШ, желаемая шумовая мощность разделена на$N_{FFT}$. Кроме того, когда действительные и мнимые части шума создаются отдельно прежде чем быть объединенным в комплексный аддитивный белый Гауссов шум, шумовая амплитуда масштабируется$1/\sqrt2$ так произведенной шумовой энергией, 1.

В каждой тестовой точке ОСШ вычислите обнаружение вероятности на подкадр базисом подкадра с помощью этих шагов:

  • Передача PRACH: используйте hNRPRACHWaveformGenerator сгенерировать форму волны PRACH. Отправьте преамбулы PRACH со смещениями синхронизации, заданными в TS 38.141-1 рисунков 8.4.1.4.2-2. Установите базовое значение смещения синхронизации на 50% количества циклических сдвигов для генерации PRACH. Это смещение увеличено для каждой преамбулы, добавив значение шага 0,1 микросекунд, до конца протестированной области значений, которая составляет 0,9 микросекунды для формата 0 преамбулы PRACH. Этот шаблон затем повторяется.

  • Шумное Моделирование Канала: Передайте форму волны через TDL, образовывают канал и добавляют аддитивный белый Гауссов шум. Добавьте дополнительные выборки в конец формы волны, чтобы покрыть область значений задержек, ожидаемых от моделирования канала (комбинация задержки реализации и распространения задержки канала). Эта задержка реализации затем удалена, чтобы гарантировать, что задержка реализации интерпретирована как фактическое смещение синхронизации в детекторе преамбулы.

  • Приложение Смещения Частоты: Примените смещение частоты к принятой форме волны, как задано спецификацией.

  • Обнаружение PRACH: Выполните обнаружение PRACH с помощью hPRACHDetect для всех индексов (0-63) преамбулы ячейки. Используйте обнаруженный индекс PRACH и возместите возвращенный hPRACHDetect определить, где обнаружение было успешно согласно ограничениям, обсужденным в разделе Introduction.

% Initialize variables storing probability of detection at each SNR
pDetection = zeros(size(SNRdB));

% Get the maximum number of delayed samples by a channel multipath
% component. This is calculated from the channel path with the largest
% delay and the implementation delay of the channel filter. The example
% requires this to flush the channel filter to obtain the received signal.
channelInfo = info(channel);
maxChDelay = ceil(max(channelInfo.PathDelays*channel.SampleRate)) + channelInfo.ChannelFilterDelay;

% Total number of PRACH slots in the simulation period
numPRACHSlots = floor(numSubframes / prach.SubframesPerPRACHSlot);

% Store the configuration parameters needed to generate the PRACH waveform
waveconfig.NumSubframes = prach.SubframesPerPRACHSlot;
waveconfig.Windowing = windowing;
waveconfig.Carriers = carrier;
waveconfig.PRACH.Config = prach;

% The temporary variables 'prach_init', 'waveconfig_init', 'ofdmInfo_init',
% and 'channelInfo_init' are used to create the temporary variables
% 'prach', 'waveconfig', 'ofdmInfo', and 'channelInfo' within the SNR loop
% to create independent instances in case of parallel simulation
prach_init = prach;
waveconfig_init = waveconfig;
ofdmInfo_init = ofdmInfo;
channelInfo_init = channelInfo;

for snrIdx = 1:numel(SNRdB) % comment out for parallel computing
% parfor snrIdx = 1:numel(SNRdB) % uncomment for parallel computing
% To reduce the total simulation time, you can execute this loop in
% parallel by using the Parallel Computing Toolbox. Comment out the 'for'
% statement and uncomment the 'parfor' statement. If the Parallel Computing
% Toolbox(TM) is not installed, 'parfor' defaults to normal 'for' statement

    % Set the random number generator settings to default values
    rng('default');

    % Initialize variables for this SNR point, required for initialization
    % of variables when using the Parallel Computing Toolbox
    prach = prach_init;
    waveconfig = waveconfig_init;
    ofdmInfo = ofdmInfo_init;
    channelInfo = channelInfo_init;

    % Reset the channel so that each SNR point will experience the same
    % channel realization
    reset(channel);

    % Normalize noise power to take account of sampling rate, which is a
    % function of the IFFT size used in OFDM modulation. The SNR is defined
    % per resource element for each receive antenna.
    SNR = 10^(SNRdB(snrIdx)/10);
    N0 = 1/sqrt(2.0*channel.NumReceiveAntennas*double(ofdmInfo.Nfft)*SNR);

    % Detected preamble count
    detectedCount = 0;

    % Loop for each PRACH slot
    numActivePRACHSlots = 0;
    for nSlot = 0:numPRACHSlots-1

        prach.NPRACHSlot = nSlot;

        % Generate PRACH waveform for the current slot
        waveconfig.PRACH.Config.NPRACHSlot = nSlot;
        [waveform,~,winfo] = hNRPRACHWaveformGenerator(waveconfig);

        % Skip this slot if the PRACH is inactive
        if (isempty(winfo.WaveformResources.PRACH))
            continue;
        end

        numActivePRACHSlots = numActivePRACHSlots + 1;

        % Set PRACH timing offset in microseconds as per TS 38.141-1 Figure
        % 8.4.1.4.2-2 and Figure 8.4.1.4.2-3
        if prach.LRA==839 % Long preamble, values as in Figure 8.4.1.4.2-2
            baseOffset = ((winfo.WaveformResources.PRACH.Resources.PRACHSymbolsInfo.NumCyclicShifts/2)/prach.LRA)/prach.SubcarrierSpacing*1e3; % (microseconds)
            timingOffset = baseOffset + mod(nSlot,10)/10; % (microseconds)
        else % Short preamble, values as in Figure 8.4.1.4.2-3
            baseOffset = 0; % (microseconds)
            timingOffset = baseOffset + mod(nSlot,9)/10; % (microseconds)
        end
        sampleDelay = fix(timingOffset / 1e6 * ofdmInfo.SampleRate);

        % Generate transmit waveform
        txwave = [zeros(sampleDelay,1); waveform(1:(end-sampleDelay))];

        % Pass data through channel model. Append zeros at the end of the
        % transmitted waveform to flush channel content. These zeros take
        % into account any delay introduced in the channel. This is a mix
        % of multipath delay and implementation delay. This value may
        % change depending on the sampling rate, delay profile and delay
        % spread
        rxwave = channel([txwave; zeros(maxChDelay, size(txwave,2))]);

        % Add noise
        noise = N0*complex(randn(size(rxwave)), randn(size(rxwave)));
        rxwave = rxwave + noise;

        % Remove the implementation delay of the channel modeling
        rxwave = rxwave((channelInfo.ChannelFilterDelay + 1):end, :);

        % Apply frequency offset
        t = ((0:size(rxwave, 1)-1)/channel.SampleRate).';
        rxwave = rxwave .* repmat(exp(1i*2*pi*foffset*t), 1, size(rxwave, 2));

        % PRACH detection for all cell preamble indices
        [detected, offsets] = hPRACHDetect(carrier, prach, rxwave, (0:63).');

        % Test for preamble detection
        if (length(detected)==1)

            % Test for correct preamble detection
            if (detected==prach.PreambleIndex)

                % Calculate timing estimation error
                trueOffset = timingOffset/1e6; % (s)
                measuredOffset = offsets(1)/channel.SampleRate;
                timingerror = abs(measuredOffset-trueOffset);

                % Test for acceptable timing error
                if (timingerror<=timeErrorTolerance/1e6)
                    detectedCount = detectedCount + 1; % Detected preamble
                else
                    disp('Timing error');
                end
            else
                disp('Detected incorrect preamble');
            end
        else
            disp('Detected multiple or zero preambles');
        end

    end % of nSlot loop

    % Compute final detection probability for this SNR
    pDetection(snrIdx) = detectedCount/numActivePRACHSlots;

end % of SNR loop
Detected multiple or zero preambles
Detected multiple or zero preambles
Detected multiple or zero preambles

Результаты

В конце цикла ОСШ пример строит расчетные вероятности обнаружения для каждого значения ОСШ против целевой вероятности.

hPRACHDetectionResults(SNRdB, numSubframes, pDetection);

Приложение

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

Ссылки

  1. 3GPP TS 38.141-1. "NR; проверка на соответствие стандарту Базовой станции (BS). Часть 1: Проводимая проверка на соответствие стандарту". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  2. 3GPP TS 38.104. "NR; передача радио Базовой станции (BS) и прием". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Смотрите также

Функции

Объекты

Похожие темы