IT++ Logo Newcom Logo

itpp::Modulator_NRD Class Reference
[Digital Modulation]

Base class for N-dimensional vector ("MIMO") channel modulator/demodulators with real-valued components. More...

#include <itpp/comm/modulator_nd.h>

Inheritance diagram for itpp::Modulator_NRD:

itpp::Modulator_ND itpp::ND_UPAM List of all members.

Public Member Functions

 Modulator_NRD ()
 Constructor.
 ~Modulator_NRD ()
 Destructor.
Vec< vec > get_symbols ()
 Get modulation symbols per dimension.
vec modulate_bits (const bvec &bits) const
 Modulation of bits.
void map_demod (QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori, double sigma2, mat &H, vec &y)
 Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.
void map_demod (QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori, double sigma2, vec &h, vec &y)
 Soft MAP demodulation for parallel channels without crosstalk.
int get_dim ()
 Get number of dimensions.
LLR_calc_unit get_llrcalc () const
 Get LLR calculation unit.
ivec get_k ()
 Get number of bits per modulation symbol.
ivec get_M ()
 Get number of modulation symbols per dimension.

Protected Member Functions

void update_norm (double &norm, int k, int sold, int snew, vec &ytH, mat &HtH, ivec &s)
 For internal use only.
QLLRvec probabilities (QLLR l)
 Convert LLR to log-probabilities.
Vec< QLLRvec > probabilities (QLLRvec &l)
 Convert LLR to log-probabilities, vector version.
void update_LLR (Vec< QLLRvec > &logP_apriori, QLLRvec &numerator, QLLRvec &denominator, ivec &s, QLLR x)
 Update LLR (for internal use).
void update_LLR (Vec< QLLRvec > &logP_apriori, QLLRvec &numerator, QLLRvec &denominator, int s, QLLR scaled_norm, int j)
 Update LLR, for scalar channel (for internal use).

Protected Attributes

Vec< vec > symbols
 Vector of modulation symbols (along each dimension).
int nt
 Number of dimensions.
LLR_calc_unit llrcalc
 LLR calculation unit.
ivec k
 Number of bits per modulation symbol.
ivec M
 Number of modulation symbols along each dimension.
Vec< bmatbitmap
 Bit mapping table (one table per dimension).
Vec< ivec > bits2symbols
 Bit pattern in decimal form ordered and the corresponding symbols (one pattern per dimension).

Friends

std::ostream & operator<< (std::ostream &os, const Modulator_NRD &mod)
 Print some properties of the MIMO modulator in plain text (mainly to aid debugging).

Detailed Description

Base class for N-dimensional vector ("MIMO") channel modulator/demodulators with real-valued components.

This class can be used to perform modulation and demodulation for a matrix (MIMO) channel of the form

\[ y=Hx+e \]

where H is a channel matrix of dimension $n_r\times n_t$, $y$ is a received vector of length $n_r$, $x$ is a transmitted vector of length $n_t$ and $e$ is noise.

The class supports soft-input soft-output demodulation. It can also be used for scalar modulation to take advantage of this feature.

Complex MIMO channels can be handled by using the Modulator_NCD class. Alternatively, if the signal constellation is separable in I/Q then the complex channel can be first transformed to a real channel

\[ G=[H_r, -H_i; H_i, H_r] \]

See ND_UPAM for examples.

Definition at line 146 of file modulator_nd.h.


Constructor & Destructor Documentation

itpp::Modulator_NRD::Modulator_NRD (  )  [inline]

Constructor.

Definition at line 149 of file modulator_nd.h.

itpp::Modulator_NRD::~Modulator_NRD (  )  [inline]

Destructor.

Definition at line 151 of file modulator_nd.h.


Member Function Documentation

Vec<vec> itpp::Modulator_NRD::get_symbols (  )  [inline]

Get modulation symbols per dimension.

Definition at line 154 of file modulator_nd.h.

References symbols.

vec itpp::Modulator_NRD::modulate_bits ( const bvec &  bits  )  const

Modulation of bits.

Returns a vector of modulated symbols.

Parameters:
bits vector of the bits to be modulated

Definition at line 338 of file modulator_nd.cpp.

References itpp::bin2dec(), itpp::Modulator_ND::bits2symbols, it_assert, itpp::Modulator_ND::k, itpp::length(), itpp::Modulator_ND::nt, itpp::sum(), and symbols.

void itpp::Modulator_NRD::map_demod ( QLLRvec &  LLR_apriori,
QLLRvec &  LLR_aposteriori,
double  sigma2,
mat &  H,
vec &  y 
)

Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.

This function computes the LLR values

\[ LLR(k) = \log \left( \frac{ \sum_{s: b_k=0} \exp \left( -\frac{ |y - Hs|^2 }{2\sigma^2} \right) P(s) }{ \sum_{s: b_k=1} \exp \left( -\frac{ |y - Hs|^2 }{2\sigma^2} \right) P(s) } \right) \]

without approximations. It is assumed that H, y and s are real-valued. Complex-valued channels can be handled via the Modulator_NCD class.

Parameters:
H channel matrix (m*n)
y received vector (m*1)
sigma2 noise variance, per real dimension
LLR_apriori vector of a priori LLR values per bit
LLR_aposteriori vector of a posteriori LLR values
The function performs an exhaustive search over all possible points s in the n-dimensional constellation. This is only feasible for relatively small constellations. The Jacobian logarithm is used to compute the sum-exp expression.

Definition at line 192 of file modulator_nd.cpp.

References it_assert, itpp::Modulator_ND::k, itpp::length(), itpp::Modulator_ND::llrcalc, itpp::Modulator_ND::M, itpp::norm(), itpp::Modulator_ND::nt, itpp::ones_i(), itpp::Modulator_ND::probabilities(), itpp::sqr(), itpp::sum(), symbols, itpp::LLR_calc_unit::to_qllr(), itpp::Modulator_ND::update_LLR(), and update_norm().

void itpp::Modulator_NRD::map_demod ( QLLRvec &  LLR_apriori,
QLLRvec &  LLR_aposteriori,
double  sigma2,
vec &  h,
vec &  y 
)

Soft MAP demodulation for parallel channels without crosstalk.

This function is equivalent to map_demod with $H=\mbox{diag}(h)$. However, it is much faster (the complexity is linear in the number of subchannels).

Definition at line 138 of file modulator_nd.cpp.

References it_assert, itpp::Modulator_ND::k, itpp::length(), itpp::Modulator_ND::llrcalc, itpp::Modulator_ND::M, itpp::Modulator_ND::nt, itpp::ones_i(), itpp::Modulator_ND::probabilities(), itpp::sqr(), itpp::sum(), symbols, itpp::LLR_calc_unit::to_qllr(), and itpp::Modulator_ND::update_LLR().

void itpp::Modulator_NRD::update_norm ( double &  norm,
int  k,
int  sold,
int  snew,
vec &  ytH,
mat &  HtH,
ivec &  s 
) [protected]

For internal use only.

Update the residual norm $|y-Hs|$ when moving from one constellation point to an adjacent point

Parameters:
norm The norm to be updated
k The position where s changed
sold Old value of s[k]
snew New value of s[k]
ytH The vector y'H
HtH The Grammian matrix H'H
s The s-vector

Definition at line 111 of file modulator_nd.cpp.

References itpp::length(), itpp::sqr(), and symbols.

Referenced by map_demod().

int itpp::Modulator_ND::get_dim (  )  [inline, inherited]

Get number of dimensions.

Definition at line 57 of file modulator_nd.h.

References itpp::Modulator_ND::nt.

LLR_calc_unit itpp::Modulator_ND::get_llrcalc (  )  const [inline, inherited]

Get LLR calculation unit.

Definition at line 60 of file modulator_nd.h.

References itpp::Modulator_ND::llrcalc.

ivec itpp::Modulator_ND::get_k (  )  [inline, inherited]

Get number of bits per modulation symbol.

Definition at line 63 of file modulator_nd.h.

References itpp::Modulator_ND::k.

ivec itpp::Modulator_ND::get_M (  )  [inline, inherited]

Get number of modulation symbols per dimension.

Definition at line 66 of file modulator_nd.h.

References itpp::Modulator_ND::M.

QLLRvec itpp::Modulator_ND::probabilities ( QLLR  l  )  [protected, inherited]

Convert LLR to log-probabilities.

Definition at line 44 of file modulator_nd.cpp.

References itpp::LLR_calc_unit::jaclog(), and itpp::Modulator_ND::llrcalc.

Referenced by itpp::Modulator_NCD::map_demod(), map_demod(), and itpp::Modulator_ND::probabilities().

Vec< QLLRvec > itpp::Modulator_ND::probabilities ( QLLRvec &  l  )  [protected, inherited]

Convert LLR to log-probabilities, vector version.

Definition at line 58 of file modulator_nd.cpp.

References itpp::length(), and itpp::Modulator_ND::probabilities().

void itpp::Modulator_ND::update_LLR ( Vec< QLLRvec > &  logP_apriori,
QLLRvec &  numerator,
QLLRvec &  denominator,
ivec &  s,
QLLR  x 
) [protected, inherited]

Update LLR (for internal use).

This function updates the numerator and denominator in the expression

\[ \log \left( \frac{ \sum_{s: b_k=0} \exp (-x^2) P(s) }{ \sum_{s: b_k=1} \exp (-x^2) P(s) } \right) \]

Parameters:
logP_apriori vector of a priori probabilities per bit
numerator the logarithm of the numerator in the above expression
denominator the logarithm of the denominator in the above expression
s the symbol vector

Definition at line 87 of file modulator_nd.cpp.

References itpp::Modulator_ND::bitmap, itpp::LLR_calc_unit::jaclog(), itpp::Modulator_ND::k, itpp::Modulator_ND::llrcalc, and itpp::Modulator_ND::nt.

Referenced by itpp::Modulator_NCD::map_demod(), and map_demod().

void itpp::Modulator_ND::update_LLR ( Vec< QLLRvec > &  logP_apriori,
QLLRvec &  numerator,
QLLRvec &  denominator,
int  s,
QLLR  scaled_norm,
int  j 
) [protected, inherited]

Update LLR, for scalar channel (for internal use).

This function updates the numerator and denominator in the expression

\[ \log \left( \frac{ \sum_{s: b_k=0} \exp (-x^2) P(s) }{ \sum_{s: b_k=1} \exp (-x^2) P(s) } \right) \]

Parameters:
logP_apriori vector of a priori probabilities per bit
numerator the logarithm of the numerator in the above expression
denominator the logarithm of the denominator in the above expression
s the symbol vector

Definition at line 67 of file modulator_nd.cpp.

References itpp::Modulator_ND::bitmap, itpp::LLR_calc_unit::jaclog(), itpp::Modulator_ND::k, and itpp::Modulator_ND::llrcalc.


Friends And Related Function Documentation

std::ostream & operator<< ( std::ostream &  os,
const Modulator_NRD mod 
) [friend]

Print some properties of the MIMO modulator in plain text (mainly to aid debugging).

Definition at line 374 of file modulator_nd.cpp.


Member Data Documentation

Vec<vec> itpp::Modulator_NRD::symbols [protected]

Vector of modulation symbols (along each dimension).

Definition at line 206 of file modulator_nd.h.

Referenced by get_symbols(), map_demod(), modulate_bits(), itpp::ND_UPAM::set_Gray_PAM(), and update_norm().

int itpp::Modulator_ND::nt [protected, inherited]

Number of dimensions.

Definition at line 70 of file modulator_nd.h.

Referenced by itpp::Modulator_ND::get_dim(), itpp::Modulator_NCD::map_demod(), map_demod(), itpp::Modulator_NCD::modulate_bits(), modulate_bits(), itpp::ND_UPAM::ND_UPAM(), itpp::ND_UPSK::ND_UPSK(), itpp::ND_UQAM::ND_UQAM(), itpp::ND_UPAM::set_Gray_PAM(), itpp::ND_UPSK::set_Gray_PSK(), itpp::ND_UQAM::set_Gray_QAM(), itpp::ND_UPAM::sphere_decoding(), and itpp::Modulator_ND::update_LLR().

LLR_calc_unit itpp::Modulator_ND::llrcalc [protected, inherited]

LLR calculation unit.

Definition at line 72 of file modulator_nd.h.

Referenced by itpp::Modulator_ND::get_llrcalc(), itpp::Modulator_NCD::map_demod(), map_demod(), itpp::Modulator_ND::Modulator_ND(), itpp::Modulator_ND::probabilities(), and itpp::Modulator_ND::update_LLR().

ivec itpp::Modulator_ND::k [protected, inherited]

Number of bits per modulation symbol.

Definition at line 74 of file modulator_nd.h.

Referenced by itpp::Modulator_ND::get_k(), itpp::Modulator_NCD::map_demod(), map_demod(), itpp::Modulator_NCD::modulate_bits(), modulate_bits(), itpp::ND_UPAM::set_Gray_PAM(), itpp::ND_UPSK::set_Gray_PSK(), itpp::ND_UQAM::set_Gray_QAM(), itpp::ND_UPAM::sphere_decoding(), and itpp::Modulator_ND::update_LLR().

ivec itpp::Modulator_ND::M [protected, inherited]

Number of modulation symbols along each dimension.

Definition at line 76 of file modulator_nd.h.

Referenced by itpp::Modulator_ND::get_M(), itpp::Modulator_NCD::map_demod(), map_demod(), itpp::ND_UPAM::set_Gray_PAM(), itpp::ND_UPSK::set_Gray_PSK(), itpp::ND_UQAM::set_Gray_QAM(), and itpp::ND_UPAM::sphere_decoding().

Vec<bmat> itpp::Modulator_ND::bitmap [protected, inherited]

Bit mapping table (one table per dimension).

Definition at line 78 of file modulator_nd.h.

Referenced by itpp::ND_UPAM::set_Gray_PAM(), itpp::ND_UPSK::set_Gray_PSK(), itpp::ND_UQAM::set_Gray_QAM(), itpp::ND_UPAM::sphere_decoding(), and itpp::Modulator_ND::update_LLR().

Vec<ivec> itpp::Modulator_ND::bits2symbols [protected, inherited]

Bit pattern in decimal form ordered and the corresponding symbols (one pattern per dimension).

Definition at line 80 of file modulator_nd.h.

Referenced by itpp::Modulator_NCD::modulate_bits(), modulate_bits(), itpp::ND_UPAM::set_Gray_PAM(), itpp::ND_UPSK::set_Gray_PSK(), and itpp::ND_UQAM::set_Gray_QAM().


The documentation for this class was generated from the following files:
SourceForge Logo

Generated on Fri Jun 8 01:07:25 2007 for IT++ by Doxygen 1.5.2