Измерение EVM 5G формы волны NR PDSCH

В этом примере показано, как измерить величину вектора ошибок (EVM) тестовой модели NR формы волны фиксированного ссылочного канала (FRC) или (NR-TM). Пример также показывает, как добавить ухудшения включая фазу шумовая и нелинейность без памяти.

Введение

Для базовой станции тестирование RF 3GPP 5G стандарт NR задает набор форм волны NR-TM. Для тестирования оборудования пользователя (UE) стандарт задает набор форм волны FRC. NR-TMs и FRCs для частотного диапазона 1 (FR1) заданы в TS 38.141-1, в то время как NR-TMs и FRCs для частотного диапазона 2 (FR2) заданы в TS 38.141-2.

В этом примере показано, как сгенерировать форму волны NR (TM или FRC) и добавить ухудшения. Здесь мы считаем фазу шумовой и нелинейностью без памяти. Мы затем вычисляем EVM получившегося сигнала. Мы строим RMS и пиковый EVMs на символ OFDM, паз и поднесущую. Мы также вычисляем полный EVM (RMS EVM, усредненный по полной форме волны). Приложение B и Приложение C TS 38.104 задают альтернативный метод для вычисления EVM в FR1 и FR2, соответственно. Рисунок ниже показывает цепь обработки, реализованную в этом примере.

Параметры симуляции

Каждый NR-TM или форма волны FRC заданы комбинацией:

  • Имя NR-TM/FRC

  • Полоса пропускания канала

  • Расстояние между поднесущими

  • Режим Duplexing

% 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. По умолчанию следующие RNTIs рассматриваются для вычисления EVM:

  • 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. Однако, если вы генерируете эти ТМ, пример измеряет EVM для следующего RNTIs.

  • NR-FR1-TM1.1: RNTI = 0 (QPSK EVM)

  • NR-FR1-TM1.2: RNTI = 2 (QPSK EVM)

  • NR-FR2-TM1.1: RNTI = 0 (QPSK EVM)

Для FRCs, по умолчанию, RNTI 0 рассматривается для вычисления EVM. В случае, если входной формой волны не является ни TM, ни форма волны FRC, atmost один слой поддерживается для измерения EVM.

Пример вычисляет EVM для упомянутого выше RNTIs. Чтобы заменить RNTIs по умолчанию, задайте 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) и компенсация

  • Расчет 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);
EVM stats for BWP idx : 1
 RMS EVM, Peak EVM, slot 0: 2.850 7.856%
 RMS EVM, Peak EVM, slot 1: 3.102 9.824%
 RMS EVM, Peak EVM, slot 2: 2.834 7.085%
 RMS EVM, Peak EVM, slot 3: 3.001 9.065%
 RMS EVM, Peak EVM, slot 4: 3.021 8.534%
 RMS EVM, Peak EVM, slot 5: 3.278 9.404%
 RMS EVM, Peak EVM, slot 6: 2.908 7.831%
 RMS EVM, Peak EVM, slot 7: 3.277 10.594%
 RMS EVM, Peak EVM, slot 8: 2.956 8.429%
 RMS EVM, Peak EVM, slot 9: 3.226 10.358%
 RMS EVM, Peak EVM, slot 10: 2.798 8.623%
 RMS EVM, Peak EVM, slot 11: 2.862 10.057%
 RMS EVM, Peak EVM, slot 12: 3.143 10.240%
 RMS EVM, Peak EVM, slot 13: 2.972 8.496%
 RMS EVM, Peak EVM, slot 14: 2.831 8.171%
 RMS EVM, Peak EVM, slot 15: 2.913 9.364%
 RMS EVM, Peak EVM, slot 16: 3.076 8.554%
 RMS EVM, Peak EVM, slot 17: 3.069 8.106%
 RMS EVM, Peak EVM, slot 18: 3.272 11.256%
 RMS EVM, Peak EVM, slot 19: 2.787 8.312%
Averaged RMS EVM frame 0: 3.013%
Averaged overall RMS EVM: 3.013%
Overall Peak EVM = 11.2561%

Локальные функции

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

Похожие темы