Ασύρματες Κινητές Επικοινωνίες Ενότητα 5: Διαχείριση ενέργειας Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Διαχείριση ενέργειας
Σκοποί ενότητας Σκοπός της ενότητας είναι η μελέτη της ενεργειακής συμπεριφοράς των κόμβων ενός ασύρματου δικτύου και η μελέτη της εξασθένισης του σήματος. 5
Περιεχόμενα ενότητας (1/3) Βασικές έννοιες. Αρχεία κεφαλίδας και βασικές παράμετροι. Οι μέθοδοι RemainingEnergy και TotalEnergy. Η μέθοδος main. RxGain, TxGain και CCaMode1Threshold για το Φυσικό επίπεδο. Μοντέλο απωλειών διάδοσης. 6
Περιεχόμενα ενότητας (2/3) Παραμετροποίηση του επιπέδου MAC. Μοντέλο ενέργειας. Καθορισμός διευθύνσεων Internet Protocol (IP). User Datagram Protocol (UDP) server. UDP client. Επίβλεψη ενεργειακής συμπεριφοράς. 7
Περιεχόμενα ενότητας (3/3) Διάρκεια προσομοίωσης. Ασκήσεις. 8
Βασικές έννοιες (1/2) Propagation loss. Εξασθένιση του σήματος. Κατά τη μετάδοση των σημάτων παρατηρείται εξασθένιση της ισχύος τους, που ονομάζεται απώλεια διαδρομής (pathloss). Για τον προσδιορισμό της απώλειας διαδρομής και την περιοχή κάλυψης ενός πομπού υπάρχουν διαθέσιμα πολλά μοντέλα. 9
Βασικές έννοιες (2/2) Propagation delay. Ο χρόνος που χρειάζεται ώστε να φτάσει το σήμα στον προορισμό του. Εξαρτάται από την απόσταση μεταξύ πομπού και δέκτη και την ταχύτητα μετάδοσης. 10
Αρχεία κεφαλίδας και βασικές παράμετροι (1/2) Εισάγουμε τα απαραίτητα αρχεία κεφαλίδας (header files), το namespace που θα χρησιμοποιήσουμε, τις παραμέτρους που μπορούμε να περάσουμε μέσω του τερματικού και το επίπεδο καταγραφής των μηνυμάτων. 11
Αρχεία κεφαλίδας και βασικές παράμετροι (2/2) #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store-module.h" #include "ns3/wifi-module.h" #include "ns3/energy-module.h" #include "ns3/internet-module.h" #include "ns3/applications-module.h" #include <iostream> #include <fstream> #include <vector> #include <string> #include "ns3/netanim-module.h" NS_LOG_COMPONENT_DEFINE ("Lab5"); using namespace ns3; 12
Οι μέθοδοι RemainingEnergy και TotalEnergy (1/2) Υλοποιούμε τη μέθοδο RemainingEnergy. Τυπώνει την εναπομένουσα ενέργεια ενός κόμβου. Επιπλέον, υλοποιούμε τη μέθοδο TotalEnergy. Τυπώνει τη συνολική κατανάλωση της ενέργειας σε ένα κόμβο. 13
Οι μέθοδοι RemainingEnergy και TotalEnergy (2/2) voidremainingenergy (double oldvalue, double remainingenergy){ std::cout << "At "<< Simulator::Now ().GetSeconds () << second: Current remaining energy = " << remainingenergy << "Joules" << std::endl; } voidtotalenergy ( double oldvalue, double totalenergy){ std::cout << "At " << Simulator::Now ().GetSeconds () << second: Total energy consumed = " << totalenergy << "Joules" << std::endl ; } 14
Η μέθοδος main Ορίζουμε τη μέθοδο main. Δημιουργούμε 2 κόμβους στο δίκτυο. Ορίζουμε ότι θα χρησιμοποιείτε το πρότυπο IEEE 802.11b για το φυσικό επίπεδο. intmain (int argc, char *argv[]){ //LogComponentEnable ("EnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("BasicEnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("WifiRadioEnergyModel", LOG_LEVEL_DEBUG); LogComponentEnable("UdpClient", LOG_LEVEL_INFO); LogComponentEnable("UdpServer", LOG_LEVEL_INFO); NodeContainer nodes; nodes.create (2); WifiHelper wifi; wifi.setstandard (WIFI_PHY_STANDARD_80211b); 15
RxGain, TxGain και CCaMode1Threshold για το Φυσικό επίπεδο (1/2) Καθορίζουμε τα RxGain και TxGain. Σχετίζονται με την ποιότητα του λαμβανόμενου και του προς αποστολή σήματος, αντίστοιχα. Ορίζουμε το CCaMode1Threshold. Είναι ένα κατώφλι. Αν η ισχύς του λαμβανόμενου σήματος υπερβεί το κατώφλι, τότε ο κόμβος μεταβαίνει σε κατάσταση CCA_BUSY. 16
RxGain, TxGain και CCaMode1Threshold για το Φυσικό επίπεδο (2/2) YansWifiPhyHelper wifiphy = YansWifiPhyHelper::Default (); wifiphy.set ("RxGain", DoubleValue (1.5)); wifiphy.set ("TxGain", DoubleValue (1.5)); wifiphy.set ("CcaMode1Threshold", DoubleValue (0)); 17
Μοντέλο απωλειών διάδοσης (1/2) Το μοντέλο απωλειών διάδοσης που θα χρησιμοποιηθεί είναι το RangePropagationLossModel. Καθορίζει την απώλεια διάδοσης σε μέτρα. Οι κόμβοι που βρίσκονται σε απόσταση μικρότερη ή ίση με την MaxRange, λαμβάνουν το σήμα. Επιπλέον, ορίζουμε ότι θα χρησιμοποιηθεί το ConstantSpeedPropagationDelayModel, όπου η ταχύτητα μετάδοσης είναι σταθερή. 18
Μοντέλο απωλειών διάδοσης (2/2) YansWifiChannelHelper wifichannel; wifichannel.setpropagationdelay ("ns3::constantspeedpropagationdelaymodel"); wifichannel.addpropagationloss ("ns3::rangepropagationlossmodel","maxrange", DoubleValue (150.0)); Ptr<YansWifiChannel> wifichannelptr = wifichannel.create (); wifiphy.setchannel (wifichannelptr); 19
Παραμετροποίηση του επιπέδου MAC (1/2) Θέτουμε τον τύπο του αλγορίθμου για τον έλεγχο του ρυθμού και υλοποιούμε το επίπεδο MAC για το οποίο ορίζουμε ότι δεν θα παρέχει κάποιο μηχανισμό για Ποιότητα της Υπηρεσίας. Ενεργοποιούμε το μηχανισμό Request to Send / Clear to send (RTS/CTS) κι ορίζουμε τις θέσεις των κόμβων του δικτύου. Καθορίζουμε ότι το δίκτυο υποστηρίζει την αδόμητη δικτύωση (AdHoc). 20
Παραμετροποίηση του επιπέδου MAC (2/2) NqosWifiMacHelper wifimac = NqosWifiMacHelper::Default (); wifi.setremotestationmanager ("ns3::arfwifimanager", "RtsCtsThreshold",StringValue("0")); wifimac.settype ("ns3::adhocwifimac"); NetDeviceContainer devices = wifi.install (wifiphy, wifimac, nodes); MobilityHelper mobility; Ptr<ListPositionAllocator> positionalloc = CreateObject<ListPositionAllocator> (); positionalloc->add (Vector (0.0, 0.0, 0.0)); positionalloc->add (Vector (0.0, 80.0, 0.0)); mobility.setpositionallocator (positionalloc); mobility.setmobilitymodel ("ns3::constantpositionmobilitymodel"); mobility.install (nodes); 21
Μοντέλο ενέργειας (1/2) Ορίζουμε την αρχική ενέργεια των κόμβων. Θέτουμε την ένταση του ηλεκτρικού ρεύματος σε Ampere. Συμβάλει στον υπολογισμό της κατανάλωσης της ενέργειας του κόμβου όταν μεταδίδει πακέτα. Εγκαθιστούμε το μοντέλο ενέργειας (WifiRadioEnergyModel) σε όλους τους κόμβους. 22
Μοντέλο ενέργειας (2/2) BasicEnergySourceHelper basicsourcehelper; basicsourcehelper.set ("BasicEnergySourceInitialEnergyJ", DoubleValue(0.1)); EnergySourceContainer sources = basicsourcehelper.install (nodes); WifiRadioEnergyModelHelper radioenergyhelper; radioenergyhelper.set ("TxCurrentA", DoubleValue(0.02)); DeviceEnergyModelContainer devicemodels = radioenergyhelper.install (devices, sources); 23
Καθορισμός διευθύνσεων IP Εγκαθιστούμε τη στοίβα πρωτοκόλλων TCP κι ορίζουμε τις IP διευθύνσεις των συσκευών. InternetStackHelper internet; internet.install (nodes); Ipv4AddressHelper ipv4; ipv4.setbase ("10.1.5.0", "255.255.255.0"); Ipv4InterfaceContainer interfaces = ipv4.assign (devices); 24
UDP server Δημιουργούμε ένα κόμβο που θα λαμβάνει πακέτα (server), θέτουμε την πόρτα στην οποία θα ακούει και καθορίζουμε τις χρονικές στιγμές έναρξης και λήξης της κίνησης. uint16_t port = 22000; UdpServerHelper server (port); ApplicationContainer apps = server.install (nodes.get (0)); apps.start(seconds(4.0)); apps.stop(seconds(15.0)); 25
UDP client (1/2) Δημιουργούμε τον κόμβο που θα στέλνει την κίνηση στο δίκτυο (client) και θέτουμε κάποιες παραμέτρους. Το χρονικό διάστημα μεταξύ δύο διαδοχικών πακέτων. Το μέγιστο αριθμό πακέτων που μπορεί να στείλει ο client και το μέγεθος του πακέτου. Τις χρονικές στιγμές έναρξης και λήξης της αποστολής πακέτων. 26
UDP client (2/2) UdpClientHelper client (interfaces.getaddress (0), port); client.setattribute("maxpackets", UintegerValue(1000000)); client.setattribute("interval", TimeValue(Seconds(1))); client.setattribute("packetsize", UintegerValue(1024)); ApplicationContainer apps2 = client.install(nodes.get(1)); apps2.start(seconds(4.5)); apps2.stop(seconds(12.5)); 27
Επίβλεψη ενεργειακής συμπεριφοράς Καλούμε τις συναρτήσεις RemainingEnergy και TotalEnergy ώστε να επιβλέπουμε την εναπομένουσα ενέργεια των κόμβων και τη συνολική κατανάλωση ενέργειας κάθε χρονική στιγμή, αντίστοιχα. Ptr<BasicEnergySource> basicsourceptr = DynamicCast<BasicEnergySource> (sources.get (1)); basicsourceptr->traceconnectwithoutcontext ("RemainingEnergy", MakeCallback (&RemainingEnergy)); Ptr<DeviceEnergyModel> basicradiomodelptr = basicsourceptr-> FindDeviceEnergyModels ("ns3::wifiradioenergymodel").get (0); basicradiomodelptr->traceconnectwithoutcontext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy)); 28
Διάρκεια προσομοίωσης Δηλώνουμε τη διάρκεια της προσομοίωσης. Δημιουργούμε το αρχείο.xml για το NetAnim. Simulator::Stop (Seconds (15.0)); AnimationInterface anim ("lab5.xml"); Simulator::Run (); Simulator::Destroy (); return 0; } 29
Απεικόνιση της προσομοίωσης με το NetAnim Ανοίγουμε το αρχείο lab5.xml με το NetAnim. Εικόνα 1. Απεικόνιση της προσομοίωσης από το NetAnim, εμφάνιση μετά την εγκατάσταση του προγράμματος ns-3, ελεύθερο λογισμικό, με άδεια GNU GPLv2 license, διαθέσιμο στο κοινό για έρευνα, ανάπτυξη και χρήση. 30
Ασκήσεις (1/4) 1. Αποθηκεύστε το σενάριο προσομοίωσης σε ένα αρχείο με όνομα lab5.cc, εκτελέστε το και και καταγράψτε τις τελικές τιμές για την εναπομένουσα ενέργεια και τη συνολική κατανάλωση. 2. Ορίστε την απόσταση μεταξύ των δύο κόμβων στα 250 μέτρα κι εκτελέστε πάλι το σενάριο. Δώστε μία σύντομη εξήγηση για τα νέα αποτελέσματα. Επιπλέον, καταγράψτε πάλι τις τελικές τιμές για την εναπομένουσα ενέργεια και τη συνολική κατανάλωση της ενέργειας. 31
Ασκήσεις (2/4) 3. Ορίστε το MaxRange στα 300 μέτρα κι εκτελέστε το σενάριο. Δώστε μία σύντομη εξήγηση για τα νέα αποτελέσματα. 4. Συγκρίνετε τις τιμές που προέκυψαν από την άσκηση 2 με αυτές που προέκυψαν από την άσκηση 3. Δώστε μία σύντομη εξήγηση για τα νέα αποτελέσματα. 5. Αλλάξτε το interval σε 0.01 και καταγράψτε τα αποτελέσματα. Δώστε μία σύντομη εξήγηση. 32
Ασκήσεις (3/4) 6. Αλλάξτε την τιμή TxCurrentA σε 0.0015 και καταγράψτε τα αποτελέσματα. Δώστε μία σύντομη εξήγηση. 7. Ορίστε ο server να λειτουργεί από το δευτερόλεπτο 3 έως το 10 και τον client από το 4 έως το 9. Καταγράψτε τα αποτελέσματα και δώστε μία σύντομη εξήγηση. 33
Ασκήσεις (4/4) Αντικαταστήστε το RangePropagationLossModel με το LogDistancePropagationLossModel (με τις παρακάτω εντολές) και καταγράψτε τα αποτελέσματα. Εξηγήστε πως λειτουργεί το μοντέλο LogDistancePropagationLossModel. wifichannel.addpropagationloss("ns3:: LogDistancePropagationLossModel","E ponent",stringvalue ("3")); 34
Βιβλιογραφία 1. Βασικές Αρχές Ασύρματης Επικοινωνίας, David Tse, Pramod Viswanath, Εκδόσεις Κλειδάριθμος. 2. ΔΙΚΤΥΑ ΚΙΝΗΤΩΝ & ΠΡΟΣΩΠΙΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ, Θεολόγου Μ., Εκδοτικός Οίκος: ΤΖΙΟΛΑ Έτος έκδοσης: 2007 ISBN: 978-960-418-126-1. 3. Εισαγωγή στα ασύρματα συστήματα, Black, Dipiazza, Ferguson. 4. Συστήματα Κινητών Επικοινωνιών, Κανάτας Αθανάσιος, Κωνσταντίνου Φίλιππος, Πάντος Γεώργιος. 35
Τέλος Ενότητας