このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
波形生成のための 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 spectrogram(x,500,[],[],Rs,'centered') title('GSM Uplink TDMA Frame - Spectrogram')
単一のダウンリンク フレームの生成
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)')
フレームのスペクトログラムをプロットします。次のプロットは、FB によってタイム スロット 0 がシングル トーンになっていることを示しています。
figure spectrogram(x,500,[],[],Rs,'centered') title('GSM Uplink TDMA Frame - Spectrogram')
マルチフレーム構造の生成
はじめにの節の図に示すように、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)')
立ち上がりと立ち下がりの動作の調整
GSM バーストの立ち上がりと立ち下がりは、保護期間 [2] の間に行わなければなりません。関数 gsmFrame
は、バーストの立ち上がり特性と立ち下がり特性を正弦波として実装します。バーストは、RiseTime
プロパティ値によって指定されたシンボル区間数で、0 から最大限の振幅に立ち上がります。RiseTime
の分解能は 1/ です。ここで、 は gsmDownlinkConfig
オブジェクトの SamplesPerSymbol
プロパティ値を表します。
バーストの立ち上がり特性を調整します。SamplesPerFrame
が 16 であるため、シンボル区間の分解能を 0.0625 にして RiseTime
を指定できます。RiseTime
を 3.125 シンボルの区間に設定します。
cfg = gsmDownlinkConfig; cfg.RiseTime = 3.125;
関数 gsmCheckTimeMask
を使用して、立ち上がり時間特性を可視化し、GSM 仕様の範囲内にあるかを確認します。
gsmCheckTimeMask(cfg)
RiseDelay
を -1.5
に設定して、立ち上がり時間の開始を 1.5 シンボルだけ左に移動します。RiseDelay
が 0
の場合、バーストの有効部分の開始時にバーストが最大限の振幅に到達します。
cfg.RiseDelay = -1.5; gsmCheckTimeMask(cfg)
バーストは、立ち下がりの Time
プロパティによって指定されたシンボル区間数で、最大限の振幅から 0 に立ち下がります。FallTime
の分解能は 1/ です。ここで、 は gsmDownlinkConfig
オブジェクトの SamplesPerSymbol
プロパティ値を表します。FallTime
を 2.75 シンボルの区間に設定します。
FallDelay
を 0.25
に設定して、立ち下がり時間の開始を 0.25 シンボルだけ右に移動します。立ち下がりの Delay
が 0
の場合、バーストの有効部分の終了時にバーストが最大限の振幅からの立ち下がりを開始します。
cfg = gsmDownlinkConfig; cfg.FallTime = 2.75; cfg.FallDelay = 0.25; gsmCheckTimeMask(cfg)
参考文献
[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