Этот пример показов, как измерить вектор величины ошибок (EVM) сигналов NR экспериментальной модели (NR-TM) или фиксированной ссылки канала (FRC). Пример также показывает, как добавить нарушения, включая фазу шум и незабываемую нелинейность.
Для проверки RF базовой станции стандарт 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 (RMS 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
Для TM сгенерированная форма волны может содержать более одного 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)
В соответствии со спецификациями (ТС 38.141-1, ТС 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. В случае, если входная форма волны не является ни TM, ни FRC-формой, для измерения EVM поддерживается один слой atmost.
Пример вычисляет 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. Рисунок показывает введенную нелинейность. Установите параметры для модели Раппа, так чтобы они совпадали с характеристиками незапамятной модели из 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)
PDSCH EVM расчет (включите переключатель evm3GPPдля обработки в соответствии с требованиями к измерениям EVM, указанными в TS 38.104, приложение B (FR1 )/приложение C (FR2).
Пример измеряет и выводит различную статистику, связанную с EVM, на символ, на паз и на пик системы координат EVM и RMS EVM. В примере отображается EVM для каждого паза и системы координат. Это также отображает общее EVM, усредненное по всей входной форме волны. Пример создает несколько графиков: EVM по сравнению с символом 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