A Discrete-Event Network Simulator
API
jakes-propagation-model-example.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2012 Telum (www.telum.ru)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Kirill Andreev <andreev@telum.ru>
19  */
20 #include "ns3/core-module.h"
21 #include "ns3/mobility-module.h"
22 #include "ns3/jakes-propagation-loss-model.h"
23 #include <vector>
24 #include <cmath>
25 
26 using namespace ns3;
34 {
35 public:
38 private:
44 
47  void Next ();
48 
49 };
50 
52  m_step (Seconds (0.0002)) //1/5000 part of the second
53 {
54  m_loss = CreateObject<JakesPropagationLossModel> ();
55  m_firstMobility = CreateObject<ConstantPositionMobilityModel> ();
56  m_secondMobility = CreateObject<ConstantPositionMobilityModel> ();
57  m_firstMobility->SetPosition (Vector (0, 0, 0));
58  m_secondMobility->SetPosition (Vector (10, 0, 0));
59  m_nextEvent = Simulator::Schedule (m_step, &JakesPropagationExample::Next, this);
60 }
61 
63 {
64 }
65 
67 {
68  m_nextEvent = Simulator::Schedule (m_step, &JakesPropagationExample::Next, this);
69  std::cout << Simulator::Now ().As (Time::MS) << " " << m_loss->CalcRxPower (0, m_firstMobility, m_secondMobility) << std::endl;
70 }
71 
72 int main (int argc, char *argv[])
73 {
74  Config::SetDefault ("ns3::JakesProcess::NumberOfOscillators", UintegerValue (100));
75  CommandLine cmd (__FILE__);
76  cmd.Parse (argc, argv);
78  Simulator::Stop (Seconds (1000));
79  Simulator::Run ();
80  Simulator::Destroy ();
81  /*
82  * R script for plotting a distribution:
83  data<-read.table ("data")
84  rayleigh<-(rnorm(1e6)^2+rnorm(1e6)^2)/2
85  qqplot(10*log10(rayleigh), data$V2, main="QQ-plot for improved Jakes model", xlab="Reference Rayleigh distribution [power, dB]", ylab="Sum-of-sinusoids distribution [power, dB]", xlim=c(-45, 10), ylim=c(-45, 10))
86  lines (c(-50, 50), c(-50, 50))
87  abline (v=-50:50*2, h=-50:50*2, col="light grey")
88  */
89 
90  /*
91  * R script to plot autocorrelation function:
92  # Read amplitude distribution:
93  data<-10^(read.table ("data")$V2/20)
94  x<-1:2000/10
95  acf (data, lag.max=200, main="Autocorrelation function of the improved Jakes model", xlab="Time x200 microseconds ", ylab="Autocorrelation")
96  # If we have a delta T = 1/5000 part of the second and doppler freq = 80 Hz
97  lines (x, besselJ(x*80*2*pi/5000, 0)^2)
98  abline (h=0:10/10, col="light grey")
99  */
100  return 0;
101 }
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Returns the Rx Power taking into account all the PropagationLossModel(s) chained to the current one...
Ptr< MobilityModel > m_secondMobility
second Mobility
cmd
Definition: second.py:35
TimeWithUnit As(const enum Unit unit) const
Attach a unit to a Time, to facilitate output in a specific unit.
Definition: time.cc:389
Hold an unsigned integer type.
Definition: uinteger.h:44
Parse command-line arguments.
Definition: command-line.h:226
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< PropagationLossModel > m_loss
loss
void SetPosition(const Vector &position)
Constructs a JakesPropagationlossModel and print the loss value as a function of time into std::cout...
An identifier for simulation events.
Definition: event-id.h:53
Ptr< MobilityModel > m_firstMobility
first Mobility
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1278
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:287