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