EVM- Измерения 5G сигналов NR PDSCH

Этот пример показов, как измерить вектор величины ошибок (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

Похожие темы