IT++ Logo
itpp::ND_UPAM Class Reference

Real-valued MIMO channel with uniform PAM along each dimension. More...

#include <itpp/comm/modulator_nd.h>

Inheritance diagram for itpp::ND_UPAM:
itpp::Modulator_NRD itpp::Modulator_ND

Public Types

enum  Soft_Demod_Method { FULL_ENUM_LOGMAP , FULL_ENUM_MAXLOG , ZF_LOGMAP }
 Soft demodulation method. More...
 

Public Member Functions

 ND_UPAM (int nt=1, int Mary=2)
 Constructor.
 
virtual ~ND_UPAM ()
 Destructor.
 
void set_M (int nt=1, int Mary=2)
 Set component modulators to M-PAM with Gray mapping.
 
void set_M (int nt=1, ivec Mary="2")
 Set component modulators to M-PAM with Gray mapping, different M per component.
 
int sphere_decoding (const vec &y, const mat &H, double rmin, double rmax, double stepup, QLLRvec &detected_bits)
 Sphere decoding.
 
Array< vec > get_symbols () const
 Get modulation symbols per dimension.
 
void modulate_bits (const bvec &bits, vec &symbols) const
 Modulate bits into symbols.
 
vec modulate_bits (const bvec &bits) const
 Modulate bits vector. Symbols are returned.
 
void init_soft_demodulator (const itpp::mat &H, const double &sigma2)
 Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.
 
void demodulate_soft_bits (const vec &y, const QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori, Soft_Demod_Method method=FULL_ENUM_LOGMAP)
 Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.
 
void demodulate_soft_bits (const vec &y, const mat &H, double sigma2, const QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori, Soft_Demod_Method method=FULL_ENUM_LOGMAP)
 Soft demodulation wrapper function for various methods.
 
QLLRvec demodulate_soft_bits (const vec &y, const mat &H, double sigma2, const QLLRvec &LLR_apriori, Soft_Demod_Method method=FULL_ENUM_LOGMAP)
 Soft demodulation wrapper function for various methods.
 
void demodulate_soft_bits (const vec &y, const vec &h, double sigma2, const QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori)
 Soft MAP demodulation for parallelchannels without crosstalk.
 
void set_llrcalc (LLR_calc_unit llrcalc_in)
 Set LLR calculation unit.
 
LLR_calc_unit get_llrcalc () const
 Get LLR calculation unit.
 
int get_dim () const
 Get number of dimensions.
 
ivec get_k () const
 Get number of bits per modulation symbol per dimension.
 
ivec bits_per_symbol () const
 Get number of bits per modulation symbol per dimension.
 
ivec get_M () const
 Get number of modulation symbols per dimension.
 
Array< ivec > get_bits2symbols () const
 Get bit pattern in decimal.
 
Array< bmatget_bitmap () const
 Get Bit mapping table.
 

Protected Member Functions

void update_norm (double &norm, int k, int sold, int snew, const vec &ytH, const mat &HtH, const ivec &s)
 Update residual norm (for internal use).
 
void hxnormupdate (itpp::vec &Hx, unsigned &bitstring, unsigned &ind, unsigned bit)
 Calculation of the part of the norms that depends on H.
 
void yxnormupdate (double &yx, itpp::QLLR &lapr, unsigned &bitstring, unsigned &ind, unsigned bit)
 Calculation of the remaining part of the norms that depends both on H and y.
 
QLLRvec probabilities (QLLR l)
 Convert LLR to log-probabilities.
 
Array< QLLRvec > probabilities (const QLLRvec &l)
 Convert LLR to log-probabilities, vector version.
 
void marginalize_bits (itpp::QLLRvec &llr, Soft_Demod_Method method) const
 Marginalize (sum) over the bits.
 
void demodllrbit0 (itpp::QLLR &llr) const
 Hardcoded implementation of 1:st bit demodulation.
 
void demodllrbit1 (itpp::QLLR &llr) const
 Hardcoded implementation of 2:nd bit demodulation.
 
void demodllrbit2 (itpp::QLLR &llr) const
 Hardcoded implementation of 3:rd bit demodulation.
 
void demodmaxbit0 (itpp::QLLR &maxllr) const
 Hardcoded implementation of 1:st bit demodulation.
 
void demodmaxbit1 (itpp::QLLR &maxllr) const
 Hardcoded implementation of 2:nd bit demodulation.
 
void demodmaxbit2 (itpp::QLLR &maxllr) const
 Hardcoded implementation of 3:rd bit demodulation.
 
void update_LLR (const Array< QLLRvec > &logP_apriori, const ivec &s, QLLR scaled_norm, QLLRvec &num, QLLRvec &denom)
 Update LLR (for internal use)
 
void update_LLR (const Array< QLLRvec > &logP_apriori, int s, QLLR scaled_norm, int j, QLLRvec &num, QLLRvec &denom)
 Update LLR, for scalar channel (for internal use)
 

Protected Attributes

Array< vec > symbols
 Vectors of modulation symbols (along each dimension)
 
itpp::mat H
 Real channel matrix.
 
itpp::Array< itpp::Array< itpp::vec > > hspacings
 The spacing between different constellation points multiplied by the different H columns.
 
itpp::Array< itpp::vec > yspacings
 The spacing between different constellation points scaled by different y elements.
 
int nt
 Number of dimensions.
 
int nb
 Number of bits in the symbol vector.
 
LLR_calc_unit llrcalc
 LLR calculation unit.
 
ivec k
 Number of bits per modulation symbol.
 
ivec M
 Number of modulation symbols along each dimension.
 
bool demod_initialized
 Flag indicating whether the demodulator has been initialized.
 
Array< bmatbitmap
 Bit mapping table (one table per dimension)
 
Array< ivec > bits2symbols
 Bit pattern in decimal form ordered and the corresponding symbols (one pattern per dimension)
 
double gaussnorm
 The normalization factor in the exponent (in front of the square norm) in the Gaussian distribution.
 
itpp::vec hnorms
 Norms part dependent on H.
 
itpp::QLLRvec Qnorms
 Norms part depending on both H and y.
 
itpp::QLLRvec llrapr
 A prioi information.
 
itpp::ivec bpos2cpos
 The bit to column mapping.
 
itpp::ivec bitcumsum
 The cumulative sum of bits in the symbol vector.
 
itpp::Array< itpp::Vec< unsigned > > gray2dec
 The Gray to decimal mapping.
 

Related Symbols

(Note that these are not member symbols.)

ITPP_EXPORT std::ostream & operator<< (std::ostream &os, const Modulator_NRD &m)
 Print some properties of the MIMO modulator (mainly to aid debugging)
 

Detailed Description

Real-valued MIMO channel with uniform PAM along each dimension.

Example: (4 x 3 matrix channel with 4-PAM)

ND_UPAM chan; // multidimensional channel with uniform PAM
chan.set_M(3, 4); // 3-dimensional matrix channel, 4-PAM per dimension
cout << chan << endl;
bvec b = randb(3*2); // 3*2 bits in total
vec x = chan.modulate_bits(b);
mat H = randn(4,3); // 4 x 3 real matrix channel
double sigma2 = 0.01; // noise variance per real dimension
vec y = H*x + sqrt(sigma2)*randn(4); // transmit vector x
QLLRvec llr; // log-likelihood ratios
QLLRvec llr_ap = zeros_i(3*2); // a priori equiprobable bits
chan.demodulate_soft_bits(y, H, sigma2, llr_ap, llr);
cout << "True bits:" << b << endl;
cout << "LLRs:" << chan.get_llrcalc().to_double(llr) << endl;
double to_double(QLLR l) const
Convert an LLR type to a "real" LLR.
Definition llr.h:240
LLR_calc_unit get_llrcalc() const
Get LLR calculation unit.
void demodulate_soft_bits(const vec &y, const QLLRvec &LLR_apriori, QLLRvec &LLR_aposteriori, Soft_Demod_Method method=FULL_ENUM_LOGMAP)
Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation...
itpp::mat H
Real channel matrix.
void modulate_bits(const bvec &bits, vec &symbols) const
Modulate bits into symbols.
Real-valued MIMO channel with uniform PAM along each dimension.
void set_M(int nt=1, int Mary=2)
Set component modulators to M-PAM with Gray mapping.
vec sqrt(const vec &x)
Square root of the elements.
Definition elem_math.h:123
bin randb(void)
Generates a random bit (equally likely 0s and 1s)
Definition random.h:793
double randn(void)
Generates a random Gaussian (0,1) variable.
Definition random.h:831
ITPP_EXPORT ivec zeros_i(int size)
A Int vector of zeros.

Example: (scalar channel with 8-PAM)

ND_UPAM chan;
chan.set_M(1, 8); // scalar channel, 8-PAM (3 bits per symbol)
cout << chan << endl;
bvec b = randb(3);
vec x = chan.modulate_bits(b);
mat H = "1.0"; // scalar channel
double sigma2 = 0.01;
vec y= H*x + sqrt(sigma2)*randn(); // transmit vector x
QLLRvec llr;
QLLRvec llr_ap = zeros_i(3);
chan.demodulate_soft_bits(y, H, sigma2, llr_ap, llr);
cout << "True bits:" << b << endl;
cout << "LLRs:" << chan.get_llrcalc().to_double(llr) << endl;
Note
For issues relating to the accuracy of LLR computations, please see the documentation of LLR_calc_unit

Definition at line 654 of file modulator_nd.h.

Member Enumeration Documentation

◆ Soft_Demod_Method

Soft demodulation method.

Enumerator
FULL_ENUM_LOGMAP 

Log-MAP demodulation by "brute-force" enumeration of all points.

FULL_ENUM_MAXLOG 

Max-Log demodulation by "brute-force" enumeration of all points.

ZF_LOGMAP 

Zero-Forcing Log-MAP approximated demodulation.

Definition at line 67 of file modulator_nd.h.

Constructor & Destructor Documentation

◆ ND_UPAM()

itpp::ND_UPAM::ND_UPAM ( int nt = 1,
int Mary = 2 )

Constructor.

Definition at line 943 of file modulator_nd.cpp.

References itpp::Modulator_ND::nt, and set_M().

◆ ~ND_UPAM()

virtual itpp::ND_UPAM::~ND_UPAM ( )
inlinevirtual

Destructor.

Definition at line 660 of file modulator_nd.h.

Member Function Documentation

◆ set_M() [1/2]

void itpp::ND_UPAM::set_M ( int nt = 1,
int Mary = 2 )

Set component modulators to M-PAM with Gray mapping.

Definition at line 948 of file modulator_nd.cpp.

References itpp::Modulator_ND::nt, and set_M().

Referenced by ND_UPAM(), and set_M().

◆ set_M() [2/2]

void itpp::ND_UPAM::set_M ( int nt = 1,
ivec Mary = "2" )

◆ sphere_decoding()

int itpp::ND_UPAM::sphere_decoding ( const vec & y,
const mat & H,
double rmin,
double rmax,
double stepup,
QLLRvec & detected_bits )

Sphere decoding.

This function solves the integer-constrained minimization problem

\[
\mbox{min} |y - Hs|
\]

with respect to $s$ using a sphere decoding algorithm and the Schnorr-Eucner search strategy (see the source code for further implementation notes). The function starts with an initial search radius and increases it with a factor (stepup) until the search succeeds.

Parameters
[in]yreceived data vector ( $n_r\times 1$)
[in]Hchannel matrix ( $n_r\times n_t$)
[in]rmaxmaximum possible sphere radius to try
[in]rminsphere radius in the first try
[in]stepupfactor with which the sphere radius is increased if the search fails
[out]detected_bitsresult of the search (hard decisions only, QLLR for a sure "1" is set to 1000)
Returns
status of the decoding: 0 if the search suceeds, -1 otherwise

Definition at line 1087 of file modulator_nd.cpp.

References itpp::Modulator_ND::bitmap, itpp::Modulator_NRD::H, it_assert, itpp::Modulator_ND::k, itpp::length(), itpp::Modulator_ND::M, itpp::Modulator_ND::nt, and itpp::sum().

◆ get_symbols()

Array< vec > itpp::Modulator_NRD::get_symbols ( ) const
inherited

◆ modulate_bits() [1/2]

void itpp::Modulator_NRD::modulate_bits ( const bvec & bits,
vec & symbols ) const
inherited

◆ modulate_bits() [2/2]

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

Modulate bits vector. Symbols are returned.

Definition at line 478 of file modulator_nd.cpp.

References itpp::Modulator_NRD::modulate_bits(), and itpp::Modulator_ND::nt.

◆ init_soft_demodulator()

void itpp::Modulator_NRD::init_soft_demodulator ( const itpp::mat & H,
const double & sigma2 )
inherited

◆ demodulate_soft_bits() [1/4]

void itpp::Modulator_NRD::demodulate_soft_bits ( const vec & y,
const QLLRvec & LLR_apriori,
QLLRvec & LLR_aposteriori,
Soft_Demod_Method method = FULL_ENUM_LOGMAP )
inherited

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 using the Modulator_NCD class. Currently the following two demodulation methods are supported:

  • FULL_ENUM_LOGMAP - exact demodulation, which use "brute-force" enumeration of all constellation points
  • FULL_ENUM_MAXLOG - max-log approximate demodulation, which use "brute-force" enumeration to find the constellation points that give the smallest euclidian distances
Parameters
[in]yReceived vector (typically $N_0/2$)
[in]LLR_aprioriVector of a priori LLR values per bit
[out]LLR_aposterioriVector of a posteriori LLR values
[in]methodSoft demodulation method

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.

References itpp::operator<<().

Referenced by itpp::Modulator_NRD::demodulate_soft_bits(), and itpp::Modulator_NRD::demodulate_soft_bits().

◆ demodulate_soft_bits() [2/4]

void itpp::Modulator_NRD::demodulate_soft_bits ( const vec & y,
const mat & H,
double sigma2,
const QLLRvec & LLR_apriori,
QLLRvec & LLR_aposteriori,
Soft_Demod_Method method = FULL_ENUM_LOGMAP )
inherited

Soft demodulation wrapper function for various methods.

Currently the following three demodulation methods are supported:

  • FULL_ENUM_LOGMAP - exact demodulation, which use "brute-force" enumeration of all constellation points
  • FULL_ENUM_MAXLOG - max-log approximate demodulation, which use "brute-force" enumeration to find the constellation points that give the smallest euclidian distances
  • ZF_LOGMAP - approximated methods with Zero-Forcing preprocessing, which sometimes tends to perform poorly, especially for poorly conditioned H
Parameters
[in]yReceived vector
[in]HChannel matrix
[in]sigma2Noise variance per real dimension (typically $N_0/2$)
[in]LLR_aprioriVector of a priori LLR values per bit
[out]LLR_aposterioriVector of a posteriori LLR values
[in]methodSoft demodulation method

Definition at line 560 of file modulator_nd.cpp.

References itpp::Modulator_NRD::demodulate_soft_bits(), itpp::Modulator_NRD::H, itpp::Modulator_NRD::init_soft_demodulator(), itpp::inv(), it_assert, itpp::Modulator_ND::k, itpp::ones(), itpp::sum(), itpp::zeros_i(), and itpp::Modulator_ND::ZF_LOGMAP.

◆ demodulate_soft_bits() [3/4]

QLLRvec itpp::Modulator_NRD::demodulate_soft_bits ( const vec & y,
const mat & H,
double sigma2,
const QLLRvec & LLR_apriori,
Soft_Demod_Method method = FULL_ENUM_LOGMAP )
inherited

Soft demodulation wrapper function for various methods.

Currently the following two demodulation methods are supported:

  • FULL_ENUM_LOGMAP - exact demodulation, which use "brute-force" enumeration of all constellation points
  • ZF_LOGMAP - approximated methods with Zero-Forcing preprocessing, which sometimes tends to perform poorly, especially for poorly conditioned H
Parameters
[in]yReceived vector
[in]HChannel matrix
[in]sigma2Noise variance per real dimension (typically $N_0/2$)
[in]LLR_aprioriVector of a priori LLR values per bit
[in]methodSoft demodulation method
Returns
Vector of a posteriori LLR values

Definition at line 591 of file modulator_nd.cpp.

References itpp::Modulator_NRD::demodulate_soft_bits(), and itpp::Modulator_NRD::H.

◆ demodulate_soft_bits() [4/4]

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

Soft MAP demodulation for parallelchannels without crosstalk.

This function is a much faster equivalent to demodulate_soft_bits with $H = \mbox{diag}(h)$. Its complexity is linear in the number of subchannels.

Definition at line 601 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(), itpp::Modulator_NRD::symbols, itpp::LLR_calc_unit::to_qllr(), and itpp::Modulator_ND::update_LLR().

◆ update_norm()

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

Update residual norm (for internal use).

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

Parameters
[in,out]normNorm to be updated
[in]kPosition where s changed
[in]soldOld value of s[k]
[in]snewNew value of s[k]
[in]ytHy'H vector
[in]HtHGrammian matrix H'H
[in]sSymbol vector

◆ hxnormupdate()

void itpp::Modulator_NRD::hxnormupdate ( itpp::vec & Hx,
unsigned & bitstring,
unsigned & ind,
unsigned bit )
protectedinherited

◆ yxnormupdate()

void itpp::Modulator_NRD::yxnormupdate ( double & yx,
itpp::QLLR & lapr,
unsigned & bitstring,
unsigned & ind,
unsigned bit )
protectedinherited

◆ set_llrcalc()

void itpp::Modulator_ND::set_llrcalc ( LLR_calc_unit llrcalc_in)
inlineinherited

Set LLR calculation unit.

Definition at line 83 of file modulator_nd.h.

◆ get_llrcalc()

LLR_calc_unit itpp::Modulator_ND::get_llrcalc ( ) const
inlineinherited

Get LLR calculation unit.

Definition at line 88 of file modulator_nd.h.

◆ get_dim()

int itpp::Modulator_ND::get_dim ( ) const
inlineinherited

Get number of dimensions.

Definition at line 93 of file modulator_nd.h.

◆ get_k()

ivec itpp::Modulator_ND::get_k ( ) const
inlineinherited

Get number of bits per modulation symbol per dimension.

Definition at line 98 of file modulator_nd.h.

◆ bits_per_symbol()

ivec itpp::Modulator_ND::bits_per_symbol ( ) const
inlineinherited

Get number of bits per modulation symbol per dimension.

Definition at line 103 of file modulator_nd.h.

◆ get_M()

ivec itpp::Modulator_ND::get_M ( ) const
inlineinherited

Get number of modulation symbols per dimension.

Definition at line 108 of file modulator_nd.h.

◆ get_bits2symbols()

Array< ivec > itpp::Modulator_ND::get_bits2symbols ( ) const
inlineinherited

Get bit pattern in decimal.

Definition at line 113 of file modulator_nd.h.

◆ get_bitmap()

Array< bmat > itpp::Modulator_ND::get_bitmap ( ) const
inlineinherited

Get Bit mapping table.

Definition at line 118 of file modulator_nd.h.

◆ probabilities() [1/2]

QLLRvec itpp::Modulator_ND::probabilities ( QLLR l)
protectedinherited

◆ probabilities() [2/2]

Array< QLLRvec > itpp::Modulator_ND::probabilities ( const QLLRvec & l)
protectedinherited

Convert LLR to log-probabilities, vector version.

Definition at line 437 of file modulator_nd.cpp.

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

◆ marginalize_bits()

◆ demodllrbit0()

void itpp::Modulator_ND::demodllrbit0 ( itpp::QLLR & llr) const
protectedinherited

Hardcoded implementation of 1:st bit demodulation.

Definition at line 203 of file modulator_nd.cpp.

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

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ demodllrbit1()

void itpp::Modulator_ND::demodllrbit1 ( itpp::QLLR & llr) const
protectedinherited

Hardcoded implementation of 2:nd bit demodulation.

Definition at line 222 of file modulator_nd.cpp.

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

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ demodllrbit2()

void itpp::Modulator_ND::demodllrbit2 ( itpp::QLLR & llr) const
protectedinherited

Hardcoded implementation of 3:rd bit demodulation.

Definition at line 250 of file modulator_nd.cpp.

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

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ demodmaxbit0()

void itpp::Modulator_ND::demodmaxbit0 ( itpp::QLLR & maxllr) const
protectedinherited

Hardcoded implementation of 1:st bit demodulation.

Definition at line 294 of file modulator_nd.cpp.

References itpp::Modulator_ND::nb, and itpp::Modulator_ND::Qnorms.

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ demodmaxbit1()

void itpp::Modulator_ND::demodmaxbit1 ( itpp::QLLR & maxllr) const
protectedinherited

Hardcoded implementation of 2:nd bit demodulation.

Definition at line 320 of file modulator_nd.cpp.

References itpp::Modulator_ND::nb, and itpp::Modulator_ND::Qnorms.

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ demodmaxbit2()

void itpp::Modulator_ND::demodmaxbit2 ( itpp::QLLR & maxllr) const
protectedinherited

Hardcoded implementation of 3:rd bit demodulation.

Definition at line 362 of file modulator_nd.cpp.

References itpp::Modulator_ND::nb, and itpp::Modulator_ND::Qnorms.

Referenced by itpp::Modulator_ND::marginalize_bits().

◆ update_LLR() [1/2]

void itpp::Modulator_ND::update_LLR ( const Array< QLLRvec > & logP_apriori,
const ivec & s,
QLLR scaled_norm,
QLLRvec & num,
QLLRvec & denom )
protectedinherited

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
[in]logP_aprioriVector of a priori probabilities per bit
[in]sSymbol vector
[in]scaled_normArgument of the exponents in the above equation
[out]numLogarithm of the numerator in the above expression
[out]denomLogarithm of the denominator in the above expression

Definition at line 94 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::demodulate_soft_bits(), and itpp::Modulator_NRD::demodulate_soft_bits().

◆ update_LLR() [2/2]

void itpp::Modulator_ND::update_LLR ( const Array< QLLRvec > & logP_apriori,
int s,
QLLR scaled_norm,
int j,
QLLRvec & num,
QLLRvec & denom )
protectedinherited

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
[in]logP_aprioriVector of a priori probabilities per bit
[in]sSymbol
[in]scaled_normArgument of the exponents in the above equation
[in]jChannel index (dimension)
[out]numLogarithm of the numerator in the above expression
[out]denomLogarithm of the denominator in the above expression

Definition at line 68 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 Symbol Documentation

◆ operator<<()

ITPP_EXPORT std::ostream & operator<< ( std::ostream & os,
const Modulator_NRD & m )
related

Print some properties of the MIMO modulator (mainly to aid debugging)

Definition at line 679 of file modulator_nd.cpp.

Member Data Documentation

◆ symbols

Array<vec> itpp::Modulator_NRD::symbols
protectedinherited

◆ H

itpp::mat itpp::Modulator_NRD::H
protectedinherited

◆ hspacings

itpp::Array<itpp::Array<itpp::vec> > itpp::Modulator_NRD::hspacings
protectedinherited

The spacing between different constellation points multiplied by the different H columns.

Definition at line 418 of file modulator_nd.h.

Referenced by itpp::Modulator_NRD::hxnormupdate(), and itpp::Modulator_NRD::init_soft_demodulator().

◆ yspacings

itpp::Array<itpp::vec> itpp::Modulator_NRD::yspacings
protectedinherited

The spacing between different constellation points scaled by different y elements.

Definition at line 420 of file modulator_nd.h.

Referenced by itpp::Modulator_NRD::init_soft_demodulator(), and itpp::Modulator_NRD::yxnormupdate().

◆ nt

◆ nb

◆ llrcalc

◆ k

◆ M

◆ demod_initialized

bool itpp::Modulator_ND::demod_initialized
protectedinherited

Flag indicating whether the demodulator has been initialized.

Definition at line 134 of file modulator_nd.h.

Referenced by itpp::Modulator_NCD::init_soft_demodulator(), and itpp::Modulator_NRD::init_soft_demodulator().

◆ bitmap

Array<bmat> itpp::Modulator_ND::bitmap
protectedinherited

◆ bits2symbols

Array<ivec> itpp::Modulator_ND::bits2symbols
protectedinherited

◆ gaussnorm

double itpp::Modulator_ND::gaussnorm
protectedinherited

The normalization factor in the exponent (in front of the square norm) in the Gaussian distribution.

Definition at line 140 of file modulator_nd.h.

Referenced by itpp::Modulator_NCD::init_soft_demodulator(), itpp::Modulator_NRD::init_soft_demodulator(), and itpp::Modulator_NRD::yxnormupdate().

◆ hnorms

itpp::vec itpp::Modulator_ND::hnorms
protectedinherited

◆ Qnorms

◆ llrapr

itpp::QLLRvec itpp::Modulator_ND::llrapr
protectedinherited

A prioi information.

Definition at line 146 of file modulator_nd.h.

Referenced by itpp::Modulator_NRD::yxnormupdate().

◆ bpos2cpos

itpp::ivec itpp::Modulator_ND::bpos2cpos
protectedinherited

◆ bitcumsum

itpp::ivec itpp::Modulator_ND::bitcumsum
protectedinherited

◆ gray2dec

itpp::Array<itpp::Vec<unsigned> > itpp::Modulator_ND::gray2dec
protectedinherited

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

Generated on Tue Dec 10 2024 04:49:37 for IT++ by Doxygen 1.12.0