src/lte/model/trace-fading-loss-model.cc
author Nicola Baldo <nbaldo@cttc.es>
Mon, 04 Feb 2013 18:47:25 +0100
changeset 9653 382d27da8905
parent 9063 32755d0516f4
child 9703 681f35b212ff
permissions -rw-r--r--
merged lena-dev with ns-3-dev
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     2
/*
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
     3
 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     4
 *
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     8
 *
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    13
 *
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    17
 *
8274
dd0f697d0c4b TraceFadingLossModel refinement
mmiozzo
parents: 8270
diff changeset
    18
 * Author: Giuseppe Piro  <g.piro@poliba.it>
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    19
 *         Marco Miozzo <mmiozzo@cttc.es>
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    20
 */
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    21
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    22
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    23
#include <ns3/trace-fading-loss-model.h>
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    24
#include <ns3/mobility-model.h>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    25
#include <ns3/spectrum-value.h>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    26
#include <ns3/log.h>
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    27
#include <ns3/string.h>
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    28
#include <ns3/double.h>
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    29
#include "ns3/uinteger.h"
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    30
#include <fstream>
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    31
#include <ns3/simulator.h>
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    32
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    33
NS_LOG_COMPONENT_DEFINE ("TraceFadingLossModel");
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    34
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    35
namespace ns3 {
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    36
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    37
NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    38
  
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    39
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    40
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    41
TraceFadingLossModel::TraceFadingLossModel ()
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    42
{
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    43
  NS_LOG_FUNCTION (this);
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    44
  SetNext (NULL);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    45
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    46
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    47
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    48
TraceFadingLossModel::~TraceFadingLossModel ()
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    49
{
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    50
  m_fadingTrace.clear ();
8346
c54981e1e269 Valgrind-error fix: deallocate random variables in TraceFadingLossModel destructor
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8281
diff changeset
    51
  m_windowOffsetsMap.clear ();
c54981e1e269 Valgrind-error fix: deallocate random variables in TraceFadingLossModel destructor
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8281
diff changeset
    52
  m_startVariableMap.clear ();
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    53
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    54
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    55
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    56
TypeId
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    57
TraceFadingLossModel::GetTypeId (void)
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    58
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    59
  static TypeId tid = TypeId ("ns3::TraceFadingLossModel")
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    60
    .SetParent<SpectrumPropagationLossModel> ()
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    61
    .AddConstructor<TraceFadingLossModel> ()
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    62
    .AddAttribute ("TraceFilename",
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    63
                   "Name of file to load a trace from.",
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    64
                   StringValue (""),
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    65
                   MakeStringAccessor (&TraceFadingLossModel::SetTraceFileName),
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    66
                   MakeStringChecker ())
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    67
    .AddAttribute ("TraceLength",
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    68
                  "The total length of the fading trace (default value 10 s.)",
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    69
                  TimeValue (Seconds (10.0)),
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    70
                  MakeTimeAccessor (&TraceFadingLossModel::SetTraceLength),
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    71
                  MakeTimeChecker ())
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    72
    .AddAttribute ("SamplesNum",
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    73
                  "The number of samples the trace is made of (default 10000)",
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    74
                   UintegerValue (10000),
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    75
                   MakeUintegerAccessor (&TraceFadingLossModel::m_samplesNum),
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    76
                   MakeUintegerChecker<uint32_t> ())
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    77
    .AddAttribute ("WindowSize",
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    78
                  "The size of the window for the fading trace (default value 0.5 s.)",
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    79
                  TimeValue (Seconds (0.5)),
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    80
                  MakeTimeAccessor (&TraceFadingLossModel::m_windowSize),
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
    81
                  MakeTimeChecker ())
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    82
    .AddAttribute ("RbNum",
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    83
                    "The number of RB the trace is made of (default 100)",
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    84
                    UintegerValue (100),
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    85
                   MakeUintegerAccessor (&TraceFadingLossModel::m_rbNum),
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    86
                   MakeUintegerChecker<uint8_t> ())
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    87
  ;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    88
  return tid;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    89
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    90
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    91
void
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    92
TraceFadingLossModel::SetTraceFileName (std::string fileName)
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    93
{
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    94
  NS_LOG_FUNCTION (this << "Set Fading Trace " << fileName);
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    95
  
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    96
  m_traceFile = fileName;
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    97
}
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    98
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
    99
void 
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   100
TraceFadingLossModel::SetTraceLength (Time t)
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   101
{
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   102
  m_traceLength = t;
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   103
}
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   104
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   105
void 
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   106
TraceFadingLossModel::DoStart ()
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   107
{
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   108
  LoadTrace ();
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   109
}
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   110
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   111
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   112
void
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   113
TraceFadingLossModel::LoadTrace ()
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   114
{
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   115
  NS_LOG_FUNCTION (this << "Loading Fading Trace " << m_traceFile);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   116
  std::ifstream ifTraceFile;
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   117
  ifTraceFile.open (m_traceFile.c_str (), std::ifstream::in);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   118
  m_fadingTrace.clear ();
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   119
  if (!ifTraceFile.good ())
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   120
    {
8279
0f5fdc0143c1 Add matlab script with fading trace generator
mmiozzo
parents: 8274
diff changeset
   121
      NS_LOG_INFO (this << " File: " << m_traceFile);
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   122
      NS_ASSERT_MSG(ifTraceFile.good (), " Fading trace file not found");
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   123
    }
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   124
8281
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   125
//   NS_LOG_INFO (this << " length " << m_traceLength.GetSeconds ());
a6edf2b38054 Lena Helper updated for managing fading module and lena-fading.cc example works
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8279
diff changeset
   126
//   NS_LOG_INFO (this << " RB " << (uint32_t)m_rbNum << " samples " << m_samplesNum);
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   127
  for (uint32_t i = 0; i < m_rbNum; i++)
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   128
    {
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   129
      FadingTraceSample rbTimeFadingTrace;
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   130
      for (uint32_t j = 0; j < m_samplesNum; j++)
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   131
        {
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   132
          double sample;
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   133
          ifTraceFile >> sample;
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   134
          rbTimeFadingTrace.push_back (sample);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   135
        }
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   136
      m_fadingTrace.push_back (rbTimeFadingTrace);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   137
    }
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   138
  m_timeGranularity = m_traceLength.GetMilliSeconds () / m_samplesNum;
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   139
  m_lastWindowUpdate = Simulator::Now ();
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   140
}
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   141
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   142
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   143
Ptr<SpectrumValue>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   144
TraceFadingLossModel::DoCalcRxPowerSpectralDensity (
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   145
  Ptr<const SpectrumValue> txPsd,
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   146
  Ptr<const MobilityModel> a,
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   147
  Ptr<const MobilityModel> b) const
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   148
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   149
  NS_LOG_FUNCTION (this << *txPsd << a << b);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   150
  
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   151
  std::map <ChannelRealizationId_t, int >::iterator itOff;
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   152
  ChannelRealizationId_t mobilityPair = std::make_pair (a,b);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   153
  itOff = m_windowOffsetsMap.find (mobilityPair);
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   154
  if (itOff!=m_windowOffsetsMap.end ())
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   155
    {
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   156
      if (Simulator::Now ().GetSeconds () >= m_lastWindowUpdate.GetSeconds () + m_windowSize.GetSeconds ())
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   157
        {
9055
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   158
          // update all the offsets
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   159
          NS_LOG_INFO ("Fading Windows Updated");
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   160
          std::map <ChannelRealizationId_t, int >::iterator itOff2;
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   161
          for (itOff2 = m_windowOffsetsMap.begin (); itOff2 != m_windowOffsetsMap.end (); itOff2++)
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   162
            {
9057
227b3882f459 merge ns-3-lena-dev with ns-3-dev
Nicola Baldo <nbaldo@cttc.es>
parents: 9056 8987
diff changeset
   163
              std::map <ChannelRealizationId_t, Ptr<UniformRandomVariable> >::iterator itVar;
9055
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   164
              itVar = m_startVariableMap.find ((*itOff2).first);
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   165
              (*itOff2).second = (*itVar).second->GetValue ();
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   166
            }
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   167
          m_lastWindowUpdate = Simulator::Now ();
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   168
        }
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   169
    }
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   170
  else
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   171
    {
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   172
      NS_LOG_LOGIC (this << "insert new channel realization, m_windowOffsetMap.size () = " << m_windowOffsetsMap.size ());
8987
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   173
      Ptr<UniformRandomVariable> startV = CreateObject<UniformRandomVariable> ();
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   174
      startV->SetAttribute ("Min", DoubleValue (1.0));
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   175
      startV->SetAttribute ("Max", DoubleValue ((m_traceLength.GetSeconds () - m_windowSize.GetSeconds ()) * 1000.0));
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   176
      ChannelRealizationId_t mobilityPair = std::make_pair (a,b);
8987
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   177
      m_startVariableMap.insert (std::pair<ChannelRealizationId_t,Ptr<UniformRandomVariable> > (mobilityPair, startV));
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   178
      m_windowOffsetsMap.insert (std::pair<ChannelRealizationId_t,int> (mobilityPair, startV->GetValue ()));
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   179
    }
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   180
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   181
  
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   182
  Ptr<SpectrumValue> rxPsd = Copy<SpectrumValue> (txPsd);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   183
  Values::iterator vit = rxPsd->ValuesBegin ();
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   184
  
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   185
  //Vector aSpeedVector = a->GetVelocity ();
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   186
  //Vector bSpeedVector = b->GetVelocity ();
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   187
  
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 9057
diff changeset
   188
  //double speed = std::sqrt (std::pow (aSpeedVector.x-bSpeedVector.x,2) + std::pow (aSpeedVector.y-bSpeedVector.y,2));
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   189
8596
0740902f6eb1 use proper log macros in trace-fading-loss-model.cc
Nicola Baldo <nbaldo@cttc.es>
parents: 8346
diff changeset
   190
  NS_LOG_LOGIC (this << *rxPsd);
8883
8fee8c73c2e9 Update Fading module for iter-cell interference and encaspulate the channels realization within the module itself
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8596
diff changeset
   191
  NS_ASSERT (!m_fadingTrace.empty ());
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   192
  int now_ms = static_cast<int> (Simulator::Now ().GetMilliSeconds () * m_timeGranularity);
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   193
  int lastUpdate_ms = static_cast<int> (m_lastWindowUpdate.GetMilliSeconds () * m_timeGranularity);
9056
caa25bcd1fbd Update TraceFadingLossModel for circular windowing in fading traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9055
diff changeset
   194
  int index = ((*itOff).second + now_ms - lastUpdate_ms) % m_samplesNum;
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   195
  int subChannel = 0;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   196
  while (vit != rxPsd->ValuesEnd ())
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   197
    {
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   198
      NS_ASSERT (subChannel < 100);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   199
      if (*vit != 0.)
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   200
        {
8270
a6461404c925 Move fading trace managment in TraceFadingLossModel with single instance of the trace
mmiozzo
parents: 8220
diff changeset
   201
          double fading = m_fadingTrace.at (subChannel).at (index);
9055
66a5f5805985 Bug-fix in TraceFadingLossModel: windows offset update
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8883
diff changeset
   202
          NS_LOG_INFO (this << " FADING now " << now_ms << " offset " << (*itOff).second << " id " << index << " fading " << fading);
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   203
          double power = *vit; // in Watt/Hz
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 9057
diff changeset
   204
          power = 10 * std::log10 (180000 * power); // in dB
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   205
8596
0740902f6eb1 use proper log macros in trace-fading-loss-model.cc
Nicola Baldo <nbaldo@cttc.es>
parents: 8346
diff changeset
   206
          NS_LOG_LOGIC (this << subChannel << *vit  << power << fading);
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   207
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 9057
diff changeset
   208
          *vit = std::pow (10., ((power + fading) / 10)) / 180000; // in Watt
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   209
8596
0740902f6eb1 use proper log macros in trace-fading-loss-model.cc
Nicola Baldo <nbaldo@cttc.es>
parents: 8346
diff changeset
   210
          NS_LOG_LOGIC (this << subChannel << *vit);
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   211
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   212
        }
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   213
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   214
      ++vit;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   215
      ++subChannel;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   216
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   217
    }
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   218
8596
0740902f6eb1 use proper log macros in trace-fading-loss-model.cc
Nicola Baldo <nbaldo@cttc.es>
parents: 8346
diff changeset
   219
  NS_LOG_LOGIC (this << *rxPsd);
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   220
  return rxPsd;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   221
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   222
8987
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   223
int64_t
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   224
TraceFadingLossModel::AssignStreams (int64_t stream)
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   225
{
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   226
  NS_LOG_FUNCTION (this << stream);
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   227
  int64_t currentStream = stream;
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   228
  std::map <ChannelRealizationId_t, Ptr<UniformRandomVariable> >::iterator itVar;
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   229
  itVar = m_startVariableMap.begin ();
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   230
  while (itVar!=m_startVariableMap.end ())
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   231
    {
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   232
      (*itVar).second->SetStream (currentStream);
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   233
      currentStream += 1;
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   234
    }
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   235
  return (currentStream - stream);
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   236
}
03b1accee8d1 Replace src/lte usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8883
diff changeset
   237
8220
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   238
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   239
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   240
} // namespace ns3