Main Content

同期信号ブロックと同期信号バースト

この例では、同期信号ブロック (SSB) を生成する方法、および同期信号バースト (SS バースト) を形成するために複数の SSB を生成する方法について説明します。同期信号ブロックを形成するチャネルと信号 (プライマリ同期信号、セカンダリ同期信号、物理ブロードキャスト チャネル) を作成して、ブロックを表す行列にマッピングします。最後に、同期信号バーストを表す行列を作成し、バースト内の各同期信号ブロックを作成して行列にマッピングします。

SS/PBCH ブロック

TS 38.211 の Section 7.4.3.1 では、同期信号/物理ブロードキャスト チャネル (SS/PBCH) ブロックを、以下のチャネルと信号を含む 240 個のサブキャリアおよび 4 つの OFDM シンボルとして定義しています。

  • プライマリ同期信号 (PSS)

  • セカンダリ同期信号 (SSS)

  • 物理ブロードキャスト チャネル (PBCH)

  • PBCH 復調基準信号 (PBCH DM-RS)

その他のドキュメント (TS 38.331 など) では、SS/PBCH が "同期信号ブロック" または "SS ブロック" と表記されています。

SS/PBCH ブロックを表す 240 行 4 列の行列を作成します。

ssblock = zeros([240 4])
ssblock = 240×4

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
      ⋮

プライマリ同期信号 (PSS)

指定したセル ID の PSS を作成します。

ncellid = 17;
pssSymbols = nrPSS(ncellid)
pssSymbols = 127×1

    -1
    -1
    -1
    -1
    -1
    -1
     1
     1
     1
    -1
      ⋮

変数 pssSymbols は、PSS の 127 個の BPSK シンボルを含む列ベクトルです。

PSS インデックスを作成します。

pssIndices = nrPSSIndices;

変数 pssIndices は、pssSymbols と同じサイズの列ベクトルです。pssIndices の各要素の値は、pssSymbols 内の対応するシンボルが SS/PBCH ブロック内でマッピングされるべき位置を示す線形インデックスです。したがって、SS/PBCH ブロックへの PSS シンボルのマッピングは、SS/PBCH ブロック行列の適切な要素を選択する線形インデックスを使用し、シンプルな MATLAB 割り当てを使用して実行できます。TS 38.211 の Section 7.4.3.1.1 では、βPSS を表すために、PSS シンボルにスケーリング係数 1 が適用されていることに注意してください。

ssblock(pssIndices) = 1 * pssSymbols;

SS/PBCH ブロック行列をプロットして、PSS の位置を表示します。

imagesc(abs(ssblock));
clim([0 4]);

axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS');

セカンダリ同期信号 (SSS)

PSS 構成時と同じセル ID の SSS を作成します。

sssSymbols = nrSSS(ncellid)
sssSymbols = 127×1

    -1
     1
    -1
    -1
    -1
     1
    -1
     1
    -1
     1
      ⋮

PSS で使用した同じパターンに従い、SSS インデックスを作成して、SSS シンボルを SS/PBCH ブロックにマッピングします。TS 38.211 の Section 7.4.3.1.2 では、βSSS を表すために、SSS シンボルにスケーリング係数 2 が適用されていることに注意してください。

sssIndices = nrSSSIndices;
ssblock(sssIndices) = 2 * sssSymbols;

インデックスの既定の形式は、1 ベースの線形インデックスであり、前述の ssblock のような MATLAB 行列の線形インデックスに適しています。ただし、NR 規格のドキュメントでは、0 ベースの番号付けを使用した、OFDM サブキャリアおよびシンボルの添字に関する OFDM リソースについて説明されています。NR 規格を使用したクロスチェックを簡単に行えるように、インデックス関数は、インデックス スタイル (線形インデックスと添字) およびインデックス ベース (0 ベースと 1 ベース) を選択するオプションを受け入れます。

sssSubscripts = nrSSSIndices('IndexStyle','subscript','IndexBase','0based')
sssSubscripts = 127x3 uint32 matrix

   56    2    0
   57    2    0
   58    2    0
   59    2    0
   60    2    0
   61    2    0
   62    2    0
   63    2    0
   64    2    0
   65    2    0
      ⋮

この添字から、SSS が SS/PBCH ブロックの OFDM シンボル 2 (0 ベース) の位置にあり、サブキャリア 56 (0 ベース) で始まることがわかります。

SS/PBCH ブロック行列を再度プロットして、PSS と SSS の位置を表示します。

imagesc(abs(ssblock));
clim([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS and SSS');

物理ブロードキャスト チャネル (PBCH)

PBCH は、MIB の BCH 符号化を実行することによって作成された、長さ 864 ビットのコードワードを伝送します。BCH 符号化の詳細については、関数nrBCHと関数nrBCHDecode、およびNR セル サーチおよび MIB と SIB1 の復元の例でそれらを使用する方法を参照してください。ここでは、864 個のランダムなビットで構成される PBCH コードワードを使用します。

cw = randi([0 1],864,1);

PBCH 変調は、TS 38.211 の Section 7.3.3 に記載されている以下の手順で構成されます。

  • スクランブル

  • 変調

  • 物理リソースへのマッピング

スクランブルと変調

TS 38.213 の Section 4.1 のセル サーチ手順に記載されているように、複数の SS/PBCH ブロックが半フレームにわたって送信されます。各 SS/PBCH ブロックには 0L-1 のインデックスが付与されます。ここで、L は、半フレーム内の SS/PBCH ブロックの数です。TS 38.211 の Section 7.3.3.1 に記載されているように、PBCH のスクランブリング シーケンスはセル ID ncellid に従って初期化されます。また、PBCH コードワードをスクランブルするために使用されるサブシーケンスは、v の値 (SS/PBCH ブロック インデックスの 2 つまたは 3 つの LSB) に依存します。この例では、v=0 を使用します。関数 nrPBCH は、スクランブリング シーケンスの適切なサブシーケンスを作成し、スクランブルを実行してから、QPSK 変調を実行します。

v = 0;
pbchSymbols = nrPBCH(cw,ncellid,v)
pbchSymbols = 432×1 complex

  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 - 0.7071i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 - 0.7071i
   0.7071 + 0.7071i
   0.7071 + 0.7071i
      ⋮

リソース エレメントへのマッピング

PBCH インデックスを作成し、PBCH シンボルを SS/PBCH ブロックにマッピングします。TS 38.211 の Section 7.4.3.1.3 では、βPBCH を表すために、PBCH シンボルにスケーリング係数 3 が適用されていることに注意してください。

pbchIndices = nrPBCHIndices(ncellid);
ssblock(pbchIndices) = 3 * pbchSymbols;

SS/PBCH ブロック行列を再度プロットして、PSS、SSS、PBCH の位置を表示します。

imagesc(abs(ssblock));
clim([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS, SSS and PBCH');

PBCH 復調基準信号 (PBCH DM-RS)

SS/PBCH ブロックの最後の成分は、PBCH に関連付けられた DM-RS です。PBCH と同様に、使用する DM-RS シーケンスは、SS/PBCH ブロック インデックスから導出し、TS 38.211 の Section 7.4.1.4.1 に記載されている変数 iSSB を使用して構成します。ここでは、iSSB=0 を使用します。

ibar_SSB = 0;
dmrsSymbols = nrPBCHDMRS(ncellid,ibar_SSB)
dmrsSymbols = 144×1 complex

   0.7071 - 0.7071i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 - 0.7071i
   0.7071 + 0.7071i
   0.7071 - 0.7071i
  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
   0.7071 + 0.7071i
      ⋮

TS 38.211 の Section 7.4.1.4.1 で定義されている中間変数 iSSB が、PBCH について前述の v と同じように定義されることに注意してください。

PBCH DM-RS インデックスを作成し、PBCH DM-RS シンボルを SS/PBCH ブロックにマッピングします。TS 38.211 の Section 7.4.3.1.3 では、β PBCHDM-RS を表すために、PBCH DM-RS シンボルにスケーリング係数 4 が適用されていることに注意してください。

dmrsIndices = nrPBCHDMRSIndices(ncellid);
ssblock(dmrsIndices) = 4 * dmrsSymbols;

SS/PBCH ブロック行列を再度プロットして、PSS、SSS、PBCH、PBCH DM-RS の位置を表示します。

imagesc(abs(ssblock));
clim([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS, SSS, PBCH and PBCH DM-RS');

SS バーストの生成

複数の SS/PBCH ブロックで構成される SS バーストは、より大きなグリッドを作成して、SS/PBCH ブロックを適切な位置にマッピングすることで生成できます。このとき、各 SS/PBCH ブロックには、位置に応じた適切なパラメーターを与えます。

SS バースト グリッドの作成

NR 規格では、OFDM シンボルがスロット、サブフレーム、フレームにグループ化されます。TS 38.211 の Section 4.3.1 で定義されているように、1 つのフレームには 10 個のサブフレームがあり、各サブフレームは 1 ms の固定持続時間をもちます。各 SS バーストの持続時間はフレームの半分であるため、5 つのサブフレームにまたがります。

nSubframes = 5
nSubframes = 5

TS 38.211 の Section 4.3.2 では、各スロットを 14 個の OFDM シンボルをもつものとして定義しており (ノーマル サイクリック プレフィックス長の場合)、これは次のように固定されます。

symbolsPerSlot = 14
symbolsPerSlot = 14

ただし、サブフレームごとのスロット数は変化し、サブキャリア間隔の関数となります。サブキャリア間隔が広くなるほど OFDM シンボルの持続時間は短くなるため、1 ms の固定サブフレーム時間により多くの OFDM シンボルを収めることができます。

μ=0...4 という 5 つのサブキャリア間隔構成があり、対応するサブキャリア間隔は 152μ kHz になります。この例では、30 kHz のサブキャリア間隔に対応する μ=1 を使用します。

mu = 1
mu = 1

サブキャリア間隔が 2 倍になると OFDM シンボルの持続時間は半分になるため、サブフレームごとのスロット数は 2μ になります。NR におけるスロットの定義は LTE とは異なることに注意してください。LTE のサブフレームは 7 つのシンボルから成るスロット 2 つ (ノーマル サイクリック プレフィックスの場合) で構成されますが、NR では LTE サブキャリア間隔 (μ=0、15 kHz) を使用するサブフレームが 14 個のシンボルから成るスロット 1 つで構成されます。

SS バースト内の OFDM シンボルの総数を計算します。

nSymbols = symbolsPerSlot * 2^mu * nSubframes
nSymbols = 140

SS バースト全体に空のグリッドを作成します。

ssburst = zeros([240 nSymbols]);

SS ブロック パターンの定義

SS バースト内の SS/PBCH ブロックのパターンは、TS 38.213 で、UE が SS/PBCH ブロックを検出し得る位置を説明するセル サーチ手順によって間接的に規定されています。Case A から Case E まで、異なるサブキャリア間隔と異なる搬送周波数に適用可能な 5 つのブロック パターンがあります。

バーストごとに L=8 個のブロックをもつ、ブロック パターン Case B の SS/PBCH 候補ブロックに、最初のシンボルのインデックスを作成します。

n = [0, 1];
firstSymbolIndex = [4; 8; 16; 20] + 28*n;
firstSymbolIndex = firstSymbolIndex(:).'
firstSymbolIndex = 1×8

     4     8    16    20    32    36    44    48

SS バースト コンテンツの作成

これで、各 SS ブロックを生成し、それを SS バーストの適切な位置に割り当てるループを作成できました。以下に留意してください。

  • コードは、この例で先に作成したさまざまな変数 (PSS、SSS、4 つのインデックス セット) を再利用する

  • PSS と SSS は、SS/PBCH ブロック インデックスから独立しているため、ループの前に SS ブロックにマッピングできる

  • PBCH インデックスおよび PBCH DM-RS インデックスは、SS/PBCH ブロック インデックスから独立しているため、ループで更新する必要はない

  • iSSBiSSBv は、TS 38.211 の Section 7.3.3.1 および Section 7.4.1.4.1 にある L=8 の場合の規則に従って設定される。

  • 各チャネル/信号は、最終プロットで異なる色を付けるため、スケーリングされる

ssblock = zeros([240 4]);
ssblock(pssIndices) = pssSymbols;
ssblock(sssIndices) = 2 * sssSymbols;

for ssbIndex = 1:length(firstSymbolIndex)
    
    i_SSB = mod(ssbIndex - 1,8);
    ibar_SSB = i_SSB;
    v = i_SSB;
    
    pbchSymbols = nrPBCH(cw,ncellid,v);
    ssblock(pbchIndices) = 3 * pbchSymbols;
    
    dmrsSymbols = nrPBCHDMRS(ncellid,ibar_SSB);
    ssblock(dmrsIndices) = 4 * dmrsSymbols;
    
    ssburst(:,firstSymbolIndex(ssbIndex) + (0:3)) = ssblock;
    
end

最後に、SS バースト コンテンツをプロットします。

imagesc(abs(ssburst));
clim([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS burst, block pattern Case B');

参考

関数

関連するトピック