ЛР2 / МСРР ЛР2
.pdfГУАП
КАФЕДРА №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