src/common/spectrum-model.h
changeset 6349 4bab6b10a034
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/spectrum-model.h	Fri Jun 11 19:30:06 2010 +0200
@@ -0,0 +1,114 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ */
+
+#ifndef SPECTRUM_MODEL_H
+#define SPECTRUM_MODEL_H
+
+#include <ns3/simple-ref-count.h>
+#include <vector>
+
+namespace ns3 {
+
+
+
+/**
+ * The building block of a SpectrumModel. This struct models
+ * a frequency band defined by the frequency interval [fl, fc] and
+ * with center frequency fc. Typically, the center frequency will be
+ * used for stuff such as propagation modeling, while the interval
+ * boundaries will be used for bandwidth calculation and for
+ * conversion between different SpectrumRepresentations.
+ *
+ */
+struct BandInfo
+{
+  double fl; ///< lower limit of subband
+  double fc; ///< center frequency
+  double fh; ///< upper limit of subband
+};
+
+
+typedef std::vector<BandInfo> Bands;
+typedef uint32_t SpectrumModelUid_t;
+
+/**
+ * Set of frequency values implementing the domain of the functions in
+ * the Function Space defined by SpectrumValue. Frequency values are in
+ * Hz. It is intended that frequency values are non-negative, though
+ * this is not enforced.
+ *
+ */
+class SpectrumModel : public SimpleRefCount<SpectrumModel>
+{
+public:
+  friend bool operator== (const SpectrumModel& lhs, const SpectrumModel& rhs);
+
+  /**
+   * This constructs a SpectrumModel based on a given set of frequencies,
+   * which is assumed to be sorted by increasing frequency. The lower
+   * (resp. upper) frequency band limit is determined as the mean value
+   * between the center frequency of the considered band and the
+   * center frequency of the adjacent lower (resp. upper) band.
+   *
+   * @param centerFreqs the vector of center frequencies.
+   *
+   * @return
+   */
+  SpectrumModel (std::vector<double> centerFreqs);
+
+
+  /**
+   * This construct a SpectrumModel based on the explicit values of
+   * center frequencies and boundaries of each subband.
+   *
+   * @param bands
+   *
+   * @return
+   */
+  SpectrumModel (Bands bands);
+
+  /**
+   *
+   * @return the number of frequencies in this SpectrumModel
+   */
+  size_t GetNumBands () const;
+
+
+  /**
+   *
+   * @return the unique id of this SpectrumModel
+   */
+  SpectrumModelUid_t GetUid () const;
+
+
+  Bands::const_iterator Begin () const;
+  Bands::const_iterator End () const;
+
+private:
+  Bands m_bands;         ///< actual definition of frequency bands
+                         /// within this SpectrumModel
+  SpectrumModelUid_t m_uid;        ///< unique id for a given set of frequencies
+  static SpectrumModelUid_t m_uidCount;    ///< counter to assign m_uids
+};
+
+
+} // namespace ns3
+
+#endif /* SPECTRUM_MODEL_H */