Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

mimo::MaxEntropyChannel Class Reference

#include <maxentropychannel.h>

Inheritance diagram for mimo::MaxEntropyChannel:

Inheritance graph
[legend]
List of all members.

Public Member Functions

 MaxEntropyChannel (int deviceID, DeviceSystemIntf *system, const simth::PropertyList &pl)
 ~MaxEntropyChannel ()
void getTransfer (int relative_time, MatrixFreqSignal &transfer) const
void transmit (const VectorTimeSignal &insym, VectorTimeSignal &outsym)
int roundTimeToSamples (double value) const
 Converts the real value "Delay" into a number of steps on the time scale.
virtual void refresh ()
 Called to refresh the entries of the matrices.
void set_normfactor ()
 Sets the normfactor if power normalization is requested.
void getImpulseResponse (int relative_time, MatrixTimeSignal &impulse) const
 writes the impuls response matrix at a certain time
double get_angle () const
double get_delay () const
double get_gauss () const
 Returns a complex gaussian distributed variable.
virtual void print (std::ostream &os) const
 Reimplementation of print.

Protected Member Functions

void updateInputLengths ()
void updateOutputLengths ()

Related Functions

(Note that these are not member functions.)

 propertylist_MaxEntropyChannel (not_a_function)

Detailed Description

Maximun Entropy Channel.

In the frequency domain the channel matrix of a MIMO System is given as:

\[ \textbf{H}(f)= \left(\begin{array}{ccc} h_{11}(f) & \cdots & h_{1t}(f) \\ \vdots & \ddots & \vdots \\ h_{r1}(f) & \cdots & h_{rt}(f) \\ \end{array}\right) \]

Merouane Debbah assumes that the channel matrix is calculated as followed:

\[ \textbf{H}_{r\times t}=\frac{1}{\sqrt{ss_1}} \Phi_{r\times s} \textbf{P}^\textbf{r} \Theta_{s\times s_1}\odot \textbf{D}_{s\times s_1} \textbf{P}^\textbf{t} \Psi_{s_1\times t} \]

$\textbf{P}^\textbf{r}$ and $\textbf{P}^\textbf{t}$ contain the amplitudes of the different steering vectors of the propagation paths. In this simulation we assume them to be one. The $\Psi_{s_1\times t}$ matrix contains information about phase shifts which are a result of the different angles of departure from the transmitter. The $\Phi_{r\times s}$ matrix gives information about the paths that arrive at the receiver. Beside the phase shifts it also takes into account the doppler effect, because whe assume that the receiver is moving with a cvertain speed.

The $\Theta_{s\times s_1}$ is an i.i.d. Gaussian matrix linking the scattering environment at the transmitter side with the one at the receiver side. The $\textbf{D}_{s\times s_1}$ matrix stores the delays for those links.

\[ \Theta_{s\times s_1}= \left(\begin{array}{ccc} \theta_{11} & \cdots & \theta_{1s} \\ \vdots & \ddots & \vdots \\ \theta_{s1} & \cdots & \theta_{ss_1} \\ \end{array}\right) \hspace{3em} \textbf{D}_{s\times s_1}(f)= \left(\begin{array}{ccc} e^{-j2\pi f\tau_{11}} & \cdots & e^{-j2\pi f\tau_{1s_1}} \\ \vdots & \ddots & \vdots \\ e^{-j2\pi f\tau_{s1}} & \cdots & e^{-j2\pi f\tau_{ss_1}} \\ \end{array}\right) \]

The $\Theta_{s\times s_1}$ and the $\textbf{D}_{s\times s_1}$ matrix are multiplied element-wise ($\odot$).

The whole $\textbf{H}_{r\times t}$ matrix can be written as:

\[ \textbf{H}(f,\eta)=\frac{1}{\sqrt{ss_1}} \left(\begin{array}{ccc} e^{j(\phi_{11}+2\pi \frac{f_c u_{11}^rv_r}{c} \eta)} & \cdots & e^{j(\phi_{1s}+2\pi \frac{f_c u_{1s}^rv_r}{c} \eta)} \\ \vdots & \ddots & \vdots \\ e^{j(\phi_{r1}+2\pi \frac{f_c u_{r1}^rv_r}{c} \eta)} & \cdots & e^{j(\phi_{rs}+2\pi \frac{f_c u_{rs}^rv_r}{c} \eta)} \\ \end{array}\right) \hspace{0.5em} \Theta_{s\times s_1} \hspace{0.5em} \odot \hspace{0.5em} \textbf{D}_{s\times s_1} \hspace{0.5em} \left(\begin{array}{ccc} e^{j\psi_{11}} & \cdots & e^{j\psi_{1t}} \\ \vdots &\ddots & \vdots \\ e^{j\psi_{s_11}} & \cdots & e^{j\psi_{s_1t}} \\ \end{array}\right) \]

In the time domain the impulse response from a transmitting antenna $m$ to a receiving antenna $n$ is given by

\[ h_{nm}(\tau,t) = \frac{1}{\sqrt{s_{1}s}} \sum_{k=1}^{s_{1}} \sum_{p=1}^{s} \theta_{pk} e^{j\psi_{km}} \cdot \delta(\tau - \tau_{pk})\cdot e^{j(\phi_{np} +2\pi \frac{f_c u_{np}^rv_r}{c} \eta)} \]

After estimating each entry of the impulse response matrix the received signal will be calculated as followed:

\[ y(t) = \sqrt{\frac{\rho}{t}}\int{\textbf{H}_{r\times t}(\tau)x(t-\tau)d\tau + n(t)} \]


Constructor & Destructor Documentation

mimo::MaxEntropyChannel::MaxEntropyChannel int  deviceID,
DeviceSystemIntf system,
const simth::PropertyList pl
 

Constructor

Parameters:
deviceID Device ID
system the parent system
pl the PropertyList holds informations from the .par file

mimo::MaxEntropyChannel::~MaxEntropyChannel  ) 
 


Member Function Documentation

void mimo::MaxEntropyChannel::getTransfer int  relative_time,
MatrixFreqSignal transfer
const [virtual]
 

Determines channel transfer factors. An ideal estimation of the channel transfer function is performed. This means, the exact values $H(f_i,t_0)$ are determined, where $t_0$ is ${\tt time} * {\tt delta\_t}$ and $f_i = n\cdot \mbox{\tt delta\_f}, n=0, \dots, \mbox{\tt num\_f}-1$. (time = 0 indicates the transmission time of the sample transmitted at last over the channel; time = -numSamples indicates the transmission time of the first sample of the last transmitted sequence.

Implements mimo::MIMOChannel.

void mimo::MaxEntropyChannel::transmit const VectorTimeSignal insym,
VectorTimeSignal outsym
[virtual]
 

Transmits a symbol sequence over the channel.

Implements mimo::MIMOChannel.

int mimo::MaxEntropyChannel::roundTimeToSamples double  value  )  const
 

Converts the real value "Delay" into a number of steps on the time scale.

virtual void mimo::MaxEntropyChannel::refresh  )  [virtual]
 

Called to refresh the entries of the matrices.

Reimplemented from simth::Device.

void mimo::MaxEntropyChannel::set_normfactor  ) 
 

Sets the normfactor if power normalization is requested.

void mimo::MaxEntropyChannel::getImpulseResponse int  relative_time,
MatrixTimeSignal impulse
const
 

writes the impuls response matrix at a certain time

double mimo::MaxEntropyChannel::get_angle  )  const
 

This function returns uniform distributed random angles by using an object of the class UniformRng.

double mimo::MaxEntropyChannel::get_delay  )  const
 

A function to get random delays, it uses an object of the class DelayProfile. The delays have a negative exponential or a uniform distribution, to be set in the .par file

double mimo::MaxEntropyChannel::get_gauss  )  const
 

Returns a complex gaussian distributed variable.

virtual void mimo::MaxEntropyChannel::print std::ostream &  os  )  const [virtual]
 

Reimplementation of print.

Reimplemented from mimo::MIMOChannel.

void mimo::MaxEntropyChannel::updateInputLengths  )  [protected, virtual]
 

Reimplemented from mimo::MIMOChannel.

void mimo::MaxEntropyChannel::updateOutputLengths  )  [protected, virtual]
 

Reimplemented from mimo::MIMOChannel.


Friends And Related Function Documentation

propertylist_MaxEntropyChannel not_a_function   )  [related]
 

These are the properties of class MaxEntropyChannel . 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:

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.

snr
<string>, default "" -- The name of the snr loop variable in this simulation.

channel_refresh
<string>, default "" -- The name of the refresh loop variable in this simulation.

nr_tx
<unsigned>, default "" -- The number of transmit antennas

nr_rx
<unsigned>, default "" -- The number of receive antennas

diagonal
<bool>, default "false" -- If true, then this channel has a diagonal channel matrix i.e. it is not a MIMO channel. However, it is unclear whether the SNR is correct or whether the SNR might be offset by the matrix size. This property is probably only useful for initial testing of mimo algorithms.

5 properties in this class. The above properties have been inherited from the base class mimo::MIMOChannel .

input_length
<sequencelength>, default "-1" -- The input length

DoD
<unsigned>, default "" -- The number of directions of departure, default is 5

DoA
<unsigned>, default "" -- The number of directions of arrival, default is 5

max_signal_delay
<double>, default "0.0" -- For a uniform or exponential delay profile: Max delay of the signal

delay_mean
<double>, default "0.0" -- For an exponential delay profile: Mean value of the delay

carrier_freq
<double>, default "5.255" -- For the doppler effect: Carrier Frequency in [GHz]

receiver_speed
<double>, default "0.0" -- For the doppler effect: Speed of the receiver [m/s]

array_geometry
<enum>, default "linear" -- Geometry of the antenna array ('linear' or 'circular')

array_filename
<string>, default "" -- If the array geometry is chosen as 'file', then this property should contain the filename.

delay_type
<enum>, default "" -- Delay type ('uniform' or 'exponential')

power_normalization
<bool>, default "false" -- Additional to the standard normalization (number of DoA and DoD and number of transmitting antennas) a power normalization is available

off_diagonal_variance
<double>, default "1.0" -- The variance of the off-diagonal elements of the central Gaussian matrix. The diagonal elements all have variance 1.0. By default, the off-diagonal elements have that, too. With this property, you can smoothly assign less variance/energy to the off-diagonal elements, so when it is 0.0, this channel has a diagonal central Gaussian matrix. Only values from 0.0 to 1.0 are allowed.

12 properties in this class.


Generated on Tue Aug 9 14:43:46 2005 for mimolib by  doxygen 1.4.1