src/lte/model/lte-spectrum-value-helper.cc
author Nicola Baldo <nbaldo@cttc.es>
Mon, 04 Feb 2013 18:47:25 +0100
changeset 9653 382d27da8905
parent 9077 16e6f501eeef
child 10680 ace43d9baa17
permissions -rw-r--r--
merged lena-dev with ns-3-dev
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>
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    19
 *         Nicola Baldo <nbaldo@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
8106
65bf071cf610 Added execution-time-reference simulation program to perform profiling on the execution time and memory usage.
jnin
parents: 8060
diff changeset
    22
#include <map>
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
    23
#include <cmath>
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    24
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    25
#include <ns3/log.h>
8106
65bf071cf610 Added execution-time-reference simulation program to perform profiling on the execution time and memory usage.
jnin
parents: 8060
diff changeset
    26
#include <ns3/fatal-error.h>
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    27
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    28
#include "lte-spectrum-value-helper.h"
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    29
9077
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    30
// just needed to log a std::vector<int> properly...
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    31
namespace std {
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    32
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    33
ostream&
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    34
operator << (ostream& os, const vector<int>& v)
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    35
{
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    36
  vector<int>::const_iterator it = v.begin ();
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    37
  while (it != v.end ())
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    38
    {
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    39
      os << *it << " " ;
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    40
      ++it;
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    41
    }
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    42
  os << endl;
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    43
  return os;
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    44
}
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    45
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    46
}
16e6f501eeef Really fix bug 1345 - ns-3 should build with clang >= 3.0 (requires -Wno-deprecated due to sgi-hashmap.h)
Vedran Mileti? <rivanvx@gmail.com>
parents: 9063
diff changeset
    47
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    48
NS_LOG_COMPONENT_DEFINE ("LteSpectrumValueHelper");
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    49
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    50
namespace ns3 {
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    51
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    52
/**
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    53
 * Table 5.7.3-1 "E-UTRA channel numbers" from 3GPP TS 36.101
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    54
 * The table was converted to C syntax doing a cut & paste from TS 36.101 and running the following filter:
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    55
 * awk '{if ((NR % 7) == 1) printf("{"); printf ("%s",$0); if ((NR % 7) == 0) printf("},\n"); else printf(", ");}' | sed 's/ – /, /g' 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    56
 */
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    57
struct EutraChannelNumbers
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    58
{
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    59
  uint8_t band;
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    60
  double fDlLow;
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    61
  uint16_t nOffsDl; 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    62
  uint16_t rangeNdl1;
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    63
  uint16_t rangeNdl2;
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    64
  double fUlLow;
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    65
  uint16_t nOffsUl; 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    66
  uint16_t rangeNul1;
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    67
  uint16_t rangeNul2;
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    68
} g_eutraChannelNumbers[] = {
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    69
  { 1, 2110, 0, 0, 599, 1920, 18000, 18000, 18599},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    70
  { 2, 1930, 600, 600, 1199, 1850, 18600, 18600, 19199},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    71
  { 3, 1805, 1200, 1200, 1949, 1710, 19200, 19200, 19949},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    72
  { 4, 2110, 1950, 1950, 2399, 1710, 19950, 19950, 20399},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    73
  { 5, 869, 2400, 2400, 2649, 824, 20400, 20400, 20649},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    74
  { 6, 875, 2650, 2650, 2749, 830, 20650, 20650, 20749},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    75
  { 7, 2620, 2750, 2750, 3449, 2500, 20750, 20750, 21449},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    76
  { 8, 925, 3450, 3450, 3799, 880, 21450, 21450, 21799},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    77
  { 9, 1844.9, 3800, 3800, 4149, 1749.9, 21800, 21800, 22149},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    78
  { 10, 2110, 4150, 4150, 4749, 1710, 22150, 22150, 22749},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    79
  { 11, 1475.9, 4750, 4750, 4949, 1427.9, 22750, 22750, 22949},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    80
  { 12, 728, 5000, 5000, 5179, 698, 23000, 23000, 23179},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    81
  { 13, 746, 5180, 5180, 5279, 777, 23180, 23180, 23279},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    82
  { 14, 758, 5280, 5280, 5379, 788, 23280, 23280, 23379},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    83
  { 17, 734, 5730, 5730, 5849, 704, 23730, 23730, 23849},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    84
  { 18, 860, 5850, 5850, 5999, 815, 23850, 23850, 23999},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    85
  { 19, 875, 6000, 6000, 6149, 830, 24000, 24000, 24149},
8663
5e7f07723483 fixed typo in g_eutraChannelNumbers
Luca Costantino <luca.costantino@gmail.com>
parents: 8253
diff changeset
    86
  { 20, 791, 6150, 6150, 6449, 832, 24150, 24150, 24449},
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    87
  { 21, 1495.9, 6450, 6450, 6599, 1447.9, 24450, 24450, 24599},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    88
  { 33, 1900, 36000, 36000, 36199, 1900, 36000, 36000, 36199},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    89
  { 34, 2010, 36200, 36200, 36349, 2010, 36200, 36200, 36349},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    90
  { 35, 1850, 36350, 36350, 36949, 1850, 36350, 36350, 36949},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    91
  { 36, 1930, 36950, 36950, 37549, 1930, 36950, 36950, 37549},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    92
  { 37, 1910, 37550, 37550, 37749, 1910, 37550, 37550, 37749},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    93
  { 38, 2570, 37750, 37750, 38249, 2570, 37750, 37750, 38249},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    94
  { 39, 1880, 38250, 38250, 38649, 1880, 38250, 38250, 38649},
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
    95
  { 40, 2300, 38650, 38650, 39649, 2300, 38650, 38650, 39649}
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    96
};
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    97
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
    98
#define NUM_EUTRA_BANDS (sizeof (g_eutraChannelNumbers) / sizeof (EutraChannelNumbers))
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
    99
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   100
double 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   101
LteSpectrumValueHelper::GetCarrierFrequency (uint16_t earfcn)
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   102
{
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   103
  NS_LOG_FUNCTION (earfcn);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   104
  if (earfcn < 7000)
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   105
    {
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   106
      // FDD downlink
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   107
      return GetDownlinkCarrierFrequency (earfcn);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   108
    }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   109
  else 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   110
    {
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   111
      // either FDD uplink or TDD (for which uplink & downlink have same frequency)
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   112
      return GetUplinkCarrierFrequency (earfcn);
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   113
    }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   114
}
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   115
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   116
double 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   117
LteSpectrumValueHelper::GetDownlinkCarrierFrequency (uint16_t nDl)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   118
{
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   119
  NS_LOG_FUNCTION (nDl);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   120
  for (uint16_t i = 0; i < NUM_EUTRA_BANDS; ++i)
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   121
    {
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   122
      if ((g_eutraChannelNumbers[i].rangeNdl1 <= nDl)
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   123
          && (g_eutraChannelNumbers[i].rangeNdl2 >= nDl))
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   124
        {
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   125
          NS_LOG_LOGIC ("entry " << i << " fDlLow=" << g_eutraChannelNumbers[i].fDlLow);
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   126
          return 1.0e6 * (g_eutraChannelNumbers[i].fDlLow + 0.1 * (nDl - g_eutraChannelNumbers[i].nOffsDl));
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   127
        }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   128
    }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   129
  NS_LOG_ERROR ("invalid EARFCN " << nDl);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   130
  return 0.0;
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   131
}
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   132
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   133
double 
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   134
LteSpectrumValueHelper::GetUplinkCarrierFrequency (uint16_t nUl)
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   135
{
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   136
  NS_LOG_FUNCTION (nUl);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   137
  for (uint16_t i = 0; i < NUM_EUTRA_BANDS; ++i)
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   138
    {
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   139
      if ((g_eutraChannelNumbers[i].rangeNul1 <= nUl)
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   140
          && (g_eutraChannelNumbers[i].rangeNul2 >= nUl))
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   141
        {
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   142
          NS_LOG_LOGIC ("entry " << i << " fUlLow=" << g_eutraChannelNumbers[i].fUlLow);
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   143
          return 1.0e6 * (g_eutraChannelNumbers[i].fUlLow + 0.1 * (nUl - g_eutraChannelNumbers[i].nOffsUl));
7993
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   144
        }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   145
    }
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   146
  NS_LOG_ERROR ("invalid EARFCN " << nUl);
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   147
  return 0.0;
f95867e65663 EARFCN calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7981
diff changeset
   148
}
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   149
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   150
double 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   151
LteSpectrumValueHelper::GetChannelBandwidth (uint8_t transmissionBandwidth)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   152
{
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   153
  NS_LOG_FUNCTION ((uint16_t) transmissionBandwidth);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   154
  switch (transmissionBandwidth)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   155
    { 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   156
    case 6:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   157
      return 1.4e6;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   158
    case 15:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   159
      return 3.0e6;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   160
    case 25:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   161
      return 5.0e6;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   162
    case 50:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   163
      return 10.0e6;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   164
    case 75:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   165
      return 15.0e6;
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   166
    case 100:
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   167
      return 20.0e6;
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   168
    default:
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   169
      NS_FATAL_ERROR ("invalid bandwidth value " << (uint16_t) transmissionBandwidth);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   170
    }
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   171
}
6705
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
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   174
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   175
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   176
struct LteSpectrumModelId
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   177
{
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   178
  LteSpectrumModelId (uint16_t f, uint8_t b);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   179
  uint16_t earfcn;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   180
  uint8_t  bandwidth;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   181
};
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   182
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   183
LteSpectrumModelId::LteSpectrumModelId (uint16_t f, uint8_t b)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   184
  : earfcn (f), 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   185
    bandwidth (b)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   186
{
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   187
}
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   188
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   189
bool
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   190
operator < (const LteSpectrumModelId& a, const LteSpectrumModelId& b)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   191
{
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   192
  return ( (a.earfcn < b.earfcn) || ( (a.earfcn == b.earfcn) && (a.bandwidth < b.bandwidth) ) );
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   193
}
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   194
 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   195
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   196
static std::map<LteSpectrumModelId, Ptr<SpectrumModel> > g_lteSpectrumModelMap;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   197
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   198
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   199
Ptr<SpectrumModel>
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   200
LteSpectrumValueHelper::GetSpectrumModel (uint16_t earfcn, uint8_t txBandwidthConfiguration)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   201
{
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   202
  NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   203
  Ptr<SpectrumModel> ret;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   204
  LteSpectrumModelId key (earfcn, txBandwidthConfiguration);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   205
  std::map<LteSpectrumModelId, Ptr<SpectrumModel> >::iterator it = g_lteSpectrumModelMap.find (key);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   206
  if (it != g_lteSpectrumModelMap.end ())
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   207
    {
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   208
      ret = it->second;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   209
    }
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   210
  else
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   211
    {
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   212
      double fc = GetCarrierFrequency (earfcn);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   213
      NS_ASSERT_MSG (fc != 0, "invalid EARFCN=" << earfcn);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   214
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   215
      double f = fc - (txBandwidthConfiguration * 180e3 / 2.0);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   216
      Bands rbs;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   217
      for (uint8_t numrb = 0; numrb < txBandwidthConfiguration; ++numrb)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   218
        {
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   219
          BandInfo rb; 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   220
          rb.fl = f;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   221
          f += 90e3;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   222
          rb.fc = f;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   223
          f += 90e3;
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   224
          rb.fh = f;
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   225
          rbs.push_back (rb);
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   226
        }
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   227
      ret = Create<SpectrumModel> (rbs);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   228
      g_lteSpectrumModelMap.insert (std::pair<LteSpectrumModelId, Ptr<SpectrumModel> > (key, ret));
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   229
    }
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   230
  NS_LOG_LOGIC ("returning SpectrumModel::GetUid () == " << ret->GetUid ());
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   231
  return ret;
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   232
}
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   233
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   234
Ptr<SpectrumValue> 
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   235
LteSpectrumValueHelper::CreateTxPowerSpectralDensity (uint16_t earfcn, uint8_t txBandwidthConfiguration, double powerTx, std::vector <int> activeRbs)
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   236
{
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   237
  NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration << powerTx << activeRbs);
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   238
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   239
  Ptr<SpectrumModel> model = GetSpectrumModel (earfcn, txBandwidthConfiguration);
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   240
  Ptr<SpectrumValue> txPsd = Create <SpectrumValue> (model);
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
  // powerTx is expressed in dBm. We must convert it into natural unit.
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8663
diff changeset
   243
  double powerTxW = std::pow (10., (powerTx - 30) / 10);
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   244
8060
f8cef15d3cd0 fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   245
  double txPowerDensity = (powerTxW / (txBandwidthConfiguration * 180000));
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   246
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   247
  for (std::vector <int>::iterator it = activeRbs.begin (); it != activeRbs.end (); it++)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   248
    {
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   249
      int rbId = (*it);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   250
      (*txPsd)[rbId] = txPowerDensity;
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   251
    }
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   252
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   253
  NS_LOG_LOGIC (*txPsd);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   254
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   255
  return txPsd;
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   256
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   257
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   258
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   259
Ptr<SpectrumValue>
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   260
LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint16_t earfcn, uint8_t txBandwidthConfiguration, double noiseFigure)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   261
{
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   262
  NS_LOG_FUNCTION (earfcn << (uint16_t) txBandwidthConfiguration << noiseFigure);
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   263
  Ptr<SpectrumModel> model = GetSpectrumModel (earfcn, txBandwidthConfiguration);
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 8106
diff changeset
   264
  return CreateNoisePowerSpectralDensity (noiseFigure, model);
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   265
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   266
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   267
Ptr<SpectrumValue>
7981
aacecd825d99 noise figure attribute
Nicola Baldo <nbaldo@cttc.es>
parents: 7895
diff changeset
   268
LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (double noiseFigureDb, Ptr<SpectrumModel> spectrumModel)
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   269
{
8015
e8fd3bf1692f flexible spectrum model
Nicola Baldo <nbaldo@cttc.es>
parents: 7993
diff changeset
   270
  NS_LOG_FUNCTION (noiseFigureDb << spectrumModel);
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   271
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   272
8060
f8cef15d3cd0 fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   273
  // see "LTE - From theory to practice"
f8cef15d3cd0 fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   274
  // Section 22.4.4.2 Thermal Noise and Receiver Noise Figure
f8cef15d3cd0 fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   275
  const double kT_dBm_Hz = -174.0;  // dBm/Hz
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8663
diff changeset
   276
  double kT_W_Hz = std::pow (10.0, (kT_dBm_Hz - 30) / 10.0);
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8663
diff changeset
   277
  double noiseFigureLinear = std::pow (10.0, noiseFigureDb / 10.0);
8060
f8cef15d3cd0 fixed TX and noise PSD calculations
Nicola Baldo <nbaldo@cttc.es>
parents: 8015
diff changeset
   278
  double noisePowerSpectralDensity =  kT_W_Hz * noiseFigureLinear;
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   279
7981
aacecd825d99 noise figure attribute
Nicola Baldo <nbaldo@cttc.es>
parents: 7895
diff changeset
   280
  Ptr<SpectrumValue> noisePsd = Create <SpectrumValue> (spectrumModel);
aacecd825d99 noise figure attribute
Nicola Baldo <nbaldo@cttc.es>
parents: 7895
diff changeset
   281
  (*noisePsd) = noisePowerSpectralDensity;
aacecd825d99 noise figure attribute
Nicola Baldo <nbaldo@cttc.es>
parents: 7895
diff changeset
   282
  return noisePsd;
6705
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   283
}
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   284
422c67049471 LTE module form GSoC project
Giuseppe Piro <g.piro@poliba.it>
parents:
diff changeset
   285
} // namespace ns3