src/lte/model/trace-fading-loss-model.cc
author Marco Miozzo <marco.miozzo@cttc.es>
Wed, 07 Sep 2011 12:39:16 +0200
changeset 8220 85a6d922f416
child 8270 a6461404c925
permissions -rw-r--r--
Add class for managing fading based on traces
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
/*
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
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
 *
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    18
 * Author: Giuseppe Piro  <g.piro@poliba.it>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    19
 * Author: Marco Miozzo <marco.miozzo@cttc.es>
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
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    23
#include "trace-fading-loss-model.h"
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>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    27
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    28
NS_LOG_COMPONENT_DEFINE ("TraceFadingLossModel");
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    29
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    30
namespace ns3 {
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    31
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    32
  NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    33
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    34
TraceFadingLossModel::TraceFadingLossModel ()
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    35
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    36
  SetNext (NULL);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    37
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    38
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    39
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    40
TraceFadingLossModel::~TraceFadingLossModel ()
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    41
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    42
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    43
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    44
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    45
TypeId
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    46
TraceFadingLossModel::GetTypeId (void)
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
  static TypeId tid = TypeId ("ns3::TraceFadingLossModel")
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    49
    .SetParent<SpectrumPropagationLossModel> ()
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    50
  ;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    51
  return tid;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    52
}
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
Ptr<SpectrumValue>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    57
TraceFadingLossModel::DoCalcRxPowerSpectralDensity (
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    58
  Ptr<const SpectrumValue> txPsd,
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    59
  Ptr<const MobilityModel> a,
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    60
  Ptr<const MobilityModel> b) const
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    61
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    62
  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
    63
  
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    64
  Ptr<JakesFadingLossModel> c = GetFadingChannelRealization (a,b);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    65
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    66
  Ptr<SpectrumValue> rxPsd = Copy<SpectrumValue> (txPsd);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    67
  Values::iterator vit = rxPsd->ValuesBegin ();
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    68
  
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    69
  Vector aSpeedVector = a->GetVelocity ();
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    70
  Vector bSpeedVector = b->GetVelocity ();
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    71
  
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    72
  double speed = sqrt (pow (aSpeedVector.x-bSpeedVector.x,2) +  pow (aSpeedVector.y-bSpeedVector.y,2));
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    73
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    74
  NS_LOG_FUNCTION (this << *rxPsd);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    75
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    76
  int subChannel = 0;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    77
  while (vit != rxPsd->ValuesEnd ())
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    78
    {
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    79
      NS_ASSERT (subChannel < 100);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    80
      if (*vit != 0.)
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    81
        {
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    82
          double fading = c->GetValue (subChannel, speed);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    83
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    84
          double power = *vit; // in Watt/Hz
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    85
          power = 10 * log10 (180000 * power); // in dB
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    86
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    87
          NS_LOG_FUNCTION (this << subChannel << *vit  << power << fading);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    88
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    89
          *vit = pow (10., ((power + fading) / 10)) / 180000; // in Watt
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    90
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    91
          NS_LOG_FUNCTION (this << subChannel << *vit);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    92
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    93
        }
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    94
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    95
      ++vit;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    96
      ++subChannel;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    97
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    98
    }
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    99
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   100
  NS_LOG_FUNCTION (this << *rxPsd);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   101
  return rxPsd;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   102
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   103
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   104
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   105
void
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   106
TraceFadingLossModel::CreateFadingChannelRealization (Ptr<const MobilityModel> enbMobility, Ptr<const MobilityModel> ueMobility)
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   107
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   108
  NS_LOG_FUNCTION (this << enbMobility << ueMobility);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   109
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   110
  Ptr<JakesFadingLossModel> c = CreateObject<JakesFadingLossModel> ();
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   111
  ChannelRealizationId_t mobilities = std::make_pair (enbMobility, ueMobility);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   112
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   113
  NS_LOG_FUNCTION (this <<
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   114
                   "insert new channel realization, m_channelRealizationMap.size () = "
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   115
                        << m_channelRealizationMap.size ());
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   116
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   117
  m_channelRealizationMap.insert ( std::pair<ChannelRealizationId_t,Ptr<JakesFadingLossModel> > (mobilities, c) );
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   118
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   119
  NS_LOG_FUNCTION (this <<
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   120
                   "m_channelRealizationMap.size () = "
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   121
                        << m_channelRealizationMap.size ());
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   122
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   123
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   124
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   125
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   126
Ptr<JakesFadingLossModel>
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   127
TraceFadingLossModel::GetFadingChannelRealization (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   128
{
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   129
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   130
  NS_LOG_FUNCTION (this << a << b);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   131
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   132
  std::map <ChannelRealizationId_t, Ptr<JakesFadingLossModel> >::const_iterator it;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   133
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   134
  ChannelRealizationId_t mobilities = std::make_pair (a,b);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   135
  it = m_channelRealizationMap.find (mobilities);
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   136
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   137
  return it->second;
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   138
}
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   139
85a6d922f416 Add class for managing fading based on traces
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   140
} // namespace ns3