Main Content

5G NR ダウンリンク ACLR 測定

この例では、5G Toolbox™ を使用して、周波数範囲 1 (FR1) と FR2 で 5G NR テスト モデル (NR-TM) の隣接チャネル漏洩電力比 (ACLR) を測定する方法を示します。

はじめに

ACLR は、割り当てられたチャネル周波数を中心としたフィルター済み平均電力と隣接チャネル周波数を中心としたフィルター済み平均電力の比です。この例では、TS 38.104 の Section 6.6.3 の定義に従って、NR ダウンリンク波形の ACLR 測定を実行します。帯域外スペクトル放射の影響をモデル化するために、この例では、ハイ パワー アンプ (HPA) モデルを使用して、オーバーサンプリングされた波形にスペクトル再成長を適用します。

NR-TM 波形の生成

MATLAB クラス hNRReferenceWaveformGenerator を使用して、FR1 および FR2 の 5G NR-TM を生成します。次のパラメーターを指定して、NR-TM 波形を生成できます。

  • NR-TM の名前

  • チャネル帯域幅

  • サブキャリア間隔

  • デュプレックス モード

詳細については、5G NR-TM と FRC の波形生成の例を参照してください。

% Select the NR-TM waveform parameters
nrtm = "NR-FR1-TM1.2";  % NR-TM name and properties
bw   = "20MHz";  % Channel bandwidth
scs  = "15kHz";  % Subcarrier spacing
dm   = "FDD";  % Duplexing mode

% Create generator object for the above NR-TM
tmWaveGen = hNRReferenceWaveformGenerator(nrtm,bw,scs,dm);

% Ensure no windowing to highlight impact of filtering on ACLR
tmWaveGen = makeConfigWritable(tmWaveGen);
tmWaveGen.Config.WindowingPercent = 0;    

% Generate waveform
[tmWaveform,tmWaveInfo] = generateWaveform(tmWaveGen);
samplingRate = tmWaveInfo.Info.SamplingRate;   % Waveform sampling rate (Hz)

% Visualize the associated PRB and subcarrier resource grids
displayResourceGrid(tmWaveGen);

結果の表示

  • 関連付けられた PRB リソース グリッド (上部) は、各 BWP のさまざまなコンポーネント (PDCCH、PDSCH、CORESET、および SS バースト) の割り当てを示しています。グリッドには信号の振幅はプロットされず、グリッド内の信号位置のみがプロットされます。

  • SCS 固有のキャリア リソース グリッド (中央) と最小保護帯域が、チャネル帯域幅全体に対して調整されています。

  • サブキャリア リソース グリッド (下部) は、生成された波形の振幅レベルを示します。1 つの色だけが表示されている場合、すべてのコンポーネントの振幅は同じです。

ACLR パラメーターの計算

補助関数 hACLRParametersNR.m は、ACLR 測定に必要なパラメーターを計算します。次のフィールドをもつ構造体を返します。

  • Bandwidth: tmWaveform に関連付けられたチャネル帯域幅 (Hz 単位)。これは、割り当てられたチャネルの全体の帯域幅です。

  • MeasurementBandwidth: ACLR 測定帯域幅 (Hz 単位)。

  • AdjacentChannelOffset: 隣接チャネルの NR 中心周波数のベクトル (Hz 単位)。

  • OSR: 1 番目と 2 番目の隣接チャネルを表すことができる信号を作成するために必要な入力 tmWaveform の整数オーバーサンプリング比。

  • SamplingRate: ACLR の測定に使用されるオーバーサンプリングされた信号のサンプル レート。OSR = 1 の場合、この信号は入力波形です。OSR > 1 の場合、この信号は OSR によってアップサンプリングされた入力波形です。したがって、aclrParameters.SamplingRate = OSR*samplingRate (入力波形のサンプル レート) になります。

aclrParameters = hACLRParametersNR(tmWaveGen.Config);
disp(aclrParameters);
                Bandwidth: 20000000
     MeasurementBandwidth: 19080000
    AdjacentChannelOffset: [-40000000 -20000000 20000000 40000000]
                      OSR: 4
             SamplingRate: 122880000

ACLR を改善するための波形のフィルター処理

生成された波形にはフィルター処理が適用されないため、OFDM 変調で暗黙的な矩形パルス整形が行われることによって、大幅な帯域外スペクトル放射が発生します (各 OFDM サブキャリアは周波数領域で sinc 形状をもつ)。波形をフィルター処理することで、ACLR のパフォーマンスが向上します。

占有伝送帯域幅 (aclrParameters.MeasurementBandwidth) の端で開始し、全体のチャネル帯域幅 (aclrParameters.Bandwidth) の端で停止する遷移帯域をもつフィルターを設計します。このフィルターはレート変更を伴わず、波形の元の帯域幅内でスペクトルを形成するだけです。

% Design filter
lpFilt = designfilt('lowpassfir',...
    'PassbandFrequency',aclrParameters.MeasurementBandwidth/2,...
    'StopbandFrequency',aclrParameters.Bandwidth/2,...
    'PassbandRipple',0.1,...
    'StopbandAttenuation',80,...
    'SampleRate',samplingRate);

% Apply filter
filtTmWaveform = filter(lpFilt,tmWaveform);

オーバーサンプリングと HPA 非線形性モデル

1 番目と 2 番目の隣接キャリアを表す (たとえば aclrParameters.Bandwidth を最大 85% の帯域幅占有率で表す) ことができる信号を作成するには、NR 波形をオーバーサンプリングします。信号をオーバーサンプリングした後、HPA モデルを使用して帯域外歪みを生成します。たとえば、HPA の動作をシミュレートするには、無線アプリケーションで AM/AM 歪みを生成するために広く使用されている Rapp メソッドを使用できます。MATLAB® では、Memoryless Nonlinearityオブジェクトを使用して Rapp メソッドをモデル化できます。ACLR 測定に対するフィルター処理の影響を強調表示するには、オーバーサンプリングと HPA 非線形性を、フィルター処理された NR 信号にまず適用し、次にフィルター処理していない同じ NR 信号に適用します。

% Apply required oversampling
resampled = resample(tmWaveform,aclrParameters.OSR,1);           % Not filtered
filtResampled = resample(filtTmWaveform,aclrParameters.OSR,1);   % Filtered

% Create and configure a memoryless nonlinearity to model the amplifier
nonLinearity = comm.MemorylessNonlinearity;
nonLinearity.Method = 'Rapp model';
nonLinearity.Smoothness = 3;              % p parameter          
nonLinearity.LinearGain = 0.5;            % dB
nonLinearity.OutputSaturationLevel = 2;   % It limits the output signal level  

% Signal conditioning to control the HPA input back-off level
resampled = resampled/max(abs(resampled));                % Not filtered
filtResampled = filtResampled/max(abs(filtResampled));    % Filtered

% Apply the amplifier model to the NR waveforms
txWaveform = nonLinearity(resampled);           % Not filtered
txFiltWaveform = nonLinearity(filtResampled);   % Filtered

NR ACLR の計算

補助関数 hACLRMeasurementNR.m は、隣接チャネルの正方形ウィンドウを使用して NR ACLR を測定します。また、メイン チャネルの信号のパワー (dBm 単位) も測定します。

% Calculate NR ACLR
aclr = hACLRMeasurementNR(aclrParameters,txWaveform);               % Not filtered
filtAclr = hACLRMeasurementNR(aclrParameters,txFiltWaveform);   % Filtered

エラー ベクトル振幅の計算

補助関数 hNRDownlinkEVM.m は、NR-TM 波形または fixed reference channel (FRC) 波形のエラー ベクトル振幅 (EVM) を測定します。この関数は、OFDM シンボル、スロット、サブキャリア、および全体の EVM ごとに、平方根平均二乗 (RMS) とピーク EVM を計算します。

% EVM configuration parameters  
evmCfg.PlotEVM = false;
evmCfg.SampleRate = aclrParameters.SamplingRate;
evmCfg.Label = tmWaveGen.ConfiguredModel{1};

% Measure the EVM related statistics for the transmitted waveform without filtering
evmInfo = hNRDownlinkEVM(tmWaveGen.Config,txWaveform,evmCfg)
EVM stats for BWP idx : 1
PDSCH RMS EVM, Peak EVM, slot 0: 0.009 0.023%
DM-RS RMS EVM, Peak EVM, slot 0: 0.006 0.012%
PDSCH RMS EVM, Peak EVM, slot 1: 0.008 0.029%
DM-RS RMS EVM, Peak EVM, slot 1: 0.005 0.011%
PDSCH RMS EVM, Peak EVM, slot 2: 0.008 0.024%
DM-RS RMS EVM, Peak EVM, slot 2: 0.006 0.012%
PDSCH RMS EVM, Peak EVM, slot 3: 0.010 0.023%
DM-RS RMS EVM, Peak EVM, slot 3: 0.008 0.018%
PDSCH RMS EVM, Peak EVM, slot 4: 0.009 0.021%
DM-RS RMS EVM, Peak EVM, slot 4: 0.004 0.009%
PDSCH RMS EVM, Peak EVM, slot 5: 0.009 0.025%
DM-RS RMS EVM, Peak EVM, slot 5: 0.006 0.010%
PDSCH RMS EVM, Peak EVM, slot 6: 0.009 0.022%
DM-RS RMS EVM, Peak EVM, slot 6: 0.006 0.012%
PDSCH RMS EVM, Peak EVM, slot 7: 0.009 0.026%
DM-RS RMS EVM, Peak EVM, slot 7: 0.004 0.006%
PDSCH RMS EVM, Peak EVM, slot 8: 0.008 0.020%
DM-RS RMS EVM, Peak EVM, slot 8: 0.006 0.011%
PDSCH RMS EVM, Peak EVM, slot 9: 0.009 0.023%
DM-RS RMS EVM, Peak EVM, slot 9: 0.006 0.013%
PDCCH RMS EVM, Peak EVM, slot 0: 0.012 0.027%
PDCCH DM-RS RMS EVM, Peak EVM, slot 0: 0.005 0.012%
PDCCH RMS EVM, Peak EVM, slot 1: 0.008 0.017%
PDCCH DM-RS RMS EVM, Peak EVM, slot 1: 0.003 0.005%
PDCCH RMS EVM, Peak EVM, slot 2: 0.010 0.024%
PDCCH DM-RS RMS EVM, Peak EVM, slot 2: 0.006 0.010%
PDCCH RMS EVM, Peak EVM, slot 3: 0.010 0.022%
PDCCH DM-RS RMS EVM, Peak EVM, slot 3: 0.005 0.010%
PDCCH RMS EVM, Peak EVM, slot 4: 0.007 0.019%
PDCCH DM-RS RMS EVM, Peak EVM, slot 4: 0.003 0.004%
PDCCH RMS EVM, Peak EVM, slot 5: 0.011 0.028%
PDCCH DM-RS RMS EVM, Peak EVM, slot 5: 0.005 0.010%
PDCCH RMS EVM, Peak EVM, slot 6: 0.012 0.026%
PDCCH DM-RS RMS EVM, Peak EVM, slot 6: 0.004 0.005%
PDCCH RMS EVM, Peak EVM, slot 7: 0.013 0.029%
PDCCH DM-RS RMS EVM, Peak EVM, slot 7: 0.009 0.019%
PDCCH RMS EVM, Peak EVM, slot 8: 0.012 0.022%
PDCCH DM-RS RMS EVM, Peak EVM, slot 8: 0.006 0.014%
PDCCH RMS EVM, Peak EVM, slot 9: 0.010 0.018%
PDCCH DM-RS RMS EVM, Peak EVM, slot 9: 0.005 0.008%
Averaged RMS EVM frame 0: 0.009%
Averaged overall PDSCH RMS EVM: 0.009%
Overall PDSCH Peak EVM = 0.029234%
Averaged overall PDCCH RMS EVM: 0.011%
Overall PDCCH Peak EVM = 0.028711%
evmInfo = struct with fields:
    PDSCH: [1x1 struct]
    PDCCH: [1x1 struct]

% Measure the EVM related statistics for the transmitted waveform with filtering
evmInfoFilt = hNRDownlinkEVM(tmWaveGen.Config,txFiltWaveform,evmCfg);
EVM stats for BWP idx : 1
PDSCH RMS EVM, Peak EVM, slot 0: 0.257 0.757%
DM-RS RMS EVM, Peak EVM, slot 0: 0.230 0.670%
PDSCH RMS EVM, Peak EVM, slot 1: 0.247 0.751%
DM-RS RMS EVM, Peak EVM, slot 1: 0.220 0.538%
PDSCH RMS EVM, Peak EVM, slot 2: 0.245 0.816%
DM-RS RMS EVM, Peak EVM, slot 2: 0.272 0.841%
PDSCH RMS EVM, Peak EVM, slot 3: 0.249 0.807%
DM-RS RMS EVM, Peak EVM, slot 3: 0.242 0.742%
PDSCH RMS EVM, Peak EVM, slot 4: 0.264 0.733%
DM-RS RMS EVM, Peak EVM, slot 4: 0.244 0.602%
PDSCH RMS EVM, Peak EVM, slot 5: 0.281 0.899%
DM-RS RMS EVM, Peak EVM, slot 5: 0.233 0.759%
PDSCH RMS EVM, Peak EVM, slot 6: 0.254 0.778%
DM-RS RMS EVM, Peak EVM, slot 6: 0.261 0.820%
PDSCH RMS EVM, Peak EVM, slot 7: 0.237 0.654%
DM-RS RMS EVM, Peak EVM, slot 7: 0.290 0.612%
PDSCH RMS EVM, Peak EVM, slot 8: 0.238 0.797%
DM-RS RMS EVM, Peak EVM, slot 8: 0.223 0.562%
PDCCH RMS EVM, Peak EVM, slot 0: 0.403 1.310%
PDCCH DM-RS RMS EVM, Peak EVM, slot 0: 0.237 0.559%
PDCCH RMS EVM, Peak EVM, slot 1: 0.310 0.850%
PDCCH DM-RS RMS EVM, Peak EVM, slot 1: 0.135 0.210%
PDCCH RMS EVM, Peak EVM, slot 2: 0.271 0.858%
PDCCH DM-RS RMS EVM, Peak EVM, slot 2: 0.158 0.312%
PDCCH RMS EVM, Peak EVM, slot 3: 0.261 0.874%
PDCCH DM-RS RMS EVM, Peak EVM, slot 3: 0.132 0.216%
PDCCH RMS EVM, Peak EVM, slot 4: 0.227 0.911%
PDCCH DM-RS RMS EVM, Peak EVM, slot 4: 0.126 0.242%
PDCCH RMS EVM, Peak EVM, slot 5: 0.311 0.936%
PDCCH DM-RS RMS EVM, Peak EVM, slot 5: 0.177 0.323%
PDCCH RMS EVM, Peak EVM, slot 6: 0.329 0.982%
PDCCH DM-RS RMS EVM, Peak EVM, slot 6: 0.155 0.326%
PDCCH RMS EVM, Peak EVM, slot 7: 0.301 1.159%
PDCCH DM-RS RMS EVM, Peak EVM, slot 7: 0.138 0.270%
PDCCH RMS EVM, Peak EVM, slot 8: 0.280 1.039%
PDCCH DM-RS RMS EVM, Peak EVM, slot 8: 0.143 0.237%
Averaged overall PDSCH RMS EVM: 0.253%
Overall PDSCH Peak EVM = 0.89869%
Averaged overall PDCCH RMS EVM: 0.303%
Overall PDCCH Peak EVM = 1.3105%

結果の表示

スペクトルと隣接チャネル漏洩電力比を表示します。

フィルター処理なし

TS 38.104 の Section 6.6.3.2 によると、測定の実施に必要な最小 ACLR は 45 dB です。以下の ACLR 値の一部は 45 dB 未満であるため、要件を満たしていません。

hACLRResultsNR(aclr,aclrParameters,txWaveform,'(not Filtered)');

フィルター処理あり

生成された波形をフィルター処理すると、パフォーマンスが向上します。フィルター処理された波形を使用した ACLR の結果は、必要な最小値よりも高くなります。

hACLRResultsNR(filtAclr,aclrParameters,txFiltWaveform,'(Filtered)');

ローカル関数

function hACLRResultsNR(aclr, aclrParameters, waveform, arg)

    minACLR = 45;

    % 4th input argument is plot title qualifier
    if nargin > 3
        titleText = [' ' arg];
    elseif nargin > 1
        titleText = [];
    else
        titleText = [];
        waveform = [];
    end
    
    % ACLR values and ticks for bar chart
    values = round([aclr(1:end/2) 0 aclr(end/2+1:end)],1);
    tick = 1:numel(values);
    ticklabel = tick-ceil(numel(tick)/2);
    labelvec = tick;
    labelvec(ceil(end/2)) = []; % Do not plot label for 0dB ACLR on channel
    
    % Plot NR Spectrum
    if ~isempty(waveform)
        figure;
        [spectrum, frequency] = pwelch(waveform, kaiser(8192*4,19), [], [], ...
            aclrParameters.SamplingRate, 'centered', 'power');
        frequency = frequency * 10^(-6); % MHz
        spectrum = 10*log10(spectrum / max(spectrum));
        adjacentChannelLabel = [ticklabel(1:floor(length(ticklabel)/2)) ... 
        ticklabel(floor(length(ticklabel)/2)+2:end)];
        % Select 'x' and 'y' limits to show the adjacent channels in the plot
        xLimitRight = aclrParameters.AdjacentChannelOffset + (aclrParameters.MeasurementBandwidth/2);
        xLimitRight = xLimitRight * 10^(-6); % MHz
        xLimitLeft = aclrParameters.AdjacentChannelOffset - (aclrParameters.MeasurementBandwidth/2);
        xLimitLeft = xLimitLeft * 10^(-6); % MHz
        yLimits = [min(spectrum)-20 max(spectrum)+10];
        ylim(yLimits);
        xlim([min(frequency) max(frequency)])
        hold on; 
        for i = 1:length(aclrParameters.AdjacentChannelOffset)
            patch('XData',[xLimitRight(i) xLimitRight(i) xLimitLeft(i) ...
                xLimitLeft(i)],'YData', [yLimits fliplr(yLimits)], ...
                'FaceColor','y','FaceAlpha',0.2) % Plot adjacent channels
            text(aclrParameters.AdjacentChannelOffset(i)*10^(-6), i, sprintf('%d', ...
                adjacentChannelLabel(i)), 'HorizontalAlignment', 'Center', ...
                'VerticalAlignment', 'Top'); % Plot adjacent channel labels
        end
        plot(frequency, spectrum);
        hold off;
        xlabel('Frequency (MHz)');
        ylabel('Normalized Power (dB)');
        title(strcat ('NR Spectrum', titleText));
        legend('Adjacent channels', 'Location', 'SouthEast')
    end
    
    % Plot NR ACLR    
    figure;
    hold on;
    yline(minACLR,'r'); 
    bar(values, 'BaseValue', 0, 'FaceColor', 'yellow');
    hold off;
    set(gca, 'XTick', tick, 'XTickLabel', ticklabel, 'YLim', ... 
        [0 0.2*max(values)+max(values)]);
    for i = labelvec
        text(i, values(i), sprintf('%0.1f dB',values(i)), ...
            'HorizontalAlignment', 'Center', 'VerticalAlignment', 'Top');
    end
    title(strcat('NR Adjacent Channel Leakage Ratio', titleText));
    xlabel('Adjacent Channel Offset');
    ylabel('Adjacent Channel Leakage Ratio (dB)');
    legend('Minimum required ACLR');
    
end

参照

[1] 3GPP TS 38.104. “NR; Base Station (BS) radio transmission and reception.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

関連するトピック