\documentclass[a4paper,fontsize=14bp]{article}

\input{../common-preamble}
\input{../bmstu-preamble}
\input{../fancy-listings-preamble}
\setcounter{secnumdepth}{0}
\numerationTop

\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader

\makeReportTitle{лабораторной}{1}{Исследование беспроводного канала связи \\ при распространении радиоволн \\ в открытом пространстве}{Проектирование информационных \\ и телекоммуникационных систем}{}{к.т.н., доцент кафедры ИУ-3 \\ Баскаков С.С.}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Целью данной лабораторной работы являлось изучение основ работы с системой имитационного моделирования OMNeT++, построение имитационной модели беспроводного канала связи и исследование его характеристик средствами имитационного моделирования и аналитическими расчетами.
\section{Задание}
\begin{enumerate}
\item Выполнить моделирование исходного проекта, обработку результатов экспериментов по приведенному выше описанию и убедиться в повторяемости приведенных графиков.
\item Изменить значения параметров исходной имитационной модели системы в соответствии с индивидуальным вариантом.
\item Провести аналогичный имитационный эксперимент с модифицированной моделью системы. В случае необходимости следует увеличить максимальное время моделирования, чтобы рассмотреть ситуацию с ухудшением качества связи и ее отсутствием по мере увеличения расстояния между устройствами.
\item Обработать результаты моделирования и построить соответствующие графики.
\item Выполнить аналитические расчеты для оценки мощности принятого сигнала, вероятности битовой ошибки и вероятности пакетной ошибки для модифицированной системы. Сравнить расчетные значения с полученными в ходе имитационного моделирования.
\end{enumerate}

\section{Выполнение}
\subsection{Обработка исходной модели}
После запуска исходной модели в папке с результатами были записаны файлы со скалярными и векторными значениями моделирования. По этим значениям в пакете математического моделирования MATLAB были построены графики, представленные на рисунках \hyperref[pic:defpowrel]{\ref{pic:defpowrel}}, \hyperref[pic:defber]{\ref{pic:defber}}, \hyperref[pic:defper]{\ref{pic:defper}}, \hyperref[pic:defploss]{\ref{pic:defploss}}. Полученные графики являются идентичными с представленными в задании к лабораторной работе.
\begin{figure}[H]
  \centering
  \begin{multicols}{2}
  \includegraphics[width=8cm]{01-itsp-lab-01-def-pow-rel.png}
  \caption{Мощность принятого сигнала и отношение сигнал/(интерференция+шум)}
  \label{pic:defpowrel}
    \columnbreak
  \includegraphics[width=8cm]{01-itsp-lab-01-def-ber.png}
  \caption{Вероятность битовой ошибки}
  \label{pic:defber}
  \end{multicols}
\end{figure}

\begin{figure}[H]
  \centering
  \begin{multicols}{2}
  \includegraphics[width=8cm]{01-itsp-lab-01-def-per.png}
  \caption{Вероятность пакетной ошибки}
  \label{pic:defper}
    \columnbreak
  \includegraphics[width=8cm]{01-itsp-lab-01-def-ploss.png}
  \caption{Количество потерянных пакетов}
  \label{pic:defploss}
  \end{multicols}
\end{figure}

\subsection{Изменение исходной модели}
Исходная система была модифицирована согласно задания, итоговые значения приведены в таблице \hyperref[table:individual]{\ref{table:individual}}, а полный файл настроек в листинге \hyperref[lst:modified]{\ref{lst:modified}} 
\begin{table}[H]
  \centering
  \begin{tabular}{||r|r|r|r|r|r|r|r||} 
    \hline
    D (байт) &  T (мсек) & $P_t$ (мВт) & F (МГц) & R (кбит/с) & W (МГц) & $P_t$ (дБм) & V (м/с) \\ [0.5ex]
    \hline\hline
    50 & 10 & 80 & 2000 & 200 & 300 & -90 & 20 \\  [1ex] 
    \hline
  \end{tabular}
  \caption{Параметры системы согласно индивидуальному варианту (№ 11)}
  \label{table:individual}
\end{table}

\begin{lstlisting}[style=ASMStyle, caption=Изменённый файл omnetpp.ini, label={lst:modified}]
[Config Lab_1]
description = Point-to-point wireless communication channel
network = Lab_1_Network
sim-time-limit = 100s

*.host*.ipv4.arp.typename = "GlobalArp"

*.hostTX.numApps = 1
*.hostTX.app[0].typename = "UdpBasicApp"
*.hostTX.app[0].destAddresses = "hostRX"
*.hostTX.app[0].destPort = 5000
*.hostTX.app[0].messageLength = 50B
*.hostTX.app[0].sendInterval = exponential(10ms)
*.hostTX.app[0].packetName = "UDPData"

*.hostRX.numApps = 1
*.hostRX.app[0].typename = "UdpSink"
*.hostRX.app[0].localPort = 5000

*.host*.wlan[0].typename = "AckingWirelessInterface"
*.host*.wlan[0].mac.useAck = false
*.host*.wlan[0].mac.fullDuplex = false
*.host*.wlan[0].mac.headerLength = 23B

*.host*.**.bitrate = 200kbps

*.radioMedium.typename = "ApskScalarRadioMedium"
*.radioMedium.pathLoss.typename = "FreeSpacePathLoss"
*.radioMedium.backgroundNoise.power = -90dBm
*.radioMedium.mediumLimitCache.centerFrequency = 2GHz
*.radioMedium.mediumLimitCache.maxTransmissionDuration = 1s

*.host*.wlan[0].radio.typename = "ApskScalarRadio"
*.host*.wlan[0].radio.centerFrequency = 2GHz
*.host*.wlan[0].radio.bandwidth = 300kHz
*.host*.wlan[0].radio.transmitter.power = 80mW
*.host*.wlan[0].radio.transmitter.preambleDuration = 10us
*.host*.wlan[0].radio.transmitter.headerLength = 8B
*.host*.wlan[0].radio.receiver.sensitivity = -110dBm # not used
*.host*.wlan[0].radio.receiver.energyDetection = -110dBm # not used
*.host*.wlan[0].radio.receiver.snirThreshold = 0dB # not used

*.hostRX.wlan[*].radio.minSnir.result-recording-modes = default,+vector
*.hostRX.wlan[*].radio.bitErrorRate.result-recording-modes = default,+vector
*.hostRX.wlan[*].radio.packetErrorRate.result-recording-modes = default,+vector

*.hostRX.mobility.typename = "LinearMobility"
*.hostRX.mobility.speed = 20mps
*.hostRX.mobility.initialMovementHeading = 0deg

*.host*.wlan[0].mac.queue.packetCapacity = 50

*.visualizer.mobilityVisualizer.displayVelocities = true
*.visualizer.mobilityVisualizer.displayMovementTrails = true
\end{lstlisting}

\subsection{Результаты моделирования}
В результате моделирования с представленными в листинге \hyperref[lst:modified]{\ref{lst:modified}} значениями, в среде OMNeT++ сеть не дошла до максимального уровня пакетной ошибки, в связи с чем время моделирования было изменено на 200 сек. Результаты моделирования (в виде исходных «*.sca»- и «*.vec»-файлов приложены к отчёту). Графики поведения модели представлены на рисунках \hyperref[pic:wrkpowrel]{\ref{pic:wrkpowrel}}, \hyperref[pic:wrkber]{\ref{pic:wrkber}}, \hyperref[pic:wrkper]{\ref{pic:wrkper}}, \hyperref[pic:wrkploss]{\ref{pic:wrkploss}}.

\begin{figure}[H]
  \centering
  \begin{multicols}{2}
  \includegraphics[width=8cm]{01-itsp-lab-01-wrk-pow-rel.png}
  \caption{Мощность принятого сигнала и отношение сигнал/(интерференция+шум)}
  \label{pic:wrkpowrel}
    \columnbreak
  \includegraphics[width=8cm]{01-itsp-lab-01-wrk-ber.png}
  \caption{Вероятность битовой ошибки}
  \label{pic:wrkber}
  \end{multicols}
\end{figure}

\begin{figure}[H]
  \centering
  \begin{multicols}{2}
  \includegraphics[width=8cm]{01-itsp-lab-01-wrk-per.png}
  \caption{Вероятность пакетной ошибки}
  \label{pic:wrkper}
    \columnbreak
  \includegraphics[width=8cm]{01-itsp-lab-01-wrk-ploss.png}
  \caption{Количество потерянных пакетов}
  \label{pic:wrkploss}
  \end{multicols}
\end{figure}

В результате аналитических расчётов были получены следующие графики (рисунки \hyperref[pic:anpowrel]{\ref{pic:anpowrel}}, \hyperref[pic:anber]{\ref{pic:anber}}, \hyperref[pic:anper]{\ref{pic:anper}}). На основании полученных графиков можно сделать вывод о полном соответствии смоделированной системы и теоретических значений параметров.
\begin{figure}[H]
  \centering
  \begin{multicols}{2}
  \includegraphics[width=8cm]{01-itsp-lab-01-an-pow-rel.png}
  \caption{Мощность принятого сигнала и отношение сигнал/(интерференция+шум)}
  \label{pic:anpowrel}
    \columnbreak
  \includegraphics[width=8cm]{01-itsp-lab-01-an-ber.png}
  \caption{Вероятность битовой ошибки}
  \label{pic:anber}
  \end{multicols}
\end{figure}

\begin{figure}[H]
  \centering
  \includegraphics[width=8cm]{01-itsp-lab-01-an-per.png}
  \caption{Вероятность пакетной ошибки}
  \label{pic:anper}
\end{figure}

\section{Выводы}
В результате выполнения лабораторной работы были изучены основные аспекты системы имитационного моделирования OMNeT++, были выполнены различные имитационные эксперименты модели беспроводного канала связи, а также было проведено исследование характеристик модели созданной средствами имитационного моделирования и с помощью аналитических расчетов в системе пакете MATLAB. Также был написан код на языке Python для построения аналитических моделей, представленный в приложении \hyperref[appendix:jupyter]{\ref{appendix:jupyter}}

\newpage
\appendix
\setcounter{secnumdepth}{5}
\section*{Приложения}
\addcontentsline{toc}{section}{Приложения}
\renewcommand{\thesubsection}{\Alph{subsection}}

\subsection{Jupyter notebook}
\label{appendix:jupyter}
\begin{lstlisting}[language=Python, style=PyCodeStyle]
import matplotlib.pyplot as plt
import numpy as np
from scipy import special
from math import pi


D = 50
PT = 80
FREQ = 2000
PN = -90
R = 200
W = 300
SPEED = 20


# График 1 – Мощность принятого сигнала и Отношение сигнал / (интерференция + шум)
def get_rx_power():
    timestamp = 200
    light_speed = 3 * 10 ** 8
    initial_distance = 5
    freq = FREQ * 10 ** 6
    Pt = PT * 10 ** -3
    wavelength = light_speed / freq

    rx_power = []
    for t in range(1, timestamp + 1):
        distance = initial_distance + SPEED * t
        result = Pt * wavelength ** 2 / (4 * pi * distance) ** 2
        rx_power.append(result)
    return rx_power


Pn = 10 ** ((PN/10) - 3)

rx_power = get_rx_power()
signal_noise = []
signal_noise_scaled = []
rx_power_scaled = []
for i in range(len(rx_power)):
    rx_power_scaled.append(10 * np.log10(rx_power[i]) + 30) 
    signal_noise.append(rx_power[i] / Pn)
    signal_noise_scaled.append(10 * np.log10(signal_noise[i]))

fig, ax = plt.subplots()
ax.grid()
ax.set_xlabel('Время, сек')
ax.set_ylim(-90, -30)
ax.set_ylabel('Мощность принятого сигнала Prx, дБм', color="C0")
ax.plot(range(1, 201), rx_power_scaled, color="C0")

ax2 = ax.twinx()
ax2.set_ylim(-10, 60)
ax2.set_ylabel('Отношение сигнал/(интерференция+шум), дБ', color="C1")
ax2.plot(range(1, 201), signal_noise_scaled, color="C1")

plt.gcf().set_dpi(300)
plt.show()


# График 2 – Аналитическая вероятность битовой ошибки
ber_values = []
for i in range(len(signal_noise)):
    ber_values.append(0.5 * special.erfc(np.sqrt((signal_noise[i] * W) / R)))

fig, ax = plt.subplots()
ax.set_xlim(0, 201)
ax.set_ylim(10 ** -18, 10)
ax.grid()
ax.set_xlabel('Время, сек')
ax.set_ylabel('Вероятность битовой ошибки')
plt.semilogy(range(1, 201), ber_values)

plt.gcf().set_dpi(300)
plt.show()


# График 3 – Аналитическая вероятность пакетной ошибки
L = D + 59

per_values = []
for i in range(len(ber_values)):
    per_values.append(1 - (1 - ber_values[i]) ** (8 * L))

fig, ax = plt.subplots()
ax.set_ylim(0, 1.1)
ax.grid()
ax.set_xlabel('Время, сек')
ax.set_ylabel('Вероятность пакетной ошибки')
plt.plot(range(1, 201), per_values)

plt.gcf().set_dpi(300)
plt.show()
\end{lstlisting}
\end{document}
