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

ГУАП

КАФЕДРА №82

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

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

ассистент

 

 

 

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

 

 

 

 

 

 

 

 

 

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

 

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

 

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

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

СТРАТЕГИИ РАСПРЕДЕЛЕНИЯ РЕСУРСНЫХ БЛОКОВ В ЦЕНТРАЛИЗОВАННОЙ СЕТИ СО СЛУЧАЙНЫМ ТРАФИКОМ

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

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

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

 

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

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

Цель работы

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

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

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

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

Модель

R, м

Мощность,

Частота,

kn

NRB

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

PTX, Вт

f0, МГц

 

 

 

 

9

Окумура-Хата,

2000

40

900

4

25

small city

 

 

 

 

 

 

Ход работы

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

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

= 3 106Гц 300 1.38 10−23Дж/К 4 = 4.97 10−14Вт

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

Для нашей модели Окамура-Хаты:

Для нашего варианта “small city” (маленький город) S = 0.

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

( ) = (1.1 lg(900МГц) − 0.7) 5м − (1.56 lg(900МГц) − 0.8) = 8.94

2

= 46.3 + 33.9 lg(900МГц) − 13.82 lg(100км) − 8.94

+[44.9 − 6.55 lg(5км)] lg(1км) + 0 = 109.9дБ

= 10230.8/10 = 9.7 1010

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

40Вт= 9.7 1010 ≈ 4,12 10−10Вт

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

4,12 10−10Вт= 4.97 10−14Вт = 8.3 103

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

С= 3 106Гц log2(1 + 8.3 103) = 39Мбит/с

2.Анализируемые алгоритмы распределения ресурсов

2.1.Equal blind

Данный алгоритм обеспечивает равные скорости между всеми абонентами. Доля ресурса времени, выделяемая каждому абоненту (выравнивает скорость)

 

 

 

 

 

−1

 

 

 

1

 

 

 

=

(∑ −1)

 

 

 

 

 

 

 

 

 

 

 

 

 

=1

 

 

 

 

 

 

Скорость для абонента i может быть выражена как:

 

 

−1

 

 

 

 

 

 

 

 

 

 

1

 

= (∑ −1)

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

+

1

+. . . +

1

 

=1

 

 

 

 

 

 

 

 

 

1

 

2

 

 

2.2.Maximum Throughput

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

3

x = arg max C

 

 

 

 

 

i

x

=1

 

 

 

i

 

 

i

 

 

 

=1

 

 

 

 

 

 

2.3.Proportion Fair

Данный алгоритм выделяет равные доли ресурсов всем абонентам. Доля ресурса времени, выделяемая каждому абоненту, находится как:

 

 

1

 

 

 

 

 

 

=

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Суммарная скорость:

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

= ∑ = ∑ =

 

 

 

 

 

 

 

 

 

 

=1

=1

 

 

=1

 

 

 

 

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

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

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

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

4

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

Список использованных переменных в соответствии с таблицей 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

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

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

Приложением Б.

5

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

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

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

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

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

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

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

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

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

Исследовав графики, построенные для разных алгоритмов и сравнив их друг с другом заметно что алгоритм Maximum Throughput справляется чуть лучше, данное поведение связанно с тем, что приоритет отдается АБ с наибольшей пропускной способностью что позволяет передавать больший объем сообщений за тоже время.

Алгоритмы Equal blind и Proportion Fair показывают очень близкие результаты оценок Данный график, полученный на основе созданной модели, позволяет

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

6

Вывод

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

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

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

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

ипроанализировали его. При анализе выявили достаточно логичную закономерность,

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

в сравнении с алгоритмами Equal blind и Proportion Fair, данное поведение связано с тем что первый алгоритм отдает предпочтение АБ с наибольшей пропускной способностью, что позволяет передавать ему больший объем сообщений, два других алгоритма распределяют ресурсы между АБ равномерно в следствии чего средняя пропускная способность у них оказывается ниже.

7

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

import numpy as np import pandas as pd

from matplotlib import pyplot as plt

from config import const_var

def get_corrected_distance(distance, base_station_height, sub_station_height):

'''Возвращает дистанцию от БС до АБ с учетом высот и расстояния между ними'''

return (distance**2 + abs(base_station_height - sub_station_height)**2)**.5

def subs_generator(subs_cnt):

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

моделируемом

слоте'''

 

slot_cnt

= const_var.get("slot_cnt")

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

R

= const_var.get("R")

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

f0

= const_var.get("f0")

# Частота БС

Ptx

= const_var.get("Ptx")

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

DF

= const_var.get("DF")

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

Pn

= const_var.get("Pn")

# Мощность теплового шума

T_rb

= const_var.get("T_rb")

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

h_bs

= const_var.get("h_bs")

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

h_rx

= const_var.get("h_rx")

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

S

= const_var.get("S")

# small city (S = 0) / large city

(S = 3)

 

 

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

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

sub_distans = [get_corrected_distance(dist, h_bs, h_rx) / 1000 for dist in np.sqrt(np.random.uniform(0, R ** 2, subs_cnt))]

#print(sub_distans)

#Список случайных затуханий сигнала по модели Indoor Propagation Model

(ITU)

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

/10)

#Список случайных затуханий сигнала по модели Окамура-Хаты

a =

(1.1 * np.log10(f0) - 0.7)

* h_rx - (1.56 * np.log10(f0) - 0.8)

L_list = 10**((46.3 + 33.9 * np.log10(f0) - 13.82 * np.log10(h_bs) - a +

(44.9 -

6.55 * np.log10(h_rx)) * np.log10(sub_distans) + S) / 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

8

def get_R_mean(slot_resource_blocks,

subs, sub_idx, slot_idx):

'''Возвращает среднюю скорость с

которой АБ скачивал данные'''

cd_slot_cnt = const_var.get("cooldown_slot_count")

# Кол-во слотов

перерасчета, средней скорости

 

 

Nrb = const_var.get("Nrb") # Кол-во ресурсных блоков

 

#Объём данных, который передан абоненту sub_idx packs_sum = 0

#Цикл по слотам

for slot_idx in range(max(0, slot_idx - 1 - cd_slot_cnt), slot_idx):

#Кол-во ресурсных блоков в слоте slot_idx, которые пренадлежат АБ с индексом sub_idx

sub_slot_res_block_cnt = 0

#Цикл по ресурсным блокам

for res_sub_idx in slot_resource_blocks[slot_idx]:

# Проверка принадлежности ресурсного блока в слоте АБ sub_idx if res_sub_idx == sub_idx:

sub_slot_res_block_cnt += 1

# Находим объём данных, который передан абоненту sub_idx в ресурсных блоках в слоте slot_idx

packs_sum += subs[slot_idx][sub_idx] * sub_slot_res_block_cnt return packs_sum / cd_slot_cnt

def get_R_mean_smoothing_filter(slot_resource_blocks, subs, sub_idx, slot_idx, sub_R_mean_list):

'''Возвращает среднюю скорость с которой АБ скачивал данные методом

сглаживающего фильтра'''

 

 

 

 

 

 

cd_slot_cnt = const_var.get("cooldown_slot_count")

#

Кол-во слотов

перерасчета, средней скорости

 

 

 

 

 

 

T_rb = const_var.get("T_rb")

 

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

 

betta

 

= 1 / cd_slot_cnt

# Параметр сглаживающего фильтра

 

 

return

(1

-

betta)

*

sub_R_mean_list[sub_idx]

+

betta

*

sum([subs[slot_idx][sub_idx] for res_sub_idx in slot_resource_blocks[-1] if res_sub_idx == sub_idx]) / T_rb

def get_sub_index_by_equa_blind(sub_R_mean_list, sub_with_full_buffer):

'''

Возвращает индекс АБ для алгоритма Proportional fair, который обеспечивает равные скорости между всеми абонентами

'''

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

subs_priority = [1 / sub_R_mean if sub_R_mean > 0 else 1 for sub_R_mean in sub_R_mean_list]

#Получаем список отсортированных индексов АБ по приоритету subs_priority_idx = np.argsort(subs_priority)

#Возвращаем список тех у кого не пустой буфер

return [sub_idx for sub_idx in subs_priority_idx if sub_idx in sub_with_full_buffer]

def get_sub_index_by_maximum_throughput(subs_slot_CC, sub_with_full_buffer):

'''

Возвращает индекс АБ для алгоритма Maximum Throughput,

9

который максимизирует суммарную скорость передачи базовой станцией

'''

#Получаем список отсортированных индексов АБ по приоритету subs_priority_idx = np.argsort(subs_slot_CC)

#Возвращаем список тех у кого не пустой буфер

return [sub_idx for sub_idx in subs_priority_idx if sub_idx in sub_with_full_buffer]

def get_sub_index_by_proportional_fair(subs_slot_CC, sub_R_mean_list, sub_with_full_buffer):

'''

Возвращает индекс АБ для алгоритма Proportional fair, который выделяет равные доли ресурсов всем абонентам

'''

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

subs_priority = [sub_slot_CC / (sub_R_mean if sub_R_mean > 0 else 1) for sub_slot_CC, sub_R_mean in zip(subs_slot_CC, sub_R_mean_list)]

#Получаем список отсортированных индексов АБ по приоритету subs_priority_idx = np.argsort(subs_priority)

#Возвращаем список тех у кого не пустой буфер

 

return

[sub_idx for

sub_idx in

subs_priority_idx

if sub_idx in

sub_with_full_buffer]

 

 

 

 

def

get_sub_index(subs_slot_CC,

algorithm,

sub_with_full_buffer,

sub_R_mean_list):

 

 

 

 

 

match algorithm:

 

 

 

 

 

case 'Equal Blind':

 

 

 

 

 

 

return

get_sub_index_by_equa_blind(sub_R_mean_list,

sub_with_full_buffer)

 

 

 

 

 

case 'Maximum Throughput':

 

 

 

 

 

return

get_sub_index_by_maximum_throughput(subs_slot_CC,

sub_with_full_buffer)

 

 

 

 

 

case 'Proportional fair':

 

 

 

 

 

return

get_sub_index_by_proportional_fair(subs_slot_CC,

sub_R_mean_list, sub_with_full_buffer)

 

 

 

 

return 0

 

 

 

 

 

def get_mean_buffer_score(subs, p, algorithm = 'Maximum Throughput'):

 

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

 

 

 

V

= const_var.get("V")

 

# Объем передоваемого

сообщения

 

 

 

 

 

 

Nrb

= const_var.get("Nrb")

 

#

Кол-во ресурсных

блоков

 

 

 

 

 

 

slot_cnt

= const_var.get("slot_cnt")

# Кол-во слотов

 

subs_cnt

= len(subs.index)

 

# Кол-во пользователей

 

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

 

 

 

packs =

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

size = slot_cnt) - 1) * V for _ in range(subs_cnt)])

 

 

 

#

packs

=

pd.DataFrame(columns=subs.columns,

data=[np.random.exponential(1/lambd) * V for _ in range(subs_cnt)])

 

# print('packs', packs)

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

 

 

# Записываем пакеты пришедшие в первом слоте в буффер

10

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