То В этом примере показано, как смоделировать физический канал произвольного доступа (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;
Таблица 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, будет усилен ОБПФ фактором, равным квадратному корню из размера ОБПФ (). Чтобы гарантировать, что степень добавленного шума нормирована после демодуляции, и таким образом достигнуть желаемого ОСШ, желаемая шумовая мощность разделена на. Кроме того, когда действительные и мнимые части шума создаются отдельно прежде чем быть объединенным в комплексный аддитивный белый Гауссов шум, шумовая амплитуда масштабируется так произведенной шумовой энергией, 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);
Этот пример использует эти функции помощника:
3GPP TS 38.141-1. "NR; проверка на соответствие стандарту Базовой станции (BS). Часть 1: Проводимая проверка на соответствие стандарту". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
3GPP TS 38.104. "NR; передача радио Базовой станции (BS) и прием". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.