このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
NR リンクレベル シミュレーションにパス損失を含める
この例では、5G NR リンクレベルのシミュレーションにパス損失、送信パワー、および受信ノイズを含めて、これらのパラメーターが 5G リンクのパフォーマンスに与える影響を調べる方法を示します。
はじめに
リンクレベルのシミュレーションでは、受信側での平均 S/N 比 (SNR) 値の範囲にわたってブロック エラー レートとスループットを測定します。この例では、パス損失、送信パワー、受信機入力ノイズ、ノイズ指数などのパラメーターから SNR を計算する方法を示します。この SNR をNR PDSCH スループットおよびNR PUSCH スループットの例で使用して、5G リンクにおけるこれらのパラメーターの効果を調べることができます。この例では、以下を行うことができます。
送信機、受信機、キャリア、伝播チャネルを構成する。
パス損失とノイズ パワーを計算する。
受信機での SNR を計算する。
SNR 計算を検証する。
送信機、受信機、およびキャリアの構成
このセクションでは、次の特性をもつキャリア、送信機、および受信機を構成します。
送信機または基地局 (BS) モデルには、すべてのアンテナに供給される平均パワーとアンテナの高さが含まれます。完全に割り当てられたリソース グリッドの平均送信パワーを指定できますが、このパワーにはアンテナ素子のゲインは含まれません。したがって、送信される実際の平均パワーは、リソース グリッドの割り当てとアンテナ素子のゲインに応じて変化しますが、送信アンテナの数に応じてこのパワーが変化することはありません。
受信機またはユーザー端末 (UE) モデルには、ノイズ指数とアンテナの温度および高さが含まれます。ノイズ指数は受信機の内部ノイズをモデル化し、アンテナ温度は入力ノイズをモデル化します。この受信機はアンテナ素子ごとにノイズを指定します。
BS と UE の間の距離をベクトルとして指定し、指定した距離における SNR 値を計算できます。
% Configure the carrier. simParameters.Carrier = nrCarrierConfig; simParameters.Carrier.NSizeGrid = 51; % Bandwidth in number of resource blocks (51 RBs at 30 kHz SCS for 20 MHz BW) simParameters.Carrier.SubcarrierSpacing = 30; % 15, 30, 60, 120, 240 (kHz) simParameters.Carrier.CyclicPrefix = 'Normal'; % 'Normal' or 'Extended' (Extended CP is relevant for 60 kHz SCS only) % Configure the carrier frequency, transmitter (BS), receiver (UE), and % distance between the BS and UE. Specify this distance as a vector for % multiple SNR points. simParameters.CarrierFrequency = 3.5e9; % Carrier frequency (Hz) simParameters.TxHeight = 25; % Height of the BS antenna (m) simParameters.TxPower = 40; % Power delivered to all antennas of the BS on a fully allocated grid (dBm) simParameters.RxHeight = 1.5; % Height of UE antenna (m) simParameters.RxNoiseFigure = 6; % Noise figure of the UE (dB) simParameters.RxAntTemperature = 290; % Antenna temperature of the UE (K) simParameters.TxRxDistance = [5e2 9e2]; % Distance between the BS and UE (m)
伝播チャネルの構成
伝播チャネル モデルには、パス損失と小規模フェージングが含まれます。パス損失は、BS と UE の間の距離、搬送波周波数、および各シナリオに固有の他のパラメーターによって異なります。フェージング チャネルは、クラスター遅延線 (CDL) チャネルまたはタップ付き遅延線 (TDL) チャネルになります。この例では、フェージング チャネルの構成によって、パス損失の計算に必要な、送信機 (BS) と受信機 (UE) の間の見通し線 (LOS) の存在が決まります。遅延プロファイル A、B、および C は非 LOS チャネルを構成し、遅延プロファイル D と E は LOS チャネルを構成します。
パス損失の構成
TR 38.901 の Section 7.4 で定義されている 5G パス損失モデルのシナリオおよびその他のパス損失パラメーターを構成します。あるいは、自由空間パス損失モデルを指定します。パス損失モデルは、送信信号の平均減衰を決定します。
simParameters.PathLossModel = '5G-NR'; % '5G-NR' or 'fspl' simParameters.PathLoss = nrPathLossConfig; simParameters.PathLoss.Scenario = 'UMa'; % Urban macrocell simParameters.PathLoss.EnvironmentHeight = 1; % Average height of the environment in UMa/UMi
フェージング チャネルおよび LOS の構成
TR 38.901 で定義されているように、CDL または TDL のフェージング チャネルを構成します。フェージング チャネルは、時間と周波数におけるチャネル応答の短期的な変動をモデル化します。
simParameters.DelayProfile = 'TDL-A'; % A, B, and C profiles are NLOS channels. D and E profiles are LOS channels. if contains(simParameters.DelayProfile,'CDL','IgnoreCase',true) channel = nrCDLChannel; channel.DelayProfile = simParameters.DelayProfile; chInfo = info(channel); kFactor = chInfo.KFactorFirstCluster; % dB else % TDL channel = nrTDLChannel; channel.DelayProfile = simParameters.DelayProfile; chInfo = info(channel); kFactor = chInfo.KFactorFirstTap; % dB end % Determine LOS between Tx and Rx based on Rician factor K. simParameters.LOS = kFactor>-Inf; % Determine the sample rate and FFT size that are required for this carrier. waveformInfo = nrOFDMInfo(simParameters.Carrier); % Get the maximum delay of the fading channel. chInfo = info(channel); maxChDelay = chInfo.MaximumChannelDelay;
伝播パス損失の計算
このセクションでは、送信機 (BS) と受信機 (UE) の間のパス損失を計算します。
% Calculate the path loss. if contains(simParameters.PathLossModel,'5G','IgnoreCase',true) txPosition = [0;0; simParameters.TxHeight]; dtr = simParameters.TxRxDistance; rxPosition = [dtr; zeros(size(dtr)); simParameters.RxHeight*ones(size(dtr))]; pathLoss = nrPathLoss(simParameters.PathLoss,simParameters.CarrierFrequency,simParameters.LOS,txPosition,rxPosition); else % Free-space path loss lambda = physconst('LightSpeed')/simParameters.CarrierFrequency; pathLoss = fspl(simParameters.TxRxDistance,lambda); end
アンテナと受信機のノイズの計算
このセクションでは、入力ノイズ温度と受信機の内部ノイズから、受信アンテナ素子ごとの等価ノイズ温度と振幅を計算します。受信アンテナごとのノイズ振幅は、次のとおりです。
ここで、 はボルツマン定数 () です。 は帯域幅で、波形のサンプル レートに等しくなります。等価ノイズ温度 は、次のとおりです。
,
は入力ノイズ温度、 は線形単位での受信機ノイズ指数です。
kBoltz = physconst('Boltzmann'); NF = 10^(simParameters.RxNoiseFigure/10); Teq = simParameters.RxAntTemperature + 290*(NF-1); % K N0 = sqrt(kBoltz*waveformInfo.SampleRate*Teq/2.0);
S/N 比 (SNR) の計算
このセクションでは、構成パラメーターを使用して、送信パワー、受信ノイズ、帯域幅、およびパス損失から得られるリソース エレメント (RE) ごとの SNR を計算します。RE ごとの平均受信信号と RE ごとの受信アンテナ パワーおよびノイズ パワーは、次のとおりです。
および
.
は、送信アンテナ アレイ入力での合計送信パワーです。 は、OFDM 変調に使用される高速フーリエ変換 (FFT) 点の数です。 は、リソース ブロック内の OFDM グリッドのサイズです。 は、パス損失です。 は、受信アンテナごとのノイズの平方根平均二乗 (RMS) 値です。RE および受信アンテナごとの平均 SNR は、次のとおりです。
.
NR PDSCH スループットおよびNR PUSCH スループットの例では、これらの SNR 値を使用しなければなりません。
fftOccupancy = 12*simParameters.Carrier.NSizeGrid/waveformInfo.Nfft; simParameters.SNRIn = (simParameters.TxPower-30) - pathLoss - 10*log10(fftOccupancy) - 10*log10(2*N0^2); disp(simParameters.SNRIn)
5.4206 -4.5425
各 Tx-Rx 距離における SNR を表示する table を作成します。
SNRInc = mat2cell(simParameters.SNRIn(:),length(pathLoss),1);
tSNRIn = table(simParameters.TxRxDistance(:),SNRInc{:},'VariableNames',{'Distance Tx-Rx (m)','SNR (dB)'});
disp(tSNRIn) Distance Tx-Rx (m) SNR (dB)
__________________ ________
500 5.4206
900 -4.5425
5G Toolbox™ リンクレベル シミュレーションによる S/N 比 (SNR) の定義方法の詳細については、リンク シミュレーションで使用する SNR の定義を参照してください。
付録: SNR 値の検証
このセクションは、取得した SNR 値を検証し、パス損失、送信パワー、および受信ノイズと結果として得られる SNR との関係について、追加の詳細を確認するのに役立ちます。そのために、このセクションでは、指定された送信パワーで CP-OFDM 信号を伝播チャネルを介して送信するシミュレーションを実行し、受信機で結果の SNR を測定します。5G Toolbox の例では、この送信を実装する必要はありません。代わりに、この例の前のセクションで取得した SNR の式または値を使用できます。
SNR 測定の場合、受信機はチャネルとノイズに関する情報をもちます。次の SNR 測定では、独立したチャネル実現 (ブロック フェージング) を使用して、必要な最小数の送信スロットで有意な結果を取得します。
シミュレーションの長さを 10 ms のフレームの数で設定します。
NFrames = 20; NSlots = NFrames*simParameters.Carrier.SlotsPerFrame; nSNRPoints = length(pathLoss); % Number of SNR points % Initialize measurements and create auxiliary variables. nTxAnt = chInfo.NumTransmitAntennas; nRxAnt = chInfo.NumReceiveAntennas; [powSignalRE,powSignal,powNoiseRE,powNoise] = deal(zeros(nSNRPoints,nRxAnt,NSlots)); pgains = zeros(length(chInfo.PathDelays),nTxAnt,nRxAnt,nSNRPoints,NSlots); scs = simParameters.Carrier.SubcarrierSpacing; nSizeGrid = simParameters.Carrier.NSizeGrid; nfft = waveformInfo.Nfft; % Reset the random generator for reproducibility. rng('default'); % Transmit a CP-OFDM waveform through the channel and measure the SNR for % each distance between Tx and Rx (path loss values). for pl = 1:length(pathLoss) carrier = simParameters.Carrier; for slot = 0:NSlots-1 slotIdx = slot+1; carrier.NSlot = slot; % Change random seed to generate an independent realization of the % channel in every time slot (block fading). release(channel); channel.Seed = slot; % Create the OFDM resource grid and allocate random QPSK symbols. txgrid = nrResourceGrid(carrier,nTxAnt); txgrid(:) = nrSymbolModulate(randi([0 1],numel(txgrid)*2,1),'QPSK'); % Perform CP-OFDM modulation. txWaveform = nrOFDMModulate(txgrid,scs,slot); % Calculate the amplitude of the transmitted signal. The FFT and % resource grid size scaling normalize the signal power. The % transmitter distributes the power across all antennas equally, % simulating the effect of unit norm beamformer. signalAmp = db2mag(simParameters.TxPower-30)*sqrt(nfft^2/(nSizeGrid*12*nTxAnt)); txWaveform = signalAmp*txWaveform; % Pad the signal with zeros to ensure that a full slot is available % to the receiver after synchronization. txWaveform = [txWaveform; zeros(maxChDelay, size(txWaveform,2))]; %#ok<AGROW> % Pass the signal through fading channel. [rxWaveform,pathGains,sampleTimes] = channel(txWaveform); pgains(:,:,:,pl,slotIdx) = pathGains(1,:,:,:); % Apply path loss to the signal. rxWaveform = rxWaveform*db2mag(-pathLoss(pl)); % Generate AWGN. noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); % Perform perfect synchronization. pathFilters = getPathFilters(channel); % Path filters for perfect timing estimation offset = nrPerfectTimingEstimate(pathGains,pathFilters); rxWaveform = rxWaveform(1+offset:end,:); noise = noise(1+offset:end,:); % Perform CP-OFDM demodulation of the received signal and noise. ngrid = nrOFDMDemodulate(carrier,noise); rxgrid = nrOFDMDemodulate(carrier,rxWaveform); % Measure the RE and overall power of the received signal and noise. powSignalRE(pl,:,slotIdx) = rms(rxgrid,[1 2]).^2/nfft^2; powSignal(pl,:,slotIdx) = powSignalRE(pl,:,slotIdx)*nSizeGrid*12; powNoiseRE(pl,:,slotIdx) = rms(ngrid,[1 2]).^2/nfft^2; powNoise(pl,:,slotIdx) = powNoiseRE(pl,:,slotIdx)*nfft; end end
得られた受信信号とノイズ パワーを使用して、全体の SNR と RE ごとの SNR を計算できます。全体の SNR と RE ごとの SNR との差は、FFT スペクトル占有率 に等しく、これは、リソース グリッドの周波数範囲を超えるビンを含むすべての FFT ビンにわたってノイズ エネルギーが広がることによって生じます。
fprintf('The resource grid uses %.1f %% of the FFT size, introducing a %.1f dB SNR gain.\n', fftOccupancy*100, -10*log10(fftOccupancy))The resource grid uses 59.8 % of the FFT size, introducing a 2.2 dB SNR gain.
% Correct CDL/TDL average gain. Gf = permute(mean(sum(rms(pgains,5).^2,1),2),[4 3 1 2]); % Correction factor % Calculate overall SNR and SNR per RE. SNRo = 10*log10(mean(powSignal,3)./mean(powNoise,3)) - 10*log10(Gf); SNRre = 10*log10(mean(powSignalRE,3)./mean(powNoiseRE,3)) - 10*log10(Gf); % Create a table to display the results. SNRrec = mat2cell(SNRre,nSNRPoints,ones(nRxAnt,1)); tSNRre = table(simParameters.TxRxDistance(:),SNRrec{:},'VariableNames',["Distance (m)", "SNR RxAnt"+(1:nRxAnt)]); disp(tSNRre)
Distance (m) SNR RxAnt1 SNR RxAnt2
____________ __________ __________
500 5.4398 5.4816
900 -4.5261 -4.4795
CDL チャネルと TDL チャネルは、小規模フェージングに加えて、アンテナ偏波、アンテナ ゲイン、アンテナ相関、受信アンテナ数による正規化など、平均伝播損失に影響する他の側面もモデル化します。SNR に適用される補正係数 Gf は、CDL または TDL チャネルによって導入されるこの平均伝播損失を補正し、測定値を 5G Toolbox のリンクレベル シミュレーションの SNR 定義と一致させます。