Этот пример показывает, как смоделировать тест соответствия физического канала случайного доступа (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 и формата преамбулы PRACH 0, допуск временной ошибки составляет 2,55 микросекунды.
В этом примере форма волны PRACH конфигурируется и передается через соответствующий канал. На стороне приемника пример выполняет обнаружение PRACH и вычисляет вероятность обнаружения PRACH. В примере рассматриваются параметры, определенные в TS 38.141-1 Таблица 8.4.1.5-1 и Таблица A.6-1. Это: режим normal mode (т.е. неограниченный набор), 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 подкадров в ряде ОСШ. Вы должны использовать большое количество numSubframes
для достижения значимых результатов. Можно задать SNRdB
как массив значений или скаляр. Таблица 8.4.1.5-1 в ТС 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 ТС 38.141-1.
% Define the value of ZeroCorrelationZone using the NCS table stored in % the |nrPRACHConfig| object ncsTable = nrPRACHConfig.Tables.NCSFormat012; NCS = 13; zeroCorrelationZone = ncsTable.ZeroCorrelationZone(ncsTable.UnrestrictedSet==NCS); % 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.ZeroCorrelationZone = zeroCorrelationZone; % Cyclic shift index prach.FrequencyStart = 0; % Frequency location % Compute the OFDM-related information for this PRACH configuration windowing = []; ofdmInfo = nrPRACHOFDMInfo(carrier,prach,'Windowing',windowing);
Используйте nrTDLChannel
объект, чтобы сконфигурировать модель канала распространения линии задержки (TDL) channel
как описано в 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 дБ, ОСШ, при которой для формата преамбулы 0 должно быть достигнуто тестовое требование для скорости обнаружения PRACH (99%), как описано в таблице 8.4.1.5-1 в TS 38.141-1.
hNRPRACHWaveformGenerator
генерирует выходной сигнал, нормированный к той же степени передачи, что и для передачи данных восходящей линии связи в 5G Toolbox™. Поэтому та же нормализация должна происходить на шуме, добавленном в PRACH. Шум, добавленный перед демодуляцией OFDM, будет усилен ОБПФ в множителе, равном квадратному корню размера IFFT (). Чтобы гарантировать, что степень добавляемого шума нормализуется после демодуляции и, таким образом, для достижения желаемого ОСШ, требуемая степень шума делится на. В сложение, когда действительная и мнимая части шума создаются отдельно перед объединением в комплексный аддитивный белый Гауссов шум, амплитуда шума масштабируется таким образом, что сгенерированный шум степени равен 1.
В каждой тестовой точке ОСШ вычислите обнаружение вероятности на субкадре по базису субкадров, используя следующие шаги:
Коробка передач PRACH: используйте hNRPRACHWaveformGenerator
чтобы сгенерировать сигнал PRACH. Передайте преамбулы PRACH со смещениями времени, указанными в TS 38.141-1 Фигура 8.4.1.4.2-2. Установите базовое значение смещения по времени в 50% от количества циклических сдвигов для генерации PRACH. Это смещение увеличивается для каждой преамбулы, добавляя значение шага 0,1 микросекунды, до конца тестируемой области значений, которое составляет 0,9 микросекунды для формата преамбулы PRACH 0. Затем этот шаблон повторяется.
Моделирование шумного канала: передайте форму волны через канал TDL и добавьте аддитивный белый Гауссов шум. Добавьте дополнительные выборки в конец формы волны, чтобы покрыть область значений задержек, ожидаемых от моделирования канала (комбинация задержки реализации и расширения задержки канала). Эта задержка реализации затем удаляется, чтобы гарантировать, что задержка реализации интерпретируется как фактическое смещение времени в детекторе преамбулы.
Применение смещения частоты: применить смещение частоты к полученной форме волны, как определено спецификацией.
Обнаружение PRACH: Выполните обнаружение PRACH с помощью hPRACHDetect
для всех индексов преамбулы камер (0-63). Используйте обнаруженный индекс PRACH и смещение, возвращенные hPRACHDetect
определить, где обнаружение было успешным в соответствии с ограничениями, обсуждаемыми в разделе «Введение».
% 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)/20); 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 baseOffset = ((winfo.WaveformResources.PRACH.Resources.PRACHSymbolsInfo.NumCyclicShifts/2)/prach.LRA)/prach.SubcarrierSpacing*1e3; % (microseconds) timingOffset = baseOffset + mod(nSlot,10)/10; % (microseconds) 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 ТС 38.141-1. "NR; Проверка соответствия базовой станции (BS). Часть 1: Проведена проверка соответствия ". 3-ья Генерация Партнерский проект; Группа технических спецификаций Радиосеть доступ.
3GPP ТС 38.104. "NR; радиопередача и прием базовой станции (BS). "3-ья Генерация партнерский проект; Группа технических спецификаций Радиосеть доступ.