src/lte/model/lte-phy.cc
author Nicola Baldo <nbaldo@cttc.es>
Thu, 26 Jan 2012 14:51:33 +0100
changeset 8589 426a5a05ec49
parent 8253 6faee3d1d1d0
child 8670 8f63d16fb2e8
permissions -rw-r--r--
fixed LtePhy::SetMacChDelay
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Mileti? <rivanvx@gmail.com>
parents: 6852
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     2
/*
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     3
 * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     4
 *
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     8
 *
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    12
 * GNU General Public License for more details.
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    13
 *
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    17
 *
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    18
 * Author: Giuseppe Piro  <g.piro@poliba.it>
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    19
 *         Marco Miozzo <mmiozzo@cttc.es>
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    20
 */
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    21
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    22
#include <ns3/waveform-generator.h>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    23
#include <ns3/object-factory.h>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    24
#include <ns3/log.h>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    25
#include <math.h>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    26
#include <ns3/simulator.h>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    27
#include "ns3/spectrum-error-model.h"
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    28
#include "lte-phy.h"
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    29
#include "lte-net-device.h"
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    30
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    31
NS_LOG_COMPONENT_DEFINE ("LtePhy");
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    32
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    33
namespace ns3 {
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    34
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    35
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    36
NS_OBJECT_ENSURE_REGISTERED (LtePhy);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    37
7980
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    38
LtePhy::LtePhy ()
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    39
{
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    40
  NS_LOG_FUNCTION (this);
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    41
  NS_FATAL_ERROR ("This constructor should not be called");
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    42
}
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    43
7980
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    44
LtePhy::LtePhy (Ptr<LteSpectrumPhy> dlPhy, Ptr<LteSpectrumPhy> ulPhy)
7981
aacecd825d99 noise figure attribute
Nicola Baldo <nbaldo@cttc.es>
parents: 7980
diff changeset
    45
  : m_downlinkSpectrumPhy (dlPhy),
7980
f07d99163a56 LteSpectrumPhy instances now plugged onto LtePhy via its constructor
Nicola Baldo <nbaldo@cttc.es>
parents: 7949
diff changeset
    46
    m_uplinkSpectrumPhy (ulPhy),
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    47
    m_tti (0.001),
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    48
    m_ulBandwidth (0),
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    49
    m_dlBandwidth (0),
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    50
    m_rbgSize (0),
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    51
    m_macChTtiDelay (1) // 1 TTI delay between MAC and CH
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    52
{
7929
6861206ea815 minor fixes
Nicola Baldo <nbaldo@cttc.es>
parents: 7928
diff changeset
    53
  NS_LOG_FUNCTION (this);
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    54
  for (int i = 0; i < m_macChTtiDelay; i++)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    55
    {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    56
      Ptr<PacketBurst> pb = CreateObject <PacketBurst> ();
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    57
      m_packetBurstQueue.push_back (pb);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    58
    }
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    59
  for (int i = 0; i < m_macChTtiDelay; i++)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    60
    {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    61
      std::list<Ptr<IdealControlMessage> > l;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    62
      m_controlMessagesQueue.push_back (l);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
    63
    }
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    64
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    65
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    66
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    67
TypeId
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    68
LtePhy::GetTypeId (void)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    69
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    70
  static TypeId tid = TypeId ("ns3::LtePhy")
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    71
    .SetParent<Object> ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    72
  ;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    73
  return tid;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    74
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    75
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    76
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    77
LtePhy::~LtePhy ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    78
{
7929
6861206ea815 minor fixes
Nicola Baldo <nbaldo@cttc.es>
parents: 7928
diff changeset
    79
  NS_LOG_FUNCTION (this);
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    80
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    81
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    82
void
6710
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    83
LtePhy::DoDispose ()
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    84
{
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    85
  NS_LOG_FUNCTION (this);
7921
0a504caf445d added more disposal stuff
Nicola Baldo <nbaldo@cttc.es>
parents: 7913
diff changeset
    86
  m_packetBurstQueue.clear ();
0a504caf445d added more disposal stuff
Nicola Baldo <nbaldo@cttc.es>
parents: 7913
diff changeset
    87
  m_controlMessagesQueue.clear ();
0a504caf445d added more disposal stuff
Nicola Baldo <nbaldo@cttc.es>
parents: 7913
diff changeset
    88
  m_downlinkSpectrumPhy->Dispose ();
6710
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    89
  m_downlinkSpectrumPhy = 0;
7921
0a504caf445d added more disposal stuff
Nicola Baldo <nbaldo@cttc.es>
parents: 7913
diff changeset
    90
  m_uplinkSpectrumPhy->Dispose ();
6710
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    91
  m_uplinkSpectrumPhy = 0;
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    92
  m_netDevice = 0;
7913
ed3a9f8a76d7 added DoDispose to lte-phy and lte-spectrum-phy
Nicola Baldo <nbaldo@cttc.es>
parents: 7911
diff changeset
    93
  Object::DoDispose ();
6710
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    94
}
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    95
3cd651349cb6 lte examples now passing valgrind tests
Nicola Baldo <nbaldo@cttc.es>
parents: 6705
diff changeset
    96
void
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    97
LtePhy::SetDevice (Ptr<LteNetDevice> d)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    98
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    99
  NS_LOG_FUNCTION (this << d);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   100
  m_netDevice = d;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   101
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   102
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   103
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   104
Ptr<LteNetDevice>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   105
LtePhy::GetDevice ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   106
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   107
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   108
  return m_netDevice;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   109
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   110
8064
026861f85f53 added SNR test to lte-test-link-adaptation & updated it with new tx psd & noise values
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   111
Ptr<LteSpectrumPhy> 
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   112
LtePhy::GetDownlinkSpectrumPhy ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   113
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   114
  return m_downlinkSpectrumPhy;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   115
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   116
8064
026861f85f53 added SNR test to lte-test-link-adaptation & updated it with new tx psd & noise values
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   117
Ptr<LteSpectrumPhy> 
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   118
LtePhy::GetUplinkSpectrumPhy ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   119
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   120
  return m_uplinkSpectrumPhy;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   121
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   122
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   123
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   124
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   125
LtePhy::SetDownlinkChannel (Ptr<SpectrumChannel> c)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   126
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   127
  NS_LOG_FUNCTION (this << c);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   128
  m_downlinkSpectrumPhy->SetChannel (c);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   129
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   130
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   131
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   132
LtePhy::SetUplinkChannel (Ptr<SpectrumChannel> c)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   133
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   134
  NS_LOG_FUNCTION (this << c);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   135
  m_uplinkSpectrumPhy->SetChannel (c);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   136
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   137
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   138
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   139
LtePhy::SetDownlinkSubChannels (std::vector<int> mask )
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   140
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   141
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   142
  m_listOfDownlinkSubchannel = mask;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   143
  DoSetDownlinkSubChannels ();
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   144
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   145
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   146
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   147
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   148
LtePhy::DoSetDownlinkSubChannels ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   149
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   150
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   151
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   152
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   153
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   154
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   155
LtePhy::SetUplinkSubChannels (std::vector<int> mask )
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   156
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   157
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   158
  m_listOfUplinkSubchannel = mask;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   159
  DoSetUplinkSubChannels ();
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   160
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   161
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   162
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   163
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   164
LtePhy::DoSetUplinkSubChannels ()
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   165
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   166
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   167
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   168
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   169
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   170
std::vector<int>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   171
LtePhy::GetDownlinkSubChannels (void)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   172
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   173
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   174
  return m_listOfDownlinkSubchannel;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   175
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   176
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   177
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   178
std::vector<int>
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   179
LtePhy::GetUplinkSubChannels (void)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   180
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   181
  NS_LOG_FUNCTION (this);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   182
  return m_listOfUplinkSubchannel;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   183
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   184
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   185
void
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   186
LtePhy::SetTti (double tti)
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   187
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   188
  NS_LOG_FUNCTION (this << tti);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   189
  m_tti = tti;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   190
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   191
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   192
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   193
double
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   194
LtePhy::GetTti (void) const
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   195
{
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   196
  NS_LOG_FUNCTION (this << m_tti);
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   197
  return m_tti;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   198
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   199
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   200
void
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   201
LtePhy::DoSetBandwidth (uint8_t ulBandwidth, uint8_t dlBandwidth)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   202
{
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   203
  m_ulBandwidth = ulBandwidth;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   204
  m_dlBandwidth = dlBandwidth;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   205
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   206
  int Type0AllocationRbg[4] = {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   207
    10,     // RGB size 1
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   208
    26,     // RGB size 2
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   209
    63,     // RGB size 3
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   210
    110     // RGB size 4
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   211
  };  // see table 7.1.6.1-1 of 36.213
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   212
  for (int i = 0; i < 4; i++)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   213
    {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   214
      if (dlBandwidth < Type0AllocationRbg[i])
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   215
        {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   216
          m_rbgSize = i + 1;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   217
          break;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   218
        }
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   219
    }
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   220
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   221
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   222
void 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   223
LtePhy::DoSetEarfcn (uint16_t dlEarfcn, uint16_t ulEarfcn)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   224
{
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   225
  m_dlEarfcn = dlEarfcn;
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   226
  m_ulEarfcn = ulEarfcn;
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   227
}
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   228
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   229
uint8_t
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   230
LtePhy::GetRbgSize (void) const
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   231
{
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   232
  return m_rbgSize;
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   233
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   234
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   235
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   236
void
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   237
LtePhy::SetMacChDelay (uint8_t delay)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   238
{
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   239
  m_macChTtiDelay = delay;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   240
  m_packetBurstQueue.resize (delay);
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   241
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   242
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   243
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   244
uint8_t
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   245
LtePhy::GetMacChDelay (void)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   246
{
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   247
  return (m_macChTtiDelay);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   248
}
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   249
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   250
void
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   251
LtePhy::SetMacPdu (Ptr<Packet> p)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   252
{
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   253
  m_packetBurstQueue.at (m_macChTtiDelay - 1)->AddPacket (p);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   254
}
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   255
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   256
Ptr<PacketBurst>
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   257
LtePhy::GetPacketBurst (void)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   258
{
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   259
  if (m_packetBurstQueue.at (0)->GetSize () > 0)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   260
    {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   261
      Ptr<PacketBurst> ret = m_packetBurstQueue.at (0)->Copy ();
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   262
      m_packetBurstQueue.erase (m_packetBurstQueue.begin ());
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   263
      m_packetBurstQueue.push_back (CreateObject <PacketBurst> ());
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   264
      return (ret);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   265
    }
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   266
  else
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   267
    {
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   268
      m_packetBurstQueue.erase (m_packetBurstQueue.begin ());
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   269
      m_packetBurstQueue.push_back (CreateObject <PacketBurst> ());
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   270
      return (0);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   271
    }
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   272
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   273
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   274
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   275
void
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   276
LtePhy::SetControlMessages (Ptr<IdealControlMessage> m)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   277
{
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   278
  m_controlMessagesQueue.at (m_macChTtiDelay - 1).push_back (m);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   279
}
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   280
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   281
std::list<Ptr<IdealControlMessage> >
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   282
LtePhy::GetControlMessages (void)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   283
{
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   284
  if (m_controlMessagesQueue.at (0).size () > 0)
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   285
    {
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   286
      std::list<Ptr<IdealControlMessage> > ret = m_controlMessagesQueue.at (0);
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   287
      m_controlMessagesQueue.erase (m_controlMessagesQueue.begin ());
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   288
      std::list<Ptr<IdealControlMessage> > newlist;
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   289
      m_controlMessagesQueue.push_back (newlist);
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   290
      return (ret);
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   291
    }
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   292
  else
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   293
    {
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   294
      m_controlMessagesQueue.erase (m_controlMessagesQueue.begin ());
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   295
      std::list<Ptr<IdealControlMessage> > newlist;
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   296
      m_controlMessagesQueue.push_back (newlist);
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   297
      std::list<Ptr<IdealControlMessage> > emptylist;
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   298
      return (emptylist);
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8064
diff changeset
   299
    }
7886
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   300
}
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   301
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   302
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   303
void
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   304
LtePhy::DoSetCellId (uint16_t cellId)
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   305
{
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   306
  m_cellId = cellId;
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   307
  m_downlinkSpectrumPhy->SetCellId (cellId);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   308
  m_uplinkSpectrumPhy->SetCellId (cellId);
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   309
}
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   310
b65c16d4da83 LENA project first public release
CTTC
parents: 6852
diff changeset
   311
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   312
} // namespace ns3