#include <wssuschannel2.h>
Inheritance diagram for mimo::WSSUSChannel2:
Public Member Functions | |
WSSUSChannel2 (int deviceID, DeviceSystemIntf *system, const simth::PropertyList &pl, double maxDelay, double max_doppler) | |
virtual | ~WSSUSChannel2 () |
destructor | |
virtual void | refresh () |
void | getTransfer (int relative_time, MatrixFreqSignal &trans) const |
void | transmit (const VectorTimeSignal &insym, VectorTimeSignal &outsym) |
void | setRiceFactor (double rf) |
void | setRiceFactor_dB (double rf) |
void | setTimeNormalization (unsigned duration=0) |
void | setFreqNormalization (double freqDist, int numFreqs, unsigned duration=0) |
virtual void | startOfSimulation () |
virtual void | print (std::ostream &os) const |
Protected Types | |
typedef std::vector< ScattererParam > | ScatVect |
Container type for all scatterer parameters. | |
typedef std::vector< PathParam > | PathVect |
Container type for all path parameters. | |
Protected Member Functions | |
int | roundTimeToSamples (double value) const |
Function for rounding delay times into number of samples. | |
virtual double | diceNewDelay () const =0 |
virtual double | diceNewPhase () const =0 |
virtual double | diceNewAmpl () const |
virtual double | diceNewAoA () const |
virtual double | diceNewAoD () const |
void | getImpulseResponse (int relative_time, MatrixTimeSignal &t, int increment_time=0) const |
Protected Attributes | |
unsigned | num_paths |
double | max_delay |
maximal delay time | |
double | max_doppler |
Maximum doppler frequency. | |
unsigned | L_T |
Number of transmit scatterers. | |
unsigned | L_R |
Number of receive scatterers. | |
unsigned | paths_per_scatterer |
ScatVect | scatterers_tx |
Transmit scatterer data. | |
CMatrix | steering_tx |
Transmit steering matrix, calculated from the scatterer data. | |
CMatrix | doppler_tx |
ScatVect | scatterers_rx |
Receive scatterer data. | |
CMatrix | steering_rx |
Receive steering matrix, calculated from the scatterer data. | |
CMatrix | doppler_rx |
PathVect | h_pathparams |
The path parameters. | |
CMatrixSeq::storage_type | h_paths |
AntennaArray * | array_geometry_tx |
Geometry of the tx antenna array. | |
AntennaArray * | array_geometry_rx |
Geometry of the rx antenna array. | |
double | delta_t |
Sampling time of the sequences to be transmitted. | |
VectorTimeSignal::storage_type | prevsym |
previously transmitted samples of one OFDM symbol | |
bool | firstSequence |
MatrixTimeSignal::storage_type | imp_resp |
The matrix-valued impulse response of this channel. | |
MatrixFreqSignal::storage_type | cacheTransfer |
int | cacheTime |
Time for which the cached transfer function was valid. | |
bool | isTransferCacheValid |
bool | timevariant |
Whether this channel is time variant at all. | |
int | current_time |
The current time in samples. | |
Related Functions | |
(Note that these are not member functions.) | |
propertylist_WSSUSChannel2 (not_a_function) | |
Classes | |
class | PathParam |
class | ScattererParam |
This is the abstract base class of statistical time-variant multipath MIMO channel models for mobile radio environments. The time-variant MIMO impulse response is modelled by independent paths which are determined according to given probability density functions (pdf).
For each propagation path the following parameters are randomly determined: delay (e.g. with a negative exponential pdf), Doppler frequency (e.g. with a Jakes pdf), initial phase (e.g. with a uniform pdf), and angle of arrival and departure (e.g. with discrete set of uniformly distributed values).
Additionally, a geometry of the antenna array on transmitter and receiver side is chosen by WSSUSChannel2::setArrayGeometry(). With the chosen array geometry, the phase shift at each individual transmitter antenna and receiver antenna can be calculated as a function of the angles of arrival and departure .
The impulse response of the channel from antenna to antenna is
(LaTeX rules!)
The realizations of these parameters are chosen randomly in WSSUSChannel2::refresh(). Each individial parameter is obtained independently from each other through the purely virtual functions diceNewDelay() and diceNewPhase(). These virtual functions are implemented in a derived class, which is responsible for choosing the PDFs of each parameter.
The angles of arrival and departure (functions diceNewAoA() and diceNewAoD()) are an exception. They are already implemented in WSSUSChannel2 class because otherwise the random number generators are not properly resetted upon refresh(). The probability distribution behind these variables is a bit tricky: The realizations for the angles are not uniformly distributed! Instead, for these random variables at each refresh() a small set of discrete angles is drawn from a uniform distribution. Then, each path angle is drawn from this small set of discrete angles. This means that many paths will have the same angle -- and this effect is desired in order to model the fact of a small number of "angles of arrival", which is commonly agreed upon in the MIMO community.
Various types of specialized channels can be supported by derived classes. These classes complement this general channel model (WSSUSChannel2) with special pdf's (one example is given above).
There are two derived channel models which can be constructed for a given coherence time and coherence bandwidth and for a given maximal Doppler frequency and maximal delay, respectively. For the WSSUS channel there are functions which modify the channel's coherence time or bandwidth.
Furthermore, there are the following four COST channel models which can be selected with a different constructor: RA (rural area) -- maximal delay, TU (typical urban) -- max. delay, BU (bad urban) -- max. delay, HT (hilly terrain) -- max. delay
|
Container type for all scatterer parameters.
|
|
Container type for all path parameters.
|
|
Constructor for given maximal delay and Doppler frequency. (FIXME: These are rather specified in the derived class, aren't they?)
|
|
destructor
|
|
Function for rounding delay times into number of samples.
|
|
Returns a new realization of the delay random variable. To be implemented by a derived class. Implemented in mimo::WSSUSChannel2ExpDelay. |
|
Returns a new realization of the initial phase random variable. Well, this already kind of implies this random variable should follow a uniform distribution in . To be implemented by a derived class. Implemented in mimo::WSSUSChannel2JakesUniform. |
|
Returns a new realization of the amplitudes of the phases. May or may not be implemented by a derived class. The default implementation returns one, or, if the property "path_ampl_random" is true, it returns a Rayleigh distributed random variate. |
|
Returns a new realization of the angles of arrival random variable. We already have an implementation of this function here because otherwise the RNG is not properly resetted upon refresh(). |
|
Returns a new realization of the angles of departure random variable. We already have an implementation of this function here because otherwise the RNG is not properly resetted upon refresh(). |
|
Calculate new random paths. For each propagation path the following parameters are randomly determined: delay (e.g. with a negative exponential pdf), Doppler frequency (e.g. with a Jakes pdf), initial phase (e.g. with a uniform pdf), and angle of arrival and departure . In other words, all parameters in the MIMO::PathParam class. Additionally, a geometry of the antenna array on transmitter and receiver side is chosen by WSSUSChannel2::setArrayGeometry(). With the chosen array geometry, the phase shift at each individual transmitter antenna and receiver antenna can be calculated as a function of the angles of arrival and departure . Note: If you want new PDFs to be used, it is sufficient to create a derived class with different diceNewDelay() and diceNewPhase() (also for angles of arrival/departure). However, these functions all imply that the PDFs are independent of each other. If you want some joint PDFs, then of course you need to fully reimplement this function and no longer only the independent functions mentioned before. Reimplemented from simth::Device. |
|
Determines channel transfer factors. An ideal estimation of the channel transfer function is performed. This means, the exact values are determined, where is and . NOTE: The time argument is a relative time. time = 0 indicates the transmission time of the last sample transmitted, i.e. the sample that has "just been transmitted" over the channel. For example time = -numSamples would indicate the transmission time of the first sample of the last transmitted sequence.
Implements mimo::MIMOChannel. |
|
Transmits a symbol sequence. The symbol sequence insym is transmitted over the channel with the result outsym. Inter-symbol interference of a previously transmitted sequence is considered. Implements mimo::MIMOChannel. |
|
Sets the Ricean factor of the channel, default is 0 |
|
sets the Ricean factor of the channel (in dB), default is |
|
Sets the normalization mode to |
|
Sets the normalization mode to |
|
Called by the simulation system in the beginning of each simulation run. Reimplemented from mimo::MIMOChannel. |
|
Reimplemented from mimo::MIMOChannel. |
|
|
|
These are the properties of class WSSUSChannel2 . This list is auto-generated from the XML-Devicelist of this device by means of an XSLT transformation script. Description of this device in the XML file: This MIMO channel uses the WSSUS2 channel model and extends it to the MIMO case by multiplying the path coefficients with the appropriate steering vectors. Additionally, this Device calculates the actual transmission either in time domain or in frequency domain. This was added because the time-domain transmission gave some unexpected not-so-correct results, and the fully correct results were only obtained by the frequency-domain transmission. By default, time-domain transmission is used. To use frequency-domain transmission, you need to specify the OFDM parameters according to the ones used by your transmitter and receiver. If any num_carrier greater than one is used, the frequency domain transmission is used. Otherwise the time domain transmission is used. In terms of computational time, surprisingly the frequency-domain transmission is faster than the other by about 30%. Note that this class also has the Properties of its base classes. The direct base class is mimo::MIMOChannel ; direct link to its propertylist should be propertylist_MIMOChannel(). The list below usually includes the properties that have been inherited from the base classes; the properties which belong only to this class can be found at the end of this list.
|
|
Total number of independent propagation paths, as calculated from L_T*L_R*paths_per_scatterer below. |
|
maximal delay time
|
|
Maximum doppler frequency.
|
|
Number of transmit scatterers.
|
|
Number of receive scatterers.
|
|
Number of paths between one transmit scatterer and one receive scatterer (=K) |
|
Transmit scatterer data.
|
|
Transmit steering matrix, calculated from the scatterer data.
|
|
|
|
Receive scatterer data.
|
|
Receive steering matrix, calculated from the scatterer data.
|
|
|
|
The path parameters.
|
|
The impulse response with the paths between the scatterers, calculated from the path parameters |
|
Geometry of the tx antenna array.
|
|
Geometry of the rx antenna array.
|
|
Sampling time of the sequences to be transmitted.
|
|
previously transmitted samples of one OFDM symbol
|
|
Is true after initialization or refresh() and is set to false as soon as the first time signal samples are transmitted through this channel. I.e., this is true if and only if there are no previous signal samples stored in WSSUSChannel2::prevsym. |
|
The matrix-valued impulse response of this channel.
|
|
|
|
Time for which the cached transfer function was valid.
|
|
|
|
Whether this channel is time variant at all.
|
|
The current time in samples.
|