Влияние помех на надежность сбора информации сетью в системе Castalia
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Для рассмотрения влияния помех мы определили в настройках моделирования конфигурацию varySigma, при которой будет запущено моделирование с вариацией этого параметра (SN.wirelessChannel.sigma = ${Sigma=0,1,3,5})

На рисунках 29-32 показано как меняется надежность доставки пакетов в зависимости от уровня помех. По оси абсцисс номера узлов, по оси ординат вероятности, а цветами обозначены состояния пакетов. Видна тенденция, что с возрастанием уровня помех возрастает вероятность доставки пакетов. Это может быть обусловлено хорошими алгоритмами канального уровня.

 

Рисунок 29 Количество пакетов при Sigma 0

 

Рисунок 30 Количество пакетов при Sigma 1


Рисунок 31 Количество пакетов при Sigma 3

 

Рисунок 32 Количество пакетов при Sigma 5

 




Заключение

 

В данной работе были рассмотрены математические методы оценки надежности беспроводных сенсорных сетей, выполнен обзор и анализ программных продуктов, предназначенных для имитационного моделирования таких сетей. На основании анализа и в соответствии с поставленными целями работы была выбрана система моделирования Castalia, для которой были разработаны модули, позволяющие выполнить моделирование влияния помех и мощности передачи радиосигнала на надежность передачи пакета данных между двумя узлами и надежность сбора информации беспроводной сенсорной сетью. Результаты моделирования представлены в виде таблиц, графиков и диаграмм.

На основе проведенных исследований сделаны следующие выводы: при оценке надежности передачи пакета данных между двумя узлами с увеличением уровня помех до определенного значения сильного падения надежности не происходит, надежность связи между узлами зависит от топологии, уровень мощности сигнала не влияет существенно на надежность; при оценке надежности сбора информации сетью для рассмотренной сети колебания надежности не столь существенны при различных уровнях помех, что может быть обусловлено хорошими алгоритмами канального уровня.

Полученные результаты в целом соответствуют результатам других исследователей. [16].

В процессе работы были подготовлены и приняты в печать тезисы доклада «Исследование энергоэффективности алгоритмов маршрутизации в беспроводных сенсорных сетях» на объединенную научнуюконференциюстудентов и аспирантов факультета компьютерных технологий и прикладной математики «Прикладная математика XXI века», проходившую в Краснодаре, 9–12 апреля 2013 г.



Библиографический список

 

1. Castalia Installation Guide URL: http://castalia.research.nicta.com.au/pdfs/Castalia%20-%20Installation.pdf

2. Castalia official site URL: http://castalia.research.nicta.com.au/

3. Castalia User's manual URL:http://castalia.research.nicta.com.au/pdfs/Castalia%20-%20User%20Manual.pdf

4. Chandra T.D., Toueg S. Unreliable failure detectors for reliable distributed systems. // J. ACM. 1996. V. 43. P. 225-267.

5. Delporte-Gallet C., Devismes S., Fauconnier H. Stabilizing leader election in partial synchronous systems with crash failures. // J. Parallel Distrib. Comput. – 2010. – 70. – P. 45 – 58.

6. E. Egea-López, J. Vales-Alonso, A. S. Martínez-Sala, P. Pavón-Mariño, J. García-Haro Simulation Tools for Wireless Sensor Networks // Summer Simulation Multiconference - SPECTS 2005 // – 2005. – P. 2 – 9.

7. Ezio Biglieri Coding for Wireless Channels (Information Technology: Transmission, Processing and Storage) –2005. – P. 428.

8. Fei Yu A Survey of Wireless Sensor Network Simulation Tools URL: http://www1.cse.wustl.edu/~jain/cse567-11/ftp/sensor/index.html

9. Fischer M.J., Lynch N.A., Paterson M.S. Impossibility of distributed consensus with one faulty process. // J. ACM. 1985. V 32. P. 374-382.

10. Garay J.A., Perry K.J. A continuum of failure models for distributed computing. // Proc. 6nd Int. Workshop on Distributed Algorithms (Haifa, 1992) / S. Zaks, A. Segall (eds.). P. 153-156.

11. IEEE Standards 802.15.4. Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (LR-WPANs). — IEEE Computer Society, 2003.

12. Luis Javier García Villalba , Ana Lucila Sandoval Orozco, Alicia Triviño Cabrera, Cláudia Jacy Barenco Abbas Routing Protocols in Wireless Sensor Networks // Sensors // – 2009 – 9 – P. 399 – 421.

13. Pease M., Shostak R., Lamport L. Reaching agreement in the presence of faults. // J. ACM. 1984. V. 27. P. 228-234.

14. Roya N., Gub T., Das S.K. Supporting pervasive computing applications with active context fusion and semantic context delivery. // Pervasive and Mobile Computing – 2010. – 6. – P. 21 – 42.

15. Zhang M., Chan M.C., Ananda A.L. Connectivity monitoring in wireless sensor networks. // Pervasive and Mobile Computing – 2010. – 6. – P. 112 – 127.

16. Акимов Е.В., Кузнецов М.Н. Вероятностные математические модели для оценки надежности беспроводных сенсорных сетей // Электронный журнал «Труды МАИ». Выпуск № 40// URL: http://www.mai.ru/science/trudy/

17. Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы. – М.: Вильямс, 2000. — 384 с.

18. Гейер Дж. Беспроводные сети. Первый шаг. / Пер. с англ. – М.: Вильямc, 2005. – 192 с.

19. Дейтел Х., Дейтел П. Как программировать на С++. – М.: Бином-Пресс, 2008. – 1446 с.

20. Нечаев Д.Ю., Чекмарев Ю.В. Надежность информационных систем. – М.: ДМК Пресс, 2012. – 64 с.

21. Острейковский В.А. Теория надежности. – М.: Высшая школа, 2000. – 464 с.

22. Острейковский В.А. Теория надежности. Учебник для вузов. – М.: Высшая школа, 2003. – 457 с.

23. Половко А.М., Гуров С. В. Основы теории надежности. – СПб.: БХВ-Петербург 2006. – 560 с.

24. Смелянский Р. Л. Компьютерные сети. В 2 томах. Том 1. Системы передачи данных. – М.: Академия, 2011. – 304 с.

25. Страуструп Б. Язык программирования С++. – М.: Бином, 2008. – 1104 с.

26. Тель Ж. Введение в распределенные алгоритмы. Пер. с англ. В. А. Захарова. – М.: МЦНМО, 2009. – 616 с.

27. Ушаков И.А. Вероятностные модели надежности информационно-вычислительных систем. – М.: Радио и связь 1991. – 132 с.

28. Хьюз К., Хьюз Т. Параллельное и распределенное программирование на С++. Пер. с англ. – М.: Издательский дом Вильямс, 2004. – 672 с.

29. Шахнович И.А.Современные технологии беспроводной связи. – М.: Техносфера, 2006. – 288 с.

30. Шубин В.И., Красильникова О. С. Беспроводные сети передачи данных. – М.: Вузовская книга, 2012. – 104 с.

31. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования. Пер. с англ. – М.: Издательский дом Вильямс, 2003. – 512 с.

 



Приложение А

 

Текстфайла omnetpp.ini.

[General]

include ../Parameters/Castalia.ini

sim-time-limit = 100s

SN.field_x = 30# meters

SN.field_y = 30# meters

SN.numNodes = 9

SN.deployment = "3x3"

# Removing variability from wireless channel

SN.wirelessChannel.bidirectionalSigma = 0

SN.wirelessChannel.sigma = 0

# Select a Radio and a default Tx power

SN.node[*].Communication.Radio.RadioParametersFile = "../Parameters/Radio/CC2420.txt"

SN.node[*].Communication.Radio.TxOutputPower = "-5dBm"

SN.node[*].ApplicationName = "interNodes"

[Config varyTxPower]

SN.node[*].Communication.Radio.TxOutputPower = ${TXpower="0dBm","-1dBm","-3dBm","-5dBm"}

[Config varySigma]

SN.wirelessChannel.sigma = ${Sigma=0,1,3,5}

Текстфайла interNodes.ned

simple interNodes like node.application.iApplication {

parameters:

string applicationID = default ("interNodes");

bool collectTraceInfo = default (false);

int packetHeaderOverhead = default (8);

int priority = default (1);

int constantDataPayload = default (8);

int packetSpacing = default (100);// ms

int packetsPerNode = default (100);

int packetSize = default (32);// bytes

gates:

output toCommunicationModule;

output toSensorDeviceManager;

input fromCommunicationModule;

input fromSensorDeviceManager;

input fromResourceManager;

}

Текстфайла interNodes.h

#ifndef _INTERNODES_H_

#define _INTERNODES_H_

#include "VirtualApplication.h"

using namespace std;

struct neighborRecord {

int id;

int timesRx;

int receivedPackets;

};

enum interNodesTimers {

SEND_PACKET = 1,

};

class interNodes: public VirtualApplication {

private:

// parameters and variables

int priority;

int packetHeaderOverhead;

bool printConnMap;

int constantDataPayload;

double packetSpacing;

int packetsPerNode;

int packetSize;

vector<neighborRecord> neighborTable;

int packetsSent;

int serialNumber;

int totalSNnodes;

double txInterval_perNode;

double txInterval_total;

protected:

void startup();

void finishSpecific();

void fromNetworkLayer(ApplicationPacket *, const char *, double, double);

void timerFiredCallback(int);

void updateNeighborTable(int nodeID, int theSN);

};

#endif

Текстфайла interNodes.cc

#include "interNodes.h"

Define_Module(interNodes);

void interNodes::startup()

{

packetSpacing = (double)par("packetSpacing") / 1000.0;

packetsPerNode = par("packetsPerNode");

packetSize = par("packetSize");

neighborTable.clear();

packetsSent = 0;

totalSNnodes = getParentModule()->getParentModule()->par("numNodes");

txInterval_perNode = packetsPerNode * packetSpacing;

txInterval_total = (txInterval_perNode * totalSNnodes);

if (strtod(ev.getConfig()->getConfigValue("sim-time-limit"), NULL) < txInterval_total) {

trace() << "ERROR: Total sim time should be at least = " << txInterval_total;

opp_error("\nError: simulation time not large enough for the conectivity map application\n");

}

double startTxTime = txInterval_perNode * self;

setTimer(SEND_PACKET, startTxTime);

}

void interNodes::fromNetworkLayer(ApplicationPacket * rcvPacket, const char *source, double rssi, double lqi)

{

updateNeighborTable(atoi(source), rcvPacket->getSequenceNumber());

}

void interNodes::timerFiredCallback(int timerIndex)

{

switch (timerIndex) {

case SEND_PACKET:{

if (packetsSent >= packetsPerNode)

break;

toNetworkLayer(createGenericDataPacket(0.0, packetsSent, packetSize), BROADCAST_NETWORK_ADDRESS);

packetsSent++;

setTimer(SEND_PACKET, packetSpacing);

break;

}

}

}

void interNodes::finishSpecific()

{

declareOutput("Packets received");

for (int i = 0; i < (int)neighborTable.size(); i++) {

collectOutput("Packets received", neighborTable[i].id,

"Success", neighborTable[i].receivedPackets);

}

}

void interNodes::updateNeighborTable(int nodeID, int serialNum)

{

int i = 0, pos = -1;

int tblSize = (int)neighborTable.size();

for (i = 0; i < tblSize; i++)

if (neighborTable[i].id == nodeID)

pos = i;

if (pos == -1) {

neighborRecord newRec;

newRec.id = nodeID;

newRec.timesRx = 1;

if ((serialNum >= 0) && (serialNum < packetsPerNode))

newRec.receivedPackets = 1;

neighborTable.push_back(newRec);

} else {

neighborTable[pos].timesRx++;

if ((serialNum >= 0) && (serialNum < packetsPerNode))

neighborTable[pos].receivedPackets++;

}

}



ПриложениеБ

 

ТекстфайлаDataToSink.ned

package node.application.DataToSink;

simple DataToSink like node.application.iApplication {

parameters:

string applicationID = default ("DataToSink");

bool collectTraceInfo = default (true);

int priority = default (1);

int packetHeaderOverhead = default (8);// in bytes

int constantDataPayload = default (12);// in bytes

int maxSampleInterval = default (60000);// in msec

int minSampleInterval = default (1000);// in msec

bool isSink = default (false);

gates:

output toCommunicationModule;

output toSensorDeviceManager;

input fromCommunicationModule;

input fromSensorDeviceManager;

input fromResourceManager;

}

ТекстфайлаDataToSink.h

#ifndef _DATATOSINK_H_

#define _DATATOSINK_H_

#include "VirtualApplication.h"

#include "Packet_m.h"

using namespace std;

enum DataToSinkTimers {

REQUEST_SAMPLE = 1,

SEND_DATA = 2,

};

class DataToSink: public VirtualApplication {

private:

double maxSampleInterval;

double minSampleInterval;

int routingLevel;

double lastSensedValue;

int currSentSampleSN;

double randomBackoffIntervalFraction;

bool sentOnce;

protected:

void startup();

void fromNetworkLayer(ApplicationPacket *, const char *, double, double);

void handleSensorReading(SensorReadingMessage *);

void timerFiredCallback(int);

};

#endif

ТекстфайлаDataToSink.cc

#include "DataToSink.h"

Define_Module(DataToSink);

void DataToSink::startup()

{

maxSampleInterval = ((double)par("maxSampleInterval")) / 1000.0;

minSampleInterval = ((double)par("minSampleInterval")) / 1000.0;

currSentSampleSN = 0;

randomBackoffIntervalFraction = genk_dblrand(0);

sentOnce = false;

setTimer(REQUEST_SAMPLE, maxSampleInterval * randomBackoffIntervalFraction);

}

void DataToSink::timerFiredCallback(int index)

{

switch (index) {

case REQUEST_SAMPLE:{

requestSensorReading();

setTimer(REQUEST_SAMPLE, maxSampleInterval);

break;

}

}

}

void DataToSink::fromNetworkLayer(ApplicationPacket * genericPacket,

const char *source, double rssi, double lqi)

{

DataToSinkDataPacket *rcvPacket = check_and_cast<DataToSinkDataPacket*>(genericPacket);

ValueReportData theData = rcvPacket->getExtraData();

if (isSink)

trace() << "Sink received from: " << theData.nodeID << " \tvalue=" << rcvPacket->getData();

}

void DataToSink::handleSensorReading(SensorReadingMessage * rcvReading)

{

// int sensIndex =rcvReading->getSensorIndex();

// string sensType(rcvReading->getSensorType());

double sensValue = rcvReading->getSensedValue();

// schedule the TX of the value

trace() << "Sensed = " << sensValue;

ValueReportData tmpData;

tmpData.nodeID = (unsigned short)self;

tmpData.locX = mobilityModule->getLocation().x;

tmpData.locY = mobilityModule->getLocation().y;

DataToSinkDataPacket *packet2Net =

new DataToSinkDataPacket("Value reporting pck", APPLICATION_PACKET);

packet2Net->setExtraData(tmpData);

packet2Net->setData(sensValue);

packet2Net->setSequenceNumber(currSentSampleSN);

currSentSampleSN++;

toNetworkLayer(packet2Net, SINK_NETWORK_ADDRESS);

sentOnce = true;

}

ТекстфайлаMultipathRingsRouting.ned

package node.communication.routing.multipathRingsRouting;

simple MultipathRingsRouting like node.communication.routing.iRouting {

parameters:

bool collectTraceInfo = default (false);

int maxNetFrameSize = default (0);// bytes, 0 means no limit

int netBufferSize = default (32);// number of messages

int netDataFrameOverhead = default (14);// bytes

int mpathRingsSetupFrameOverhead = default (13);// bytes

int netSetupTimeout = default (50);// msec

gates:

output toCommunicationModule;

output toMacModule;

input fromCommunicationModule;

input fromMacModule;

input fromCommModuleResourceMgr;

}

ТекстфайлаMultipathRingsRouting.h

#ifndef _MULTIPATHRINGSROUTING_H_

#define _MULTIPATHRINGSROUTING_H_

#include <map>

#include "VirtualRouting.h"

#include "MultipathRingsRoutingPacket_m.h"

#include "MultipathRingsRoutingControl_m.h"

#define NO_LEVEL-110

#define NO_SINK-120

using namespace std;

enum MultipathRingsRoutingTimers {

TOPOLOGY_SETUP_TIMEOUT = 1,

};

class MultipathRingsRouting: public VirtualRouting {

private:

int mpathRingsSetupFrameOverhead;// in bytes

double netSetupTimeout;

// multipathRingsRouting-related member variables

int currentSequenceNumber;

int currentSinkID;

int currentLevel;

int tmpSinkID;

int tmpLevel;

bool isSink;//is a .ned file parameter of the Application module

bool isConnected;//attached under a parent node

bool isScheduledNetSetupTimeout;

protected:

void startup();

void fromApplicationLayer(cPacket *, const char *);

void fromMacLayer(cPacket *, int, double, double);

void sendTopologySetupPacket();

void sendControlMessage(multipathRingsRoutingControlDef);

void timerFiredCallback(int);

void processBufferedPacket();

};

ТекстфайлаMultipathRingsRouting.cc

#include "MultipathRingsRouting.h"

Define_Module(MultipathRingsRouting);

void MultipathRingsRouting::startup()

{

netSetupTimeout = (double)par("netSetupTimeout") / 1000.0;

mpathRingsSetupFrameOverhead = par("mpathRingsSetupFrameOverhead");

// check that the Application module used has the boolean parameter "isSink"

cModule *appModule = getParentModule()->getParentModule()->getSubmodule("Application");

if (appModule->hasPar("isSink"))

isSink = appModule->par("isSink");

else

opp_error("\nMultiPathRings routing has to be used with an application that defines the parameter isSink");

currentLevel = tmpLevel = isSink ? 0 : NO_LEVEL;

currentSinkID = tmpSinkID = isSink ? self : NO_SINK;

isConnected = (isSink) ? true : false;

isScheduledNetSetupTimeout = false;

currentSequenceNumber = 0;

if (isSink)

sendTopologySetupPacket();

}

void MultipathRingsRouting::sendTopologySetupPacket()

{

MultipathRingsRoutingPacket *setupPkt =

new MultipathRingsRoutingPacket("Multipath rings routing setup packet", NETWORK_LAYER_PACKET);

setupPkt->setMultipathRingsRoutingPacketKind(MPRINGS_TOPOLOGY_SETUP_PACKET);

setupPkt->setSource(SELF_NETWORK_ADDRESS);

setupPkt->setDestination(BROADCAST_NETWORK_ADDRESS);

setupPkt->setSinkID(currentSinkID);

setupPkt->setSenderLevel(currentLevel);

toMacLayer(setupPkt, BROADCAST_MAC_ADDRESS);

}

void MultipathRingsRouting::sendControlMessage(multipathRingsRoutingControlDef kind)

{

MultipathRingsRoutingControlMessage *ctrlMsg =

new MultipathRingsRoutingControlMessage("Multipath routing control message",NETWORK_CONTROL_MESSAGE);

ctrlMsg->setMultipathRingsRoutingControlMessageKind(kind);

ctrlMsg->setLevel(currentLevel);

ctrlMsg->setSinkID(currentSinkID);

toApplicationLayer(ctrlMsg);

}

void MultipathRingsRouting::timerFiredCallback(int index)

{

if (index != TOPOLOGY_SETUP_TIMEOUT)

return;

isScheduledNetSetupTimeout = false;

if (tmpLevel == NO_LEVEL) {

setTimer(TOPOLOGY_SETUP_TIMEOUT, netSetupTimeout);

isScheduledNetSetupTimeout = true;

} else if (currentLevel == NO_LEVEL) {

//Broadcast to all nodes of currentLevel-1

currentLevel = tmpLevel + 1;

currentSinkID = tmpSinkID;

if (!isConnected) {

isConnected = true;

sendControlMessage(MPRINGS_CONNECTED_TO_TREE);

trace() << "Connected to " << currentSinkID << " at level " << currentLevel;

if (!TXBuffer.empty())

processBufferedPacket();

} else {

sendControlMessage(MPRINGS_TREE_LEVEL_UPDATED);

trace() << "Reconnected to " << currentSinkID << " at level " << currentLevel;

}

sendTopologySetupPacket();

}

tmpLevel = isSink ? 0 : NO_LEVEL;

tmpSinkID = isSink ? self : NO_SINK;

}

void MultipathRingsRouting::processBufferedPacket()

{

while (!TXBuffer.empty()) {

toMacLayer(TXBuffer.front(), BROADCAST_MAC_ADDRESS);

TXBuffer.pop();

}

}

void MultipathRingsRouting::fromApplicationLayer(cPacket * pkt, const char *destination)

{

string dst(destination);

MultipathRingsRoutingPacket *netPacket =

new MultipathRingsRoutingPacket("Multipath rings routing data packet", NETWORK_LAYER_PACKET);

netPacket->setMultipathRingsRoutingPacketKind(MPRINGS_DATA_PACKET);

netPacket->setSource(SELF_NETWORK_ADDRESS);

netPacket->setDestination(destination);

netPacket->setSinkID(currentSinkID);

netPacket->setSenderLevel(currentLevel);

encapsulatePacket(netPacket, pkt);

if (dst.compare(SINK_NETWORK_ADDRESS) == 0 || dst.compare(PARENT_NETWORK_ADDRESS) == 0) {

netPacket->setSequenceNumber(currentSequenceNumber);

currentSequenceNumber++;

if (bufferPacket(netPacket)) {

if (isConnected)

processBufferedPacket();

else

sendControlMessage(MPRINGS_NOT_CONNECTED);

} else {

//Here we could send a control message to upper layer informing that our buffer is full

}

} else {//++++ need to control flooding

toMacLayer(netPacket, BROADCAST_MAC_ADDRESS);

}

}

void MultipathRingsRouting::fromMacLayer(cPacket * pkt, int macAddress, double rssi, double lqi)

{

MultipathRingsRoutingPacket *netPacket = dynamic_cast <MultipathRingsRoutingPacket*>(pkt);

if (!netPacket)

return;

switch (netPacket->getMultipathRingsRoutingPacketKind()) {

case MPRINGS_TOPOLOGY_SETUP_PACKET:{

if (isSink)

break;

if (!isScheduledNetSetupTimeout) {

isScheduledNetSetupTimeout = true;

setTimer(TOPOLOGY_SETUP_TIMEOUT, netSetupTimeout);

tmpLevel = NO_LEVEL;

tmpSinkID = NO_SINK;

}

if (tmpLevel == NO_LEVEL || tmpLevel > netPacket->getSenderLevel()) {

tmpLevel = netPacket->getSenderLevel();

tmpSinkID = netPacket->getSinkID();

}

break;

}

case MPRINGS_DATA_PACKET:{

string dst(netPacket->getDestination());

string src(netPacket->getSource());

int senderLevel = netPacket->getSenderLevel();

int sinkID = netPacket->getSinkID();

if (dst.compare(BROADCAST_NETWORK_ADDRESS) == 0 ||

dst.compare(SELF_NETWORK_ADDRESS) == 0) {

// We are not filtering packets that are sent to this node directly or to

// broadcast network address, making application layer responsible for them

toApplicationLayer(pkt->decapsulate());

} else if (dst.compare(SINK_NETWORK_ADDRESS) == 0) {

if (senderLevel == currentLevel + 1) {

if (self == sinkID) {

// Packet is for this node, if filter passes, forward it to application

if (isNotDuplicatePacket(pkt))

toApplicationLayer(decapsulatePacket(pkt));

else

trace() << "Discarding duplicate packet from node " << src;

} else if (sinkID == currentSinkID) {

// We want to rebroadcast this packet since we are not its destination

// For this, a copy of the packet is created and sender level field is

// updated before calling toMacLayer() function

MultipathRingsRoutingPacket *dupPacket = netPacket->dup();

dupPacket->setSenderLevel(currentLevel);

toMacLayer(dupPacket, BROADCAST_MAC_ADDRESS);

}

}

} else if (dst.compare(PARENT_NETWORK_ADDRESS) == 0) {

if (senderLevel == currentLevel + 1 && sinkID == currentSinkID) {

// Packet is for this node, if filter passes, forward it to application

if (isNotDuplicatePacket(pkt))

toApplicationLayer(decapsulatePacket(pkt));

else

trace() << "Discarding duplicate packet from node " << src;

}

}

break;

}

}

}

Текстфайла omnetpp.ini.

[General]

include ../Parameters/Castalia.ini

sim-time-limit = 600s

SN.field_x = 100# meters

SN.field_y = 100# meters

SN.numNodes = 36

SN.deployment = "6x6"

SN.node[*].Communication.Radio.RadioParametersFile = "../Parameters/Radio/CC2420.txt"

SN.node[*].Communication.RoutingProtocolName = "MultipathRingsRouting"

SN.node[*].Communication.MACProtocolName = "TMAC"

SN.node[*].ApplicationName = "DataToSink"

SN.node[*].Communication.Routing.collectTraceInfo = true

SN.node[3].Application.isSink = true

[Config varyTxPower]

SN.node[*].Communication.Radio.TxOutputPower = ${TXpower="0dBm","-1dBm","-3dBm","-5dBm"}

[Config varySigma]

SN.wirelessChannel.sigma = ${Sigma=0,1,3,5}

Размещено на Allbest.ru

Дата: 2019-05-29, просмотров: 204.