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