288 lines
14 KiB
TeX
288 lines
14 KiB
TeX
\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}
|