В этом примере показано, как измерить величину вектора ошибок (EVM) форм сигналов фиксированного опорного канала PUSCH (FRC). В примере также показано, как добавить нарушения, включая фазовый шум и нелинейность без памяти.
Для радиочастотного тестирования приемника базовой станции стандарт 3GPP 5G NR определяет набор сигналов FRC. FRCs для частотного диапазона 1 (FR1) и частотного диапазона 2 (FR2) определены в TS 38.104, приложении A.
В этом примере показано, как генерировать сигнал NR (FRC) и добавлять нарушения. В примере используется фазовый шум и нелинейность без памяти. Он показывает, как вычислить EVM результирующего сигнала, а затем построить график среднеквадратичного (RMS) и пикового EVM на символ мультиплексирования с ортогональным частотным разделением каналов (OFDM), слот и поднесущую. Затем вычисляют общее EVM (среднеквадратичное EVM, усредненное по полной форме сигнала). Приложение F к TS 38.101-1 и TS 38.101-2 определяют альтернативный метод вычисления EVM в FR1 и FR2 соответственно. На рисунке ниже показана цепочка обработки, реализованная в этом примере.

Каждая форма сигнала 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 для данного MCS. Диапазон допустимых значений 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. На рисунке показана введенная нелинейность. Установите параметры модели 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