Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

main

.py
Скачиваний:
0
Добавлен:
24.10.2023
Размер:
3.21 Кб
Скачать
from math import log
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

if __name__ == "__main__":
    # Первое задание
    # Дано:
    P_tx = 1
    d_f = 80 * (10 ** 6)
    T = 300
    kn = 2
    h_rx = 1.5
    h_bs = 30
    k = 1.38 * (10 ** -23)
    f0 = 900
    S = 3

    lg_d = []
    P_rx = []
    SNR = []
    L_db = []
    L = []
    C = []

    d = np.linspace(1, 2, 20)
    for i in d:
        lg_d.append(log(i, 10))

    pn = d_f * T * k * kn
    arhs = (1.1 * log(f0, 10) - 0.7) * h_rx - (1.56 * log(f0, 10) - 0.8)

    for i in d:
        ldb = 46.3 + 33.9 * log(f0, 10) - 13.82 * log(h_bs, 10) - arhs + abs(44.9 - 6.55 * log(h_rx, 10)) * log(i, 10) + S
        L_db.append(ldb)
        L.append(10 ** (ldb / 10))

    for i in L:
        P_rx.append(P_tx / i)
        SNR.append(P_tx / i / pn)
        C.append(d_f * log(1 + P_tx / i / pn, 2))

    data = pd.DataFrame(data={'d': d, 'lgD': lg_d, 'L_db': L_db,  'L': L, 'prx': P_rx, 'snr': SNR, 'C': C})
    print(data)

    plt.plot(L_db, lg_d, 'go-')
    plt.title("Функция потерь:")
    plt.xlabel('lgL')
    plt.ylabel('lgD')

    plt.figure()
    plt.plot(d, C, 'go-')
    plt.title("Зависимость максимальной пропускной способности\n канала связи от расстояния:")
    plt.xlabel('d')
    plt.ylabel('C')
    plt.show()

    # Второе
    # Дано
    # NumSlots = 10 ** 5
    # start = 0.05
    # step = 0.01
    # end = 0.5
    #
    # lamCount = int((end - start) / step + 1)
    #
    # Lam = np.linspace(start, end, lamCount)
    # averageUsers = np.zeros([1, lamCount])[0]
    # T_mean = np.zeros([1, lamCount])[0]
    #
    # for ind, lam in enumerate(Lam):
    #
    #     startSlot = np.zeros([1, NumSlots])[0]
    #     endSlot = np.zeros([1, NumSlots])[0]
    #     P = np.random.poisson(lam, [1, NumSlots])[0]
    #
    #     for i in range(NumSlots):
    #         I = 0
    #
    #         if startSlot[i] != 0:
    #             R = np.random.binomial(startSlot[i], 1 / startSlot[i], 1)
    #
    #             if R == 1:
    #                 I = 1
    #             else:
    #                 I = 0
    #
    #         endSlot[i] = startSlot[i] - I + P[i]
    #
    #         if i < NumSlots - 1:
    #             startSlot[i + 1] = endSlot[i]
    #
    #     averageUsers[ind] = np.ceil(np.mean(endSlot))
    #     T_mean[ind] = round(averageUsers[ind] / lam, 2)
    #
    # print("Задание 2:", Lam)
    # print('aU', averageUsers)
    # print(T_mean)
    #
    # plt.figure()
    # plt.plot(Lam, averageUsers)
    # plt.title('График зависимости среднего количества\n абонентов в системе N от Lam')
    # plt.grid(color='gray')
    # plt.xlabel('Lam')
    # plt.ylabel('averageUsers')
    # plt.ylim(0, 60)
    # plt.figure()
    # plt.plot(Lam, T_mean)
    # plt.title('График зависимости среднего времени\n нахождения абонента в системе T от Lam')
    # plt.grid(color='gray')
    # plt.xlabel('Lam')
    # plt.ylabel('T_mean')
    # plt.ylim(0, 60)
    #
    # plt.show()