メインコンテンツ

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

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

SNR の定義

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

例で使用されている SNR の定義は次のとおりです。

SNR=SRENRE.

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

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

SRE=SKS.

S は OFDM シンボル全体の信号パワーであり、KS は OFDM シンボルごとの非ゼロ パワー RE の数です。

一方で、ノイズはすべての FFT ビンにわたって存在します。したがって、RE ごとのノイズ パワーは次のようになります。

NRE=NNFFT.

N はノイズ パワーであり、NFFT は OFDM FFT のサイズです。これらの定義を考慮すると、SNR は次のようになります。

SNR=SKSNNFFT.

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

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 で除算することで、平均信号パワーが得られます。

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

対象となる信号が FFT の KS 個のビン (または RE) のみを使用するため、RE ごとの信号パワーは次のようになります。

SRE=SKS=1KS1NFFTn=1NFFT|xn|2=1NFFT21KSk=1KS|Xk|2=XRMS2NFFT2.

すると、SNR は次のようになります。

SNR=SRENRE=SKSNNFFT=XRMS2NFFT2NNFFT=XRMS2NFFTN.

5G Toolbox のシンボル変調器は、条件 XRMS2=1 を満たすシンボルを返します。NormalizeChannelOutputs プロパティを true に設定した CDL チャネル モデルまたは TDL チャネル モデルは、受信アンテナ数 NRx でチャネル出力を正規化します。したがって、この例では XRMS2=1NRx と仮定しています。

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 となります。

  • 送信信号のパワーがチャネル パスによって変化しないようにし、各パスの受信側で条件 XRMS2=1/NRx が有効な状態のまま維持されるようにするには、チャネル オブジェクトの NormalizePathGains プロパティを true に設定します。すると、平均パス ゲインのパワーの総和が 0 に設定されます。

  • この 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=XRMS2NFFT2

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 の定義には、平均ノイズ パワー N が含まれます。

SNR=1NRxNFFTN

パーセバルの定理を使用すると、平均ノイズ パワーは次のようになります。

N=1NFFTn=1NFFT|nn|2=1NFFT2k=1NFFT|Nkfreq|2=NRMSfreq2NFFT.

Nfreq は、ノイズ信号 n の DFT です。この定義を考慮すると次のようになります。

SNR=1NRxNFFTN=1NRxNRMSfreq2.

周波数領域におけるノイズ サンプルのパワーは次のようになります。

NRMSfreq2=1NRxSNR.

したがって、周波数領域で適切なパワーのノイズ サンプルを生成するためのスケーリング係数 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

参考

トピック