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