src/lte/model/lte-interference.h
author Nicola Baldo <nbaldo@cttc.es>
Mon, 04 Feb 2013 18:47:25 +0100
changeset 9653 382d27da8905
parent 9562 691b97de80ed
child 10892 3e86fac77082
permissions -rw-r--r--
merged lena-dev with ns-3-dev
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     2
/*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     3
 * Copyright (c) 2009 CTTC
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     4
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     7
 * published by the Free Software Foundation;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     8
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    12
 * GNU General Public License for more details.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    13
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    17
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    18
 * Author: Nicola Baldo <nbaldo@cttc.es>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    19
 */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    20
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    21
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    22
#ifndef LTE_INTERFERENCE_H
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    23
#define LTE_INTERFERENCE_H
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    24
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    25
#include <ns3/object.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    26
#include <ns3/packet.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    27
#include <ns3/nstime.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    28
#include <ns3/spectrum-value.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    29
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    30
#include <list>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    31
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    32
namespace ns3 {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    33
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    34
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    35
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    36
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    37
class LteSinrChunkProcessor;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    38
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    39
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    40
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    41
/**
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    42
 * This class implements a gaussian interference model, i.e., all
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    43
 * incoming signals are added to the total interference.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    44
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    45
 */
7924
3a44452d0dad made LteInterference an Object and fixed more disposals
Nicola Baldo <nbaldo@cttc.es>
parents: 7886
diff changeset
    46
class LteInterference : public Object
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    47
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    48
public:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    49
  LteInterference ();
7929
6861206ea815 minor fixes
Nicola Baldo <nbaldo@cttc.es>
parents: 7927
diff changeset
    50
  virtual ~LteInterference ();
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    51
7924
3a44452d0dad made LteInterference an Object and fixed more disposals
Nicola Baldo <nbaldo@cttc.es>
parents: 7886
diff changeset
    52
  // inherited from Object
3a44452d0dad made LteInterference an Object and fixed more disposals
Nicola Baldo <nbaldo@cttc.es>
parents: 7886
diff changeset
    53
  static TypeId GetTypeId (void);
3a44452d0dad made LteInterference an Object and fixed more disposals
Nicola Baldo <nbaldo@cttc.es>
parents: 7886
diff changeset
    54
  virtual void DoDispose ();
3a44452d0dad made LteInterference an Object and fixed more disposals
Nicola Baldo <nbaldo@cttc.es>
parents: 7886
diff changeset
    55
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    56
  /**
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    57
   * Add a LteSinrChunkProcessor that will use the time-vs-frequency SINR
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    58
   * calculated by this LteInterference instance. Note that all the
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    59
   * added LteSinrChunkProcessors will work in parallel. 
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    60
   *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    61
   * @param p
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    62
   */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    63
  void AddSinrChunkProcessor (Ptr<LteSinrChunkProcessor> p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    64
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    65
  /**
9357
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    66
   * Add a LteSinrChunkProcessor that will use the time-vs-frequency
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    67
   *  interference calculated by this LteInterference instance. Note 
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    68
   *  that all the added LteSinrChunkProcessors will work in parallel.
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    69
   *
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    70
   * @param p
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    71
   */
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    72
  void AddInterferenceChunkProcessor (Ptr<LteSinrChunkProcessor> p);
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    73
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
    74
  /**
9389
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    75
   * Add a LteSinrChunkProcessor that will use the time-vs-frequency
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    76
   *  power calculated by this LteInterference instance. Note
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    77
   *  that all the added LteSinrChunkProcessors will work in parallel.
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    78
   *
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    79
   * @param p
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    80
   */
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    81
  void AddRsPowerChunkProcessor (Ptr<LteSinrChunkProcessor> p);
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    82
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
    83
  /**
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    84
   * notify that the PHY is starting a RX attempt
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    85
   *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    86
   * @param rxPsd the power spectral density of the signal being RX
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    87
   */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    88
  void StartRx (Ptr<const SpectrumValue> rxPsd);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    89
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    90
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    91
  /**
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    92
   * notify that the RX attempt has ended. The receiving PHY must call
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    93
   * this method when RX ends or RX is aborted.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    94
   *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    95
   */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    96
  void EndRx ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    97
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    98
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    99
  /**
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   100
   * notify that a new signal is being perceived in the medium. This
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   101
   * method is to be called for all incoming signal, regardless of
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   102
   * wether they're useful signals or interferers.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   103
   *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   104
   * @param spd the power spectral density of the new signal
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   105
   * @param duration the duration of the new signal
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   106
   */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   107
  void AddSignal (Ptr<const SpectrumValue> spd, const Time duration);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   108
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   109
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   110
  /**
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   111
   *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   112
   * @param noisePsd the Noise Power Spectral Density in power units
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   113
   * (Watt, Pascal...) per Hz.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   114
   */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   115
  void SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   116
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   117
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   118
  void ConditionallyEvaluateChunk ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   119
  void DoAddSignal  (Ptr<const SpectrumValue> spd);
9406
7f0f9d8f8e20 new LTE RRC model
Nicola Baldo <nbaldo@cttc.es>
parents: 7929
diff changeset
   120
  void DoSubtractSignal  (Ptr<const SpectrumValue> spd, uint32_t signalId);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   121
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   122
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   123
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   124
  bool m_receiving;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   125
7927
c8d380a263ec fixed uplink RX and interference calculation
Nicola Baldo <nbaldo@cttc.es>
parents: 7924
diff changeset
   126
  Ptr<SpectrumValue> m_rxSignal; /**< stores the power spectral density of
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   127
                                  * the signal whose RX is being
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   128
                                  * attempted
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   129
                                  */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   130
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   131
  Ptr<SpectrumValue> m_allSignals; /**< stores the spectral
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   132
                                    * power density of the sum of incoming signals;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   133
                                    * does not include noise, includes the SPD of the signal being RX
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   134
                                    */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   135
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   136
  Ptr<const SpectrumValue> m_noise;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   137
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   138
  Time m_lastChangeTime;     /**< the time of the last change in
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   139
                                m_TotalPower */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   140
9406
7f0f9d8f8e20 new LTE RRC model
Nicola Baldo <nbaldo@cttc.es>
parents: 7929
diff changeset
   141
  uint32_t m_lastSignalId;
7f0f9d8f8e20 new LTE RRC model
Nicola Baldo <nbaldo@cttc.es>
parents: 7929
diff changeset
   142
  uint32_t m_lastSignalIdBeforeReset;
7f0f9d8f8e20 new LTE RRC model
Nicola Baldo <nbaldo@cttc.es>
parents: 7929
diff changeset
   143
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   144
  /** all the processor instances that need to be notified whenever
9389
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
   145
  a new interference chunk is calculated */
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
   146
  std::list<Ptr<LteSinrChunkProcessor> > m_rsPowerChunkProcessorList;
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
   147
4bd2725add01 Update RSRP and RSRQ evaluation (RSRQ as average SINR)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9357
diff changeset
   148
  /** all the processor instances that need to be notified whenever
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   149
      a new SINR chunk is calculated */
9357
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
   150
  std::list<Ptr<LteSinrChunkProcessor> > m_sinrChunkProcessorList;
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
   151
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
   152
  /** all the processor instances that need to be notified whenever
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
   153
      a new interference chunk is calculated */
d52b94f66fe7 Add trace sources for DL RSRP/RSRQ (dummy values, TBD), UL SRS and interference power traces
Marco Miozzo <marco.miozzo@cttc.es>
parents: 7929
diff changeset
   154
  std::list<Ptr<LteSinrChunkProcessor> > m_interfChunkProcessorList; 
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   155
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   156
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   157
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   158
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   159
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   160
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   161
} // namespace ns3
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   162
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   163
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   164
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   165
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   166
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   167
#endif /* LTE_INTERFERENCE_H */