Пояснительная записка(21.06) новая (1214932), страница 13
Текст из файла (страница 13)
43 Stephen Hailes Sensor Systems and Software / Stephen Hailes, Sabrina Sicari, George Roussos // Springer.– 2012.– P. 361
44 Документация NS3 электронный ресурс.– режим доступа: https://www.nsnam.org/docs/release/3.26/doxygen/index.html
45 European Standard ETSI EN 302 663. Intelligent Transport Systems (ITS); Access layer specification for Intelligent Transport Systems operating in the 5 GHz frequency band электронный ресурс.– режим доступа: http://www.etsi.org/deliver/etsi_en/302600_302699/302663 /01.02.00_20/en_302663v010200a.pdf
46 Hossain M.N. Experimental simulation and real world study on WiFi ad-hoc mode for different radio propagation effects and standards / Mohammad Nazmul Hossain, Towfique Imam Chowdhury // Bonn-Rhein-Sieg University of Applied Sciences.– 2017.– P. 6
47 Siva Ganga Prasad M. Analysis of Fast Fading in Wireless Communication Channels / M. Siva Ganga Prasad, P. Siddaiah, L. Pratap Reddy, K.Lekha // International Journal of Systems and Technologies.– 2010.– Vol 3 – No.1.– pp. 139-145
48 Strbac D. A study of VANET Networks / Strbac David // ENSC 427 Project Report.– 2012.– P. 26
49 Patel A. H. Performance Analysis and Comparison of various Radio Propagation models and its impact on Routing Efficiency / Patel Anjali Harsukhlal, Bandana Kumari, Jayavignesh Thyagarajan // National Conference on Science, Engineering and Technology (NCSET).– 2016.– Vol 4 – No. 6.– pp. 13-16
Приложение А
(справочное)
Код приложения для генерации карты магистрали
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QFile Fil("Line.txt");
Fil.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream Out;
Out.setDevice(&Fil);
int Length=QVariant(ui->lineEdit_2->text()).toInt();
int NodeNum=QVariant(ui->lineEdit->text()).toInt();
double Speed=QVariant(ui->lineEdit_3->text()).toDouble();
int SPointX=-2500;
int SPointY=1000;
int stepX=(Length)/(NodeNum);
int stepY=20;
int EPointX=SPointX+Length;
int EPointY=SPointY+stepY;
QString temp="";
for(int i=0;i<NodeNum;i++)
{
if(i<NodeNum/2)
{
int CurX=SPointX+i*stepX;
Out<<"$node_("<<i<<") set X_ "<<CurX<<"\n";
Out<<"$node_("<<i<<") set Y_ "<<SPointY<<"\n";
Out<<"$node_("<<i<<") set Z_ "<<0<<"\n";
Out<<"$ns_ at 0.0 \"$node_("<<i<<") setdest "<<CurX<<" "<<SPointY<<" "<<0<<"\"\n";
Out<<"$ns_ at 0.0 \"$node_("<<i<<") setdest "<<EPointX<<" "<<SPointY<<" "<<Speed<<"\"\n";
}
else
{
int CurX=EPointX-(i-NodeNum/2)*stepX;
Out<<"$node_("<<i<<") set X_ "<<CurX<<"\n";
Out<<"$node_("<<i<<") set Y_ "<<EPointY<<"\n";
Out<<"$node_("<<i<<") set Z_ "<<0<<"\n";
Out<<"$ns_ at 0.0 \"$node_("<<i<<") setdest "<<CurX<<" "<<EPointY<<" "<<0<<"\"\n";
Out<<"$ns_ at 0.0 \"$node_("<<i<<") setdest "<<SPointX<<" "<<EPointY<<" "<<Speed<<"\"\n";
}
}
double timeY=stepY/Speed;
temp=QVariant((int)timeY).toString()+"."+QVariant(int((timeY-(int)timeY)*10)).toString();
timeY=QVariant(temp).toDouble();
int counter=0;
QList<QString> Res;
QList<double> buff;
for(int i=0;i<NodeNum;i++)
{
if(i<NodeNum/2)
{
double timeX=(Length-i*stepX)/Speed;
temp=QVariant((int)timeX).toString()+"."+QVariant(int((timeX-(int)timeX)*10)).toString();
timeX=QVariant(temp).toDouble();
temp="$ns_ at "+QVariant(timeX).toString()+" \"$node_("+QVariant(i).toString()+") setdest "+QVariant(EPointX).toString()+" "+QVariant(EPointY).toString()+" "+QVariant(Speed).toString()+"\"\n";
Res.append(temp);
buff.append(timeX);
temp="$ns_ at "+QVariant(timeY+timeX).toString()+" \"$node_("+QVariant(i).toString()+") setdest "+QVariant(SPointX).toString()+" "+QVariant(EPointY).toString()+" "+QVariant(Speed).toString()+"\"\n";
Res.append(temp);
buff.append(timeY+timeX);
}
else
{
double timeX=(Length-(counter)*stepX)/Speed;
temp=QVariant((int)timeX).toString()+"."+QVariant(int((timeX-(int)timeX)*10)).toString();
timeX=QVariant(temp).toDouble();
temp="$ns_ at "+QVariant(timeX).toString()+" \"$node_("+QVariant(i).toString()+") setdest "+QVariant(SPointX).toString()+" "+QVariant(SPointY).toString()+" "+QVariant(Speed).toString()+"\"\n";
Res.append(temp);
buff.append(timeX);
temp="$ns_ at "+QVariant(timeY+timeX).toString()+" \"$node_("+QVariant(i).toString()+") setdest "+QVariant(EPointX).toString()+" "+QVariant(SPointY).toString()+" "+QVariant(Speed).toString()+"\"\n";
counter++;
Res.append(temp);
buff.append(timeY+timeX);
}
}
int ind=0;
for(int i=0;i<buff.count();i++)
{
double time=99999;
for(int j=0;j<buff.count();j++)
{
if(buff[j]<time)
{
time=buff[j];
ind=j;
}
}
Out<<Res[ind];
buff[ind]=999999;
}
QMessageBox::information(0,"Cngrat!","SUCCESS!");
}
Приложение Б
(справочное)
Код приложения для обработки данных симуляций
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
QString MainWindow::FindMethod(QString RawString, QString Query, int NumToDeleteFromEnd)
{
int pos1=0;
int pos2=0;
pos1=RawString.indexOf(Query,pos1)+Query.length();
pos2=RawString.indexOf("\"",pos1);
QString Result="";
for(int i=pos1;i<=pos2-NumToDeleteFromEnd;i++)
{
Result.append(RawString.at(i));
}
return Result;
}
void MainWindow::on_pushButton_clicked()
{
DelayTotal.clear();
rxPacketsTotal.clear();
txPacketsTotal.clear();
PDR_Routing_Total.clear();
BitRateTX_Total.clear();
BitRateRX_Total.clear();
QStringList FileNames = QFileDialog::getOpenFileNames(this, tr("Open the files"), "D:/share/Result", tr("Result files (*.xml)"));
QString temp="";
QFile Fil;
for(int i=0; i<FileNames.count();i++)
{
int counter=0;
double DelayAverage=0;
double JitterAverage=0;
double rxPacketsSum=0;
double txPacketsSum=0;
double lostPacketsSum=0;
double BitRateTX=0;
double BitRateRX=0;
Fil.setFileName(FileNames[i]);
Fil.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream In;
In.setDevice(&Fil);
while(!In.atEnd())
{
temp=In.readLine();
if(Fil.fileName().contains(".xml"))
{
if(temp.contains("delaySum"))
{
QString Query="rxPackets=\"";
int rxPackets=QVariant(FindMethod(temp,Query,1)).toInt();
Query="txPackets=\"";
int txPackets=QVariant(FindMethod(temp,Query,1)).toInt();
Query="timeFirstTxPacket=\"+";
double TimeFirstTX=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
Query="timeLastTxPacket=\"+";
double TimeLastTX=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
Query="timeFirstRxPacket=\"+";
double TimeFirstRX=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
Query="timeLastRxPacket=\"+";
double TimeLastRX=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
Query="txBytes=\"";
double TXBytes=QVariant(FindMethod(temp,Query,1)).toInt();
Query="rxBytes=\"";
double RXBytes=QVariant(FindMethod(temp,Query,1)).toInt();
rxPacketsSum+=rxPackets;
txPacketsSum+=txPackets;
lostPacketsSum+=lostPackets;
if(rxPackets!=0)
{
Query="delaySum=\"+";
double delaySum=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
DelayAverage+=delaySum/rxPackets;
Query="jitterSum=\"+";
double jitterSum=QVariant(FindMethod(temp,Query,5)).toDouble()/1000000000.;
JitterAverage+=jitterSum/rxPackets;
if(rxPackets>1)
{
BitRateRX+=(8*RXBytes)/(TimeLastRX-TimeFirstRX);
}
counter++;
}
if(txPackets>1)
{
BitRateTX+=(8*TXBytes)/(TimeLastTX-TimeFirstTX);
}
}
}
}
DelayAverage=DelayAverage/counter;
BitRateTX=BitRateTX/counter;
BitRateRX=BitRateRX/counter;
DelayTotal.append(DelayAverage);
rxPacketsTotal.append(rxPacketsSum);
txPacketsTotal.append(txPacketsSum);
PDR_Routing_Total.append(rxPacketsSum/txPacketsSum);
BitRateTX_Total.append(BitRateTX);
BitRateRX_Total.append(BitRateRX);
Fil.close();
}
QString Query="/";
QString buff="";
int pos1=0;
for(int i=0;i<4;i++)
{
pos1=FileNames[0].indexOf(Query,pos1)+Query.length();
}
for(int i=0;i<6;i++)
{
buff.append(FileNames[0][pos1+i]);
}
Query=buff;
Fil.setFileName(buff+".txt");
Fil.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream Out;
Out.setDevice(&Fil);
Out<<"Simul Name"<<'\t'
<<"PDR_Routing"<<'\t'
<<"Dealy average"<<'\t'
<<"TX Bitrate"<<'\t'
<<"RX Bitrate"<<'\n';
for(int i=0;i<FileNames.count();i++)
{
buff="";
temp=FileNames[i];
for(int j=pos1;j<temp.length();j++)
{
buff.append(temp[j]);
}
buff.chop(4);
Out<<buff<<'\t'<<QVariant(PDR_Routing_Total[i]).toString().replace(".",",")<<'\t'
<<QVariant(DelayTotal[i]).toString().replace(".",",")<<'\t'
<<QVariant(BitRateTX_Total[i]).toString().replace(".",",")<<'\t'
<<QVariant(BitRateRX_Total[i]).toString().replace(".",",")<<'\n';
}
Fil.close();
QMessageBox::information(0,"Congratulations","Processing complete");
}















