Скачиваний:
12
Добавлен:
25.06.2023
Размер:
592.86 Кб
Скачать

ГУАП

КАФЕДРА №82

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ассистент

 

 

 

Н.В. Апанасенко

 

 

 

 

 

 

 

 

 

должность, уч. степень, звание

 

подпись, дата

 

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2

АНАЛИЗ СИСТЕМЫ МНОЖЕСТВЕННОГО ДОСТУПА С ТОПОЛОГИЕЙ ТИПА ЗВЕЗДА

по курсу: МОДЕЛИРОВАНИЕ СИСТЕМ РАСПРЕДЕЛЕНИЯ РЕСУРСОВ

РАБОТУ ВЫПОЛНИЛ СТУДЕНТ ГР. №

подпись, дата

 

инициалы, фамилия

Санкт-Петербург 2023

Цель работы

Получение навыков моделирования стандартных сценариев работы телекоммуникационных систем с топологией типа «звезда». Изучение свойств алгоритмов планирования ресурсов нисходящего кадра в подобных системах. Изучение стратегий распределения ресурсных блоков в централизованной сети со случайным трафиком

Индивидуальный вариант задания

Индивидуальный вариант номер 9 в соответствии с таблицей 1.

Таблица 1 – Индивидуальный вариант задания

Модель

R, м

Мощность,

Частота,

kn

распространения

PTX, Вт

f0, МГц

 

 

 

9

ITU, commercial area

40

0.05

4000

4

 

 

 

 

 

 

Ход работы

1.Пример расчета параметров моделируемой системы

1.1.Расчет мощности теплового шума

= 180 106Гц 300 1.38 10−23Дж/К 4 = 2.98 10−12Вт

1.2.Расчет уровня потерь в канале связи (для конкретных абонентов)

Для нашей модели Indoor Propagation Model (ITU):

Возьмем средние высоты для высот базовой станции и точки приема: hБС = 100 м, hRX = 5 м.

= 20 lg(4000МГц) + 29 lg(20) + 2.98 10−12 − 28 = 2.5 104 = 81.7дБ

= 1081.7/10 = 1.4 108

2

1.3.Расчет мощности сигнала, принятого абонентом

0.05Вт= 1.4 108 ≈ 3,57 10−10Вт

1.4.Расчет отношение сигнал/шум

3,57 10−10Вт= 2.98 10−12Вт = 119.8

1.5.Расчет пропускной способности канала связи

С= 180 106Гц log2(1 + 119.8) = 1244Мбит/с

2.Пример сгенерированных расположений абонентов

Построили график случайного расположения абонентских приемных устройств относительно базовой станции для 64 абонентов в соответствии с рисунком

Рисунок 1 - Случайное расположение абонентских станций На рисунке 1 видно, абонентские станции распределены равномерно по площади

относительно базовой станции – это означает что генерации из расположения в программе работает корректно.

3

3.Описание разработанной программы

Список использованных переменных в соответствии с таблицей 2.

 

Таблица 1 – Таблица использованных переменных

 

 

Название

Описание

R

Радиус действия базовой станции в км

Ptx

Мощность излучения базовой станции

f0

Частота излучения базовой станции

f

Полоза пропускания канала связи

kn

Коэффициент теплового шума приемника

T

Абсолютная температура

h_bs

Высота базовой станции

h_rx

Высота точки приема

Pn

Рассчитанная на основе параметров варианта мощность теплового

 

шума

buffer_grade

Pandas.DataFrame с агрегированными результатами измерений объема

 

буфера для различных значений интенсивности входного потока и

 

различном кол-ве АБ в системе

subs_list

Список значений кол-ва моделируемых АБ

lambd_step

Шиг изменения значения интенсивности

lambd_start

Начальное значение интенсивности

lambd_end

Конечное значение интенсивности

slot_cnt

Кол-во моделируемых слотов для каждой итерации цикла с

 

различными параметрами интенсивности входного потока и кол-ва АБ

T_rb

Длительность одного слота в секундах

Полный листинг программы с комментариями в Приложении А.

4

4.Результат моделирования

Построили график на основе агрегированных измерений для количества пользователей 2, 4, 8 и 16 в моделируемой системе, полученных на основе данных,

сгенерированных написанной нами программой.

Построили график зависимости среднего объема буфера системы от интенсивности входного потока соответствии с рисунком 2.

Рисунок 2 – График зависимости сред. суммарного объёма данных в буфере от инт. входного потока

Так же построили график для оптимизированного варианта алгоритма в соответствии с рисунком 3.

Рисунок 3 – График зависимости сред. суммарного объёма данных в буфере от инт. входного потока для оптимизированного алгоритма

5

Оптимизация заключалась в изменении алгоритма выделения слотов абонентам

(АБ). В оптимизированной версии слоты выделялись АБ с непустым буфером, так уменьшается время простоя системы. Результат оптимизации заметем, но не столь велик какого можно добиться применяя алгоритмы распределения ресурсов с учетом пропускных способностей. Оптимизация работы с буфером позволила несколько повысить порог, после которого буфер начинает увеличиваться, что позволяет алгоритмы быть более нагрузоустойчивым.

Изучив полученный график легко, можно заметить следующую закономерность,

которая вырежется в отличии пороговых значений интенсивности входного потока, при которых размер буфера системы начинает бесконечно расти. Соотнеся эти значения с количеством абонентов сразу видна зависимость – чем больше пользователей в системе,

тем меньшую интенсивность входного потока система может выдержать. Например, для 16

пользователей буфер начинает расти уже при интенсивности в 20, а для 4 это значение уже на порядок выше и приближается к 100.

Данный график, полученный на основе созданной модели, позволяет прогнозировать оптимальное количество пользователей для систем с разными интенсивностями входных потоков.

6

Вывод

В ходе данной лабораторной работы мы освоили моделировании стандартных сценариев работы телекоммуникационных систем с топологией типа «звезда». Изучили свойства алгоритмов планирования ресурсов нисходящего кадра в подобных системах.

Изучили стратегии распределения ресурсных блоков в централизованной сети со случайным трафиком.

Смоделированная нами модель позволили нам собрать данные о объеме буфера для разных значений интенсивности входного потока при моделировании работы системы распределения ресурсов. Полученные данные мы агрегировали и получили средние значения для каждого из исследуемых количеств пользователей для разных значений интенсивности. По агрегированным данным построили график и проанализировали его.

При анализе выявили достаточно логичную закономерность, которая эмпирически была нами доказанна. Наблюдения показали, что для разных количеств пользователей пороговое значение, после которого буфер начинает бесконечно расти различно, и чем больше пользователей в системе, тем меньшую нагрузку входного потока она сможет обработать без переполнения буфера.

7

Приложение А. Листинг программы

import numpy as np import pandas as pd

from matplotlib import pyplot as plt

def subs_generator(subs_cnt, slot_cnt, R, f0, Ptx, DF, Pn, T_rb):

'''Генерация пропускных способностей для всех абанентов в каждом моделируемом слоте'''

#Таблицы с пропускными способностями абонентов для каждого слота subs = pd.DataFrame(columns=range(slot_cnt))

#Список растояний до АБ

sub_distans = np.sqrt(np.random.uniform(0, R ** 2, subs_cnt))

# Список случайных затуханий сигнала

L_list = 10 ** ((20 * np.log10(f0) + 29 * np.log10(sub_distans) + 0 - 28)

/10)

#Цикл по пользователям

for sub_idx, L in enumerate(L_list):

# Расчеты

для slot_cnt слотов

 

 

Prx = Ptx

/

(L + np.random.normal(0, 1, slot_cnt))

#

Расчёт мощности

SNR = Prx

/

Pn

#

Сигнал/шум

CC = DF *

np.log2(1 + SNR) # Макс пропускная способность канала связи

#Запись расчитанных объемов сообщения которое

#может быть переданно из буфера на АБ за слот subs.loc['sub_' + str(sub_idx)] = CC * T_rb

return subs

def get_slot_sub_idx(slot_idx, subs_cnt, is_optimized = False, sub_idx = -1, current_buffer = [], ):

'''Возвращает индекс АБ которому принадлежит слот для (не)оптимизированного алгоритмов'''

# Для неоптимизированного возвращает

if not is_optimized: return slot_idx % subs_cnt

#Обновлениие индекса текущего Аб

#Обеспечивает поочередное обслуживание всех абонентов, когда буфер заполнен у нескольких.

sub_idx = (sub_idx + 1) % subs_cnt

#Присок АБ с заполненным буфером

sub_with_full_buffer = [i % subs_cnt for i in range(sub_idx, sub_idx + subs_cnt) if current_buffer[i % subs_cnt] != 0]

if sub_with_full_buffer:

# Берем первого

return sub_with_full_buffer[0] else:

return sub_idx

def get_mean_buffer_score(subs, p, V, T_rb = 1, is_optimized = False):

'''Возвращает оценку среднего объема буффера'''

subs_cnt = len(subs.index) # Кол-во пользователей slot_cnt = len(subs.columns) # Кол-во слотов

# Список генерация пакетов входящего потока

8

packs = pd.DataFrame(columns=subs.columns, data=[(np.random.geometric(p,

size = slot_cnt) - 1) * V for _ in

range(subs_cnt)])

# print('packs', packs)

#

ОТЛАДОЧНАЯ ПЕЧАТЬ

# Записываем пакеты пришедшие в первом слоте в буффер buffer = [packs[0].tolist()]

sub_idx = 0 # Индекс текущего аб, которому принадлежит слот

for slot_idx in range(1, slot_cnt):

# Получаем номер абонента которому принадлежит слот

sub_idx = get_slot_sub_idx(slot_idx, subs_cnt, is_optimized, sub_idx, buffer[-1])

# Расчет нового буффера для текущего слота buffer.append(buffer[-1].copy()) # Копируем буфер прошлого слота

# Уменьшаем буфер на объем передоваемого АБ сообщения buffer[-1][sub_idx] = max(0, buffer[-1][sub_idx] -

subs[slot_idx][sub_idx])

# Увеличение буфера на обем пакетов генерируемых входным потоком buffer[-1] = [sub_buf + sub_pac for sub_buf, sub_pac in zip(buffer[-

1], packs[slot_idx])]

# Рассчет среднего суммарного буффера слотов

return np.mean([sum(slot_buffer) for slot_buffer in buffer])

def start_model():

#===============================================

#Общие пораметры моделий

subs_list = [2, 4, 8, 16]#[8, 16, 64] # Список кол-ва АБ

lambd_start = 1

 

 

lambd_end

 

= 140

#

 

lambd_step

= 5

# Шаг

изменения

slot_cnt =

10**4

#

Кол-во моделируемых слотов

T_rb

=

5 * 10**-4

#

Длительность слота

T

=

300

#

Абсолютная температура

V

 

= 1 * 1024 *

8

# Объем данных содержащихся в одном пакете

равеный 1 кбайт

is_optimized = False # Оптимизированная обработка буффера или нет

#===============================================

#Параметры варианта

#-----------------------------------------------

#ITU, commercial area

R

= 40

# Радиус

Ptx

= 0.05

# Мощность излучения БС

f0

=

4000

#

Частота БС

kn

=

4

#

Коэф. теплового шума приёмника

DF = 180 * 10**3 # Полоса пропускания канала связи k = 1.38 * 10**-23 # Постоянная Больцмана

Pn = DF * T * k * kn # Мощность теплового шума

#===============================================

#Интенсивность входного потока (Пакетов/сек)

lambd_list = np.arange(lambd_start, lambd_end, lambd_step)

# Параметр p геометрического распределения

9

p_list

= 1 /

(lambd_list * T_rb + 1)

# Цикл

по кол-ву

АБ

for subs_cnt in subs_list:

#

Генерация расположения АБ

subs =

subs_generator(subs_cnt, slot_cnt, R, f0, Ptx, DF, Pn, T_rb)

#

print('subs',

subs)

# ОТЛАДОЧНАЯ ПЕЧАТЬ

buffer_score

= []

 

for p,

lambd

in

zip(p_list, lambd_list):

buffer_score.append(get_mean_buffer_score(subs, p, V, T_rb, is_optimized) / 8192)

print('subs_cnt = ', subs_cnt, ', lambd = ', lambd, ', buffer_score

=', buffer_score[-1], sep='')

#Добавляем линию на график

plt.plot(lambd_list, buffer_score, marker='o', label = subs_cnt)

# Построение графика

plt.xlabel('Интенсивность входного потока (пакетов/сек)') plt.ylabel('Средн. суммарный объём данных в буфере (Кбайт)') plt.legend()

plt.grid()

plt.show() return 0

if __name__ == "__main__": start_model()

10

Соседние файлы в папке ЛР2