Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4616_МСРР_ПАВЛОВ_ЛР2

.docx
Скачиваний:
63
Добавлен:
20.06.2020
Размер:
80.49 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 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()