В этом примере показано, как измерить величину вектора ошибок (EVM) форм волны фиксированного ссылочного канала (FRC) PUSCH. Пример также показывает, как добавить ухудшения включая фазу шумовая и нелинейность без памяти.
Для приемника базовой станции тестирование RF 3GPP 5G стандарт NR задает набор форм волны FRC. FRCs для частотного диапазона 1 (FR1) и частотного диапазона 2 (FR2) заданы в TS 38.104, приложении A.
В этом примере показано, как сгенерировать форму волны NR (FRC) и добавить ухудшения. Пример использует фазу шумовая и нелинейность без памяти. Это показывает, как вычислить EVM получившегося сигнала, и затем построить среднеквадратичное значение (RMS) и пиковый EVMs на символ ортогонального мультиплексирования деления частоты (OFDM), паз и поднесущую. Затем вычислите полный EVM (RMS EVM, усредненный по полной форме волны). Приложение F TS 38.101-1 и TS 38.101-2 задает альтернативный метод для вычисления EVM в FR1 и FR2, соответственно. Рисунок ниже показывает цепь обработки, реализованную в этом примере.
Каждая форма волны FRC задана комбинацией этих параметров:
Номер частотного диапазона
Порядок схемы модуляции и кодирования (MCS) используется
Индекс FRC для данного MCS
Выберите один из Релиза 15 FRCs для FR1 и FR2.
Канал выбранной ссылки (дистанционное управление) должен следовать за GFR X-A Y - Z формат, где X номер частотного диапазона (1 или 2), Y является порядком MCS, используемого в приложении A TS 38.104 (i.e., значение от 1 до 5), и Z является индексом FRC для данного MCS. Область значений допустимых значений Z зависит от частотного диапазона и MCS (X и Y) В случае, если входная форма волны не является формой волны FRC, atmost один слой поддерживается для измерения EVM.
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. Рисунок показывает введенную нелинейность. Установите параметры для модели 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);
EVM stats for BWP idx : 1 RMS EVM, Peak EVM, slot 0: 2.170 7.345% RMS EVM, Peak EVM, slot 1: 2.001 5.759% RMS EVM, Peak EVM, slot 2: 2.038 6.248% RMS EVM, Peak EVM, slot 3: 2.040 6.352% RMS EVM, Peak EVM, slot 4: 2.108 5.690% RMS EVM, Peak EVM, slot 5: 2.039 5.747% RMS EVM, Peak EVM, slot 6: 2.234 6.997% RMS EVM, Peak EVM, slot 7: 2.176 7.760% RMS EVM, Peak EVM, slot 8: 2.128 7.049% RMS EVM, Peak EVM, slot 9: 2.460 7.097% Averaged RMS EVM frame 0: 2.143% Averaged overall RMS EVM: 2.143% Peak EVM : 7.7604%
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