IT++ 4.3.1
|
Regular LDPC code generator class. More...
#include <itpp/comm/ldpc.h>
Public Member Functions | |
LDPC_Parity_Regular () | |
Default constructor. | |
LDPC_Parity_Regular (int Nvar, int k, int l, const std::string &method="rand", const ivec &options="200 6") | |
Constructor that invokes generate() method. | |
void | generate (int Nvar, int k, int l, const std::string &method="rand", const ivec &options="200 6") |
Generate a (k,l) regular LDPC code. | |
void | display_stats () const |
Display some information about the matrix. | |
int | cycle_removal_MGW (int L) |
Remove cycles (loops) from unstructured parity check matrix. | |
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. | |
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 | |
void | generate_random_H (const ivec &C, const ivec &R, const ivec &cycopt) |
Generate a random parity check matrix. | |
void | compute_CR (const vec &var_deg, const vec &chk_deg, const int Nvar, ivec &C, ivec &R) |
Compute target number of columns (C) and rows (R) with a specific number of ones. | |
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. | |
|
inline |
itpp::LDPC_Parity_Regular::LDPC_Parity_Regular | ( | int | Nvar, |
int | k, | ||
int | l, | ||
const std::string & | method = "rand", | ||
const ivec & | options = "200 6" ) |
Constructor that invokes generate()
method.
Definition at line 660 of file ldpc.cpp.
References generate().
void itpp::LDPC_Parity_Regular::generate | ( | int | Nvar, |
int | k, | ||
int | l, | ||
const std::string & | method = "rand", | ||
const ivec & | options = "200 6" ) |
Generate a (k,l) regular LDPC code.
Nvar | number of variable nodes |
k | number of ones per column |
l | number of ones per row |
method | See LDPC_Parity_Irregular::generate() |
options | See LDPC_Parity_Irregular::generate() |
LDPC_Parity_Regular
.Definition at line 667 of file ldpc.cpp.
References itpp::LDPC_Parity_Unstructured::compute_CR(), itpp::LDPC_Parity_Unstructured::generate_random_H(), it_error, it_info_debug, itpp::round_i(), itpp::sum(), and itpp::zeros().
Referenced by LDPC_Parity_Regular().
|
inlinevirtual |
Display some information about the matrix.
Implements itpp::LDPC_Parity_Unstructured.
Definition at line 430 of file ldpc.h.
References itpp::LDPC_Parity::display_stats().
|
inherited |
Remove cycles (loops) from unstructured parity check matrix.
This function implements the cycle removal algorithm presented by McGowan and Williamson at the IT workshop 2003. The maximum girth of the graph that will be attempted is L. The algorithm is bound to remove all loops of length L, insofar this is possible. I.e., it does not terminate until it is impossible to remove more cycles by swapping two edges.
L | Target girth. For example, L=6 attempts to removes all 4-cycles. |
Definition at line 292 of file ldpc.cpp.
References itpp::elem_mult(), itpp::floor_i(), itpp::LDPC_Parity::get(), itpp::LDPC_Parity::get_col(), itpp::Sparse_Vec< T >::get_nz_index(), itpp::LDPC_Parity::init_flag, it_assert, it_assert_debug, it_info_debug, itpp::length(), itpp::LDPC_Parity::ncheck, itpp::Sparse_Vec< T >::nnz(), itpp::LDPC_Parity::nvar, itpp::randi(), itpp::randu(), itpp::LDPC_Parity::set(), and itpp::Array< T >::set_size().
Referenced by display_stats().
|
protectedinherited |
Generate a random parity check matrix.
Definition at line 462 of file ldpc.cpp.
References itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Parity::get(), itpp::LDPC_Parity::initialize(), it_assert, it_info_debug, itpp::length(), itpp::LDPC_Parity::ncheck, itpp::LDPC_Parity::Nmax, itpp::LDPC_Parity::nvar, itpp::randi(), itpp::randu(), itpp::LDPC_Parity::set(), itpp::sum(), and itpp::zeros_i().
Referenced by display_stats(), itpp::LDPC_Parity_Irregular::generate(), and itpp::LDPC_Parity_Regular::generate().
|
protectedinherited |
Compute target number of columns (C) and rows (R) with a specific number of ones.
var_deg | vector of variable degree distributions, from an edge perspective |
chk_deg | vector of check degree distributions, from an edge perspective |
Nvar | number of variable nodes |
C | number of columns with a specific number of ones |
R | number of rows with a specific number of ones |
The result is passed by reference and saved in C and R.
Definition at line 598 of file ldpc.cpp.
References itpp::concat(), itpp::elem_div(), itpp::elem_mult(), itpp::find(), it_info_debug, itpp::length(), itpp::linspace(), itpp::max(), itpp::LDPC_Parity::Nmax, itpp::round(), itpp::sum(), itpp::to_ivec(), itpp::to_vec(), and itpp::zeros_i().
Referenced by display_stats(), itpp::LDPC_Parity_Irregular::generate(), and itpp::LDPC_Parity_Regular::generate().
|
inherited |
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().
|
inlineinherited |
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().
|
inlineinherited |
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().
|
inlineinherited |
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().
|
inlineinherited |
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().
|
inlineinherited |
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().
|
inherited |
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().
|
inlineinherited |
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().
|
inlineinherited |
Get element (i,j) of the parity check matrix.
Definition at line 142 of file ldpc.h.
References H, Ht, and it_assert_debug.
|
inlineinherited |
|
inherited |
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().
|
inherited |
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().
|
inherited |
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().
|
inherited |
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().
|
protectedinherited |
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.
|
protectedinherited |
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().
|
protectedinherited |
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().
|
staticprotectedinherited |
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().
|
protectedinherited |
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().
|
protectedinherited |
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().
|
protectedinherited |
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().
|
protectedinherited |
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().
|
protectedinherited |
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().
|
protectedinherited |
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().