Скачиваний:
1
Добавлен:
27.08.2024
Размер:
5.61 Кб
Скачать
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()
Соседние файлы в предмете Моделирование систем распределения ресурсов