2
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ассистент |
|
|
|
Н.В. Апанасенко |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2 |
АНАЛИЗ СИСТЕМЫ МНОЖЕСТВЕННОГО ДОСТУПА С ТОПОЛОГИЕЙ ТИПА ЗВЕЗДА |
по курсу: МОДЕЛИРОВАНИЕ СИСТЕМЫ РАСПРЕДЕЛНИЯ РЕСУРСОВ |
|
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. № |
4716 |
|
|
|
С.А. Янышева |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2021
Лабораторная работа №2
Анализ системы множественного доступа с топологией типа звезда
Цель лабораторной работы
Получение навыков моделирования стандартных сценариев работы телекоммуникационных систем с топологией типа «звезда». Изучение свойств алгоритмов планирования ресурсов нисходящего кадра в подобных системах. Изучение стратегий распределения ресурсных блоков в централизованной сети со случайным трафиком.
Вариант 18
№ |
Модель распространения |
R, м |
PTX, Вт |
f0, МГц |
kn |
18 |
Окумура-Хата, large city |
1000 |
80 |
1800 |
4 |
Пример расчёта параметров моделируемой системы
Расчет мощности шума
Где – полоса пропускания канала связи, T – абсолютная температура (К), k – постоянная Больцмана , kN – коэффициент теплового шума приемника.
PN = 1.38 * 10-23 Дж/К * 300К * 0.18 * 106 Гц * 4 = 29.8 * 10-16 Вт
Расчет уровня потерь в канале связи (для конкретных АБ)
L – уровень потерь, зависит от частоты, высоты базовой станции, высоты точки приема, расстояние от абонента до базовой станции.
α = (1.1 * lg(1800 * 106) – 0.7) * 2 м – 1.56 * lg(1800 * 106) + 0.8 = 0.04
L = 10(46.3 + 33.9 lg(1800 * 10^6 Гц) – 13.82 * lg(30 м) – α + [44.9 - 6.55 * lg(2 м)] * lg(0.25 км) + 3)/10 = 19.3 * 1010
Расчет мощности сигнала, принятой АБ:
PRX =
Расчет отношение сигнал/шум:
SNR = 0.26 * 106
Расчет пропускную способность канала связи:
Где – полоса пропускания канала связи, – отношение сигнал/шум (Signal-to-Noise Ratio, SNR) у абонента с индексом
С = 0.18 * 106 Гц * log2(1 + 0.26 * 106) = 3.07 Мбит/c
Результаты моделирования
Для каждого абонента, подключенного к БС, выделяется буфер, в который поступают пакеты данных и ожидают отправку на абонентское устройство. Задача БС доставить пакеты данных каждому АБ. Для этого время передачи разделено на равные интервалы – слоты, длительность каждого равна длительности передаваемого сообщения. В рассматриваемой модели длительность сообщений принята равной ,, а полоса частот, выделяемая для каждого абонента кГц.
Рисунок 1 – График зависимости среднего суммарного объёма данных в буфере от интенсивности входного потока
Рисунок 2 – Увеличенный график зависимости среднего суммарного объёма данных в буфере от интенсивности входного потока
Выводы
В ходе выполнения лабораторной работы были получены навыки моделирования стандартных сценариев работы телекоммуникационных систем с топологией типа «звезда». Изучены свойства алгоритмов планирования ресурсов нисходящего кадра в подобных системах и стратегии распределения ресурсных блоков в централизованной сети со случайным трафиком.
Из графиков видно, что чем больше количество абонентов, находящихся в системе тем ниже значение интенсивности входного потока, при котором в буферах у абонентов начинается накапливаться данные, так как БС не успевает их отправлять. Так, например, для 8 абонентов и интенсивностью входного потока больше чем 20 пакетов в секунду система не справляется с передачей данных, в то время, как для 2 абонентов буфер абонентов не перегружается с интенсивность меньше, чем 80 пакетов в секунду.
Листинг программы:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
#---данные из варианта---
r = 2500 #радиус
Ptx = 80 #излучаемая мощность БС
f0 = 1800 #частота БС
kn = 4 #коэф. теплового шума приёмника
f = .18 #полоса пропускания канала связи
delta_f = .18 #полоса ресурсного блока
T = 300 #абсолютная температура
Pn = f *10 ** 6 * T * kn * 1.38 * 10**-23 #мощность теплового шума
slots_num = 10**5 #кол-во слотов
h = 30 #высота БСЫ
h_s = 2 #высота точки приёма
S = 3 #т.к. большой город
blocks = int(f/delta_f) #кол-во ресурсных блоков в слоте
t = 5*10**-4 #время выполнения ресурсного блока
#------------------------
def subs_generator(r, n, Ptx, Pn, f, f0, h, h_s, S, slots_num):
subs = pd.DataFrame(columns=range(slots_num)) #таблицы с пропускными способностями абонентов для каждого слота
for i in range(n):
s_range = r * np.random.random()**.5 #расстояние от БС до текущего АБ
alpha = (1.1*np.log10(f0)-.7)*h_s-(1.56*np.log10(f0)-.8)
L = 10**((46.3 + 33.9*np.log10(f0)-13.82*np.log10(h)-alpha+(44.9-6.55*np.log10(h_s))*\
np.log10((s_range**2+(h-h_s)**2)**.5/1000)+S)/10) #потери
sub_cc = [] #список пропускных способностей АБ
for _ in range(slots_num):
Prx = Ptx/(L + np.random.normal(0, 1)) #уровень потери мощности сигнала
SNR = Prx/Pn #отношение сигнал-шум
CC = f *np.log2(1 + SNR) * 10**3/8 #пропускная способность для текущего АБ (Кбайт/cек)
sub_cc.append(CC)
subs.loc['sub_' + str(i)] = sub_cc
return subs
def pepega_clap(subs, blocks, t, p, n, l):
packs = pd.DataFrame(columns=subs.columns) #количество данных пришедших для каждого АБ в каждом ресурсном блоке
#при генерации отнимаем единицу, т.к. geometric возвращает номер первого успеха
packs = packs.append([np.random.geometric(p, size = packs.shape[1])-1 for sub in subs.index], ignore_index=True)
D = [packs[0].tolist()] #массив, заполненности буфера для каждого АБ для каждого слота
for slot in range(1, subs.shape[1]):# для каждого слота
print('n =', n, 'lmb =', l, '(', slot, '/', slots_num, end=' )\t\r')
pp = slot % n #определяем номер АБ, которому достанентся ресурсный блок
#вычитаем из буфера выбранного АБ кол-во данных равное: пропск. способности * длительность слота
allocated_res = D[-1][:pp] + [max(0, D[-1][pp] - t*subs[slot][pp])] + D[-1][pp+1:]
D.append(allocated_res) #добавляем список с пересчитанным буфером в общий список
#увеличиваем объём данных в буфере для каждого АБ на заранее сгенерированное кол-во пакетов/данных (в Кбайт)
D[-1] = [i+j for i,j in zip(packs[slot],D[-1])]
return np.mean([sum(slot) for slot in D]) #возвращаем среднее суммарное кол-во данных в буфере
subs_num = [2,4,8] #кол-во абонентов
lmb = np.arange(1,101,5) #интенсивность входного потока (Пакетов/сек)
p_list = 1/(lmb*t+1) #рассчитываем p для геометрического распределения
for n in subs_num: #для каждого кол-ва абонентов
subs = subs_generator(r, n, Ptx, Pn, f, f0, h, h_s, S, slots_num) #генерируем пропускные способности АБ
total_D = [] #список средн. суммарн. данных в буфере для текущего колв-ва АБ
for p, l in zip(p_list, lmb): #для каждого p
D_p = pepega_clap(subs, blocks, t, p, n, l) #рассчитываем среднее суммарное кол-во данных в буфере
total_D.append(D_p)
plt.plot(lmb, total_D, marker='o', label = n)
plt.legend()
plt.xlabel('Интенсивность входного потока (пакетов/сек)')
plt.ylabel('Средн. суммарный объём данных в буфере (Кбайт)')
plt.show()