- •Цель работы
- •Вариант задания
- •Базовая теория
- •Случайное расположение абонентов
- •Генерация возможных скоростей передачи
- •Формирование пуассоновской случайной величины
- •Расчет значений приоритета пользователей
- •Расчет средней скорости загрузки
- •Расчет среднего суммарного объема
- •Построение графиков
- •Список используемых источников
Генерация возможных скоростей передачи
Объем данных, который может быть передан -ому абоненту в -ом ресурсном блоке -ого слота:
где .
- максимальная пропускная способность у -ого АБ в -ом ресурсном блоке -ого слота. Данное значение определяется по формуле:
где . Из данной формулы необходимо найти . Данное значение вычисляется по формуле:
где Формула для подсчета величины выглядит следующим образом:
Во всех вышеприведённых формулах известны следующие значения:
* – полоса пропускания канала связи БС;
* – абсолютная температура;
* – постоянная Больцмана;
* – коэффициент теплового шума приёмника;
* – мощность излучения БС.
Для созданных расстояний до АБ необходимо найти степень затухания сигнала . Она определяется по формуле:
где
– среднее затухание в канале от БС до -ого АБ найденное при помощи модели Окамура-Хата. Формула выглядит следующим образом:
В данной формуле изначально даны следующие параметры:
* – частота сигнала;
* – параметр, зависящий от среды распространения (small city = 0, large city = 3);
* - высота БС;
* - высота точки приёма;
Величина высчитывается как:
В таблице 2 приведен список используемых переменных, а в листинге 2 – программный код разработанного алгоритма.
Таблица 1. Список используемых переменных
Название |
Тип |
Описание |
Distance |
Массив |
Сгенерированное расстояние до БС |
Lg_l |
Массив |
Потери сигнала выраженные в дБ |
L |
Массив |
Потери сигнала выраженные в разы |
P_rx |
Массив |
Принятая мощность сигнала от БС |
P_n |
Дробный |
Мощность теплового шума |
SNR |
Массив |
Отношение сигнал-шум |
C |
Массив |
Максимальная пропускная способность |
Slots_amount |
Целочисленный |
Количество слотов |
tau |
Дробный |
Длительность одного слота |
subs |
Датафрейм |
Пропускные способности абонентов |
Листинг 2. Программа создания пропускных способностей
def generate_subs(distance: list, slots_amount: int, tau: float) -> pd.DataFrame: """Функция генерации возможных скоростей для каждого абонента в каждом временном слоте
Parameters ---------- distance : list Массив созданных расстояний АБ slots_amount : int Количество слотов внутри сигнала передачи tau : float Время одного слота
Returns ------- pd.DataFrame Датафрейм возможных пропускных способностей каналов каждого пользователя """ # Подсчитываем величину a(h_rx) alpha_h_rx = (1.1 * np.log10(f_0) - 0.7) * h_rx - (1.56 * np.log10(f_0) - 0.8)
# Потери мощности сигнала (lg(L)) lg_l = ( 46.3 + 33.9 * np.log10(f_0) - 13.82 * np.log10(h_bs) - alpha_h_rx + (44.9 - 6.55 * np.log10(h_rx)) * np.log10(distance) + S ) / 10
# Потери мощности сигнала (L) L = 10 ** (lg_l)
# Случайное затухание сигнала L = L + np.random.normal(loc=0, scale=1, size=len(L))
# Принятая мощность сигнала (P_rx) (Вт) P_rx = P_tx / L
# Мощность теплового шума (P_n) (Вт) P_n = delta_f * T * k * k_n
# Соотношение сигнал/шум (SNR) SNR = P_rx / P_n
# Максимальная пропускная способность канала (кбит/с) C = (delta_f * np.log2(1 + SNR)) / 8192
# Создаём и заполняем датафрейм subs = pd.DataFrame(columns=range(slots_amount)) for sub_i, C_i in enumerate(C): subs.loc[f"sub_{sub_i}"] = C_i * tau return subs |
После запуска данной программы на выходе получаются датафрейм, вид которого представлен на рисунке 3.
Рисунок 3 – Пропускные способности абонентов