Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

波形生成のための GSM TDMA フレームのパラメーター化

この例では、さまざまな GSM TDMA フレームとマルチフレーム構造をパラメーター化し、生成する方法を説明します。

はじめに

GSM 標準 [1] では、TDMA フレームが 8 つのタイム スロットの組み合わせとして指定されています。各タイム スロットの期間は 3/5200 秒 (約 0.577 ms) で、タイム スロット番号 (TN) は 0 ~ 7 です。GSM フレームでは、1 つのシンボルが 1 ビットと等価になる GMSK 変調が使用されます。各タイム スロットは 156.25 ビット長です。タイム スロットのコンテンツはバーストと呼ばれます。タイム スロット内のバーストの送信タイミングは、ビット番号で定義されます。ビット番号 (BN) は、タイム スロット内の特定のビット期間を表します。最小のビット番号をもつビットが最初に送信されます。BN0 は最初のビット期間で、BN156 は最後の 4 分の 1 ビット期間です。次の図は、GSM システムの時間フレーム、タイム スロット、およびバーストを示します [1]。

TDMA には 8 つのタイム スロットが含まれ、各タイム スロットは保護期間で区切られています。各タイム スロットが実行できるバーストのタイプは 1 つのみです。使用可能なバースト タイプはノーマル バースト (NB)、周波数補正バースト (FB)、同期バースト (SB)、アクセス バースト (AB)、またはダミー バースト [2] です。以降の節で、さまざまなバースト タイプと保護期間について説明します。

ノーマル バースト (NB)

ノーマル バーストは次のビット フィールドで構成され、アップリンク フレームまたはダウンリンク フレームに配置できます。すべてのテール ビットは 0 です。指定されたトレーニング シーケンス符号 (TSC) に基づいて、トレーニング シーケンス フィールドには 8 つの可能なトレーニング シーケンスの 1 つが含まれます。

normalBurstDescription()
ans=6×3 table
     BitNumber     LengthOfField        ContentsOfField     
    ___________    _____________    ________________________

    "0 - 2"         {[     3]}      "tail bits"             
    "3 - 60"        {[    58]}      "encrypted bits"        
    "61 - 86"       {[    26]}      "training sequence bits"
    "87 - 144"      {[    58]}      "encrypted bits"        
    "145 - 147"     {[     3]}      "tail bits"             
    "148 - 156"     {[8.2500]}      "guard period (bits)"   

アクセス バースト (AB)

アクセス バーストは次のビット フィールドで構成され、アップリンク フレームにのみ配置できます。すべてのテール ビットは 0 です。

accessBurstDescription()
ans=5×3 table
    BitNumber     LengthOfField       ContentsOfField    
    __________    _____________    ______________________

    "0 - 7"        {[      8]}     "extended tail bits"  
    "8 - 48"       {[     41]}     "synch. sequence bits"
    "49 - 84"      {[     36]}     "encrypted bits"      
    "85 - 87"      {[      3]}     "tail bits"           
    "88 - 156"     {[68.2500]}     "guard period (bits)" 

周波数補正バースト (FB)

周波数補正バーストは次のビット フィールドで構成され、ダウンリンク フレームにのみ配置できます。すべてのテール ビットと固定ビットは 0 です。GMSK 変調器ですべての 0 を変調すると、各シンボル区間で -90 度の一定の位相回転が発生します。そのため、このバーストは 1625/24 kHz の正の周波数オフセットで変調されていない搬送波を生成します。

frequencyCorrectionBurstDescription()
ans=4×3 table
     BitNumber     LengthOfField       ContentsOfField   
    ___________    _____________    _____________________

    "0 - 2"         {[     3]}      "tail bits"          
    "3 - 144"       {[   142]}      "fixed bits"         
    "145 - 147"     {[     3]}      "tail bits"          
    "148 - 156"     {[8.2500]}      "guard period (bits)"

同期バースト (SB)

同期バーストは次のビット フィールドで構成され、ダウンリンク フレームにのみ配置できます。すべてのテール ビットは 0 です。

synchronizationBurstDescription()
ans=6×3 table
     BitNumber     LengthOfField             ContentsOfField         
    ___________    _____________    _________________________________

    "0 - 2"         {[     3]}      "tail bits"                      
    "3 - 41"        {[    39]}      "encrypted bits"                 
    "42 - 105"      {[    64]}      "extended training sequence bits"
    "106 - 144"     {[    39]}      "encrypted bits"                 
    "145 - 147"     {[     3]}      "tail bits"                      
    "148 - 156"     {[8.2500]}      "guard period (bits)"            

ダミー バースト

ダミー バーストは次のビット フィールドで構成され、ダウンリンク フレームにのみ配置できます。すべてのテール ビットは 0 です。混合ビットには、事前に定義された 1 と 0 のシーケンスが含まれます。

dummyBurstDescription()
ans=4×3 table
     BitNumber     LengthOfField       ContentsOfField   
    ___________    _____________    _____________________

    "0 - 2"         {[     3]}      "tail bits"          
    "3 - 144"       {[   142]}      "mixed bits"         
    "145 - 147"     {[     3]}      "tail bits"          
    "148 - 156"     {[8.2500]}      "guard period (bits)"

保護期間

GSM 標準 [3] では、移動局でバーストとバーストの間の期間に送信を減衰することを必要としています。信号強度レベルの立ち上がりと立ち下がりは、保護期間に発生します。バーストの有効部分はビット番号 0 の途中で開始します。有効部分は、AB では BN87 の途中、NB、FB、SB、およびダミー バーストでは BN147 の途中で終了します。次の図は、バーストの有効部分とアクティブ部分を示します。

単一のアップリンク フレームの生成

gsmUplinkConfig オブジェクトを使用してアップリンク GSM TDMA フレームを構成します。

cfg = gsmUplinkConfig()
cfg = 
  gsmUplinkConfig with properties:

           BurstType: [NB    NB    NB    NB    NB    NB    NB    NB]
    SamplesPerSymbol: 16
                 TSC: [0 1 2 3 4 5 6 7]
         Attenuation: [0 0 0 0 0 0 0 0]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

タイム スロット 2 および 5 でアクセス バーストを実行するように設定します。MATLAB® 配列インデックスは 1 から始まりますが、タイム スロットは 0 から始まるため、BurstType の 3 番目と 6 番目の要素を "AB" に設定します。

cfg.BurstType([2 5] +1) = "AB"
cfg = 
  gsmUplinkConfig with properties:

           BurstType: [NB    NB    AB    NB    NB    AB    NB    NB]
    SamplesPerSymbol: 16
                 TSC: [0 1 2 3 4 5 6 7]
         Attenuation: [0 0 0 0 0 0 0 0]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

トレーニング シーケンス符号 3、5、1、7、0、2 を、それぞれタイム スロット 0、1、3、4、6、7 に割り当てます。

cfg.TSC([0 1 3 4 6 7] +1) = [3 5 1 7 0 2]
cfg = 
  gsmUplinkConfig with properties:

           BurstType: [NB    NB    AB    NB    NB    AB    NB    NB]
    SamplesPerSymbol: 16
                 TSC: [3 5 2 1 7 5 0 2]
         Attenuation: [0 0 0 0 0 0 0 0]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

関数 gsmFrame を使用して、フレームのベースバンド サンプルを生成します。

x = gsmFrame(cfg);

フレームをプロットします。関数 gsmInfo を使用して生成された波形のサンプルレートを取得し、時間軸の値を ms 単位で計算します。プロットには、フレームの 8 つのバーストが、各バースト間の保護期間と共に表示されます。アクセス バースト (AB) の節で説明したように、AB は短いバーストで、他のバーストより長い保護期間があります。

wfInfo = gsmInfo(cfg); 
Rs = wfInfo.SampleRate;
t = (0:length(x) - 1)/Rs*1e3;
subplot(2,1,1)
plot(t,abs(x))
grid on
axis([0 5 0 1.2])
title('GSM Uplink TDMA Frame - Amplitude')
xlabel('Time (ms)')
ylabel('Amplitude')
subplot(2,1,2)
plot(t,unwrap(angle(x)))
grid on
title('GSM Uplink TDMA Frame - Phase')
xlabel('Time (ms)')
ylabel('Phase (rad)')

Figure contains 2 axes objects. Axes object 1 with title GSM Uplink TDMA Frame - Amplitude, xlabel Time (ms), ylabel Amplitude contains an object of type line. Axes object 2 with title GSM Uplink TDMA Frame - Phase, xlabel Time (ms), ylabel Phase (rad) contains an object of type line.

フレームのスペクトログラムをプロットします。

figure
spectrogram(x,500,[],[],Rs,'centered')
title('GSM Uplink TDMA Frame - Spectrogram')

Figure contains an axes object. The axes object with title GSM Uplink TDMA Frame - Spectrogram, xlabel Frequency (MHz), ylabel Time (ms) contains an object of type image.

単一のダウンリンク フレームの生成

gsmDownlinkConfig オブジェクトを使用してダウンリンク GSM TDMA フレームを構成します。

cfg = gsmDownlinkConfig
cfg = 
  gsmDownlinkConfig with properties:

           BurstType: [NB    NB    NB    NB    NB    NB    NB    NB]
    SamplesPerSymbol: 16
                 TSC: [0 1 2 3 4 5 6 7]
         Attenuation: [0 0 0 0 0 0 0 0]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

タイム スロット 0 で周波数補正バーストを実行し、タイム スロット 4 および 6 でダミー バーストを実行し、タイム スロット 2 が空になるように設定します。

cfg.BurstType(0 +1) = "FB";
cfg.BurstType([4 6] +1) = "Dummy";
cfg.BurstType(2 +1) = "Off"
cfg = 
  gsmDownlinkConfig with properties:

           BurstType: [FB    NB    Off    NB    Dummy    NB    Dummy    NB]
    SamplesPerSymbol: 16
                 TSC: [0 1 2 3 4 5 6 7]
         Attenuation: [0 0 0 0 0 0 0 0]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

関数 gsmFrame を使用して、フレームのベースバンド サンプルを生成します。次の関数は、暗号化されたビットではなくランダムなビットを挿入します。

x = gsmFrame(cfg);

フレームをプロットします。

wfInfo = gsmInfo(cfg); 
Rs = wfInfo.SampleRate;
t = (0:length(x) - 1)/Rs*1e3;
subplot(2,1,1)
plot(t,abs(x))
grid on
axis([0 5 0 1.2])
title('GSM Uplink TDMA Frame - Amplitude')
xlabel('Time (ms)');ylabel('Amplitude')
subplot(2,1,2)
plot(t,unwrap(angle(x)))
grid on
title('GSM Uplink TDMA Frame - Phase')
xlabel('Time (ms)')
ylabel('Phase (rad)')

Figure contains 2 axes objects. Axes object 1 with title GSM Uplink TDMA Frame - Amplitude, xlabel Time (ms), ylabel Amplitude contains an object of type line. Axes object 2 with title GSM Uplink TDMA Frame - Phase, xlabel Time (ms), ylabel Phase (rad) contains an object of type line.

フレームのスペクトログラムをプロットします。次のプロットは、FB によってタイム スロット 0 がシングル トーンになっていることを示しています。

figure
spectrogram(x,500,[],[],Rs,'centered')
title('GSM Uplink TDMA Frame - Spectrogram')

Figure contains an axes object. The axes object with title GSM Uplink TDMA Frame - Spectrogram, xlabel Frequency (MHz), ylabel Time (ms) contains an object of type image.

マルチフレーム構造の生成

はじめにの節の図に示すように、51 フレームのマルチフレーム構造を作成します。指定されたバースト構成で 3 つの gsmDownlinkConfig オブジェクトを作成します。51 フレームのマルチフレームを組み立てるには、最初と 2 番目の gsmDownlinkConfig オブジェクトを 1 回使用し、以降の 49 個のフレームでは 3 番目の gsmDownlinkConfig オブジェクトを繰り返します。マルチフレーム構造を 3 回繰り返します。

cfg1 = gsmDownlinkConfig('BurstType',["FB" "NB" "NB" "NB" "NB" "Dummy" "NB" "NB"]);
cfg2 = gsmDownlinkConfig('BurstType',["SB" "NB" "NB" "NB" "NB" "Dummy" "NB" "NB"]);
cfg3 = gsmDownlinkConfig('BurstType',["NB" "NB" "NB" "NB" "NB" "Dummy" "NB" "NB"]);
wfInfo = gsmInfo(cfg); 
frameLength = wfInfo.FrameLengthInSamples;
x = zeros(frameLength*51*3,1);
for p=1:3
    x1 = gsmFrame(cfg1);
    x2 = gsmFrame(cfg2);
    x3 = gsmFrame(cfg3,49);
    x((p-1)*frameLength*51+1:p*frameLength*51) = [x1;x2;x3];
end

パワー制御と伝播損失の影響のシミュレーション

各ユーザーのパワー制御と一意の伝播損失によって、フレーム内の各タイム スロットのパワーが異なることがあります。タイム スロット 0、3、および 7 のパワー減衰をそれぞれ 2 dB、6 dB、および 10 dB に設定します。

cfg = gsmUplinkConfig;
cfg.Attenuation([0 3 7] +1) = [2 6 10]
cfg = 
  gsmUplinkConfig with properties:

           BurstType: [NB    NB    NB    NB    NB    NB    NB    NB]
    SamplesPerSymbol: 16
                 TSC: [0 1 2 3 4 5 6 7]
         Attenuation: [2 0 0 6 0 0 0 10]
            RiseTime: 2
           RiseDelay: 0
            FallTime: 2
           FallDelay: 0

x = gsmFrame(cfg);
wfInfo = gsmInfo(cfg);
Rs = wfInfo.SampleRate;
t = (0:length(x) - 1)/Rs*1e3;
plot(t, 20*log10(abs(x)))
axis([0 5 -20 5])
grid on
title('GSM Uplink TDMA Frame Power')
xlabel('Time (ms)')
ylabel('Power (dB)')

Figure contains an axes object. The axes object with title GSM Uplink TDMA Frame Power, xlabel Time (ms), ylabel Power (dB) contains an object of type line.

立ち上がりと立ち下がりの動作の調整

GSM バーストの立ち上がりと立ち下がりは、保護期間 [2] の間に行わなければなりません。関数 gsmFrame は、バーストの立ち上がり特性と立ち下がり特性を正弦波として実装します。バーストは、RiseTime プロパティ値によって指定されたシンボル区間数で、0 から最大限の振幅に立ち上がります。RiseTime の分解能は 1/Nsps です。ここで、NspsgsmDownlinkConfig オブジェクトの SamplesPerSymbol プロパティ値を表します。

バーストの立ち上がり特性を調整します。SamplesPerFrame が 16 であるため、シンボル区間の分解能を 0.0625 にして RiseTime を指定できます。RiseTime を 3.125 シンボルの区間に設定します。

cfg = gsmDownlinkConfig;
cfg.RiseTime = 3.125;

関数 gsmCheckTimeMask を使用して、立ち上がり時間特性を可視化し、GSM 仕様の範囲内にあるかを確認します。

gsmCheckTimeMask(cfg)

Figure contains an axes object. The axes object with title Transmitted Power Level Versus Time (TN=0), xlabel Time ( mu sec), ylabel Power (dB) contains 5 objects of type line, patch.

RiseDelay-1.5 に設定して、立ち上がり時間の開始を 1.5 シンボルだけ左に移動します。RiseDelay0 の場合、バーストの有効部分の開始時にバーストが最大限の振幅に到達します。

cfg.RiseDelay = -1.5;
gsmCheckTimeMask(cfg)

Figure contains an axes object. The axes object with title Transmitted Power Level Versus Time (TN=0), xlabel Time ( mu sec), ylabel Power (dB) contains 5 objects of type line, patch.

バーストは、立ち下がりの Time プロパティによって指定されたシンボル区間数で、最大限の振幅から 0 に立ち下がります。FallTime の分解能は 1/Nsps です。ここで、NspsgsmDownlinkConfig オブジェクトの SamplesPerSymbol プロパティ値を表します。FallTime を 2.75 シンボルの区間に設定します。

FallDelay0.25 に設定して、立ち下がり時間の開始を 0.25 シンボルだけ右に移動します。立ち下がりの Delay0 の場合、バーストの有効部分の終了時にバーストが最大限の振幅からの立ち下がりを開始します。

cfg = gsmDownlinkConfig;
cfg.FallTime = 2.75;
cfg.FallDelay = 0.25;
gsmCheckTimeMask(cfg)

Figure contains an axes object. The axes object with title Transmitted Power Level Versus Time (TN=0), xlabel Time ( mu sec), ylabel Power (dB) contains 5 objects of type line, patch.

参考文献

[1] 3GPP TS 45.001. "GSM/EDGE Physical layer on the radio path. General description." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[2] 3GPP TS 45.002, "GSM/EDGE Multiplexing and multiple access on the radio path." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network

[3] 3GPP TS 45.004, "GSM/EDGE Modulation." General description." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network

補助関数

normalBurstDescription

この関数は、ノーマル バースト フィールドに関する情報が表示されるようにテーブルの形式を設定します。

function d = normalBurstDescription()
BitNumber = ["0 - 2";"3 - 60";"61 - 86";...
    "87 - 144";"145 - 147";"148 - 156"];
LengthOfField = {3;58;26;58;3;8.25};
ContentsOfField = [...
    "tail bits";...
    "encrypted bits";...
    "training sequence bits";...
    "encrypted bits";...
    "tail bits";...
    "guard period (bits)"...
    ];
d = table(BitNumber,LengthOfField,ContentsOfField);
end

frequencyCorrectionBurstDescription

この関数は、周波数補正バースト フィールドに関する情報が表示されるようにテーブルの形式を設定します。

function d = frequencyCorrectionBurstDescription()
BitNumber = ["0 - 2";"3 - 144";"145 - 147";"148 - 156"];
LengthOfField = {3;142;3;8.25};
ContentsOfField = [...
    "tail bits";...
    "fixed bits";...
    "tail bits";...
    "guard period (bits)"...
    ];
d = table(BitNumber,LengthOfField,ContentsOfField);
end

synchronizationBurstDescription

この関数は、同期バースト フィールドに関する情報が表示されるようにテーブルの形式を設定します。

function d = synchronizationBurstDescription()
BitNumber = ["0 - 2";"3 - 41";"42 - 105";...
    "106 - 144";"145 - 147";"148 - 156"];
LengthOfField = {3;39;64;39;3;8.25};
ContentsOfField = [...
    "tail bits";...
    "encrypted bits";...
    "extended training sequence bits";...
    "encrypted bits";...
    "tail bits";...
    "guard period (bits)"...
    ];
d = table(BitNumber,LengthOfField,ContentsOfField);
end

dummyBurstDescription

この関数は、ダミー バースト フィールドに関する情報が表示されるようにテーブルの形式を設定します。

function d = dummyBurstDescription()
BitNumber = ["0 - 2";"3 - 144";"145 - 147";"148 - 156"];
LengthOfField = {3;142;3;8.25};
ContentsOfField = [...
    "tail bits";...
    "mixed bits";...
    "tail bits";...
    "guard period (bits)"...
    ];
d = table(BitNumber,LengthOfField,ContentsOfField);
end

accessBurstDescription

この関数は、アクセス バースト フィールドに関する情報が表示されるようにテーブルの形式を設定します。

function d = accessBurstDescription()
BitNumber = ["0 - 7";"8 - 48";"49 - 84";...
    "85 - 87";"88 - 156"];
LengthOfField = {8;41;36;3;68.25};
ContentsOfField = [...
    "extended tail bits";...
    "synch. sequence bits";...
    "encrypted bits";...
    "tail bits";...
    "guard period (bits)"...
    ];
d = table(BitNumber,LengthOfField,ContentsOfField);
end