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
26using namespace ns3;
34{
35public:
38private:
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
72int 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));
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}
void Run(ObjectFactory &factory, uint32_t pop, uint32_t total, uint32_t runs, Ptr< RandomVariableStream > eventStream, bool calRev)
Perform the runs for a single scheduler type.
Constructs a JakesPropagationlossModel and print the loss value as a function of time into std::cout.
Ptr< MobilityModel > m_secondMobility
second Mobility
Ptr< MobilityModel > m_firstMobility
first Mobility
Ptr< PropagationLossModel > m_loss
loss
Parse command-line arguments.
Definition: command-line.h:229
An identifier for simulation events.
Definition: event-id.h:54
void SetPosition(const Vector &position)
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.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
Definition: time.cc:418
Hold an unsigned integer type.
Definition: uinteger.h:44
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
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1245
Every class exported by the ns3 library is enclosed in the ns3 namespace.
cmd
Definition: second.py:43