Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4616_МСРР_ПАВЛОВ_ЛР1.docx
Скачиваний:
63
Добавлен:
20.06.2020
Размер:
302.81 Кб
Скачать

Описание разработанной программы:

Программа состоит из 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()