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}
|