itpp::PAM Class Reference
Communications Module » Digital Modulation

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

`#include <itpp/comm/modulator.h>`

Inheritance diagram for itpp::PAM:

## 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 int | get_k () const
| Returns number of bits per symbol.
virtual int | get_M () const
| Returns number of modulation symbols.
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 Symbols

(Note that these are not member symbols.)
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: . 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 .

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.

Definition at line 1104 of file modulator.h.

## Constructor & Destructor Documentation

## PAM() [1/2]

itpp::PAM::PAM | ( |  | ) |

inline

Default Constructor.

Definition at line 1108 of file modulator.h.

## PAM() [2/2]

itpp::PAM::PAM | ( | int | M | ) |

inline

Constructor.

Definition at line 1110 of file modulator.h.

## ~PAM()

virtual itpp::PAM::~PAM | ( |  | ) |

inline virtual

Destructor.

Definition at line 1112 of file modulator.h.

## Member Function Documentation

## set_M()

void itpp::PAM::set_M | ( | int | M | ) |

Set the size of the signal constellation.

Definition at line 546 of file modulator.cpp.

References itpp::bin2dec(), itpp::Modulator< double >::bitmap, itpp::Modulator< double >::bits2symbols, itpp::Modulator< double >::calculate_softbit_matrices(), itpp::graycode(), it_assert, itpp::Modulator< double >::k, itpp::levels2bits(), itpp::Modulator< double >::M, itpp::pow2i(), scaling_factor, itpp::Array< T >::set_size(), itpp::Vec< Num_T >::set_size(), itpp::Modulator< double >::setup_done, itpp::sqr(), and itpp::Modulator< double >::symbols.

## demodulate_bits() [1/4]

void itpp::PAM::demodulate_bits | ( | const vec & | signal,
|  | bvec & | output
| ) |  | const

Hard demodulation of PAM symbols in complex domain to bits.

Definition at line 569 of file modulator.cpp.

References itpp::Modulator< double >::bitmap, it_assert_debug, itpp::Modulator< double >::k, itpp::Modulator< double >::M, itpp::round_i(), scaling_factor, itpp::Array< T >::set_size(), itpp::Modulator< double >::setup_done, and itpp::Array< T >::size().

Referenced by demodulate_bits().

## demodulate_bits() [2/4]

bvec itpp::PAM::demodulate_bits | ( | const vec & | signal | ) | const

Hard demodulation of PAM symbols in complex domain to bits.

Definition at line 585 of file modulator.cpp.

References demodulate_bits().

## set()

void itpp::Modulator< double >::set | ( | const Vec< double > & | symbols,
|  | const ivec & | bits2symbols
| ) |  |

virtual inherited

Set the constellation to use in the modulator.

Definition at line 86 of file modulator.h.

## bits_per_symbol()

virtual int itpp::Modulator< double >::bits_per_symbol | ( |  | ) | const

inline virtual inherited

Returns number of bits per symbol.

Definition at line 89 of file modulator.h.

## get_k()

virtual int itpp::Modulator< double >::get_k | ( |  | ) | const

inline virtual inherited

Returns number of bits per symbol.

Definition at line 92 of file modulator.h.

## get_M()

virtual int itpp::Modulator< double >::get_M | ( |  | ) | const

inline virtual inherited

Returns number of modulation symbols.

Definition at line 95 of file modulator.h.

## get_symbols()

virtual Vec< double > itpp::Modulator< double >::get_symbols | ( |  | ) | const

inline virtual inherited

Get the symbol values used in the modulator.

Definition at line 98 of file modulator.h.

## get_bits2symbols()

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));
itpp::Array
General array class.
Definition array.h:105
itpp::PSK
M-ary PSK modulator.
Definition modulator.h:636
itpp::mod
int mod(int k, int n)
Calculates the modulus, i.e. the signed reminder after division.
Definition elem_math.h:166
itpp::bin2dec
ITPP_EXPORT int bin2dec(const bvec &inbvec, bool msb_first=true)
Convert a bvec to decimal int with the first bit as MSB if msb_first == true.

Definition at line 117 of file modulator.h.

## modulate() [1/2]

void itpp::Modulator< double >::modulate | ( | const ivec & | symbolnumbers,
|  | Vec< double > & | output
| ) |  | const

virtual inherited

Modulation of symbols.

Definition at line 120 of file modulator.h.

## modulate() [2/2]

Vec< double > itpp::Modulator< double >::modulate | ( | const ivec & | symbolnumbers | ) | const

virtual inherited

Modulation of symbols.

Definition at line 122 of file modulator.h.

## demodulate() [1/2]

void itpp::Modulator< double >::demodulate | ( | const Vec< double > & | signal,
|  | ivec & | output
| ) |  | const

virtual inherited

Demodulation of symbols.

Definition at line 125 of file modulator.h.

## demodulate() [2/2]

ivec itpp::Modulator< double >::demodulate | ( | const Vec< double > & | signal | ) | const

virtual inherited

Demodulation of symbols.

Definition at line 127 of file modulator.h.

## modulate_bits() [1/2]

void itpp::Modulator< double >::modulate_bits | ( | const bvec & | bits,
|  | Vec< double > & | output
| ) |  | const

virtual inherited

Modulation of bits.

Definition at line 130 of file modulator.h.

## modulate_bits() [2/2]

Vec< double > itpp::Modulator< double >::modulate_bits | ( | const bvec & | bits | ) | const

virtual inherited

Modulation of bits.

Reimplemented in itpp::BPSK.

Definition at line 132 of file modulator.h.

## demodulate_bits() [3/4]

void itpp::Modulator< double >::demodulate_bits | ( | const Vec< double > & | signal,
|  | bvec & | bits
| ) |  | const

virtual inherited

Hard demodulation of bits.

Definition at line 135 of file modulator.h.

## demodulate_bits() [4/4]

bvec itpp::Modulator< double >::demodulate_bits | ( | const Vec< double > & | signal | ) | const

virtual inherited

Hard demodulation of bits.

Definition at line 137 of file modulator.h.

## demodulate_soft_bits() [1/4]

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:

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 denote the distance to the closest zero point and denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes

This function can be used on channels where the channel gain .

When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor 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.

Definition at line 178 of file modulator.h.

## demodulate_soft_bits() [2/4]

vec itpp::Modulator< double >::demodulate_soft_bits | ( | const Vec< double > & | rx_symbols,
|  | double | N0,
|  | Soft_Method | method = `LOGMAP`
| ) |  | const

virtual inherited

Soft demodulator for AWGN channels.

Definition at line 182 of file modulator.h.

## demodulate_soft_bits() [3/4]

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:

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 denote the distance to the closest zero point and denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes

When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor 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
  channel | The channel values
  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.

Definition at line 223 of file modulator.h.

## demodulate_soft_bits() [4/4]

vec itpp::Modulator< double >::demodulate_soft_bits | ( | const Vec< double > & | rx_symbols,
|  | const Vec< double > & | channel,
|  | double | N0,
|  | Soft_Method | method = `LOGMAP`
| ) |  | const

virtual inherited

Soft demodulator for fading channels.

Definition at line 228 of file modulator.h.

## calculate_softbit_matrices()

void itpp::Modulator< double >::calculate_softbit_matrices | ( |  | ) |

protected inherited

This function calculates the soft bit mapping matrices S0 and S1.

Definition at line 254 of file modulator.h.

## Friends And Related Symbol Documentation

## Modulator_1D

typedef Modulator<double> Modulator_1D

related

Definition of 1D Modulator (with real symbols)

Definition at line 266 of file modulator.h.

## Modulator_2D

typedef Modulator<std::complex<double> > Modulator_2D

related

Definition of 2D Modulator (with complex symbols)

Definition at line 272 of file modulator.h.

## Member Data Documentation

## scaling_factor

double itpp::PAM::scaling_factor

protected

Scaling factor used to normalize the average energy to 1.

Definition at line 1123 of file modulator.h.

Referenced by demodulate_bits(), and set_M().

## setup_done

bool itpp::Modulator< double >::setup_done

protected inherited

Setup indicator.

Definition at line 235 of file modulator.h.

## k

int itpp::Modulator< double >::k

protected inherited

Number of bits per modulation symbol.

Definition at line 237 of file modulator.h.

## M

int itpp::Modulator< double >::M

protected inherited

Number of modulation symbols.

Definition at line 239 of file modulator.h.

## bitmap

bmat itpp::Modulator< double >::bitmap

protected inherited

Bit to symbol mapping table (size: M x k)

Definition at line 241 of file modulator.h.

## bits2symbols

ivec itpp::Modulator< double >::bits2symbols

protected inherited

Bit to symbol mapping in decimal form (size: M)

Definition at line 243 of file modulator.h.

## symbols

Vec<double > itpp::Modulator< double >::symbols

protected inherited

Corresponding modulation symbols (size: M)

Definition at line 245 of file modulator.h.

## S0

imat itpp::Modulator< double >::S0

protected inherited

Matrix where row k contains the constellation points with '0' in bit position k.

Definition at line 248 of file modulator.h.

## S1

imat itpp::Modulator< double >::S1

protected inherited

Matrix where row k contains the constellation points with '1' in bit position k.

Definition at line 251 of file modulator.h.

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

- itpp/comm/modulator.h
- itpp/comm/modulator.cpp

Generated on Mon Apr 22 2024 09:45:27 for IT++ by Doxygen 1.9.8