/usr/include/ns3.26/ns3/jakes-process.h is in libns3-dev 3.26+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2012 Telum (www.telum.ru)
*
* 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: Kirill Andreev <andreev@telum.ru>, Alexander Sofronov <sofronov@telum.ru>
*/
#ifndef DOPPLER_PROCESS_H
#define DOPPLER_PROCESS_H
#include "ns3/object.h"
#include "ns3/nstime.h"
#include "ns3/random-variable-stream.h"
#include <complex>
namespace ns3
{
class PropagationLossModel;
class JakesPropagationLossModel;
/**
* \ingroup fading
*
* \brief Implementation for a single path Stationary Jakes propagation loss model.
*
* The Jakes propagation loss model implemented here is
* described in [1].
*
* We consider one transmitter - receiver pair and calculate
* the complex coefficients for this case as follow:
* \f[ X(t)=X_c(t) + j X_s(t)\f]
* \f[ X_c(t) = \frac{2}{\sqrt{M}}\sum_{n=1}^{M}\cos(\psi_n)\cos(\omega_d t\cos(\alpha_n)+\phi_n)\f]
* \f[ X_s(t) = \frac{2}{\sqrt{M}}\sum_{n=1}^{M}\sin(\psi_n)\cos(\omega_d t\cos(\alpha_n)+\phi_n)\f]
* with
* \f[ \alpha_n = \frac{2\pi n - \pi + \theta}{4M}, n=1,2, \ldots,M\f]
* where
*\f$\theta\f$, \f$\phi\f$, and \f$\psi_n\f$ are statically independent and uniformly distributed over \f$[-\pi, \pi)\f$ for all \f$n\f$.
*
*
* [1] Y. R. Zheng and C. Xiao, "Simulation Models With Correct
* Statistical Properties for Rayleigh Fading Channel", IEEE
* Trans. on Communications, Vol. 51, pp 920-928, June 2003
*/
class JakesProcess : public Object
{
public:
/**
* \brief Get the type ID.
* \return the object TypeId
*/
static TypeId GetTypeId (void);
JakesProcess ();
virtual ~JakesProcess();
virtual void DoDispose ();
/**
* Get the channel complex gain
* \return the channel complex gain
*/
std::complex<double> GetComplexGain () const;
/**
* Get the channel gain in dB
* \return the channel gain [dB]
*/
double GetChannelGainDb () const;
/**
* Set the propagation model using this class
* \param model the propagation model using this class
*/
void SetPropagationLossModel (Ptr<const PropagationLossModel> model);
private:
/**
* This class Represents a single oscillator
*/
struct Oscillator
{
/**
* Initiate oscillator with complex amplitude, initial phase and rotation speed
* \param amplitude initial complex amplitude
* \param initialPhase initial phase
* \param omega rotation speed
*/
Oscillator (std::complex<double> amplitude, double initialPhase, double omega);
/**
* Get the complex amplitude at a given moment
* \param t time instant
* \returns the complex amplitude
*/
std::complex<double> GetValueAt (Time t) const;
std::complex<double> m_amplitude; //!< Complex number \f$Re=\cos(\psi_n), Im = i\sin(\psi_n)]\f$
double m_phase; //!< Phase \f$\phi_n\f$ of the oscillator
double m_omega; //!< Rotation speed of the oscillator \f$\omega_d \cos(\alpha_n)\f$
};
private:
/**
* Set the number of Oscillators to use
* @param nOscillators the number of oscillators
*/
void SetNOscillators (unsigned int nOscillators);
/**
* Set the Doppler frequency
* @param dopplerFrequencyHz the Doppler frequency [Hz]
*/
void SetDopplerFrequencyHz (double dopplerFrequencyHz);
/**
*
*/
void ConstructOscillators ();
private:
std::vector<Oscillator> m_oscillators; //!< Vector of oscillators
double m_omegaDopplerMax; //!< max rotation speed Doppler frequency
unsigned int m_nOscillators; //!< number of oscillators
Ptr<UniformRandomVariable> m_uniformVariable; //!< random stream
Ptr<const JakesPropagationLossModel> m_jakes; //!< pointer to the propagation loss model
};
} // namespace ns3
#endif // DOPPLER_PROCESS_H
|