C++代写:CS345 Sensor Networks and Mobile Data Communications

完成提供的代码的Sensor Network的相关开发。

Sensor Network

Introduction

Two villages 10 kilometres apart communicate through a Delay Tolerant Network (DTN).
Village 1, which has the transceiver Node 0, sends packets to transceiver Node 1. Node 1 is located in a bus that travels to the vicinity of Village 2, where it will transfer the packets to transceiver Node 2. The position of all nodes is depicted in Fig. 1,

Node operation

Village 1 - Node 0

Several readings are generated by Node 0 at a rate of 1 reading per second. These readings are stamped with the order in which they are generated and stored in a buffer. The elements in the buffer are represented in the simulation by two variables: head and tail. The buffer in Node 0 can only accommodate three readings; when the buffer is full, the oldest reading in the buffer is thrown away. Assuming no data is transmitted to Node 1, the contents of Node 0’s buffer change as tabulated in Table 1.

As long as the buffer is not empty, Node 0 encapsulates the buffer’s contents into a packet and transmits it to Node 1 at the rate of 4 packets per second. Upon receiving an acknowledgement from Node 1, Node 0 clears the contents of its buffer.

The bus - Node 1

After receiving a data packet from Node 0, Node 1 stores the contents of the packet into its buffer, and then acknowledges the reception of the packet. After acknowledging the packet, Node 1 repeatedly transmits data packets to Node 2 at the rate of 4 packets per second. Node 1 also encapsulates its buffer into a packet. Node 1 only stops transmitting a data packet upon receiving an acknowledgement from Node 2. Note, however, that Node 1’s buffer can change before it can successfully send a packet to Node 2. This will happen for instance when it receives a new packet from Node 0.

Village 2- Node 2

Upon receiving a data packet from Node 1, Node 2 sends an acknowledgement.

Methods

Use code CS345_BASE_2023.cc, which is available on the module webpage, to complete this coursework. The bus as simulated in the code does not move. You can verify this by running the code: it is only the bus and Village 1 that interact.

a. Introduce a mobility model such that Node 1 moves at a constant speed of 20m/s. Make sure that the bus moves in a straight line up to the x-coordinate of Village 2 (Node 1 should stop once it reaches this destination). After implementing the mobility of the bus, make sure that all nodes interact according to the behaviour described before.

b. Determine the transmission range of Village 1 and Village 2 and the region where the bus can receive/transmit to both villages (if any). When running your simulations, make sure that the duration of the simulation is long enough for Node 1 to move to the same x-coordinate as that of Node 2.

c. Modify the code so that every time Node 2 receives a unique packet, it also prints the number of readings received so far.

d. Plot the relationship between the speed of Node 1, distance d, and the number of readings received by Node 2. To this end, test a speed from 20m/s to 200m/s (increments of 10m/s) and a distance d from 3m to 303m (increments of 6 m). Note that this relationship can be plotted in different ways, e.g., line plots or 3D plots.
How does the speed of Node 1 and distance d affect the number of readings received by Node 2? Explain.

e. Modify the behaviour of Node 1 so that it keeps all received readings in its buffer.
For example:
Node 1’s current buffer: [1, 2, 3]
EVENT: data packet is received by Node 1 with readings [4, 5, 6]
Node 1’s new buffer: [1, 2, 3, 4, 5, 6]

f. Repeat the experiment in II.d, but this time using the modified code from II.e. Plot the relationship between the speed of Node 1, distance d, and the number of readings received by Node 2. Explain any differences with the plot obtained in II.d.

g. Add a mobile node (Node 3) to the DTN. This additional node must be initially located to the left of Node 1 at a distance d2 = 250 m (see Fig. 3). Node 3 must have the same y-coordinate and speed as those of Node 1. Node 3 must have the same behaviour as that of Node 1 (after all previous modifications introduced); i.e., it should be able to receive packets from Node 0 and transmit packets to Node 2.

Note that by adding Node 3 to the DTN, the following aspects should be considered:

  • Node 0 is originally hard-coded to transmit exclusively to Node 1. You should modify Node 0’s behaviour so that it can transmit (broadcast) to both Node 1 and Node 3. Hint: you may use the method SetAllowBroadcast.
  • Node 2 should be able to receive data packets from Node 1 and Node 3. Node 2 must be able to properly count the number of readings received. It is possible for the readings transmitted by Node 1 and Node 3 to overlap. For example, Node 1 may transmit readings 1-6, while Node 3 may transmit readings 4-7. The total number of received readings, in this case, is 7; i.e., [1, 2, 3, 4, 5, 6, 7]. It is also possible for Node 1 and Node 3 to transmit different readings. For example, Node 1 may transmit readings 1-6, while Node 3 may transmit readings 10-12. The total number of received readings in this case is 9; i.e., [1, 2, 3, 4, 5, 6, 10, 11, 12]. Node 2 must be able to deal with both cases properly.

h. Plot the relationship between distance d2, as depicted in Fig. 3, distance d, and the total number of readings received by Node 2. Set the speed of Node 1 and Node 3 to
20m/s. Test distance d from 3m to 303m (increments of 6 m). Test distance d2 from
50m to 1000m (increments of 50 m). When running your simulations, make sure that the duration of the simulation is long enough for Node 3 to move to the same xcoordinate as that of Node 2. Explain and discuss any differences in the plot compared to the one obtained in II.f for a speed of 20m/s.

Deliverables

Submit the following via Tabula:

  1. A report with a description of how the DTN was modified according to each subsection of Section II, as well as the requested explanations, discussions, and plots. Make sure to include snippets of code showing your modifications to the code. Cleary explain these modifications.
  2. Your final solution for II.g as a cc file. Please make sure that the submitted code compiles and works correctly before submitting.

A total of 10 marks are available for the quality and presentation of reports, as well as the organization and explanation of your code (comment your code appropriately to indicate the changes made). Documents should be clearly and logically structured, well-written, and adequately proof-read before submission. The suggested length is between 1600-1800 words. The standard department late penalties and plagiarism policies are in effect.