IT++ 4.3.1
|
LDPC parity check matrix generic class. More...
#include <itpp/comm/ldpc.h>
Public Member Functions | |
LDPC_Parity () | |
Default constructor. | |
LDPC_Parity (int ncheck, int nvar) | |
Constructor that gives an empty matrix of size ncheck x nvar. | |
LDPC_Parity (const std::string &filename, const std::string &format) | |
Load an LDPC parity check matrix from a file. | |
LDPC_Parity (const GF2mat_sparse_alist &alist) | |
Constructor, from a GF2mat_sparse_alist object. | |
virtual | ~LDPC_Parity () |
Virtual destructor. | |
void | initialize (int ncheck, int nvar) |
Initialize an empty matrix of size ncheck x nvar. | |
GF2mat_sparse | get_H (bool transpose=false) const |
Get the parity check matrix, optionally its transposed form. | |
Sparse_Vec< bin > | get_col (int c) const |
Get a specific column from the matrix. | |
Sparse_Vec< bin > | get_row (int r) const |
Get a specific row from the matrix. | |
int | get_nvar () const |
Get the number of variable nodes (number of columns) | |
int | get_ncheck () const |
Get the number of check nodes (number of rows) | |
void | set (int i, int j, bin value) |
Set element (i,j) of the parity check matrix to value. | |
bin | get (int i, int j) const |
Get element (i,j) of the parity check matrix. | |
bin | operator() (int i, int j) const |
Get element (i,j) of the parity check matrix. | |
virtual void | display_stats () const |
Display some information about the matrix. | |
double | get_rate () const |
Get the code rate. | |
void | import_alist (const GF2mat_sparse_alist &H_alist) |
Import matrix from GF2mat_sparse_alist format. | |
GF2mat_sparse_alist | export_alist () const |
Export matrix to GF2mat_sparse_alist format. | |
void | load_alist (const std::string &alist_file) |
Load matrix from alist_file text file in alist format. | |
void | save_alist (const std::string &alist_file) const |
Save matrix to alist_file text file in alist format. | |
Protected Member Functions | |
int | check_for_cycles (int L) const |
Check for cycles of length L. | |
int | check_connectivity (int from_m, int from_n, int to_m, int to_n, int g, int L) const |
Check for connectivity between nodes. | |
Protected Attributes | |
bool | init_flag |
Flag that indicates proper initialization. | |
GF2mat_sparse | H |
The parity check matrix. | |
GF2mat_sparse | Ht |
The transposed parity check matrix. | |
int | nvar |
Number of variable nodes. | |
int | ncheck |
Number of check nodes. | |
ivec | sumX1 |
Actual number of ones in each column. | |
ivec | sumX2 |
Actual number of ones in each row. | |
Static Protected Attributes | |
static const int | Nmax = 200 |
Maximum node degree class can handle. | |
Friends | |
class | LDPC_Code |
LDPC parity check matrix generic class.
This class provides a basic set of functions needed to represent a parity check matrix, which defines an LDPC code. This class is used as base class for a set of specific LDPC parity check matrix classes, e.g. regular or irregular LDPC codes.
This class stores a parity check matrix as a sparse matrix. The transpose of the matrix is also stored to enable efficient access to its rows.
All parity check matrices can be loaded from (saved to) a file by converting them from (to) a portable GF2mat_sparse_alist
format.
However, typically one will want to create a LDPC_Code
from the parity check matrix (and optionally a generator) and save the codec binary data instead.
Please refer to the tutorial Generation of LDPC codes for some examples of code generation.
|
inline |
Default constructor.
Definition at line 76 of file ldpc.h.
References init_flag.
Referenced by itpp::BLDPC_Parity::BLDPC_Parity().
itpp::LDPC_Parity::LDPC_Parity | ( | int | ncheck, |
int | nvar ) |
Constructor that gives an empty matrix of size ncheck x nvar.
Definition at line 50 of file ldpc.cpp.
References init_flag, and initialize().
itpp::LDPC_Parity::LDPC_Parity | ( | const std::string & | filename, |
const std::string & | format ) |
Load an LDPC parity check matrix from a file.
filename | file name |
format | file format |
GF2mat_sparse_alist
for its definition).load_alist()
and save_alist()
Definition at line 55 of file ldpc.cpp.
References init_flag, it_error, and load_alist().
itpp::LDPC_Parity::LDPC_Parity | ( | const GF2mat_sparse_alist & | alist | ) |
Constructor, from a GF2mat_sparse_alist
object.
Definition at line 66 of file ldpc.cpp.
References import_alist(), and init_flag.
|
inlinevirtual |
void itpp::LDPC_Parity::initialize | ( | int | ncheck, |
int | nvar ) |
Initialize an empty matrix of size ncheck x nvar.
Definition at line 72 of file ldpc.cpp.
References H, Ht, init_flag, ncheck, nvar, sumX1, sumX2, and itpp::zeros_i().
Referenced by itpp::BLDPC_Parity::expand_base(), itpp::LDPC_Parity_Unstructured::generate_random_H(), import_alist(), and LDPC_Parity().
|
inline |
Get the parity check matrix, optionally its transposed form.
Definition at line 104 of file ldpc.h.
References H, Ht, and itpp::transpose().
Referenced by itpp::BLDPC_Generator::construct(), and itpp::LDPC_Generator_Systematic::construct().
|
inline |
Get a specific column from the matrix.
Definition at line 109 of file ldpc.h.
References H.
Referenced by check_connectivity(), check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), itpp::LDPC_Code::decoder_parameterization(), and display_stats().
|
inline |
Get a specific row from the matrix.
Definition at line 112 of file ldpc.h.
References Ht.
Referenced by check_connectivity(), itpp::LDPC_Code::decoder_parameterization(), and display_stats().
|
inline |
Get the number of variable nodes (number of columns)
Definition at line 115 of file ldpc.h.
References H, Ht, it_assert_debug, and nvar.
Referenced by itpp::LDPC_Generator_Systematic::construct().
|
inline |
Get the number of check nodes (number of rows)
Definition at line 124 of file ldpc.h.
References H, Ht, it_assert_debug, and ncheck.
Referenced by itpp::LDPC_Generator_Systematic::construct().
void itpp::LDPC_Parity::set | ( | int | i, |
int | j, | ||
bin | value ) |
Set element (i,j) of the parity check matrix to value.
Definition at line 83 of file ldpc.cpp.
References H, Ht, init_flag, it_assert, it_assert_debug, ncheck, nvar, sumX1, and sumX2.
Referenced by itpp::LDPC_Generator_Systematic::construct(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), itpp::BLDPC_Parity::expand_base(), itpp::LDPC_Parity_Unstructured::generate_random_H(), and import_alist().
|
inline |
Get element (i,j) of the parity check matrix.
Definition at line 136 of file ldpc.h.
References H, Ht, and it_assert_debug.
Referenced by check_connectivity(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), and itpp::LDPC_Parity_Unstructured::generate_random_H().
|
inline |
Get element (i,j) of the parity check matrix.
Definition at line 142 of file ldpc.h.
References H, Ht, and it_assert_debug.
|
virtual |
Display some information about the matrix.
Reimplemented in itpp::LDPC_Parity_Irregular, itpp::LDPC_Parity_Regular, and itpp::LDPC_Parity_Unstructured.
Definition at line 109 of file ldpc.cpp.
References itpp::elem_mult(), get_col(), get_rate(), get_row(), init_flag, it_assert, it_info, itpp::length(), itpp::linspace(), itpp::max(), ncheck, nvar, itpp::sum(), sumX1, sumX2, itpp::to_ivec(), and itpp::zeros().
Referenced by itpp::LDPC_Parity_Irregular::display_stats(), and itpp::LDPC_Parity_Regular::display_stats().
|
inline |
void itpp::LDPC_Parity::import_alist | ( | const GF2mat_sparse_alist & | H_alist | ) |
Import matrix from GF2mat_sparse_alist
format.
Definition at line 167 of file ldpc.cpp.
References itpp::Sparse_Mat< T >::cols(), initialize(), ncheck, nvar, itpp::Sparse_Mat< T >::rows(), set(), and itpp::GF2mat_sparse_alist::to_sparse().
Referenced by LDPC_Parity(), and load_alist().
GF2mat_sparse_alist itpp::LDPC_Parity::export_alist | ( | ) | const |
Export matrix to GF2mat_sparse_alist
format.
Definition at line 182 of file ldpc.cpp.
References itpp::GF2mat_sparse_alist::from_sparse(), H, init_flag, and it_assert.
Referenced by save_alist().
void itpp::LDPC_Parity::load_alist | ( | const std::string & | alist_file | ) |
Load matrix from alist_file
text file in alist format.
Definition at line 155 of file ldpc.cpp.
References import_alist().
Referenced by LDPC_Parity().
void itpp::LDPC_Parity::save_alist | ( | const std::string & | alist_file | ) | const |
Save matrix to alist_file
text file in alist format.
Definition at line 160 of file ldpc.cpp.
References export_alist(), and itpp::GF2mat_sparse_alist::write().
|
protected |
Check for cycles of length L.
This function implements a recursive routine to find loops. The function is mainly a tool for testing and debugging more sophisticated functions for graph manipulation.
L | length of cycles to look for |
Definition at line 249 of file ldpc.cpp.
References check_connectivity(), get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), init_flag, it_assert, itpp::length(), and nvar.
|
protected |
Check for connectivity between nodes.
This function examines whether the point (to_m, to_n) in the matrix can be reached from the point (from_m, from_n) using at most L steps. A recursive search is used.
The function can be used to search for cycles in the matrix. To search for a cycle of length L, set from_m=to_m and from_n=to_n, and godir=0.
from_m | starting coordinate, row number |
to_m | goal coordinate, row number |
from_n | starting coordinate, column number |
to_n | goal coordinate, row number |
g | direction: 1=start going vertically, 2=start going horizontally |
L | number of permitted steps |
Note that smaller cycles may appear as longer cycles when using this method. More specifically, suppose the method is run with a given L and there are cycles in the neighborhood of (from_m,from_n) of length L-2 or less, but which do not contain (from_m,from_n). These shorter cycles may then also be reported as a cycle of length L. For example, if one of the immediate neighbors of (from_m,from_n) is part of a cycle of length 4 this method will report that (from_m,from_n) is part of a cycle of length 6, if run with L=6. However, if it is known that there are no cycles of length L-2 or smaller, and check_connectivity(from_m,from_n,from_m,from_n,0,L) returns a non-negative value, then one will know with certainty that the point (from_m,from_n) is part of a cycle of length L. (This behavior is inherent to the simple recursive search used.)
Definition at line 192 of file ldpc.cpp.
References check_connectivity(), get(), get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), get_row(), init_flag, it_assert, and itpp::length().
Referenced by check_connectivity(), check_for_cycles(), and itpp::LDPC_Parity_Unstructured::generate_random_H().
|
protected |
Flag that indicates proper initialization.
Definition at line 170 of file ldpc.h.
Referenced by check_connectivity(), check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), display_stats(), export_alist(), initialize(), itpp::BLDPC_Parity::is_valid(), LDPC_Parity(), LDPC_Parity(), LDPC_Parity(), LDPC_Parity(), itpp::BLDPC_Parity::load_base_matrix(), and set().
|
staticprotected |
Maximum node degree class can handle.
Definition at line 172 of file ldpc.h.
Referenced by itpp::LDPC_Parity_Unstructured::compute_CR(), and itpp::LDPC_Parity_Unstructured::generate_random_H().
|
protected |
The parity check matrix.
Definition at line 174 of file ldpc.h.
Referenced by export_alist(), get(), get_col(), get_H(), get_ncheck(), get_nvar(), initialize(), operator()(), and set().
|
protected |
The transposed parity check matrix.
Definition at line 176 of file ldpc.h.
Referenced by get(), get_H(), get_ncheck(), get_nvar(), get_row(), initialize(), operator()(), and set().
|
protected |
Number of variable nodes.
Definition at line 178 of file ldpc.h.
Referenced by check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), itpp::LDPC_Code::decoder_parameterization(), display_stats(), itpp::LDPC_Parity_Unstructured::generate_random_H(), get_nvar(), get_rate(), import_alist(), initialize(), and set().
|
protected |
Number of check nodes.
Definition at line 180 of file ldpc.h.
Referenced by itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), itpp::LDPC_Code::decoder_parameterization(), display_stats(), itpp::LDPC_Parity_Unstructured::generate_random_H(), get_ncheck(), get_rate(), import_alist(), initialize(), and set().
|
protected |
Actual number of ones in each column.
Definition at line 182 of file ldpc.h.
Referenced by itpp::LDPC_Code::decoder_parameterization(), display_stats(), initialize(), and set().
|
protected |
Actual number of ones in each row.
Definition at line 184 of file ldpc.h.
Referenced by itpp::LDPC_Code::decoder_parameterization(), display_stats(), initialize(), and set().