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

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

Введение

Для проверки RF приемника базовой станции, стандарт 3GPP 5G NR задает набор сигналов FRC. FRC для частотной области значений 1 (FR1) и частотной области значений 2 (FR2) определены в TS 38.104, приложение А.

В этом примере показано, как сгенерировать сигнал NR (FRC) и добавить нарушения. В примере используются фазовый шум и нелинейности без памяти. Это показывает, как вычислить EVM полученного сигнала, и затем построить график среднеквадратичного (RMS) и пикового EVM на символ ортогональной частоты деления мультиплексирования (OFDM), паза и поднесущую. Затем вычислите общую EVM (RMS EVM, усредненная по полной форме волны). Приложение F к TS 38.101-1 и TS 38.101-2 определяют альтернативный метод вычисления EVM в FR1 и FR2, соответственно. Рисунок ниже показывает цепь обработки, реализованную в этом примере.

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

Каждая форма сигнала FRC определяется комбинацией этих параметров:

  • Номер частотной области значений

  • Порядок используемой схемы модуляции и кодирования (MCS)

  • Индекс FRC для данного MCS

Выберите один из FRC релиза 15 для FR1 и FR2.

Выбранный опорный канал (rc) должен следовать формату G-FR X-A Y-Z, где X - номер частотного диапазона (1 или 2), Y - порядок MCS, используемый в Приложении A к TS 38.104 (т.е. значение от 1 до 5), и Z - индекс FRC для Область значений допустимых значений Z зависит от частотной области значений и MCS (X и Y) В случае, если входная форма волны не является формой волны FRC, для измерения EVM поддерживается один слой atmost.

rc = "G-FR1-A1-7"; % FRC

Для печати статистики 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 = G-FR1-A1-7

Для измерения EVM, определенного в TS 38.101-1 (FR1) или TS 38.101-2 (FR2), приложение F, установите evm3GPP на true. evm3GPP по умолчанию отключен.

evm3GPP = false;

Создайте объект генератора формы волны, затем и сгенерируйте сигнал.

wavegen = hNRReferenceWaveformGenerator(rc);
[txWaveform,tmwaveinfo,resourcesinfo] = generateWaveform(wavegen,wavegen.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 wavegen.Config.FrequencyRange == "FR1" % Carrier frequency for FR1
        fc = 4e9;
    else % Carrier frequency for FR2
        fc = 28e9;
    end

    % Calculate the phase noise level.
    foffsetLog = (3:0.1:log10(sr/2)); % Model offset from 1e3Hz to sr/2
    foffset = 10.^foffsetLog;    % Linear frequency offset
    PN_dBc_Hz = hPhaseNoisePoleZeroModel(foffset,fc,'A');
    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);
    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

Ранее сигнал повторялся дважды. Удалите первую половину этого сигнала, чтобы избежать любого переходного процесса, введенного моделями ухудшения.

dm = wavegen.ConfiguredModel{4};
if dm == "FDD"
    nFrames = 1;
else % TDD
    nFrames = 2;
end
rxWaveform(1:nFrames*tmwaveinfo.Info.SamplesPerSubframe*10,:) = [];

Измерения

Функция hNRPUSCHEVM выполняет следующие шаги, чтобы декодировать и проанализировать форму волны:

  • Синхронизация с использованием DM-RS в одном кадре для FDD (две системы координат для TDD)

  • OFDM-демодуляция принятой формы волны

  • Оценка канала

  • Эквализация

  • PUSCH EVM расчета (включите переключатель evm3GPP в соответствии с требованиями к измерениям EVM, указанными в TS 38.101-1 (FR1) или TS 38.101-2 (FR2), приложение F.

Пример измеряет и выводит различную статистику, связанную с EVM, на символ, на паз и на пик системы координат EVM и RMS EVM. Пример отображает EVM для каждого паза и системы координат и отображает общее EVM, усредненное по всей входной форме волны. Пример создает эти графики: EVM в зависимости от символа OFDM, паза, поднесущей, общего EVM и внутриполосных выбросов. Каждый график, относящийся к EVM, отображает пик от RMS EVM.

% Compute and display EVM measurements
cfg = struct();
cfg.Evm3GPP = evm3GPP;
cfg.PlotEVM = plotEVM;
cfg.DisplayEVM = displayEVM;
[evmInfo,eqSym,refSym] = hNRPUSCHEVM(wavegen.Config,rxWaveform,cfg);
 RMS EVM, Peak EVM, slot 0: 2.555 7.690%
 RMS EVM, Peak EVM, slot 1: 2.257 6.221%
 RMS EVM, Peak EVM, slot 2: 2.463 6.350%
 RMS EVM, Peak EVM, slot 3: 2.332 6.617%
 RMS EVM, Peak EVM, slot 4: 2.252 7.191%
 RMS EVM, Peak EVM, slot 5: 2.408 6.119%
 RMS EVM, Peak EVM, slot 6: 2.418 7.326%
 RMS EVM, Peak EVM, slot 7: 2.505 8.758%
 RMS EVM, Peak EVM, slot 8: 2.492 7.579%
 RMS EVM, Peak EVM, slot 9: 2.838 7.852%
Averaged RMS EVM frame 0: 2.457%
Averaged overall RMS EVM: 2.457%
Peak EVM : 8.7576%

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

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

Похожие темы