src/spectrum/model/spectrum-interference.h
author Mitch Watrous <watrous@u.washington.edu>
Wed, 18 May 2011 17:24:04 -0700
changeset 7241 0a7a16b599e8
parent 7142 89a701fec3a1
child 7385 10beb0e53130
permissions -rw-r--r--
Make some more modules show up on doxygen modules page
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     2
/*
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2009 CTTC
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     4
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     8
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    13
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    17
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    18
 * Author: Nicola Baldo <nbaldo@cttc.es>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    19
 */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    20
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    21
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    22
#ifndef SPECTRUM_INTERFERENCE_H
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
#define SPECTRUM_INTERFERENCE_H
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    24
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
#include <ns3/object.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    26
#include <ns3/packet.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    27
#include <ns3/nstime.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    28
#include <ns3/spectrum-value.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    29
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
namespace ns3 {
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    34
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    35
class SpectrumErrorModel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    36
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    37
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    38
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
/**
7241
0a7a16b599e8 Make some more modules show up on doxygen modules page
Mitch Watrous <watrous@u.washington.edu>
parents: 7142
diff changeset
    40
 * \ingroup spectrum
0a7a16b599e8 Make some more modules show up on doxygen modules page
Mitch Watrous <watrous@u.washington.edu>
parents: 7142
diff changeset
    41
 *
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    42
 * This class implements a gaussian interference model, i.e., all
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    43
 * incoming signals are added to the total interference.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    44
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    45
 */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    46
class SpectrumInterference : public Object
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    47
{
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
public:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
  SpectrumInterference ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
  virtual ~SpectrumInterference ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
   * set the SpectrumErrorModel to be used.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    54
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    55
   * @param e
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    56
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    57
  void SetErrorModel (Ptr<SpectrumErrorModel> e);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    58
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    59
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    60
   * notify that the PHY is starting a RX attempt
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    61
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    62
   * @param p the packet corresponding to the signal being RX
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    63
   * @param rxPsd the power spectral density of the signal being RX
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    64
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    65
  void StartRx (Ptr<const Packet> p, Ptr<const SpectrumValue> rxPsd);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    66
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    67
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    68
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
   * notify that the RX attempt has ended. The receiving PHY must call
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    70
   * this method upon RX end in order to:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    71
   * 1) know if RX was successful or not
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
   * 2) free up resources that might eventually be used for the
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    73
   * calculation of interference. Note that for this reason this
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    74
   * method must also be called when RX is aborted.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    75
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    76
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
   * @return true if RX was successful, false otherwise
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
  bool EndRx ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    82
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
   * notify that a new signal is being perceived in the medium. This
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
   * method is to be called for all incoming signal, regardless of
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    85
   * wether they're useful signals or interferers.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
   * @param spd the power spectral density of the new signal
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
   * @param duration the duration of the new signal
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    89
   */
6445
43d91786d268 simple doxygen fixes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6349
diff changeset
    90
  void AddSignal (Ptr<const SpectrumValue> spd, const Time duration);
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    94
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    95
   * @param noisePsd the Noise Power Spectral Density in power units
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    96
   * (Watt, Pascal...) per Hz.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    97
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    98
  void SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    99
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   100
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   101
protected:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   102
  void DoDispose ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
private:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
  void ConditionallyEvaluateChunk ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   106
  void DoAddSignal  (Ptr<const SpectrumValue> spd);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   107
  void DoSubtractSignal  (Ptr<const SpectrumValue> spd);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   108
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   109
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   110
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   111
  bool m_receiving;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   112
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   113
  Ptr<const SpectrumValue> m_rxSignal; /**< stores the power spectral density of
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   114
                                  * the signal whose RX is being
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   115
                                  * attempted
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   116
                                  */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   117
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   118
  Ptr<SpectrumValue> m_allSignals; /**< stores the spectral
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   119
                                    * power density of the sum of incoming signals;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   120
                                    * does not include noise, includes the SPD of the signal being RX
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   121
                                    */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   122
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   123
  Ptr<const SpectrumValue> m_noise;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   124
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   125
  Time m_lastChangeTime;     /**< the time of the last change in
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   126
                                m_TotalPower */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   127
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   128
  Ptr<SpectrumErrorModel> m_errorModel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   129
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   130
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   131
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   132
};
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   133
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   134
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   135
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   136
} // namespace ns3
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   137
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   138
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   139
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   140
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   141
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   142
#endif /* SPECTRUM_INTERFERENCE_H */