Скачиваний:
1
Добавлен:
27.08.2024
Размер:
6 Кб
Скачать
import random
import math
import numpy as np
import matplotlib.pyplot as plt

DELTA_F = 5 * 10**6
R = 50   # Макс радиус
PTX = 0.1
F0 = 5600
KN = 2
KB = 1.38 * 10**(-23)  # Постоянная Больцмана
T = 300  # Абсолютная температура


def generation_distances(N):
    '''Генерация расстояний от АБ до БС'''
    d = []
    for i in range(N):
        d.append(np.sqrt(random.uniform(1, R**2)))
    return d


def finding_channel_capicity(distances):
    '''Рассчёт макс пропускной способности'''
    Pn = DELTA_F * T * KB * KN  # Мощность теплового шума
    C = []  # пропускная способность
    for i in range(len(distances)):
        loose = (20 * np.log10(F0) + 29 * np.log10(
                distances[i]) - 28)

        L = (10**(loose/10))  # Потеря мощности
        Prx = PTX/L  # Приянтая мощность сигнала
        SNR = Prx/Pn  # Сигнал/шум
        C.append(DELTA_F*math.log2(1+SNR) * 10**(-6))
    return C


def equal_blind(capicity):
    '''Равные скорости между абонентами'''
    promez = 0
    for i in range(len(capicity)):
        promez += 1/capicity[i]
    D = []
    for _ in range(len(capicity)):
        D.append(1/promez)
    return sum(D), min(D), np.mean(D)


def maximum_throughput(capicity):
    '''Макс скорость для ближ абонента'''
    D = []
    max_C = max(capicity)
    for i in range(len(capicity)):
        if capicity[i] == max_C:
            D.append(max_C)
        else:
            D.append(0)
    return sum(D), min(D), np.mean(D)


def proportion_fair(capicity):
    '''Равные доли скорости'''
    D = []
    N = len(capicity)
    for i in range(N):
        D.append(capicity[i]/N)
    return (sum(capicity)/N), min(D), np.mean(D)


def main():
    N = [2**i for i in range(7)]  # Количество пользователей
    # Итоговые значения equal blind
    D_sum_1_final, D_min_1_final, D_mean_1_final = [], [], []
    # Итоговые значения maximum throughput
    D_sum_2_final, D_min_2_final, D_mean_2_final = [], [], []
    # Итоговые значения proportion_fair
    D_sum_3_final, D_min_3_final, D_mean_3_final = [], [], []
    for i in range(len(N)):
        # Промежуточные значения equal_blind
        D_sum_1, D_min_1, D_mean_1 = [], [], []
        # Промежуточные значения maximum throughput
        D_sum_2, D_min_2, D_mean_2 = [], [], []
        # Промежуточные значения proportion_fair
        D_sum_3, D_min_3, D_mean_3 = [], [], []
        for _ in range(101):
            d = generation_distances(N[i])
            C = finding_channel_capicity(d)

            summa, minimal, srednee = equal_blind(C)
            D_sum_1.append(summa)
            D_min_1.append(minimal)
            D_mean_1.append(srednee)

            summa, minimal, srednee = maximum_throughput(C)
            D_sum_2.append(summa)
            D_min_2.append(minimal)
            D_mean_2.append(srednee)

            summa, minimal, srednee = proportion_fair(C)
            D_sum_3.append(summa)
            D_min_3.append(minimal)
            D_mean_3.append(srednee)

        D_sum_1_final.append(np.mean(D_sum_1))
        D_min_1_final.append(np.mean(D_min_1))
        D_mean_1_final.append(np.mean(D_mean_1))

        D_sum_2_final.append(np.mean(D_sum_2))
        D_min_2_final.append(np.mean(D_min_2))
        D_mean_2_final.append(np.mean(D_mean_2))

        D_sum_3_final.append(np.mean(D_sum_3))
        D_min_3_final.append(np.mean(D_min_3))
        D_mean_3_final.append(np.mean(D_mean_3))

    # График сумм
    plt.plot(N, D_sum_1_final, color='green', label='Equal blind')
    plt.plot(N, D_sum_2_final, 'yellow', label='Maximum throughput')
    plt.plot(N, D_sum_3_final, 'blue', label='Proportion fair')
    plt.legend()
    plt.title('Сравнение графиков суммарной скорости передачи в зависимости от кол-ва АБ')
    plt.xlabel('Количество АБ')
    plt.ylabel('Мат ожидание суммарной скорости')
    plt.show()

    # График мин скорости
    plt.plot(N, D_min_1_final, color='green', label='Equal blind')
    plt.plot(N, D_min_2_final, 'yellow', label='Maximum throughput')
    plt.plot(N, D_min_3_final, 'blue', label='Proportion fair')
    plt.legend()
    plt.title('Сравнение графиков минимальной скорости передачи в зависимости от кол-ва АБ')
    plt.xlabel('Количество АБ')
    plt.ylabel('Мат ожидание минимальной скорости')
    plt.show()

    # График средней скорости
    plt.plot(N, D_mean_1_final, color='green', label='Equal blind')
    plt.plot(N, D_mean_2_final, 'yellow', label='Maximum throughput')
    plt.plot(N, D_mean_3_final, 'blue', label='Proportion fair')
    plt.legend()
    plt.title('Сравнение графиков средней скорости передачи в зависимости от кол-ва АБ')
    plt.xlabel('Количество АБ')
    plt.ylabel('Мат ожидание средней скорости')
    plt.show()


main()
Соседние файлы в предмете Моделирование систем распределения ресурсов