Low-density parity check (LDPC) codec. More...
#include <itpp/comm/ldpc.h>
Public Member Functions | |
LDPC_Code () | |
Default constructor. | |
LDPC_Code (const LDPC_Parity *const H, LDPC_Generator *const G=0, bool perform_integrity_check=true) | |
Constructor, from a parity check matrix and optionally a generator. | |
LDPC_Code (const std::string &filename, LDPC_Generator *const G=0) | |
Constructor, from a saved file. | |
virtual | ~LDPC_Code () |
Destructor. | |
void | set_code (const LDPC_Parity *const H, LDPC_Generator *const G=0, bool perform_integrity_check=true) |
Set the codec, from a parity check matrix and optionally a generator. | |
void | load_code (const std::string &filename, LDPC_Generator *const G=0) |
Set the codec, by reading from a saved file. | |
void | save_code (const std::string &filename) const |
Save the codec to a file. | |
void | set_decoding_method (const std::string &method) |
Set the decoding method. | |
void | set_exit_conditions (int max_iters, bool syndr_check_each_iter=true, bool syndr_check_at_start=false) |
Set the decoding loop exit conditions. | |
void | set_llrcalc (const LLR_calc_unit &llrcalc) |
Set LLR calculation unit. | |
virtual void | encode (const bvec &input, bvec &output) |
Encode codeword. | |
virtual bvec | encode (const bvec &input) |
Encode codeword. | |
virtual void | decode (const bvec &, bvec &) |
Inherited from the base class - not implemented here. | |
virtual bvec | decode (const bvec &) |
Inherited from the base class - not implemented here. | |
virtual void | decode (const vec &llr_in, bvec &syst_bits) |
This function outputs systematic bits of the decoded codeword. | |
virtual bvec | decode (const vec &llr_in) |
This function outputs systematic bits of the decoded codeword. | |
void | decode_soft_out (const vec &llr_in, vec &llr_out) |
This function is a wrapper for bp_decode() | |
vec | decode_soft_out (const vec &llr_in) |
This function is a wrapper for bp_decode() | |
int | bp_decode (const QLLRvec &LLRin, QLLRvec &LLRout) |
Belief propagation decoding. | |
bool | syndrome_check (const QLLRvec &LLR) const |
Syndrome check, on QLLR vector. | |
bool | syndrome_check (const bvec &b) const |
Syndrome check, on bit vector. | |
QLLRvec | soft_syndrome_check (const QLLRvec &LLR) const |
Soft syndrome check. | |
double | get_rate () const |
Get the coderate. | |
int | get_nvar () const |
Get the number of variable nodes. | |
int | get_ncheck () const |
Get the number of check nodes. | |
int | get_ninfo () const |
Get the number of information bits per codeword. | |
std::string | get_decoding_method () const |
Return the decoding method. | |
int | get_nrof_iterations () const |
Get the maximum number of iterations of the decoder. | |
LLR_calc_unit | get_llrcalc () const |
Get LLR calculation unit used in decoder. | |
Protected Member Functions | |
void | decoder_parameterization (const LDPC_Parity *const H) |
Function to compute decoder parameterization. | |
void | integrity_check () |
Function to check the integrity of the parity check matrix and generator. | |
void | setup_decoder () |
Initialize decoder. | |
Friends | |
ITPP_EXPORT std::ostream & | operator<< (std::ostream &os, const LDPC_Code &C) |
Print some properties of the codec in plain text. | |
Related Functions | |
(Note that these are not member functions.) | |
ITPP_EXPORT std::ostream & | operator<< (std::ostream &os, const LDPC_Code &C) |
Print some properties of the LDPC codec in plain text. | |
Low-density parity check (LDPC) codec.
This class provides the functionality for encoding and decoding of LDPC codes defined via LDPC_Parity
and LDPC_Generator
classes.
LDPC codecs are constructed from parity check and generator matrices. Since the procedure of constructing the codec can be time-consuming (for example, due to optimization of the parity matrix and computation of the generator matrix), codecs can be saved to a file for later use. This class provides functionality and a special file format (the file format is designed to optimize the operation of the decoder) to do this. Some examples of load and save operations follow:
Saving a codec without generator matrix:
Saving a codec with generator matrix (for the example of systematic generator):
Loading a codec without a generator:
Loading a codec with a generator (systematic in this example):
LLR_calc_unit
itpp::LDPC_Code::LDPC_Code | ( | const LDPC_Parity *const | H, |
LDPC_Generator *const | G = 0 , |
||
bool | perform_integrity_check = true |
||
) |
Constructor, from a parity check matrix and optionally a generator.
This constructor simply calls set_code()
.
H | The parity check matrix |
G | A pointer to the optional generator object |
perform_integrity_check | if true, then check that the parity and generator matrices are consistent |
Definition at line 1210 of file ldpc.cpp.
References set_code(), and set_decoding_method().
itpp::LDPC_Code::LDPC_Code | ( | const std::string & | filename, |
LDPC_Generator *const | G = 0 |
||
) |
Constructor, from a saved file.
This constructor simply calls load_code()
.
Definition at line 1220 of file ldpc.cpp.
References load_code(), and set_decoding_method().
void itpp::LDPC_Code::set_code | ( | const LDPC_Parity *const | H, |
LDPC_Generator *const | G = 0 , |
||
bool | perform_integrity_check = true |
||
) |
Set the codec, from a parity check matrix and optionally a generator.
H | The parity check matrix |
G | A pointer to the optional generator object |
perform_integrity_check | if true, then check that the parity and generator matrices are consistent |
Definition at line 1230 of file ldpc.cpp.
References decoder_parameterization(), integrity_check(), it_info_debug, and setup_decoder().
Referenced by LDPC_Code().
void itpp::LDPC_Code::load_code | ( | const std::string & | filename, |
LDPC_Generator *const | G = 0 |
||
) |
Set the codec, by reading from a saved file.
The file format is defined in the source code. LDPC codecs can be saved with the function save_code()
.
filename | Name of the file where the codec is stored |
G | A pointer to the optional generator object |
G
points at 0
(default), the generator data is not read from the saved file. This means that the encoding can not be performed. Definition at line 1247 of file ldpc.cpp.
References itpp::it_ifile::close(), it_assert, it_info_debug, itpp::LDPC_binary_file_version, itpp::LDPC_Generator::load(), and setup_decoder().
Referenced by LDPC_Code().
void itpp::LDPC_Code::save_code | ( | const std::string & | filename | ) | const |
Save the codec to a file.
filename | Name of the file where to store the codec |
max_iters
, syndr_check_each_iter
, syndr_check_at_start
and llrcalc
) are not saved to a file. Definition at line 1289 of file ldpc.cpp.
References itpp::it_file::close(), it_assert, it_info_debug, itpp::LDPC_binary_file_version, itpp::it_file::open(), and itpp::LDPC_Generator::save().
void itpp::LDPC_Code::set_decoding_method | ( | const std::string & | method | ) |
Set the decoding method.
Currently only a belief propagation method ("BP" or "bp") is supported.
Definition at line 1323 of file ldpc.cpp.
References it_assert.
Referenced by LDPC_Code().
void itpp::LDPC_Code::set_exit_conditions | ( | int | max_iters, |
bool | syndr_check_each_iter = true , |
||
bool | syndr_check_at_start = false |
||
) |
Set the decoding loop exit conditions.
max_iters | Maximum number of the decoding iterations |
syndr_check_each_iter | If true, break the decoding loop as soon as valid codeword is found. Recommended value: true . |
syndr_check_at_start | If true, perform a syndrome check before entering the decoding loop. If LLRin corresponds to a valid codeword, set LLRout = LLRin. Recommended value: false . |
Definition at line 1330 of file ldpc.cpp.
References it_assert.
|
virtual |
Encode codeword.
This is a wrapper functions which calls a proper implementation from the LDPC_Generator
object.
input | Vector of ncheck input bits |
output | Vector of nvar output bits |
Implements itpp::Channel_Code.
Definition at line 1347 of file ldpc.cpp.
References itpp::LDPC_Generator::encode(), it_assert, it_assert_debug, and syndrome_check().
Referenced by encode().
int itpp::LDPC_Code::bp_decode | ( | const QLLRvec & | LLRin, |
QLLRvec & | LLRout | ||
) |
Belief propagation decoding.
This function implements the sum-product message passing decoder (Pearl's belief propagation) using LLR values as messages. A fast update mechanism is used for nodes with large degrees.
LLRin | vector of nvar input LLR values |
LLRout | vector of nvar output LLR values |
If the decoder converged to a valid codeword, the function returns the number of iterations performed. Otherwise the function returns the number of iterations performed but with negative sign.
One can use set_exit_conditions()
method to change the number of decoding iterations and related parameters parameters. The decoding function uses LLR_calc_unit
to implement table-lookup for the Boxplus operator. By setting the parameters of the LLR_calc_unit
provided in set_llrcalc()
, one can change the resolution, for example to use a logmax approximation. See the documentation of LLR_calc_unit
for details on how to do this.
Definition at line 1393 of file ldpc.cpp.
References itpp::LLR_calc_unit::Boxplus(), it_assert, it_error, it_info_debug, it_info_no_endl_debug, and syndrome_check().
Referenced by decode(), and decode_soft_out().
bool itpp::LDPC_Code::syndrome_check | ( | const QLLRvec & | LLR | ) | const |
Syndrome check, on QLLR vector.
This function performs a syndrome check on a softbit (LLR vector). The function returns true for a valid codeword, false else.
LLR | LLR-vector to check |
Definition at line 1642 of file ldpc.cpp.
Referenced by bp_decode(), encode(), integrity_check(), and syndrome_check().
QLLRvec itpp::LDPC_Code::soft_syndrome_check | ( | const QLLRvec & | LLR | ) | const |
Soft syndrome check.
This function checks all parity constraints and computes for each one the posterior probability that it is satisfied. The result is a vector, whose i:th element is given by
where
is the index of the j:th nonzero element of the i:th row of the code's parity check matrix.
Definition at line 1665 of file ldpc.cpp.
References itpp::LLR_calc_unit::Boxplus().
Generated on Sat Jul 6 2013 10:54:32 for IT++ by Doxygen 1.8.2