В этом примере показано, как измерить величину вектора ошибок (EVM) NR-тестовой модели (NR-TM) или формы сигнала фиксированного опорного канала (FRC). В примере также показано, как добавить нарушения, включая фазовый шум и нелинейность без памяти.
Для радиочастотного тестирования базовой станции стандарт 3GPP 5G NR определяет набор сигналов NR-TM. Для тестирования пользовательского оборудования (UE) стандарт определяет набор форм сигнала FRC. NR-TM и FRC для частотного диапазона 1 (FR1) определены в TS 38.141-1, а NR-TM и FRC для частотного диапазона 2 (FR2) определены в TS 38.141-2.
В этом примере показано, как генерировать сигнал NR (TM или FRC) и добавлять нарушения. Здесь рассматривается фазовый шум и нелинейность без памяти. Затем вычисляем EVM результирующего сигнала. Строим график RMS и пиковых EVM на символ OFDM, слот и поднесущую. Мы также рассчитываем общий EVM (среднеквадратичное EVM, усредненное по полной форме сигнала). Приложение B и приложение C к TS 38.104 определяют альтернативный метод расчета EVM в FR1 и FR2 соответственно. На рисунке ниже показана цепочка обработки, реализованная в этом примере.

Каждая форма сигнала NR-TM или FRC определяется комбинацией:
Имя NR-TM/FRC
Полоса пропускания канала
Интервал между поднесущими
Дуплексный режим
% Select one of the Release 15 NR-TMs for FR1 and FR2 among: % "NR-FR1-TM1.1","NR-FR1-TM1.2","NR-FR1-TM2", % "NR-FR1-TM2a","NR-FR1-TM3.1","NR-FR1-TM3.1a", % "NR-FR1-TM3.2","NR-FR1-TM3.3","NR-FR2-TM1.1", % "NR-FR2-TM2","NR-FR2-TM3.1" % or % Select one of the Release 15 FRCs for FR1 and FR2 among: % "DL-FRC-FR1-QPSK","DL-FRC-FR1-64QAM", % "DL-FRC-FR1-256QAM","DL-FRC-FR2-QPSK", % "DL-FRC-FR2-16QAM","DL-FRC-FR2-64QAM" rc = "NR-FR1-TM3.2"; % Reference channel (NR-TM or FRC) % Select the NR waveform parameters bw = "10MHz"; % Channel bandwidth scs = "30kHz"; % Subcarrier spacing dm = "FDD"; % Duplexing mode
Для ТМ сгенерированный сигнал может содержать более одного PDSCH. Выбранный PDSCH для анализа основан на RNTI. По умолчанию для расчета EVM учитываются следующие RNTI:
NR-FR1-TM2: RNTI = 2 (64QAM EVM)
NR-FR1-TM2a: RNTI = 2 (256QAM EVM)
NR-FR1-TM3.1: RNTI = 0 и 2 (64QAM EVM)
NR-FR1-TM3.1a: RNTI = 0 и 2 (256QAM EVM)
NR-FR1-TM3.2: RNTI = 1 (16QAM EVM)
NR-FR1-TM3.3: RNTI = 1 (QPSK EVM)
NR-FR2-TM2: RNTI = 2 (64QAM EVM)
NR-FR2-TM3.1: RNTI = 0 и 2 (64QAM EVM)
В соответствии с техническими условиями (TS 38.141-1, TS 38.141-2) данные ТМ не предназначены для проведения измерений EVM: NR-FR1-TM1.1, NR-FR1-TM1.2, NR-FR2-TM1.1. Однако при создании этих TM в примере измеряется EVM для следующих RNTI.
NR-FR1-TM1.1: RNTI = 0 (QPSK EVM)
NR-FR1-TM1.2: RNTI = 2 (QPSK EVM)
NR-FR2-TM1.1: RNTI = 0 (QPSK EVM)
Для FRC по умолчанию RNTI 0 используется для вычисления EVM. В случае, если входной сигнал не является ни ТМ, ни FRC-сигналом, для измерения EVM поддерживается один уровень.
В примере вычисляется EVM для RNTI, перечисленных выше. Чтобы переопределить RNTI по умолчанию, укажите targetRNTIs вектор
targetRNTIs = [];
Печать статистики EVM, установка displayEVM кому true. Чтобы отключить печать, установите displayEVM кому false. Печать статистики EVM, установка plotEVM кому true. Чтобы отключить графики, установите plotEVM кому false
displayEVM = true; plotEVM = true;
if displayEVM fprintf('Reference Channel = %s\n', rc); end
Reference Channel = NR-FR1-TM3.2
Измерение EVM, как определено в TS 38.104, приложение B (FR1 )/приложение C (FR2), комплектevm3GPP кому true. evm3GPP по умолчанию отключен.
evm3GPP = false;
Создание объекта генератора формы сигнала и генерация формы сигнала
tmwavegen = hNRReferenceWaveformGenerator(rc,bw,scs,dm); [txWaveform,tmwaveinfo,resourcesinfo] = generateWaveform(tmwavegen,tmwavegen.Config.NumSubframes);
В этом примере рассматриваются два нарушения: фазовый шум и нелинейность без запоминания. Включение или отключение нарушений путем переключения флагов phaseNoiseOn и nonLinearityModelOn.
phaseNoiseOn = true; nonLinearityModelOn = true;
Нормализуйте форму сигнала в соответствии с динамическим диапазоном нелинейности.
txWaveform = txWaveform/max(abs(txWaveform),[],'all');
Форма сигнала состоит из одного кадра для FDD и двух для TDD. Повторите сигнал дважды. Мы удалим первую половину результирующей формы сигнала, чтобы избежать переходного процесса, введенного моделью фазового шума.
txWaveform = repmat(txWaveform,2,1);
Ввести фазовые шумовые искажения. На рисунке показана характеристика фазового шума. Рассматриваемая несущая частота зависит от диапазона частот. Мы используем значения 4 ГГц и 28 ГГц для FR1 и FR2 соответственно. Характеристика фазового шума генерируется с помощью модели полюс/нуль, описанной в R1-163984 «Обсуждение моделирования фазового шума».
if phaseNoiseOn sr = tmwaveinfo.Info.SamplingRate; % Carrier frequency if tmwavegen.Config.FrequencyRange == "FR1" % carrier frequency for FR1 fc = 4e9; else % carrier frequency for FR2 fc = 30e9; end % Calculate the phase noise level. foffsetLog = (4:0.1:log10(sr/2)); % model offset from 1e3Hz to sr/2 foffset = 10.^foffsetLog; % linear freq offset PN_dBc_Hz = hPhaseNoisePoleZeroModel(foffset,fc,'C'); figure; semilogx(foffset,PN_dBc_Hz); xlabel('Frequency offset (Hz)'); ylabel('dBc/Hz'); title('Phase noise model'); grid on % Apply phase noise to waveform pnoise = comm.PhaseNoise('FrequencyOffset',foffset,'Level',PN_dBc_Hz,'SampleRate',sr); pnoise.RandomStream = "mt19937ar with seed"; rxWaveform = zeros(size(txWaveform),'like',txWaveform); for i = 1:size(txWaveform,2) rxWaveform(:,i) = pnoise(txWaveform(:,i)); release(pnoise) end else rxWaveform = txWaveform; %#ok<UNRCH> end

Ввести нелинейные искажения. В этом примере используется модель Rapp. На рисунке показана введенная нелинейность. Установите параметры модели Rapp в соответствии с характеристиками модели без памяти из TR 38.803 «Модель без памяти - Приложение A.1.»
if nonLinearityModelOn rapp = comm.MemorylessNonlinearity('Method','Rapp model'); rapp.Smoothness = 1.55; rapp.OutputSaturationLevel = 1; % Plot nonlinear characteristic plotNonLinearCharacteristic(rapp); % Apply nonlinearity for i = 1:size(rxWaveform,2) rxWaveform(:,i) = rapp(rxWaveform(:,i)); release(rapp) end end

Ранее сигнал повторялся дважды. Снимите первую половину этого сигнала. Это позволяет избежать какого-либо переходного процесса, введенного моделями обесценения.
if dm == "FDD" nFrames = 1; else % TDD nFrames = 2; end rxWaveform(1:nFrames*tmwaveinfo.Info.SamplesPerSubframe*10,:) = [];
Функция hNRPDSCHEVM выполняет следующие шаги для декодирования и анализа формы сигнала:
Синхронизация с использованием DM-RS через один кадр для FDD (два кадра для TDD)
OFDM-демодуляция принятого сигнала
Оценка канала
Уравнивание
Оценка и компенсация общей фазовой ошибки (CPE)
Вычисление EVM PDSCH (включение коммутатора evm3GPPв соответствии с требованиями к измерениям EVM, указанными в TS 38.104, приложение B (FR1 )/приложение C (FR2)).
Пример измеряет и выводит различные статистические данные, относящиеся к EVM, на символ, на слот и на пик кадра EVM и RMS EVM. В примере отображается EVM для каждого слота и полки. Он также отображает общее усредненное EVM по всей входной форме сигнала. Пример создает ряд графиков: EVM vs на символ OFDM, слот, поднесущую и общую EVM. На каждом графике отображается пик в зависимости от RMS EVM.
cfg = struct();
cfg.Evm3GPP = evm3GPP;
cfg.TargetRNTIs = targetRNTIs;
cfg.PlotEVM = plotEVM;
cfg.DisplayEVM = displayEVM;
cfg.Label = tmwavegen.ConfiguredModel{1};
% Compute and display EVM measurements
[evmInfo,eqSym,refSym] = hNRPDSCHEVM(tmwavegen.Config,rxWaveform,cfg);
RMS EVM, Peak EVM, slot 0: 3.929 20.636% RMS EVM, Peak EVM, slot 1: 3.779 13.962% RMS EVM, Peak EVM, slot 2: 3.683 10.465% RMS EVM, Peak EVM, slot 3: 3.679 12.549% RMS EVM, Peak EVM, slot 4: 4.169 17.878% RMS EVM, Peak EVM, slot 5: 4.053 17.728% RMS EVM, Peak EVM, slot 6: 3.960 15.706% RMS EVM, Peak EVM, slot 7: 4.031 14.790% RMS EVM, Peak EVM, slot 8: 3.799 14.443% RMS EVM, Peak EVM, slot 9: 3.803 12.730% RMS EVM, Peak EVM, slot 10: 3.946 14.595% RMS EVM, Peak EVM, slot 11: 3.661 14.484% RMS EVM, Peak EVM, slot 12: 3.773 13.534% RMS EVM, Peak EVM, slot 13: 3.930 17.440% RMS EVM, Peak EVM, slot 14: 3.754 12.184% RMS EVM, Peak EVM, slot 15: 3.832 17.780% RMS EVM, Peak EVM, slot 16: 3.774 14.530% RMS EVM, Peak EVM, slot 17: 3.950 14.131% RMS EVM, Peak EVM, slot 18: 3.948 18.886% RMS EVM, Peak EVM, slot 19: 3.871 13.786% Averaged RMS EVM frame 0: 3.868% Averaged overall RMS EVM: 3.868% Overall Peak EVM = 20.6363%



function plotNonLinearCharacteristic(memoryLessNonlinearity) % Plot the nonlinear characteristic of the power amplifier (PA) impairment % represented by the input parameter memoryLessNonlinearity, which is a % comm.MemorylessNonlinearity Communications Toolbox(TM) System object. % Input samples x = complex((1/sqrt(2))*(-1+2*rand(1000,1)),(1/sqrt(2))*(-1+2*rand(1000,1))); % Nonlinearity yRapp = memoryLessNonlinearity(x); % Release object to feed it a different number of samples release(memoryLessNonlinearity); % Plot characteristic figure; plot(10*log10(abs(x).^2),10*log10(abs(x).^2)); hold on; grid on plot(10*log10(abs(x).^2),10*log10(abs(yRapp).^2),'.'); xlabel('Input Power (dBW)'); ylabel('Output Power (dBW)'); title('Nonlinearity Impairment') legend('Linear characteristic', 'Rapp nonlinearity','Location','Northwest'); end