В этом примере показано, как параметризовать и генерировать различные кадры TDMA GSM и многокадровые структуры.
Стандарт GSM [1] определяет кадр TDMA как комбинацию 8 временных интервалов. Каждый временной интервал имеет длительность 3/5200 секунд (около 0,577 мс) и номер временного интервала (TN) от 0 до 7. Кадры GSM используют модуляцию GMSK, где один символ эквивалентен одному биту. Длина каждого временного интервала составляет 156,25 бит. Содержимое временного интервала называется пакетом. Синхронизация передачи пакета в пределах временного интервала определяется в терминах номера бита. Номер бита (BN) относится к конкретному периоду бита в пределах временного интервала. Бит с наименьшим битовым номером передается первым. BN0 - первый битовый период, а BN156 - последний четвертьбитовый период. На этом рисунке показаны временные кадры, временные интервалы и пакеты для системы GSM [1].

TDMA содержит восемь временных интервалов с каждым временным интервалом, разделенным защитным периодом. Каждый временной интервал может переносить только один тип пакета. Доступные типы пакетов: обычный пакет (NB), пакет коррекции частоты (FB), пакет синхронизации (SB), пакет доступа (AB) или фиктивный пакет [2]. Различные типы пакетов и защитный период описаны в следующих разделах.
Обычный пакет состоит из этих битовых полей и может появляться в кадрах восходящей или нисходящей линии связи. Все хвостовые биты равны нулю. На основе заданного кода обучающей последовательности (TSC) поле обучающей последовательности содержит одну из восьми возможных обучающих последовательностей.
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)"
Пакет доступа состоит из этих битовых полей и может появляться только в кадрах восходящей линии связи. Все хвостовые биты равны нулю.
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)"
Пакет коррекции частоты состоит из этих битовых полей и может появляться только в кадрах нисходящей линии связи. Все конечные биты и фиксированные биты равны нулю. Модуляция всех нулей модулятором GMSK приводит к постоянному повороту фазы на -90 градусов для каждой длительности символа. Поэтому этот пакет генерирует немодулированную несущую с положительным сдвигом частоты 1625/24 кГц.
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)"
Пакет синхронизации состоит из этих битовых полей и может появляться только в кадрах нисходящей линии связи. Все хвостовые биты равны нулю.
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)"
Фиктивный пакет пакетов состоит из этих полей битов и может появляться только в кадрах нисходящей линии связи. Все хвостовые биты равны нулю. Смешанные биты содержат заранее определенную последовательность единиц и нулей.
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. Полезная часть заканчивается на полпути BN87 для AB и BN147 для NB, FB, SB и фиктивных пакетов. На этом рисунке показаны полезные и активные части пакета.

Конфигурирование кадра TDMA GSM восходящей линии связи с помощью gsmUplinkConfig объект.
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 кому "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')

Конфигурирование кадра TDMA GSM нисходящей линии связи с помощью gsmDownlinkConfig объект.
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)')

Постройте график спектрограммы кадра. На этом графике показан одиночный тональный сигнал в течение временного интервала 0 из-за FB.
figure spectrogram(x,500,[],[],Rs,'centered') title('GSM Uplink TDMA Frame - Spectrogram')

Создайте многокадровую структуру из 51 кадра, как показано на рисунке в разделе Введение. Создать три gsmDownlinkConfig объекты с указанными конфигурациями пакетов. Для сборки 51-рамного мультикадра используйте первый и второй gsmDownlinkConfig объекты один раз и повторить третий gsmDownlinkConfig объекты для следующих 49 кадров. Повторите многокадровую структуру 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, 6 и 10 дБ соответственно.
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 значение свойства. Разрешение RiseTime является , где представляет SamplesPerSymbol значение свойства gsmDownlinkConfig объект.
Отрегулируйте характеристики нарастания всплесков. С тех пор SamplesPerFrame равно 16, можно указать RiseTime с разрешением длительности символа 0,0625. Набор RiseTime до длительности 3,125 символов.
cfg = gsmDownlinkConfig; cfg.RiseTime = 3.125;
Визуализация и проверка соответствия характеристик времени подъема спецификациям GSM с помощью gsmCheckTimeMask функция.
gsmCheckTimeMask(cfg)

Переместите начало длительности нарастания влево на 1,5 символа, установив значение RiseDelay кому -1.5. Когда RiseDelay является 0, пачка достигает полной амплитуды в начале полезной части пачки.
cfg.RiseDelay = -1.5; gsmCheckTimeMask(cfg)

Пачка уменьшается с полной амплитуды до нуля в количестве длительностей символов, указанных падениемTime собственность. Разрешение FallTime является , где представляет SamplesPerSymbol значение свойства gsmDownlinkConfig объект. Набор FallTime до длительности 2,75 символа.
Переместите начало времени падения вправо на 0,25 длительности символов, установив значение FallDelay кому 0.25. При паденииDelay является 0, пачка начинает уменьшаться от полной амплитуды в конце полезной части пачки.
cfg = gsmDownlinkConfig; cfg.FallTime = 2.75; cfg.FallDelay = 0.25; gsmCheckTimeMask(cfg)

[1] 3GPP TS 45.001. "Физический уровень GSM/EDGE на радиотракте. Общее описание. "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.
[2] 3GPP TS 45,002, «Мультиплексирование GSM/EDGE и множественный доступ по радиотракту». Техническая спецификация на сеть радиодоступа группы
[3] 3GPP TS 45.004, «Модуляция GSM/EDGE». Общее описание. "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы
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