Main Content

リンク シミュレーションで使用する SNR の定義

この例では、5G Toolbox™ のリンクレベル シミュレーションによって、時間領域および周波数領域のチャネル モデリングに対する S/N 比 (SNR) がどのように定義されるかを示します。

SNR の定義

リンク レベルのシミュレーションをシミュレートする 5G Toolbox™ の例では、各受信アンテナのリソース エレメント (RE) ごとの平均 SNR として SNR を定義します。これらは、リソース グリッド内、つまり周波数領域内で RE を定義します。目的の SNR を実現するため、例ではノイズをスケーリングします。時間領域チャネル モデルを使用する例もあれば、周波数領域チャネル モデルを使用する例もあります。これらの例では、チャネルのモデリングに応じてノイズのスケーリングが異なります。

SNR を定義するために、例では次のように計算します。

SNR=SRENRE.

SRE および NRE は、それぞれ、各受信アンテナの RE ごとの平均信号パワー、および各受信アンテナの RE ごとの平均ノイズ パワーです。NRE は、例で信号に追加される AWGN をモデル化します。

時間領域チャネル モデリングのノイズ スケーリング

NR PDSCH スループットおよびNR PUSCH スループットの例では、フェージング チャネルの後、OFDM 復調の前で、時間領域の受信信号に AWGN が導入されます。

Diagram showing that noise is added after the channel and before OFDM demodulation

信号 x を離散フーリエ変換 (DFT) したものが X であるとき、次のパーセバルの定理が成り立ちます。

n=1NFFT|xn|2=1NFFTk=1NFFT|Xk|2.

NFFT は FFT 長です。この方程式を NFFT で除算することで、平均信号パワーが得られます。

S=1NFFTn=1NFFT|xn|2=1NFFT2k=1NFFT|Xk|2=1NFFTXRMS2.

5G では、ガード バンドまたはゼロ パディングが存在するため、対象となる信号で FFT のビン (または RE) の一部が使用されません。また、信号の割り当てにより、利用可能なグリッドの一部のみが占有されます。信号が FFT の KS 個のビン (または RE) のみを使用する場合、信号パワーは次のようになります。

S=1NFFTn=1NFFT|xn|2=1NFFT2k=1KS|Xk|2=KSNFFT2XRMS2.

KS は、OFDM シンボルごとの非ゼロ パワー RE の数です。

RE ごとの信号パワーは次のようになります。

SRE=SKS.

RE ごとのノイズ パワーは次のようになります。

NRE=NNFFT.

例で追加されるノイズは時間領域にあるため、ノイズは割り当てられた RE だけでなくすべてのビンを占有します。したがって、例ではノイズ パワー NNFFT ではなく KS で除算します。

これらの定義を考慮すると、SNR は次のようになります。

SNR=SRENRE=KSKSNFFT2XRMS2NNFFT=XRMS2NFFTN.

この例では、XRMS2=1NRx であると仮定しています。ここで、NRx は受信アンテナの数です。この仮定は、すべてのアンテナでの受信パワーの合計が 1 になることを意味します。

SNR=1NRxNFFTN=1NRxNFFTN

OFDM 復調器の入力におけるノイズ パワーは次のようになります。

N=1NRxNFFTSNR.

パワーが N であるノイズを生成するために、この例では複素乱数のサンプルを N0time でスケーリングします。

N0time=N=1NRxNFFTSNR

リンクをモデル化する 5G Toolbox の例のほとんどが、このスケーリング係数を使用します。このスケーリング係数は、信号の RE の値の平方根平均二乗が XRMS2=1/NRx であると仮定しています。伝播チャネルを使用する場合、この仮定が常に当てはまるとは限りません。

伝播チャネルでは、相関、アンテナ偏波、アンテナ素子のゲインといったいくつかの要素が影響します。チャネルのこのような影響により、受信機における信号パワーが影響を受ける可能性があります。これらの影響により、受信機における SNR の推定や、特定の SNR をモデル化するためのシミュレーションの設定が難しくなります。このような困難さを排除するため、この例の SNR の定義ではチャネルへの影響を一切考慮しません。SNR の定義は、フェージング チャネルが存在せず、XRMS2=1/NRx である場合に測定された SNR と等しくなります。

伝播チャネル (nrTDLChannelオブジェクトまたはnrCDLChannelオブジェクト) を使用する場合、次を考慮してください。

  • チャネル オブジェクトの NormalizeChannelOutputs プロパティを true に設定すると、導出で仮定されているように、XRMS2=1/NRx となるよう、受信アンテナの数によってチャネル出力が正規化されます。

  • チャネル オブジェクトの NormalizePathGains プロパティを true に設定すると、平均パス ゲインのパワーの総和が 0 dB に設定されます。

  • SNR の定義ではチャネルへの影響を一切考慮しません。

時間領域チャネル モデリングの SNR の検証

時間領域モデリングのノイズ スケーリングで導出された方程式から、SNR を検証することができます。導入された SNR の定義ではチャネルへの影響を一切考慮しないため、この検証には伝播チャネルが含まれません。

次の図では、各アンテナの RE ごとの SNR を測定するための設定を示しています。

Diagram showing setup to measure SNR

この設定では、次の手順を実装します。

  1. 物理ダウンリンク共有チャネル (PDSCH) シンボルを含むリソース グリッドを生成します。

  2. グリッドを OFDM 変調します。

  3. AWGN を生成します。

  4. 受信信号とノイズを別々に OFDM 復調します。

  5. 各アンテナの RE ごとの信号パワーとノイズ パワーを測定します。

  6. SNR を計算して表示します。

目的の SNR を dB 単位で指定します。

SNRdB = 0;
rng("default") % Enable reproducible simulation results

送信アンテナと受信アンテナの数を設定します。チャネルが存在しないため、送信アンテナと受信アンテナの数は同じであると仮定します。

nTxAnts = 2;
nRxAnts = nTxAnts;

キャリアのパラメーターを指定します。

carrier = nrCarrierConfig;
carrier.NSizeGrid = 52;                     % Grid size in resource blocks
carrier.SubcarrierSpacing = 15;             % Subcarrier spacing

waveformInfo = nrOFDMInfo(carrier);         % Waveform information

pdsch = nrPDSCHConfig;
pdsch.Modulation = "16QAM";
pdsch.PRBSet = 0:(carrier.NSizeGrid-1);     % PDSCH allocation

レイヤー数で正規化されたノルム 1 のプリコーディング ベクトルを作成します。

w = (1/sqrt(pdsch.NumLayers))*ones(pdsch.NumLayers,nTxAnts);

目的の SNR を実現するため、ノイズ スケーリング係数 N0time=1NRxNFFTSNR を計算します。

SNR = 10^(SNRdB/10);
N0time = 1/sqrt(nRxAnts*double(waveformInfo.Nfft)*SNR);

プリコーディングされた PDSCH シンボルを生成します。

[pdschIndices,pdschInfo] = nrPDSCHIndices(carrier,pdsch);
pdschBits = randi([0 1],pdschInfo.G,1);
pdschSymbols = nrPDSCH(carrier,pdsch,pdschBits);
pdschSymbolsPrecoded = pdschSymbols*w;

リソース グリッドを作成し、プリコーディングされた PDSCH シンボルをリソース グリッドにマッピングします。

pdschGrid = nrResourceGrid(carrier,nTxAnts);
[~,pdschAntIndices] = nrExtractResources(pdschIndices,pdschGrid);
pdschGrid(pdschAntIndices) = pdschSymbolsPrecoded;

グリッドを OFDM 変調します。

txWaveform = nrOFDMModulate(carrier,pdschGrid);

チャネルは存在しないと仮定します。SNR の定義では XRMS2=1/NRx であると仮定しているため、受信アンテナの数で受信信号を正規化します。

rxWaveform = txWaveform/sqrt(nRxAnts);

AWGN を生成します。

rxNoise = N0time*randn(size(rxWaveform),"like",rxWaveform);

(ノイズを含まない) 受信信号を OFDM 復調し、受信したグリッドから PDSCH シンボルを抽出して SRE を計算します。

% OFDM demodulation
rxSignalGrid = nrOFDMDemodulate(carrier,rxWaveform);

% PDSCH symbols extraction
rxPDSCHSymbols = rxSignalGrid(pdschAntIndices);

RE ごとの受信信号パワー SRE、および RE ごとのノイズ パワー NRE を測定します。

SRE=SKS=KSKSNFFT2XRMS2=1NFFT2XRMS2

NRE=NNFFT

測定した SNR 値が指定した SNR パラメーターと近似していることを確認します。

Sre = (1/waveformInfo.Nfft.^2)*rms(rxPDSCHSymbols).^2;
Nre = (1/waveformInfo.Nfft)*rms(rxNoise).^2;
for n=1:nRxAnts
    disp("Received signal power per RE antenna " + string(n) + " = " + string(pow2db(Sre(n))+30) + " dBm");
    disp("Received noise power per RE antenna " + string(n) + " = " + string(pow2db(Nre(n))+30) + " dBm");
    disp("SNR (antenna " + string(n) + ") = " + string(pow2db(Sre(n)/Nre(n))) + " dB");
end
Received signal power per RE antenna 1 = -33.186 dBm
Received noise power per RE antenna 1 = -33.2182 dBm
SNR (antenna 1) = 0.032227 dB
Received signal power per RE antenna 2 = -33.186 dBm
Received noise power per RE antenna 2 = -33.2622 dBm
SNR (antenna 2) = 0.076224 dB

周波数領域チャネル モデリングのノイズ スケーリング

5G Toolbox のリンクの例では、周波数領域のノイズをチャネルの周波数領域表現に渡した後、リソース グリッドに適用します。

Diagram showing that noise is added to thte resource grid after it has been passed through the frequency domain channel

SNR の定義から、各受信アンテナのリソース エレメント (RE) ごとの平均 SNR は周波数領域に収まります。5G Toolbox のリンクの例では、XRMS2=1NRx であると仮定しています。ここで、NRx は受信アンテナの数です。この仮定は、すべてのアンテナでの受信信号パワーの合計が 1 になることを意味します。

したがって、周波数領域で適切なパワーのノイズ サンプルを生成するためのスケーリング係数 N0freq は、次のようになります。

N0freq=NRMSfreq2=1NRxSNR

周波数領域チャネル モデリングの SNR の検証

周波数領域モデリングのノイズ スケーリングで導出された方程式から、SNR を検証することができます。導入された SNR の定義ではチャネルへの影響を一切考慮しないため、この検証には伝播チャネルが含まれません。

次の図では、周波数領域でノイズ パワーを測定するための設定を示しています。

Diagram showing setup to measure SNR in frequency domain

この設定では、次の手順を実装します。

  1. 周波数領域チャネル モデリングのノイズ スケーリングの方程式を使用し、周波数領域でノイズを生成します。

  2. 周波数領域でノイズを適用し、ノイズ パワーを測定します。

  3. 時間領域でのノイズ パワーを取得し、周波数領域と比較します。

目的の SNR を dB 単位で指定します。

SNRdB = 0;
rng("default") % Enable reproducible simulation results

送信アンテナと受信アンテナの数を設定します。チャネルが存在しないため、送信アンテナと受信アンテナの数は同じであると仮定します。

nTxAnts = 2;
nRxAnts = nTxAnts;

キャリアを構成し、OFDM 情報を抽出します。

carrier = nrCarrierConfig;
ofdmInfo = nrOFDMInfo(carrier);

SNR をパワーに変換します。

SNR = 10.^SNRdB/10;

上記で導出された式を使用して、周波数領域でノイズを生成し、そのパワーを測定します。

N0freq = 1/sqrt(nRxAnts*SNR);
noiseGridFreq = zeros(size(pdschGrid),'like',1i);

noiseGridFreq(:) = N0freq*randn(size(noiseGridFreq),'like',1i);     % Resource grid for noise generated in the frequency domain

noisePowerFreq = rms(noiseGridFreq(:)).^2;                          % Power of noise added in the frequency domain 

時間領域でノイズを生成し、OFDM 変調後のパワーを測定します。

grid = nrResourceGrid(carrier);
waveform = nrOFDMModulate(carrier,grid);                            % This is only necessary when for obtaining the correct signal sizes (with CPs, etc...)

N0time = 1/sqrt(nRxAnts*ofdmInfo.Nfft*SNR);
noise = N0time*randn([size(waveform,1) nRxAnts],'like',1i);

noiseGridTime = nrOFDMDemodulate(carrier,noise);                    % Resource grid for noise generated in the time domain

noisePowerTime = rms(noiseGridTime(:)).^2;                          % Power of noise added in the time domain

周波数領域で発生するノイズ パワーは、時間領域で発生するノイズ パワーと同様になります。これらの値は、指定された SNR を達成するために必要なノイズ パワーを表します。

for x = 1
    disp("Frequency-domain channel modeling noise power: "+noisePowerFreq)
    disp("Time-domain channel modeling noise power: "+noisePowerTime)
end
Frequency-domain channel modeling noise power: 4.9115
Time-domain channel modeling noise power: 4.9932

関連するトピック