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