4616_МСРР_ПАВЛОВ_ЛР2
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 41
ЛАБОРАТОРНАЯ РАБОТА
ЗАЩИЩЕНА С ОЦЕНКОЙ
РУКОВОДИТЕЛЬ
ассистент |
|
|
|
Н.В. Апанасенко |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №2 |
Анализ системы множественного доступа с топологией типа звезда |
по курсу: Моделирование систем распределения ресурсов |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4616 |
|
|
|
А.В. Павлов |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2020
Цель работы:
Получение навыков моделирования стандартных сценариев работы телекоммуникационных систем с топологией типа «звезда». Изучение свойств алгоритмов планирования ресурсов нисходящего кадра в подобных системах. Изучение стратегий распределения ресурсных блоков в централизованной сети со случайным трафиком
Вариант задания:
Вариант №9.
№ |
Модель распространения |
R, м |
PTX, Вт |
f0, МГц |
Kn |
99 |
ITU, commercial area |
40 |
0.05 |
4000 |
4 |
Пример расчета:
Расчет уровня потерь в канале связи в разах
Расчет мощности сигнала, принятой АБ:
Расчет отношение сигнал/шум:
Расчет пропускную способность канала связи:
Результаты моделирования:
В результате работы программы получились следующий график
Рисунок 1 – График зависимости сред. суммарного объёма данных в буфере от инт. входного потока
Выводы:
В ходе лабораторной программы мы разработали программу моделирующую систему с топологией типа звезда и проанализировали полученный результат.
В итоге можно сделать следующий вывод из графика. Что, когда количество абонентов в сети большое, то падает интенсивность входного потока, тем самым увеличивается буфер и растет ожидание для абонента. Это хорошо видно, если сравнивать график при N=2 и N=64, разница входного потока примерно в 4-6 раз, так для N=2 система хорошо работает при входном потоке до ~20 пакетов в секунду, а для N=64, система до ~5 пакетов в секунду.
Листинг 1 – Код программы
import numpy as np
import matplotlib.pyplot as plt
'''
Вариант 9
Радиус км
Мощность излуч сигнала
Частота
Полоса
КОэфицент
Постоянная Больцмана
Высота базовой станции
Высота точки приема
Температура
'''
R = 40
Ptx = 0.05
F0 = 4000
DF = 180 * 10 ** 3
KN = 4
K = 1.38 * 10 ** (-23)
Hbs = 30
Hrx = 2
S = 0
T = 300
V = 8 * 1024
t = 5*10**-4 #время
def random_user(N):
# Генерация случайных велечин равномерно распределнных на радиусе
length = np.sqrt(np.random.uniform(0, R ** 2, N))
angle = np.random.uniform(0, 2 * np.pi, N)
x = length * np.cos(angle)
y = length * np.sin(angle)
return length
# Рассчет пропускной способности канала связи
def kanal(length):
Pn = DF * T * K * KN
# Модель Окамура–Хаты Модель Окамура–Хаты
L = 10 ** ((20 * np.log10(F0) + 29 * np.log10(length) + 0 - 28 + np.random.normal(0, 1)) / 10)
Prx = Ptx / L # расчёт мощности
SNR = Prx / Pn # сигнал/шум
C = DF * np.log2(SNR) # макс пропускспособность канала связи
return (C*t)
# Обнавление объема буфера для определенного пользв.
def bufferReload(add, buffer, check=False, number=None):
if check:
return [buffer[i] + add[i] for i in range(len(buffer))]
else:
buffer[number] = buffer[number] - add
if buffer[number] <= 0:
buffer[number] = 0
return buffer
def stationDownload(countAB, prop, buffer): # расчет загрузкм
dataSize = [(np.random.geometric(prop) - 1) *
V for user in range(countAB)]
buffer = bufferReload(dataSize, buffer, True)
return buffer
def stationUpload(users, number, buffer): # Обнавление буфера
dataSize = kanal(users)
buffer = bufferReload(dataSize[number], buffer, False, number)
return buffer
# Стартовая функция
def main():
# Кол. абонентов
for countAB in [2, 4, 8, 16]:
buffer_all = [0 for user in range(countAB)] # Создание буфера для каждого абонента
buffer = [0 for user in range(countAB)] # Создание буфера для каждого абонента
users = random_user(countAB) # Генерация расстояний пользователй
avgBuffers = [] # Расчет среднего размера буфера
for lambd in range(1, 100): # Инт. входного потока
buffer_list = [] # Сумарное знач буфера
prob = 1 / (lambd*t + 1) # Вер. успеха
for slot in range(10 ** 2): # Прогон по слотам, поставить 10**5
if not slot: # Если слот первый
buffer = stationDownload(countAB, prob, buffer) # Расчет скачивания
buffer_list += [sum(buffer)]
continue
buffer_all = buffer
buffer_all = stationUpload(users, (slot % countAB), buffer_all) # Обновление буфера
buffer_all = buffer
buffer = stationDownload(countAB, prob, buffer_all) # Расчет скачивания
buffer_list += [sum(buffer)]
avgBuffers += [np.mean(buffer_list)] # расчет среднего
# Рисуем графики
plt.plot(np.linspace(1, 140, 99), avgBuffers,
label='N = {}'.format(countAB))
plt.legend()
#plt.ylim(0, 10 ** 5) # Масшаб графика, включить чтобы было отображение как в примере
plt.grid()
plt.show()
main()