itpp::PAM Class Reference
[Digital Modulation]

M-ary PAM modulator with real symbols. More...

#include <modulator.h>

List of all members.

Public Member Functions

 PAM ()
 Default Constructor.
 PAM (int M)
 Constructor.
virtual ~PAM ()
 Destructor.
void set_M (int M)
 Set the size of the signal constellation.
void demodulate_bits (const vec &signal, bvec &output) const
 Hard demodulation of PAM symbols in complex domain to bits.
bvec demodulate_bits (const vec &signal) const
 Hard demodulation of PAM symbols in complex domain to bits.
virtual void set (const Vec< double > &symbols, const ivec &bits2symbols)
 Set the constellation to use in the modulator.
virtual int bits_per_symbol () const
 Returns number of bits per symbol.
virtual Vec< double > get_symbols () const
 Get the symbol values used in the modulator.
virtual ivec get_bits2symbols () const
 Get the bitmap, which maps input bits into symbols.
virtual void modulate (const ivec &symbolnumbers, Vec< double > &output) const
 Modulation of symbols.
virtual Vec< double > modulate (const ivec &symbolnumbers) const
 Modulation of symbols.
virtual void demodulate (const Vec< double > &signal, ivec &output) const
 Demodulation of symbols.
virtual ivec demodulate (const Vec< double > &signal) const
 Demodulation of symbols.
virtual void modulate_bits (const bvec &bits, Vec< double > &output) const
 Modulation of bits.
virtual Vec< double > modulate_bits (const bvec &bits) const
 Modulation of bits.
virtual void demodulate_bits (const Vec< double > &signal, bvec &bits) const
 Hard demodulation of bits.
virtual bvec demodulate_bits (const Vec< double > &signal) const
 Hard demodulation of bits.
virtual void demodulate_soft_bits (const Vec< double > &rx_symbols, double N0, vec &soft_bits, Soft_Method method=LOGMAP) const
 Soft demodulator for AWGN channels.
virtual vec demodulate_soft_bits (const Vec< double > &rx_symbols, double N0, Soft_Method method=LOGMAP) const
 Soft demodulator for AWGN channels.
virtual void demodulate_soft_bits (const Vec< double > &rx_symbols, const Vec< double > &channel, double N0, vec &soft_bits, Soft_Method method=LOGMAP) const
 Soft demodulator for fading channels.
virtual vec demodulate_soft_bits (const Vec< double > &rx_symbols, const Vec< double > &channel, double N0, Soft_Method method=LOGMAP) const
 Soft demodulator for fading channels.

Protected Member Functions

void calculate_softbit_matrices ()
 This function calculates the soft bit mapping matrices S0 and S1.

Protected Attributes

double scaling_factor
 Scaling factor used to normalize the average energy to 1.
bool setup_done
 Setup indicator.
int k
 Number of bits per modulation symbol.
int M
 Number of modulation symbols.
bmat bitmap
 Bit to symbol mapping table (size: M x k).
ivec bits2symbols
 Bit to symbol mapping in decimal form (size: M).
Vec< double > symbols
 Corresponding modulation symbols (size: M).
imat S0
 Matrix where row k contains the constellation points with '0' in bit position k.
imat S1
 Matrix where row k contains the constellation points with '1' in bit position k.

Related Functions

(Note that these are not member functions.)

typedef Modulator< double > Modulator_1D
 Definition of 1D Modulator (with real symbols).
typedef Modulator
< std::complex< double > > 
Modulator_2D
 Definition of 2D Modulator (with complex symbols).


Detailed Description

M-ary PAM modulator with real symbols.

This class implements an M-ary PAM modulator with the following signal values: $\{-(M-1), \ldots, -3, -1, 1, 3, \ldots, (M-1)\}$. Symbol numbering is from right to left in the increasing order. The Gray encoding of bits to symbols is used.

The constellation symbols are normalized so that the average energy is equal to 1. That is, normalized with $ \sqrt{(M^2-1)/3}$.

Note:
This class uses real values for representing symbols. There is a similar class named PAM_c, which uses complex values for symbols and therefore is compatible with other PSK and QAM based modulators.

Member Function Documentation

virtual void itpp::Modulator< double >::demodulate_soft_bits ( const Vec< double > &  rx_symbols,
const Vec< double > &  channel,
double  N0,
vec &  soft_bits,
Soft_Method  method = LOGMAP 
) const [virtual, inherited]

Soft demodulator for fading channels.

This function calculates the log-likelihood ratio (LLR) of the received signal from fading channels. Depending on the soft demodulation method chosen, either full log-MAP calculation is performed (default method), according to the following equation:

\[\log \left( \frac{P(b_i=0|r)}{P(b_i=1|r)} \right) = \log \left( \frac{\sum_{s_i \in S_0} \exp \left( -\frac{|r_k - c_k s_i|^2}{N_0} \right)} {\sum_{s_i \in S_1} \exp \left( -\frac{|r_k - c_k s_i|^2}{N_0} \right)} \right) \]

or approximate, but faster calculation is performed.

The approximate method finds for each bit the closest constellation points that have zero and one in the corresponding position. Let $d_0 = |r_k - c_k s_0|$ denote the distance to the closest zero point and $d_1 = |r_k - c_k s_1|$ denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes

\[\frac{d_1^2 - d_0^2}{N_0}\]

When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor $L_c$ of the turbo decoder shall be set to 1. The output from this function can also be used by a Viterbi decoder using an AWGN based metric calculation function.

Parameters:
rx_symbols The received noisy constellation symbols $r_k$
channel The channel values $c_k$
N0 The spectral density of the AWGN noise
soft_bits The soft bits calculated using the expression above
method The method used for demodulation (LOGMAP or APPROX)
Note:
For soft demodulation it is suggested to use the N-dimensional modulator (Modulator_ND) instead, which is based on the QLLR (quantized) arithmetic and therefore is faster. Please note, however, that mixed use of Modulator_1D/Modulator_2D and Modulator_ND is not advised.

virtual void itpp::Modulator< double >::demodulate_soft_bits ( const Vec< double > &  rx_symbols,
double  N0,
vec &  soft_bits,
Soft_Method  method = LOGMAP 
) const [virtual, inherited]

Soft demodulator for AWGN channels.

This function calculates the log-likelihood ratio (LLR) of the received signal from AWGN channels. Depending on the soft demodulation method chosen, either full log-MAP calculation is performed (default method), according to the following equation:

\[\log \left( \frac{P(b_i=0|r)}{P(b_i=1|r)} \right) = \log \left( \frac{\sum_{s_i \in S_0} \exp \left( -\frac{|r_k - s_i|^2}{N_0} \right)} {\sum_{s_i \in S_1} \exp \left( -\frac{|r_k - s_i|^2}{N_0} \right)} \right) \]

or approximate, but faster calculation is performed.

The approximate method finds for each bit the closest constellation points that have zero and one in the corresponding position. Let $d_0 = |r_k - s_0|$ denote the distance to the closest zero point and $d_1 = |r_k - s_1|$ denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes

\[\frac{d_1^2 - d_0^2}{N_0}\]

This function can be used on channels where the channel gain $c_k = 1$.

When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor $L_c$ of the turbo decoder shall be set to 1. The output from this function can also be used by a Viterbi decoder using an AWGN based metric calculation function.

Parameters:
rx_symbols The received noisy constellation symbols
N0 The spectral density of the AWGN noise
soft_bits The soft bits calculated using the expression above
method The method used for demodulation (LOGMAP or APPROX)
Note:
For soft demodulation it is suggested to use the N-dimensional modulator (Modulator_ND) instead, which is based on the QLLR (quantized) arithmetic and therefore is faster. Please note, however, that mixed use of Modulator_1D/Modulator_2D and Modulator_ND is not advised.

virtual ivec itpp::Modulator< double >::get_bits2symbols (  )  const [inline, virtual, inherited]

Get the bitmap, which maps input bits into symbols.

The mapping is done as follows. An input bit sequence in decimal notation is used for indexing the bits2symbols table. The indexing result denotes the symbol to be used from the symbols table, e.g.:

 PSK mod(8); // assume 8-PSK modulator
 cvec sym =  mod.get_symbols();
 ivec bits2sym = mod.get_bits2symbols();
 bvec in_bits = "100" // input bits
 int d = bin2dec(in_bits); // decimal representation of in_bits = 4
 // mapping of d into PSK symbol using bits2sym and sym tables
 std::complex<double> out_symbol = sym(bits2sym(d));


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

Generated on Tue Jun 2 10:02:19 2009 for mixpp by  doxygen 1.5.8