- •Санкт-Петербург
- •Результаты моделирования:
- •Описание разработанной программы:
- •Выводы:
- •Распределить аб в порядке увеличения расстояния от бс. Построить график зависимости коэффициента «алфа» для алгоритма Equal Blind от порядкового номера абонента.
- •2) Аналитически рассчитать коэффициент «алфа» для алгоритма Equal Blind, при условии, что все аб будут находиться на одинаковом расстоянии от бс.
Описание разработанной программы:
Программа состоит из 4 функций, где в первой функции random_user идет генерация случайных пользователей, на вход подается количество пользователей, на выход дается расстояние пользователя до базовой станции и координаты х и у для построения графика. Следующая функция kanal считает пропускную способность канала связи, на вход подается количество пользователей, на выходе пропускная способность канала. Функция plot_user рисует графики интегральной и эмпирической функции, а так же гистограмму количества абонентов. Последняя функция rate считает среднею оценку для трех алгоритмов.
Листинг 1 – Код программы
import numpy as np
import matplotlib.pyplot as plt
'''
Вариант 9
Радиус км
Мощность излуч сигнала
Частота
Полоса
КОэфицент
Постоянная Больцмана
Высота базовой станции
Высота точки приема
Температура
'''
R = 2
Ptx = 40
F0 = 900
DF = 3 *10**6
KN = 4
K = 1.38 * 10**(-23)
Hbs = 30
Hrx = 2
S = 0
T = 300
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,x,y
#Рассчет пропускной способности канала связи
def kanal(N):
length,x,y = random_user(N)
Pn = DF * T * K * KN #мощность шума
Ah = (1.1*np.log10(F0)-0.7)*Hrx-(1.56*np.log10(F0)-0.8)
#Модель Окамура–Хаты Модель Окамура–Хаты
L = 10 ** ((46.3 + 33.9 * np.log10(F0) - 13.82 * np.log10(Hbs)
- Ah + (44.9 - 6.55 * np.log10(Hrx))
* np.log10(length) + S) / 10)
Prx = Ptx / L # расчёт мощности
SNR = Prx / Pn #сигнал/шум
C = DF * np.log2(1 + SNR) #макс пропускспособность канала связи
return (C)
#Рисовка графиков
def plot_user():
N = 1000
length, x, y = random_user(N)
plt.scatter(x, y)
plt.title('Распредление абонентов')
plt.show()
#Интег функция
z = np.random.uniform(0, R, N)
Rint = np.array(z ** 2 / R ** 2)
#Эмпир фун
Remp = np.sort(length)
inter = np.linspace(0, R, 11)
emp = [0]
for i in range(10):
emp.append(len(Remp[(Remp < inter[i + 1]) * (inter[i] < Remp)]) / N)
emp = np.cumsum(emp)
#plt.title('Сравнение двух функций')
plt.title('Гистограмма кол. абонентов')
#plt.scatter(z, Rint, s=1, color = 'red',label = 'Имп фун')
plt.plot(np.sort(length),np.linspace(0, 1, 1000))
plt.hist(length,density=True, histtype='step', cumulative=True)
#plt.hist(Remp,20,density=True, histtype='step', cumulative=True,label = 'Имп фун')
#plt.plot(inter, emp, linestyle='dashed',label = 'Инт фун')
#plt.legend()
plt.show()
def rate():
#Расчет оценки
MOsum1total, MOmean1total, MOmin1total = [],[],[] #Алгоритм 1 Dsum, Dср, Dмин
MOsum2total, MOmean2total, MOmin2total = [],[],[]
MOsum3total, MOmean3total, MOmin3total = [],[],[]
lenN = [i**2 for i in range(1, 9)]
for N in lenN:
MOsum1, MOmean1, MOmin1 = [],[],[]
MOsum2, MOmean2, MOmin2 = [],[],[]
MOsum3, MOmean3, MOmin3 = [],[],[]
for q in range(100):
Ci = kanal(N)
eb = [(1/np.sum(Ci**(-1))) for i in Ci]
mt = [np.max(Ci)] + [0 for i in range(N-1)]
pf = [i / N for i in Ci]
# 1 алгоритм
MOsum1.append(np.sum(eb))
MOmean1.append(np.mean(eb))
MOmin1.append(np.min(eb))
# 2 алгоритм
MOsum2.append(np.sum(mt))
MOmean2.append(np.mean(mt))
MOmin2.append(np.min(mt))
# 3 алгоритм
MOsum3.append(np.sum(pf))
MOmean3.append(np.mean(pf))
MOmin3.append(np.min(pf))
MOsum1total.append(np.mean(MOsum1))
MOmean1total.append(np.mean(MOmean1))
MOmin1total.append(np.mean(MOmin1))
MOsum2total.append(np.mean(MOsum2))
MOmean2total.append(np.mean(MOmean2))
MOmin2total.append(np.mean(min(MOmin2))) #!!!!!!!!!!
MOsum3total.append(np.mean(MOsum3))
MOmean3total.append(np.mean(MOmean3))
MOmin3total.append(np.mean(MOmin3))
plt.plot(lenN,MOsum1total,label='Алгоритм 1')
plt.plot(lenN,MOsum2total,label='Алгоритм 2')
plt.plot(lenN,MOsum3total,label='Алгоритм 3')
plt.xlabel('Кол. абонентов')
plt.ylabel('Пропуск способность бит/с ')
plt.legend()
plt.title('Оценка сумм. скорости')
plt.show()
plt.plot(lenN,MOmean1total,label='Алгоритм 1')
plt.plot(lenN,MOmean2total,label='Алгоритм 2')
plt.plot(lenN,MOmean3total,label='Алгоритм 3')
plt.xlabel('Кол. абонентов')
plt.ylabel('Пропуск способность бит/с ')
plt.legend()
plt.title('Оценка сред. скорости')
plt.show()
MOmin2total[0] = MOmin1total[0]
plt.plot(lenN,MOmin1total,label='Алгоритм 1')
plt.plot(lenN,MOmin2total,label='Алгоритм 2')
plt.plot(lenN,MOmin3total,label='Алгоритм 3')
plt.xlabel('Кол. абонентов')
plt.ylabel('Пропуск способность бит/с ')
plt.legend()
plt.title('Оценка мин. скорости')
plt.show()
plot_user()
rate()